def test_302_location_not_override(self): fake1 = fakes.FakeHTTPResponse(302, 'OK', {'location': 'http://no.where/ishere'}, '') fake2 = fakes.FakeHTTPResponse(200, 'OK', {'Content-Type': 'application/json'}, jsonutils.dumps({'Mount': 'Fuji'})) self.request.side_effect = [(fake1, None), (fake2, {'Mount': 'Fuji'})] client = http.SessionClient(session=mock.ANY, auth=mock.ANY, endpoint_override='http://endpoint/') resp, body = client.request('', 'GET', redirect=True) self.assertEqual(200, resp.status_code) self.assertEqual({'Mount': 'Fuji'}, utils.get_response_body(resp)) self.assertEqual({'Mount': 'Fuji'}, body) self.assertEqual(('', 'GET'), self.request.call_args_list[0][0]) self.assertEqual(('http://no.where/ishere', 'GET'), self.request.call_args_list[1][0]) for call in self.request.call_args_list: self.assertEqual( { 'user_agent': 'python-pankoclient', 'raise_exc': False, 'redirect': True }, call[1])
def test_http_json_request_redirect_get(self, mock_request): # Record the 302 mock_request.side_effect = [ fakes.FakeHTTPResponse(302, 'Found', {'location': 'http://example.com:6688'}, ''), fakes.FakeHTTPResponse(200, 'OK', {'Content-Type': 'application/json'}, '{}') ] client = http.HTTPClient('http://example.com:6688') resp, body = client.json_request('GET', '') self.assertEqual(200, resp.status_code) self.assertEqual({}, body) mock_request.assert_has_calls([ mock.call('GET', 'http://example.com:6688', allow_redirects=False, headers={ 'Content-Type': 'application/json', 'Accept': 'application/json', 'User-Agent': 'python-pankoclient' }), mock.call('GET', 'http://example.com:6688', allow_redirects=False, headers={ 'Content-Type': 'application/json', 'Accept': 'application/json', 'User-Agent': 'python-pankoclient' }) ])
def test_kwargs_with_files(self, mock_dumps): fake = fakes.FakeHTTPResponse(200, 'OK', {'Content-Type': 'application/json'}, '{}') mock_dumps.return_value = "{'files': test}}" data = six.BytesIO(b'test') kwargs = { 'endpoint_override': 'http://no.where/', 'data': { 'files': data } } client = http.SessionClient(mock.ANY) self.request.return_value = (fake, {}) resp, body = client.request('', 'GET', **kwargs) self.assertEqual( { 'endpoint_override': 'http://no.where/', 'json': { 'files': data }, 'user_agent': 'python-pankoclient', 'raise_exc': False }, self.request.call_args[1]) self.assertEqual(200, resp.status_code) self.assertEqual({}, body) self.assertEqual({}, utils.get_response_body(resp))
def test_http_json_request_argument_passed_to_requests(self, mock_request): """Check that we have sent the proper arguments to requests.""" # Record a 200 mock_request.return_value = fakes.FakeHTTPResponse( 200, 'OK', {'Content-Type': 'application/json'}, '{}') client = http.HTTPClient('http://example.com:6688') client.verify_cert = True client.cert_file = 'RANDOM_CERT_FILE' client.key_file = 'RANDOM_KEY_FILE' client.auth_url = osc_fakes.AUTH_URL resp, body = client.json_request('POST', '', data='text') self.assertEqual(200, resp.status_code) self.assertEqual({}, body) mock_request.assert_called_once_with( 'POST', 'http://example.com:6688', allow_redirects=False, cert=('RANDOM_CERT_FILE', 'RANDOM_KEY_FILE'), verify=True, data='"text"', headers={ 'Content-Type': 'application/json', 'Accept': 'application/json', 'X-Auth-Url': osc_fakes.AUTH_URL, 'User-Agent': 'python-pankoclient' })
def test_404_error_response(self): fake = fakes.FakeHTTPResponse(404, 'Not Found', {'Content-Type': 'application/json'}, '') self.request.return_value = (fake, '') client = http.SessionClient(session=mock.ANY, auth=mock.ANY) e = self.assertRaises(exc.NotFound, client.request, '', 'GET') # Assert that the raised exception can be converted to string self.assertIsNotNone(six.text_type(e))
def test_300_error_response(self): fake = fakes.FakeHTTPResponse( 300, 'FAIL', {'Content-Type': 'application/octet-stream'}, '') self.request.return_value = (fake, '') client = http.SessionClient(session=mock.ANY, auth=mock.ANY) e = self.assertRaises(exc.MultipleChoices, client.request, '', 'GET') # Assert that the raised exception can be converted to string self.assertIsNotNone(six.text_type(e))
def test_no_redirect_302_no_location(self): fake = fakes.FakeHTTPResponse(302, 'OK', {'location': 'http://no.where/ishere'}, '') self.request.side_effect = [(fake, '')] client = http.SessionClient(session=mock.ANY, auth=mock.ANY) resp, body = client.request('', 'GET') self.assertEqual(fake, resp)
def test_506_error_response(self): # for 506 we don't have specific exception type fake = fakes.FakeHTTPResponse( 506, 'FAIL', {'Content-Type': 'application/octet-stream'}, '') self.request.return_value = (fake, '') client = http.SessionClient(session=mock.ANY, auth=mock.ANY) e = self.assertRaises(exc.HttpServerError, client.request, '', 'GET') self.assertEqual(506, e.status_code)
def test_session_simple_request(self): resp = fakes.FakeHTTPResponse( 200, 'OK', {'Content-Type': 'application/octet-stream'}, '{}') self.request.return_value = (resp, {}) client = http.SessionClient(session=mock.ANY, auth=mock.ANY) resp, body = client.request(method='GET', url='') self.assertEqual(200, resp.status_code) self.assertEqual('{}', ''.join([x for x in resp.content])) self.assertEqual({}, body)
def test_session_json_request(self): fake = fakes.FakeHTTPResponse(200, 'OK', {'Content-Type': 'application/json'}, jsonutils.dumps({'some': 'body'})) self.request.return_value = (fake, {'some': 'body'}) client = http.SessionClient(session=mock.ANY, auth=mock.ANY) resp, body = client.request('', 'GET') self.assertEqual(200, resp.status_code) self.assertEqual({'some': 'body'}, resp.json()) self.assertEqual({'some': 'body'}, body)
def test_redirect_302_no_location(self): fake = fakes.FakeHTTPResponse(302, 'OK', {}, '') self.request.side_effect = [(fake, '')] client = http.SessionClient(session=mock.ANY, auth=mock.ANY) e = self.assertRaises(exc.EndpointException, client.request, '', 'GET', redirect=True) self.assertEqual("Location not returned with redirect", six.text_type(e))
def test_methods(self): fake = fakes.FakeHTTPResponse(200, 'OK', {'Content-Type': 'application/json'}, '{}') self.request.return_value = (fake, {}) client = http.SessionClient(mock.ANY) methods = [ client.get, client.put, client.post, client.patch, client.delete, client.head ] for method in methods: resp, body = method('') self.assertEqual(200, resp.status_code)
def test_http_raw_request(self, mock_request): headers = { 'User-Agent': 'python-pankoclient', 'Content-Type': 'application/octet-stream' } mock_request.return_value = fakes.FakeHTTPResponse(200, 'OK', {}, '') client = http.HTTPClient('http://example.com:6688') resp, body = client.raw_request('GET', '/prefix') self.assertEqual(200, resp.status_code) self.assertEqual('', ''.join([x for x in resp.content])) mock_request.assert_called_once_with('GET', 'http://example.com:6688/prefix', allow_redirects=False, headers=headers)
def test_methods(self, mock_request): fake = fakes.FakeHTTPResponse(200, 'OK', {'Content-Type': 'application/json'}, '{}') mock_request.return_value = fake client = http.HTTPClient('http://example.com:6688') methods = [ client.get, client.put, client.post, client.patch, client.delete, client.head ] for method in methods: resp, body = method('') self.assertEqual(200, resp.status_code)
def test_http_json_request_redirect_error_without_location( self, mock_request): mock_request.return_value = fakes.FakeHTTPResponse( 302, 'Found', {}, '') client = http.HTTPClient('http://example.com:6688/foo') self.assertRaises(exc.EndpointException, client.json_request, 'DELETE', '') mock_request.assert_called_once_with('DELETE', 'http://example.com:6688/foo', allow_redirects=False, headers={ 'Content-Type': 'application/json', 'Accept': 'application/json', 'User-Agent': 'python-pankoclient' })
def test_token_or_credentials(self, mock_request): # Record a 200 fake200 = fakes.FakeHTTPResponse(200, 'OK', {}, '') mock_request.side_effect = [fake200, fake200, fake200] # Replay, create client, assert client = http.HTTPClient('http://example.com:6688') resp, body = client.raw_request('GET', '') self.assertEqual(200, resp.status_code) client.username = osc_fakes.USERNAME client.password = osc_fakes.PASSWORD resp, body = client.raw_request('GET', '') self.assertEqual(200, resp.status_code) client.auth_token = osc_fakes.AUTH_TOKEN resp, body = client.raw_request('GET', '') self.assertEqual(200, resp.status_code) # no token or credentials mock_request.assert_has_calls([ mock.call('GET', 'http://example.com:6688', allow_redirects=False, headers={ 'User-Agent': 'python-pankoclient', 'Content-Type': 'application/octet-stream' }), mock.call('GET', 'http://example.com:6688', allow_redirects=False, headers={ 'User-Agent': 'python-pankoclient', 'X-Auth-Key': osc_fakes.PASSWORD, 'X-Auth-User': osc_fakes.USERNAME, 'Content-Type': 'application/octet-stream' }), mock.call('GET', 'http://example.com:6688', allow_redirects=False, headers={ 'User-Agent': 'python-pankoclient', 'X-Auth-Token': osc_fakes.AUTH_TOKEN, 'Content-Type': 'application/octet-stream' }) ])
def test_http_json_request_invalid_json(self, mock_request): # Record a 200 mock_request.return_value = fakes.FakeHTTPResponse( 200, 'OK', {'Content-Type': 'application/json'}, 'invalid-json') client = http.HTTPClient('http://example.com:6688') resp, body = client.json_request('GET', '') self.assertEqual(200, resp.status_code) self.assertEqual('invalid-json', body) mock_request.assert_called_once_with('GET', 'http://example.com:6688', allow_redirects=False, headers={ 'Content-Type': 'application/json', 'Accept': 'application/json', 'User-Agent': 'python-pankoclient' })
def test_http_404_json_request(self, mock_request): mock_request.return_value = fakes.FakeHTTPResponse( 404, 'Not Found', {'Content-Type': 'application/json'}, '') client = http.HTTPClient('http://example.com:6688') e = self.assertRaises(exc.NotFound, client.json_request, 'GET', '') # Assert that the raised exception can be converted to string self.assertIsNotNone(str(e)) # Record a 404 mock_request.assert_called_once_with('GET', 'http://example.com:6688', allow_redirects=False, headers={ 'Content-Type': 'application/json', 'Accept': 'application/json', 'User-Agent': 'python-pankoclient' })
def test_http_request_specify_timeout(self, mock_request): mock_request.return_value = fakes.FakeHTTPResponse( 200, 'OK', {'Content-Type': 'application/json'}, '{}') client = http.HTTPClient('http://example.com:6688', timeout='123') resp, body = client.json_request('GET', '') self.assertEqual(200, resp.status_code) self.assertEqual({}, body) mock_request.assert_called_once_with('GET', 'http://example.com:6688', allow_redirects=False, headers={ 'Content-Type': 'application/json', 'Accept': 'application/json', 'User-Agent': 'python-pankoclient' }, timeout=float(123))
def test_http_json_request_non_json_resp_cont_type(self, mock_request): # Record a 200 mock_request.return_value = fakes.FakeHTTPResponse( 200, 'OK', {'Content-Type': 'not/json'}, '{}') client = http.HTTPClient('http://example.com:6688') resp, body = client.json_request('POST', '', data='test-data') self.assertEqual(200, resp.status_code) self.assertIsNone(body) mock_request.assert_called_once_with('POST', 'http://example.com:6688', data='"test-data"', allow_redirects=False, headers={ 'Content-Type': 'application/json', 'Accept': 'application/json', 'User-Agent': 'python-pankoclient' })
def test_region_name(self, mock_request): # Record a 200 fake200 = fakes.FakeHTTPResponse(200, 'OK', {}, '') mock_request.return_value = fake200 client = http.HTTPClient('http://example.com:6688') client.region_name = osc_fakes.REGION_NAME resp, body = client.raw_request('GET', '') self.assertEqual(200, resp.status_code) mock_request.assert_called_once_with('GET', 'http://example.com:6688', allow_redirects=False, headers={ 'X-Region-Name': osc_fakes.REGION_NAME, 'User-Agent': 'python-pankoclient', 'Content-Type': 'application/octet-stream' })
def test_kwargs(self): fake = fakes.FakeHTTPResponse(200, 'OK', {'Content-Type': 'application/json'}, '{}') kwargs = dict(endpoint_override='http://no.where/', data='some_data') client = http.SessionClient(mock.ANY) self.request.return_value = (fake, {}) resp, body = client.request('', 'GET', **kwargs) self.assertEqual( { 'endpoint_override': 'http://no.where/', 'json': 'some_data', 'user_agent': 'python-pankoclient', 'raise_exc': False }, self.request.call_args[1]) self.assertEqual(200, resp.status_code) self.assertEqual({}, body) self.assertEqual({}, utils.get_response_body(resp))