def test_passed_cert_to_verify_cert(self, mock_request): client = http.HTTPClient('https://foo', cacert="NOWHERE") self.assertEqual("NOWHERE", client.verify_cert) with mock.patch('glareclient.common.utils.get_system_ca_file') as gsf: gsf.return_value = "SOMEWHERE" client = http.HTTPClient('https://foo') self.assertEqual("SOMEWHERE", client.verify_cert)
def test_http_process_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:9494') client.verify_cert = True client.cert_file = 'RANDOM_CERT_FILE' client.key_file = 'RANDOM_KEY_FILE' client.auth_url = 'http://AUTH_URL' resp, body = client.process_request('', 'GET', data='text') self.assertEqual(200, resp.status_code) self.assertEqual({}, body) mock_request.assert_called_once_with('GET', 'http://example.com:9494', allow_redirects=False, cert=('RANDOM_CERT_FILE', 'RANDOM_KEY_FILE'), verify=True, data='text', headers={ 'X-Auth-Url': 'http://AUTH_URL', 'User-Agent': 'python-glareclient' })
def test_http_manual_redirect_put(self, mock_request): mock_request.side_effect = [ fakes.FakeHTTPResponse( 302, 'Found', {'location': 'http://example.com:9494/foo/bar'}, ''), fakes.FakeHTTPResponse(200, 'OK', {'content-type': 'application/json'}, '{}') ] client = http.HTTPClient('http://example.com:9494/foo') resp, body = client.process_request('', 'PUT', json={}) self.assertEqual(200, resp.status_code) mock_request.assert_has_calls([ mock.call('PUT', 'http://example.com:9494/foo', allow_redirects=False, headers={'User-Agent': 'python-glareclient'}, json={}), mock.call('PUT', 'http://example.com:9494/foo/bar', allow_redirects=False, headers={'User-Agent': 'python-glareclient'}, json={}) ])
def test_parse_endpoint(self): endpoint = 'http://example.com:9292' test_client = http.HTTPClient(endpoint, token=u'adc123') actual = test_client.parse_endpoint(endpoint) expected = parse.SplitResult(scheme='http', netloc='example.com:9292', path='', query='', fragment='') self.assertEqual(expected, actual)
def test_http_request_socket_error(self, mock_request): headers = {'User-Agent': 'python-glareclient'} mock_request.side_effect = [socket.gaierror] client = http.HTTPClient('http://example.com:9494') self.assertRaises(exc.InvalidEndpoint, client.request, "/", "GET") mock_request.assert_called_once_with('GET', 'http://example.com:9494/', allow_redirects=False, headers=headers)
def test_http_request_socket_timeout(self, mock_request): headers = {'User-Agent': 'python-glareclient'} mock_request.side_effect = [socket.timeout] client = http.HTTPClient('http://example.com:9494') self.assertRaises(exc.CommunicationError, client.request, "/", "GET") mock_request.assert_called_once_with('GET', 'http://example.com:9494/', allow_redirects=False, headers=headers)
def test_language_header_not_passed_no_language(self): kwargs = {} http_client = http.HTTPClient(self.endpoint, **kwargs) path = '/v2/images/my-image' self.mock.get(self.endpoint + path) http_client.get(path) headers = self.mock.last_request.headers self.assertTrue('Accept-Language' not in headers)
def test_language_header_passed(self): kwargs = {'language_header': 'nb_NO'} http_client = http.HTTPClient(self.endpoint, **kwargs) path = '/v2/images/my-image' self.mock.get(self.endpoint + path) http_client.get(path) headers = self.mock.last_request.headers self.assertEqual(kwargs['language_header'], headers['Accept-Language'])
def test_log_curl_request_with_insecure_param(self, mock_log): headers = {'header1': 'value1'} http_client_object = http.HTTPClient(self.ssl_endpoint, insecure=True, token='fake-token') http_client_object.log_curl_request('GET', '/api/v1/', headers, None, None) self.assertTrue(mock_log.called, 'LOG.debug never called') self.assertTrue(mock_log.call_args[0], 'LOG.debug called with no arguments') self.assertThat(mock_log.call_args[0][0], matchers.MatchesRegex('.*\s-k\s.*'), 'no -k option in curl command')
def test_http_manual_redirect_error_without_location(self, mock_request): mock_request.return_value = \ fakes.FakeHTTPResponse( 302, 'Found', {}, '') client = http.HTTPClient('http://example.com:9494/foo') self.assertRaises(exc.InvalidEndpoint, client.process_request, '', 'DELETE') mock_request.assert_called_once_with( 'DELETE', 'http://example.com:9494/foo', allow_redirects=False, headers={'User-Agent': 'python-glareclient'})
def test_log_curl_request_with_token_header(self, mock_log): fake_token = 'fake-token' headers = {'X-Auth-Token': fake_token} http_client_object = http.HTTPClient(self.endpoint, identity_headers=headers) http_client_object.log_curl_request('GET', '/api/v1/', headers, None, None) self.assertTrue(mock_log.called, 'LOG.debug never called') self.assertTrue(mock_log.call_args[0], 'LOG.debug called with no arguments') token_regex = '.*%s.*' % fake_token self.assertThat(mock_log.call_args[0][0], matchers.Not(matchers.MatchesRegex(token_regex)), 'token found in LOG.debug parameter')
def test_identity_headers_and_no_token_in_header(self): identity_headers = { 'X-User-Id': 'user', 'X-Tenant-Id': 'tenant', 'X-Roles': 'roles', 'X-Identity-Status': 'Confirmed', 'X-Service-Catalog': 'service_catalog', } # without X-Auth-Token in identity headers kwargs = {'token': u'fake-token', 'identity_headers': identity_headers} http_client_object = http.HTTPClient(self.endpoint, **kwargs) self.assertEqual(u'fake-token', http_client_object.auth_token) self.assertTrue(http_client_object.identity_headers. get('X-Auth-Token') is None)
def test_identity_headers_and_no_token_in_session_header(self): # Tests that if token or X-Auth-Token are not provided in the kwargs # when creating the http client, the session headers don't contain # the X-Auth-Token key. identity_headers = { 'X-User-Id': 'user', 'X-Tenant-Id': 'tenant', 'X-Roles': 'roles', 'X-Identity-Status': 'Confirmed', 'X-Service-Catalog': 'service_catalog', } kwargs = {'identity_headers': identity_headers} http_client_object = http.HTTPClient(self.endpoint, **kwargs) self.assertIsNone(http_client_object.auth_token) self.assertNotIn('X-Auth-Token', http_client_object.session.headers)
def test_http_raw_request(self, mock_request): headers = {'User-Agent': 'python-glareclient'} mock_request.return_value = \ fakes.FakeHTTPResponse( 200, 'OK', {}, '') client = http.HTTPClient('http://example.com:9494') resp = client.request('', 'GET') self.assertEqual(200, resp.status_code) self.assertEqual('', ''.join([x for x in resp.content])) mock_request.assert_called_with('GET', 'http://example.com:9494', allow_redirects=False, headers=headers)
def test_http_process_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:9494') resp, body = client.process_request('', 'GET') self.assertEqual(200, resp.status_code) self.assertIsNone(body) mock_request.assert_called_once_with( 'GET', 'http://example.com:9494', allow_redirects=False, headers={'User-Agent': 'python-glareclient'})
def test_http_process_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:9494') resp, body = client.process_request('', 'GET', data='test-data') self.assertEqual(200, resp.status_code) mock_request.assert_called_once_with( 'GET', 'http://example.com:9494', data='test-data', allow_redirects=False, headers={'User-Agent': 'python-glareclient'})
def test_http_300_process_request(self, mock_request): mock_request.return_value = \ fakes.FakeHTTPResponse( 300, 'OK', {'content-type': 'application/json'}, '{}') client = http.HTTPClient('http://example.com:9494') e = self.assertRaises(exc.HTTPMultipleChoices, client.process_request, '', 'GET') # Assert that the raised exception can be converted to string self.assertIsNotNone(str(e)) # Record a 300 mock_request.assert_called_once_with( 'GET', 'http://example.com:9494', allow_redirects=False, headers={'User-Agent': 'python-glareclient'})
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:9494', timeout='123') resp, body = client.process_request('', 'GET') self.assertEqual(200, resp.status_code) self.assertEqual({}, body) mock_request.assert_called_once_with( 'GET', 'http://example.com:9494', allow_redirects=False, headers={'User-Agent': 'python-glareclient'}, timeout=float(123))
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:9494') client.region_name = 'RegionOne' resp = client.request('', 'GET') self.assertEqual(200, resp.status_code) mock_request.assert_called_once_with('GET', 'http://example.com:9494', allow_redirects=False, headers={ 'X-Region-Name': 'RegionOne', 'User-Agent': 'python-glareclient' })
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:9494') resp = client.request('', 'GET') self.assertEqual(200, resp.status_code) client.username = '******' client.password = '******' resp = client.request('', 'GET') self.assertEqual(200, resp.status_code) client.auth_token = 'abcd1234' resp = client.request('', 'GET') self.assertEqual(200, resp.status_code) # no token or credentials mock_request.assert_has_calls([ mock.call('GET', 'http://example.com:9494', allow_redirects=False, headers={'User-Agent': 'python-glareclient'}), mock.call('GET', 'http://example.com:9494', allow_redirects=False, headers={ 'User-Agent': 'python-glareclient', 'X-Auth-Key': 'pass', 'X-Auth-User': '******' }), mock.call('GET', 'http://example.com:9494', allow_redirects=False, headers={ 'User-Agent': 'python-glareclient', 'X-Auth-Token': 'abcd1234' }) ])
def test_identity_headers_are_passed(self): # Tests that if token or X-Auth-Token are not provided in the kwargs # when creating the http client, the session headers don't contain # the X-Auth-Token key. identity_headers = { 'X-User-Id': b'user', 'X-Tenant-Id': b'tenant', 'X-Roles': b'roles', 'X-Identity-Status': b'Confirmed', 'X-Service-Catalog': b'service_catalog', } kwargs = {'identity_headers': identity_headers} http_client = http.HTTPClient(self.endpoint, **kwargs) path = '/artifactsmy-image' self.mock.get(self.endpoint + path) http_client.get(path) headers = self.mock.last_request.headers for k, v in six.iteritems(identity_headers): self.assertEqual(v, headers[k])
def test_expired_token_has_changed(self): # instantiate client with some token fake_token = b'fake-token' http_client = http.HTTPClient(self.endpoint, token=fake_token) path = '/artifacts' self.mock.get(self.endpoint + path) http_client.get(path) headers = self.mock.last_request.headers self.assertEqual(fake_token, headers['X-Auth-Token']) # refresh the token refreshed_token = b'refreshed-token' http_client.auth_token = refreshed_token http_client.get(path) headers = self.mock.last_request.headers self.assertEqual(refreshed_token, headers['X-Auth-Token']) # regression check for bug 1448080 unicode_token = u'ni\xf1o' http_client.auth_token = unicode_token http_client.get(path) headers = self.mock.last_request.headers self.assertEqual(b'ni\xc3\xb1o', headers['X-Auth-Token'])
def _test_log_curl_request_with_certs(self, mock_log, key, cert, cacert): headers = {'header1': 'value1'} http_client_object = http.HTTPClient(self.ssl_endpoint, key_file=key, cert_file=cert, cacert=cacert, token='fake-token') http_client_object.log_curl_request('GET', '/api/v1/', headers, None, None) self.assertTrue(mock_log.called, 'LOG.debug never called') self.assertTrue(mock_log.call_args[0], 'LOG.debug called with no arguments') needles = {'key': key, 'cert': cert, 'cacert': cacert} for option, value in six.iteritems(needles): if value: regex = ".*\s--%s\s+('%s'|%s).*" % (option, value, value) self.assertThat(mock_log.call_args[0][0], matchers.MatchesRegex(regex), 'no --%s option in curl command' % option) else: regex = ".*\s--%s\s+.*" % option self.assertThat(mock_log.call_args[0][0], matchers.Not(matchers.MatchesRegex(regex)), 'unexpected --%s option in curl command' % option)
def test_http_process_request_redirect(self, mock_request): # Record the 302 mock_request.side_effect = [ fakes.FakeHTTPResponse(302, 'Found', {'location': 'http://example.com:9494'}, ''), fakes.FakeHTTPResponse(200, 'OK', {}, '{}') ] client = http.HTTPClient('http://example.com:9494') resp, body = client.process_request('', 'GET') self.assertEqual(200, resp.status_code) self.assertEqual({}, body) mock_request.assert_has_calls([ mock.call('GET', 'http://example.com:9494', allow_redirects=False, headers={'User-Agent': 'python-glareclient'}), mock.call('GET', 'http://example.com:9494', allow_redirects=False, headers={'User-Agent': 'python-glareclient'}) ])
def test_get_connections_kwargs_http(self): endpoint = 'http://example.com:9292' test_client = http.HTTPClient(endpoint, token=u'adc123') self.assertEqual(600.0, test_client.timeout)
def test_insecure_verify_cert_None(self, mock_request): client = http.HTTPClient('https://foo', insecure=True) self.assertFalse(client.verify_cert)
def _create_http_client(self): return http.HTTPClient(self.endpoint, token=self.token)