Example #1
0
 def test_post_auth(self):
     with mock.patch.object(requests, "request", MOCK_REQUEST):
         cl = client.HTTPClient(username="******",
                                password="******",
                                tenant_id="tenant",
                                auth_url="auth_test",
                                cacert="ca.pem",
                                key="key.pem",
                                cert="cert.pem")
         cl.management_url = "https://127.0.0.1:5000"
         cl.auth_token = "token"
         cl.post("/hi", body=[1, 2, 3])
         headers = {
             "X-Auth-Token": "token",
             "Content-Type": "application/json",
             "User-Agent": cl.USER_AGENT
         }
         kwargs = copy.copy(self.TEST_REQUEST_BASE)
         kwargs['cert'] = ('cert.pem', 'key.pem')
         kwargs['verify'] = 'ca.pem'
         MOCK_REQUEST.assert_called_with("POST",
                                         "https://127.0.0.1:5000/hi",
                                         headers=headers,
                                         data='[1, 2, 3]',
                                         **kwargs)
Example #2
0
def get_client():
    cl = client.HTTPClient(username="******",
                           password="******",
                           tenant_id="tenant",
                           auth_url="auth_test",
                           cacert="ca.pem",
                           key="key.pem",
                           cert="cert.pem")
    return cl
    def test_forwarded_for(self):
        ORIGINAL_IP = "10.100.100.1"
        cl = client.HTTPClient(username="******", password="******",
                               tenant_id="tenant", auth_url="auth_test",
                               original_ip=ORIGINAL_IP)

        with mock.patch.object(requests, "request", MOCK_REQUEST):
            res = cl.request('/', 'GET')

            args, kwargs = MOCK_REQUEST.call_args
            self.assertIn(
                ('Forwarded', "for=%s;by=%s" % (ORIGINAL_IP, cl.USER_AGENT)),
                kwargs['headers'].items())
 def _check_keystone_versions(self, url):
     """Calls Keystone URL and detects the available API versions."""
     try:
         httpclient = client.HTTPClient()
         resp, body = httpclient.request(
             url, "GET", headers={'Accept': 'application/json'})
         # Multiple Choices status code is returned by the root
         # identity endpoint, with references to one or more
         # Identity API versions -- v3 spec
         # some cases we get No Content
         if resp.status_code in (200, 204, 300):
             try:
                 results = {}
                 if 'version' in body:
                     results['message'] = "Keystone found at %s" % url
                     version = body['version']
                     # Stable/diablo incorrect format
                     id, status, version_url = \
                         self._get_version_info(version, url)
                     results[str(id)] = {
                         "id": id,
                         "status": status,
                         "url": version_url
                     }
                     return results
                 elif 'versions' in body:
                     # Correct format
                     results['message'] = "Keystone found at %s" % url
                     for version in body['versions']['values']:
                         id, status, version_url = \
                             self._get_version_info(version, url)
                         results[str(id)] = {
                             "id": id,
                             "status": status,
                             "url": version_url
                         }
                     return results
                 else:
                     results['message'] = ("Unrecognized response from %s" %
                                           url)
                 return results
             except KeyError:
                 raise exceptions.AuthorizationFailure()
         elif resp.status_code == 305:
             return self._check_keystone_versions(resp['location'])
         else:
             raise exceptions.from_response(resp, resp.text)
     except Exception as e:
         _logger.exception(e)
    def test_build_keyring_key(self):
        cl = client.HTTPClient(username=USERNAME,
                               password=PASSWORD,
                               tenant_id=TENANT_ID,
                               auth_url=AUTH_URL)

        keyring_key = cl._build_keyring_key(auth_url=AUTH_URL,
                                            username=USERNAME,
                                            tenant_name=TENANT,
                                            tenant_id=TENANT_ID,
                                            token=TOKEN)

        self.assertEqual(
            keyring_key,
            '%s/%s/%s/%s/%s' % (AUTH_URL, TENANT_ID, TENANT, TOKEN, USERNAME))
