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)
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))
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)
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)
def get_client(): cl = client.HTTPClient(username="******", password="******", tenant_id="tenant", auth_url="auth_test") return cl
def get_client(): cl = client.HTTPClient(username="******", password="******", project_id="project_id", auth_url="auth_test") return cl