예제 #1
0
    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)
예제 #2
0
    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'
                                             })
예제 #3
0
    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={})
        ])
예제 #4
0
 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)
예제 #5
0
    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)
예제 #6
0
    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)
예제 #7
0
    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)
예제 #8
0
    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'])
예제 #9
0
 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')
예제 #10
0
 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'})
예제 #11
0
 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')
예제 #12
0
 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)
예제 #13
0
 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)
예제 #14
0
    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)
예제 #15
0
    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'})
예제 #16
0
    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'})
예제 #17
0
    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'})
예제 #18
0
    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))
예제 #19
0
    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'
                                             })
예제 #20
0
    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'
                      })
        ])
예제 #21
0
    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])
예제 #22
0
 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'])
예제 #23
0
    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)
예제 #24
0
    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'})
        ])
예제 #25
0
 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)
예제 #26
0
 def test_insecure_verify_cert_None(self, mock_request):
     client = http.HTTPClient('https://foo', insecure=True)
     self.assertFalse(client.verify_cert)
예제 #27
0
 def _create_http_client(self):
     return http.HTTPClient(self.endpoint, token=self.token)