Example #6
0
 def _check_keystone_versions(self, url):
     """ Calls Keystone URL and detects the available API versions """
     try:
         httpclient = client.HTTPClient()
         resp, body = httpclient.request(
             url, "GET", headers={'Accept': 'application/json'})
         if resp.status in (200, 204):  # in some cases we get No Content
             try:
                 results = {}
                 if 'version' in body:
                     results['message'] = "Keystone found at %s" % url
                     version = body['version']
                     # Stable/diablo incorrect format
                     id, status, version_url = self._get_version_info(
                         version, url)
                     results[str(id)] = {
                         "id": id,
                         "status": status,
                         "url": version_url
                     }
                     return results
                 elif 'versions' in body:
                     # Correct format
                     results['message'] = "Keystone found at %s" % url
                     for version in body['versions']['values']:
                         id, status, version_url = self._get_version_info(
                             version, url)
                         results[str(id)] = {
                             "id": id,
                             "status": status,
                             "url": version_url
                         }
                     return results
                 else:
                     results['message'] = ("Unrecognized response from %s" %
                                           url)
                 return results
             except KeyError:
                 raise exceptions.AuthorizationFailure()
         elif resp.status == 305:
             return self._check_keystone_versions(resp['location'])
         else:
             raise exceptions.from_response(resp, body)
     except Exception as e:
         _logger.exception(e)
    def test_no_keyring_key(self):
        """
        Ensure that we get no value back if we don't have use_keyring
        set in the client.
        """
        cl = client.HTTPClient(username=USERNAME,
                               password=PASSWORD,
                               tenant_id=TENANT_ID,
                               auth_url=AUTH_URL)

        (keyring_key,
         auth_ref) = cl.get_auth_ref_from_keyring(auth_url=AUTH_URL,
                                                  username=USERNAME,
                                                  tenant_name=TENANT,
                                                  tenant_id=TENANT_ID,
                                                  token=TOKEN)

        self.assertIsNone(keyring_key)
        self.assertIsNone(auth_ref)
Example #8
0
 def _check_keystone_extensions(self, url):
     """ Calls Keystone URL and detects the available extensions """
     try:
         httpclient = client.HTTPClient()
         if not url.endswith("/"):
             url += '/'
         resp, body = httpclient.request(
             "%sextensions" % url,
             "GET",
             headers={'Accept': 'application/json'})
         if resp.status_code in (200, 204):  # some cases we get No Content
             try:
                 results = {}
                 if 'extensions' in body:
                     if 'values' in body['extensions']:
                         # Parse correct format (per contract)
                         for extension in body['extensions']['values']:
                             alias, name = \
                                 self._get_extension_info(
                                     extension['extension']
                                 )
                             results[alias] = name
                         return results
                     else:
                         # Support incorrect, but prevalent format
                         for extension in body['extensions']:
                             alias, name = \
                                 self._get_extension_info(extension)
                             results[alias] = name
                         return results
                 else:
                     results['message'] = ("Unrecognized extensions "
                                           "response from %s" % url)
                 return results
             except KeyError:
                 raise exceptions.AuthorizationFailure()
         elif resp.status_code == 305:
             return self._check_keystone_extensions(resp['location'])
         else:
             raise exceptions.from_response(resp, resp.text)
     except Exception as e:
         _logger.exception(e)
    def test_set_and_get_keyring_expired(self):
        cl = client.HTTPClient(username=USERNAME,
                               password=PASSWORD,
                               tenant_id=TENANT_ID,
                               auth_url=AUTH_URL,
                               use_keyring=True)
        keyring_key = cl._build_keyring_key(auth_url=AUTH_URL,
                                            username=USERNAME,
                                            tenant_name=TENANT,
                                            tenant_id=TENANT_ID,
                                            token=TOKEN)

        cl.auth_ref = access.AccessInfo.factory(body=PROJECT_SCOPED_TOKEN)
        expired = timeutils.utcnow() - datetime.timedelta(minutes=30)
        cl.auth_ref['token']['expires'] = timeutils.isotime(expired)
        cl.store_auth_ref_into_keyring(keyring_key)
        (keyring_key,
         auth_ref) = cl.get_auth_ref_from_keyring(auth_url=AUTH_URL,
                                                  username=USERNAME,
                                                  tenant_name=TENANT,
                                                  tenant_id=TENANT_ID,
                                                  token=TOKEN)
        self.assertIsNone(auth_ref)
Example #10
0
def get_client():
    cl = client.HTTPClient(username="******",
                           password="******",
                           tenant_id="tenant",
                           auth_url="auth_test")
    return cl
Example #11
0
def get_client():
    cl = client.HTTPClient(username="******", password="******",
                           project_id="project_id", auth_url="auth_test")
    return cl