def test_http_manual_redirect_put(self):
        mock_conn = http.requests.request(
            'PUT', 'http://example.com:8004/foo',
            allow_redirects=False,
            headers={'Content-Type': 'application/json',
                     'Accept': 'application/json',
                     'User-Agent': 'python-heatclient'})
        mock_conn.AndReturn(
            fakes.FakeHTTPResponse(
                302, 'Found',
                {'location': 'http://example.com:8004/foo/bar'},
                ''))
        mock_conn = http.requests.request(
            'PUT', 'http://example.com:8004/foo/bar',
            allow_redirects=False,
            headers={'Content-Type': 'application/json',
                     'Accept': 'application/json',
                     'User-Agent': 'python-heatclient'})
        mock_conn.AndReturn(
            fakes.FakeHTTPResponse(
                200, 'OK',
                {'content-type': 'application/json'},
                '{}'))

        self.m.ReplayAll()

        client = http.HTTPClient('http://example.com:8004/foo')
        resp, body = client.json_request('PUT', '')

        self.assertEqual(200, resp.status_code)
        self.m.VerifyAll()
 def test_http_json_request_redirect(self):
     # Record the 302
     mock_conn = http.requests.request(
         'GET', 'http://example.com:8004',
         allow_redirects=False,
         headers={'Content-Type': 'application/json',
                  'Accept': 'application/json',
                  'User-Agent': 'python-heatclient'})
     mock_conn.AndReturn(
         fakes.FakeHTTPResponse(
             302, 'Found',
             {'location': 'http://example.com:8004'},
             ''))
     # Record the following 200
     mock_conn = http.requests.request(
         'GET', 'http://example.com:8004',
         allow_redirects=False,
         headers={'Content-Type': 'application/json',
                  'Accept': 'application/json',
                  'User-Agent': 'python-heatclient'})
     mock_conn.AndReturn(
         fakes.FakeHTTPResponse(
             200, 'OK',
             {'content-type': 'application/json'},
             '{}'))
     # Replay, create client, assert
     self.m.ReplayAll()
     client = http.HTTPClient('http://example.com:8004')
     resp, body = client.json_request('GET', '')
     self.assertEqual(200, resp.status_code)
     self.assertEqual({}, body)
     self.m.VerifyAll()
 def test_http_json_request_argument_passed_to_requests(self):
     """Check that we have sent the proper arguments to requests."""
     # Record a 200
     mock_conn = http.requests.request(
         'GET', 'http://example.com:8004',
         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': 'http://AUTH_URL',
                  'User-Agent': 'python-heatclient'})
     mock_conn.AndReturn(
         fakes.FakeHTTPResponse(
             200, 'OK',
             {'content-type': 'application/json'},
             '{}'))
     # Replay, create client, assert
     self.m.ReplayAll()
     client = http.HTTPClient('http://example.com:8004')
     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.json_request('GET', '', data='text')
     self.assertEqual(200, resp.status_code)
     self.assertEqual({}, body)
     self.m.VerifyAll()
    def test_token_or_credentials(self):
        # Record a 200
        fake200 = fakes.FakeHTTPResponse(
            200, 'OK', {'content-type': 'application/octet-stream'}, '')

        # no token or credentials
        mock_conn = http.requests.request('GET',
                                          'http://example.com:8004',
                                          allow_redirects=False,
                                          headers={
                                              'Content-Type':
                                              'application/octet-stream',
                                              'User-Agent': 'python-heatclient'
                                          })
        mock_conn.AndReturn(fake200)

        # credentials
        mock_conn = http.requests.request('GET',
                                          'http://example.com:8004',
                                          allow_redirects=False,
                                          headers={
                                              'Content-Type':
                                              'application/octet-stream',
                                              'User-Agent':
                                              'python-heatclient',
                                              'X-Auth-Key': 'pass',
                                              'X-Auth-User': '******'
                                          })
        mock_conn.AndReturn(fake200)

        # token suppresses credentials
        mock_conn = http.requests.request('GET',
                                          'http://example.com:8004',
                                          allow_redirects=False,
                                          headers={
                                              'Content-Type':
                                              'application/octet-stream',
                                              'User-Agent':
                                              'python-heatclient',
                                              'X-Auth-Token': 'abcd1234'
                                          })
        mock_conn.AndReturn(fake200)

        # Replay, create client, assert
        self.m.ReplayAll()
        client = http.HTTPClient('http://example.com:8004')
        resp = client.raw_request('GET', '')
        self.assertEqual(200, resp.status_code)

        client.username = '******'
        client.password = '******'
        resp = client.raw_request('GET', '')
        self.assertEqual(200, resp.status_code)

        client.auth_token = 'abcd1234'
        resp = client.raw_request('GET', '')
        self.assertEqual(200, resp.status_code)
        self.m.VerifyAll()
    def test_404_error_response(self):
        self.auth_session.request.return_value = fakes.FakeHTTPResponse(
            404, 'OK', {'content-type': 'application/octet-stream'}, '')

        client = http.SessionClient(session=self.auth_session,
                                    auth=self.auth_plugin)
        e = self.assertRaises(exc.HTTPNotFound, client.raw_request, 'GET', '')
        # Assert that the raised exception can be converted to string
        self.assertIsNotNone(str(e))
    def test_session_raw_request(self):
        self.auth_session.request.return_value = fakes.FakeHTTPResponse(
            200, 'OK', {'content-type': 'application/octet-stream'}, '')

        client = http.SessionClient(session=self.auth_session,
                                    auth=self.auth_plugin)
        resp = client.raw_request(method='GET', url='')
        self.assertEqual(200, resp.status_code)
        self.assertEqual('', ''.join([x for x in resp.content]))
    def test_session_json_request(self):
        self.auth_session.request.return_value = fakes.FakeHTTPResponse(
            200, 'OK', {'content-type': 'application/json'}, '{}')

        client = http.SessionClient(session=self.auth_session,
                                    auth=self.auth_plugin)

        resp, body = client.json_request('GET', '')
        self.assertEqual(200, resp.status_code)
        self.assertEqual({}, body)
 def test_http_manual_redirect_error_without_location(self):
     mock_conn = http.requests.request('DELETE',
                                       'http://example.com:8004/foo',
                                       allow_redirects=False,
                                       headers={
                                           'Content-Type':
                                           'application/json',
                                           'Accept': 'application/json',
                                           'User-Agent': 'python-heatclient'
                                       })
     mock_conn.AndReturn(fakes.FakeHTTPResponse(302, 'Found', {}, ''))
     self.m.ReplayAll()
     client = http.HTTPClient('http://example.com:8004/foo')
     self.assertRaises(exc.InvalidEndpoint, client.json_request, 'DELETE',
                       '')
     self.m.VerifyAll()
 def test_http_404_json_request(self):
     # Record a 404
     mock_conn = http.requests.request(
         'GET', 'http://example.com:8004',
         allow_redirects=False,
         headers={'Content-Type': 'application/json',
                  'Accept': 'application/json',
                  'User-Agent': 'python-heatclient'})
     mock_conn.AndReturn(
         fakes.FakeHTTPResponse(
             404, 'OK', {'content-type': 'application/json'},
             '{}'))
     # Replay, create client, assert
     self.m.ReplayAll()
     client = http.HTTPClient('http://example.com:8004')
     e = self.assertRaises(exc.HTTPNotFound, client.json_request, 'GET', '')
     # Assert that the raised exception can be converted to string
     self.assertIsNotNone(str(e))
     self.m.VerifyAll()
 def test_http_request_specify_timeout(self):
     mock_conn = http.requests.request(
         'GET', 'http://example.com:8004',
         allow_redirects=False,
         headers={'Content-Type': 'application/json',
                  'Accept': 'application/json',
                  'User-Agent': 'python-heatclient'},
         timeout=float(123))
     mock_conn.AndReturn(
         fakes.FakeHTTPResponse(
             200, 'OK',
             {'content-type': 'application/json'},
             '{}'))
     # Replay, create client, assert
     self.m.ReplayAll()
     client = http.HTTPClient('http://example.com:8004', timeout='123')
     resp, body = client.json_request('GET', '')
     self.assertEqual(200, resp.status_code)
     self.assertEqual({}, body)
     self.m.VerifyAll()
    def test_http_raw_request(self):
        headers = {'Content-Type': 'application/octet-stream',
                   'User-Agent': 'python-heatclient'}

        # Record a 200
        mock_conn = http.requests.request('GET', 'http://example.com:8004',
                                          allow_redirects=False,
                                          headers=headers)
        mock_conn.AndReturn(
            fakes.FakeHTTPResponse(
                200, 'OK',
                {'content-type': 'application/octet-stream'},
                ''))
        # Replay, create client, assert
        self.m.ReplayAll()
        client = http.HTTPClient('http://example.com:8004')
        resp = client.raw_request('GET', '')
        self.assertEqual(200, resp.status_code)
        self.assertEqual('', ''.join([x for x in resp.content]))
        self.m.VerifyAll()
    def test_not_include_pass(self):
        # Record a 200
        fake500 = fakes.FakeHTTPResponse(
            500, 'ERROR',
            {'content-type': 'application/octet-stream'},
            '(HTTP 401)')

        # no token or credentials
        mock_conn = http.requests.request(
            'GET', 'http://example.com:8004',
            allow_redirects=False,
            headers={'Content-Type': 'application/octet-stream',
                     'User-Agent': 'python-heatclient'})
        mock_conn.AndReturn(fake500)

        # Replay, create client, assert
        self.m.ReplayAll()
        client = http.HTTPClient('http://example.com:8004')
        e = self.assertRaises(exc.HTTPUnauthorized,
                              client.raw_request, 'GET', '')
        self.assertIn('include-password', str(e))
    def test_region_name(self):
        # Record a 200
        fake200 = fakes.FakeHTTPResponse(
            200, 'OK',
            {'content-type': 'application/octet-stream'},
            '')

        # Specify region name
        mock_conn = http.requests.request(
            'GET', 'http://example.com:8004',
            allow_redirects=False,
            headers={'Content-Type': 'application/octet-stream',
                     'X-Region-Name': 'RegionOne',
                     'User-Agent': 'python-heatclient'})
        mock_conn.AndReturn(fake200)

        # Replay, create client, assert
        self.m.ReplayAll()
        client = http.HTTPClient('http://example.com:8004')
        client.region_name = 'RegionOne'
        resp = client.raw_request('GET', '')
        self.assertEqual(200, resp.status_code)
        self.m.VerifyAll()