class WhenTestingCreateUri(unittest.TestCase): def setUp(self): self.host = 'hostname' self.port = '00000' self.user_name = 'username' self.path = 'user/hdfs' self.webhdfs = PyWebHdfsClient(host=self.host, port=self.port, user_name=self.user_name) def test_create_uri_no_kwargs(self): op = operations.CREATE uri = 'http://{host}:{port}/webhdfs/v1/' \ '{path}?op={op}&user.name={user}'\ .format( host=self.host, port=self.port, path=self.path, op=op, user=self.user_name) result = self.webhdfs._create_uri(self.path, op) self.assertEqual(uri, result) def test_create_uri_with_kwargs(self): op = operations.CREATE mykey = 'mykey' myval = 'myval' uri = 'http://{host}:{port}/webhdfs/v1/' \ '{path}?op={op}&{key}={val}' \ '&user.name={user}' \ .format( host=self.host, port=self.port, path=self.path, op=op, key=mykey, val=myval, user=self.user_name) result = self.webhdfs._create_uri(self.path, op, mykey=myval) self.assertEqual(uri, result)
class WhenTestingCreateUri(unittest.TestCase): def setUp(self): self.host = 'hostname' self.port = '00000' self.user_name = 'username' self.path = 'user/hdfs' self.webhdfs = PyWebHdfsClient(host=self.host, port=self.port, user_name=self.user_name) def test_create_uri_no_kwargs(self): op = operations.CREATE uri = 'http://{{host}}:{port}/webhdfs/v1/' \ '{path}?op={op}&user.name={user}'\ .format(port=self.port, path=self.path, op=op, user=self.user_name) result = self.webhdfs._create_uri(self.path, op) self.assertEqual(uri, result) def test_create_uri_with_kwargs(self): op = operations.CREATE mykey = 'mykey' myval = 'myval' uri = 'http://{{host}}:{port}/webhdfs/v1/' \ '{path}?op={op}&{key}={val}' \ '&user.name={user}' \ .format( port=self.port, path=self.path, op=op, key=mykey, val=myval, user=self.user_name) result = self.webhdfs._create_uri(self.path, op, mykey=myval) self.assertEqual(uri, result) def test_create_uri_with_leading_slash(self): op = operations.CREATE uri_path_no_slash = self.webhdfs._create_uri(self.path, op) uri_path_with_slash = self.webhdfs._create_uri('/' + self.path, op) self.assertEqual(uri_path_no_slash, uri_path_with_slash) def test_create_uri_with_unicode_path(self): op = operations.CREATE mykey = 'mykey' myval = 'myval' path = u'die/Stra\xdfe' quoted_path = 'die/Stra%C3%9Fe' uri = 'http://{{host}}:{port}/webhdfs/v1/' \ '{path}?op={op}&{key}={val}' \ '&user.name={user}' \ .format( port=self.port, path=quoted_path, op=op, key=mykey, val=myval, user=self.user_name) result = self.webhdfs._create_uri(path, op, mykey=myval) self.assertEqual(uri, result)
class WhenTestingCreateUri(unittest.TestCase): def setUp(self): self.host = 'hostname' self.port = '00000' self.user_name = 'username' self.path = 'user/hdfs' self.webhdfs = PyWebHdfsClient(host=self.host, port=self.port, user_name=self.user_name) def test_create_uri_no_kwargs(self): op = operations.CREATE uri = 'http://{{host}}:{{port}}/webhdfs/v1/' \ '{path}?op={op}&user.name={user}'\ .format(port=self.port, path=self.path, op=op, user=self.user_name) result = self.webhdfs._create_uri(self.path, op) self.assertEqual(uri, result) def test_create_uri_with_kwargs(self): op = operations.CREATE mykey = 'mykey' myval = 'myval' uri = 'http://{{host}}:{{port}}/webhdfs/v1/' \ '{path}?op={op}&{key}={val}' \ '&user.name={user}' \ .format( port=self.port, path=self.path, op=op, key=mykey, val=myval, user=self.user_name) result = self.webhdfs._create_uri(self.path, op, mykey=myval) self.assertEqual(uri, result) def test_create_uri_with_leading_slash(self): op = operations.CREATE uri_path_no_slash = self.webhdfs._create_uri(self.path, op) uri_path_with_slash = self.webhdfs._create_uri('/' + self.path, op) self.assertEqual(uri_path_no_slash, uri_path_with_slash) def test_create_uri_with_unicode_path(self): op = operations.CREATE mykey = 'mykey' myval = 'myval' path = u'die/Stra\xdfe' quoted_path = 'die/Stra%C3%9Fe' uri = 'http://{{host}}:{{port}}/webhdfs/v1/' \ '{path}?op={op}&{key}={val}' \ '&user.name={user}' \ .format( port=self.port, path=quoted_path, op=op, key=mykey, val=myval, user=self.user_name) result = self.webhdfs._create_uri(path, op, mykey=myval) self.assertEqual(uri, result)
class WhenTestingResolveHost(unittest.TestCase): def setUp(self): self.host = 'hostname' self.port = '00000' self.user_name = 'username' self.path = 'user/hdfs' self.timeout = None self.webhdfs = PyWebHdfsClient(host=self.host, port=self.port, user_name=self.user_name) self.session = requests.Session() self.data = '01011010' self.headers = {'content-type': 'application/octet-stream'} self.response = MagicMock() self.response.status_code = http_client.TEMPORARY_REDIRECT self.requests = MagicMock(return_value=self.response) def test_method_is_called_with_correct_arguments(self): uri = self.webhdfs._create_uri(self.path, 'CREATE').format(host=self.host) with patch('requests.sessions.Session.put', self.requests): result = self.webhdfs._resolve_host( self.session.put, True, self.path, 'CREATE') self.assertTrue(result) self.assertEqual(len(self.requests.mock_calls), 1) self.requests.assert_called_with(uri, allow_redirects=True, timeout=self.timeout) def test_retries_are_made_max_tries(self): self.requests.side_effect = [ requests.exceptions.ConnectionError, requests.exceptions.ConnectionError, self.response] with patch('requests.sessions.Session.put', self.requests): result = self.webhdfs._resolve_host( self.session.put, True, self.path, 'CREATE') self.assertTrue(result) self.assertEqual(len(self.requests.mock_calls), 3) def test_retries_are_made_at_most_max_tries(self): self.requests.side_effect = [ requests.exceptions.ConnectionError, requests.exceptions.ConnectionError, requests.exceptions.ConnectionError, self.response] with self.assertRaises(requests.exceptions.ConnectionError): with patch('requests.sessions.Session.put', self.requests): self.webhdfs._resolve_host( self.session.put, True, self.path, 'CREATE') def test_non_requests_exceptions_bubble_up(self): self.requests.side_effect = errors.FileNotFound with self.assertRaises(errors.FileNotFound): with patch('requests.sessions.Session.put', self.requests): self.webhdfs._resolve_host( self.session.put, True, self.path, 'CREATE')