def test_create_with_project_and_default_project(self): # Can create a user with the deprecated project and default_project_id. # The backend call should only pass the default_project_id. ref = self.new_ref() resp = utils.TestResponse({ "status_code": 201, "text": self.serialize(ref), }) method = 'POST' req_ref = ref.copy() req_ref.pop('id') kwargs = copy.copy(self.TEST_REQUEST_BASE) kwargs['headers'] = self.headers[method] kwargs['data'] = self.serialize(req_ref) requests.request( method, urlparse.urljoin(self.TEST_URL, 'v3/%s' % self.collection_key), **kwargs).AndReturn((resp)) self.mox.ReplayAll() param_ref = req_ref.copy() # Add the deprecated project_id in the call, the value will be ignored. param_ref['project_id'] = 'project' params = utils.parameterize(param_ref) returned = self.manager.create(**params) self.assertTrue(isinstance(returned, self.model)) for attr in ref: self.assertEqual(getattr(returned, attr), ref[attr], 'Expected different %s' % attr)
def test_update_with_project_and_default_project(self, ref=None): ref = self.new_ref() req_ref = ref.copy() del req_ref['id'] resp = utils.TestResponse({ "status_code": 200, "text": self.serialize(ref), }) method = 'PATCH' kwargs = copy.copy(self.TEST_REQUEST_BASE) kwargs['headers'] = self.headers[method] kwargs['data'] = self.serialize(req_ref) requests.request( method, urlparse.urljoin(self.TEST_URL, 'v3/%s/%s' % (self.collection_key, ref['id'])), **kwargs).AndReturn((resp)) self.mox.ReplayAll() param_ref = req_ref.copy() # Add the deprecated project_id in the call, the value will be ignored. param_ref['project_id'] = 'project' params = utils.parameterize(param_ref) returned = self.manager.update(ref['id'], **params) self.assertTrue(isinstance(returned, self.model)) for attr in ref: self.assertEqual(getattr(returned, attr), ref[attr], 'Expected different %s' % attr)
def test_authenticate_failure(self): ident = self.TEST_REQUEST_BODY['auth']['identity'] ident['password']['user']['password'] = '******' resp = utils.TestResponse({ "status_code": 401, "text": json.dumps({ "unauthorized": { "message": "Unauthorized", "code": "401", }, }), }) kwargs = copy.copy(self.TEST_REQUEST_BASE) kwargs['headers'] = self.TEST_REQUEST_HEADERS kwargs['data'] = json.dumps(self.TEST_REQUEST_BODY, sort_keys=True) requests.request('POST', self.TEST_URL + "/auth/tokens", **kwargs).AndReturn((resp)) self.mox.ReplayAll() # Workaround for issue with assertRaises on python2.6 # where with assertRaises(exceptions.Unauthorized): doesn't work # right def client_create_wrapper(): client.Client(user_domain_name=self.TEST_DOMAIN_NAME, username=self.TEST_USER, password="******", project_id=self.TEST_TENANT_ID, auth_url=self.TEST_URL) self.assertRaises(exceptions.Unauthorized, client_create_wrapper)
def test_authenticate_success_token_unscoped(self): ident = self.TEST_REQUEST_BODY['auth']['identity'] del ident['password'] ident['methods'] = ['token'] ident['token'] = {} ident['token']['id'] = self.TEST_TOKEN del self.TEST_REQUEST_BODY['auth']['scope'] del self.TEST_RESPONSE_DICT['token']['catalog'] self.TEST_REQUEST_HEADERS['X-Auth-Token'] = self.TEST_TOKEN resp = utils.TestResponse({ "status_code": 200, "text": json.dumps(self.TEST_RESPONSE_DICT), "headers": self.TEST_RESPONSE_HEADERS, }) kwargs = copy.copy(self.TEST_REQUEST_BASE) kwargs['headers'] = self.TEST_REQUEST_HEADERS kwargs['data'] = json.dumps(self.TEST_REQUEST_BODY, sort_keys=True) requests.request('POST', self.TEST_URL + "/auth/tokens", **kwargs).AndReturn((resp)) self.mox.ReplayAll() cs = client.Client(token=self.TEST_TOKEN, auth_url=self.TEST_URL) self.assertEqual(cs.auth_token, self.TEST_RESPONSE_HEADERS["X-Subject-Token"]) self.assertFalse('catalog' in cs.service_catalog.catalog)
def test_authenticate_success(self): TEST_TOKEN = "abcdef" self.TEST_RESPONSE_HEADERS['X-Subject-Token'] = TEST_TOKEN ident = self.TEST_REQUEST_BODY['auth']['identity'] del ident['password']['user']['domain'] del ident['password']['user']['name'] ident['password']['user']['id'] = self.TEST_USER resp = utils.TestResponse({ "status_code": 200, "text": json.dumps(self.TEST_RESPONSE_DICT), "headers": self.TEST_RESPONSE_HEADERS, }) kwargs = copy.copy(self.TEST_REQUEST_BASE) kwargs['headers'] = self.TEST_REQUEST_HEADERS kwargs['data'] = json.dumps(self.TEST_REQUEST_BODY, sort_keys=True) requests.request('POST', self.TEST_URL + "/auth/tokens", **kwargs).AndReturn((resp)) self.mox.ReplayAll() cs = client.Client(user_id=self.TEST_USER, password=self.TEST_TOKEN, project_id=self.TEST_TENANT_ID, auth_url=self.TEST_URL) self.assertEqual(cs.auth_token, TEST_TOKEN)
def test_authenticate_success_token_project_scoped(self): ident = self.TEST_REQUEST_BODY['auth']['identity'] del ident['password'] ident['methods'] = ['token'] ident['token'] = {} ident['token']['id'] = self.TEST_TOKEN self.TEST_REQUEST_HEADERS['X-Auth-Token'] = self.TEST_TOKEN resp = utils.TestResponse({ "status_code": 200, "text": json.dumps(self.TEST_RESPONSE_DICT), "headers": self.TEST_RESPONSE_HEADERS, }) kwargs = copy.copy(self.TEST_REQUEST_BASE) kwargs['headers'] = self.TEST_REQUEST_HEADERS kwargs['data'] = json.dumps(self.TEST_REQUEST_BODY, sort_keys=True) requests.request('POST', self.TEST_URL + "/auth/tokens", **kwargs).AndReturn((resp)) self.mox.ReplayAll() cs = client.Client(token=self.TEST_TOKEN, project_id=self.TEST_TENANT_ID, auth_url=self.TEST_URL) self.assertEqual(cs.auth_tenant_id, self.TEST_TENANT_ID) self.assertEqual( cs.management_url, self.TEST_RESPONSE_DICT["token"]["catalog"][3] ['endpoints'][2]["url"]) self.assertEqual(cs.auth_token, self.TEST_RESPONSE_HEADERS["X-Subject-Token"])
def test_auth_redirect(self): correct_response = json.dumps(self.TEST_RESPONSE_DICT, sort_keys=True) dict_responses = [ { "headers": { 'location': self.TEST_ADMIN_URL + "/auth/tokens", 'X-Subject-Token': self.TEST_TOKEN, }, "status_code": 305, "text": "Use proxy", }, { "headers": { 'X-Subject-Token': self.TEST_TOKEN }, "status_code": 200, "text": correct_response, }, ] responses = [(utils.TestResponse(resp)) for resp in dict_responses] kwargs = copy.copy(self.TEST_REQUEST_BASE) kwargs['headers'] = self.TEST_REQUEST_HEADERS kwargs['data'] = json.dumps(self.TEST_REQUEST_BODY, sort_keys=True) requests.request('POST', self.TEST_URL + "/auth/tokens", **kwargs).AndReturn(responses[0]) kwargs = copy.copy(self.TEST_REQUEST_BASE) kwargs['headers'] = self.TEST_REQUEST_HEADERS kwargs['data'] = json.dumps(self.TEST_REQUEST_BODY, sort_keys=True) requests.request('POST', self.TEST_ADMIN_URL + "/auth/tokens", **kwargs).AndReturn(responses[1]) self.mox.ReplayAll() cs = client.Client(user_domain_name=self.TEST_DOMAIN_NAME, username=self.TEST_USER, password=self.TEST_TOKEN, project_id=self.TEST_TENANT_ID, auth_url=self.TEST_URL) self.assertEqual( cs.management_url, self.TEST_RESPONSE_DICT["token"]["catalog"][3] ['endpoints'][2]["url"]) self.assertEqual(cs.auth_token, self.TEST_RESPONSE_HEADERS["X-Subject-Token"])
def test_check_user_in_group(self): group_id = uuid.uuid4().hex ref = self.new_ref() resp = utils.TestResponse({ "status_code": 204, "text": '', }) method = 'HEAD' kwargs = copy.copy(self.TEST_REQUEST_BASE) kwargs['headers'] = self.headers[method] requests.request( method, urlparse.urljoin( self.TEST_URL, 'v3/groups/%s/%s/%s' % (group_id, self.collection_key, ref['id'])), **kwargs).AndReturn((resp)) self.mox.ReplayAll() self.manager.check_in_group(user=ref['id'], group=group_id)
def test_authenticate_success_userid_password_domain_scoped(self): ident = self.TEST_REQUEST_BODY['auth']['identity'] del ident['password']['user']['domain'] del ident['password']['user']['name'] ident['password']['user']['id'] = self.TEST_USER scope = self.TEST_REQUEST_BODY['auth']['scope'] del scope['project'] scope['domain'] = {} scope['domain']['id'] = self.TEST_DOMAIN_ID token = self.TEST_RESPONSE_DICT['token'] del token['project'] token['domain'] = {} token['domain']['id'] = self.TEST_DOMAIN_ID token['domain']['name'] = self.TEST_DOMAIN_NAME resp = utils.TestResponse({ "status_code": 200, "text": json.dumps(self.TEST_RESPONSE_DICT), "headers": self.TEST_RESPONSE_HEADERS, }) kwargs = copy.copy(self.TEST_REQUEST_BASE) kwargs['headers'] = self.TEST_REQUEST_HEADERS kwargs['data'] = json.dumps(self.TEST_REQUEST_BODY, sort_keys=True) requests.request('POST', self.TEST_URL + "/auth/tokens", **kwargs).AndReturn((resp)) self.mox.ReplayAll() cs = client.Client(user_id=self.TEST_USER, password=self.TEST_TOKEN, domain_id=self.TEST_DOMAIN_ID, auth_url=self.TEST_URL) self.assertEqual(cs.auth_domain_id, self.TEST_DOMAIN_ID) self.assertEqual( cs.management_url, self.TEST_RESPONSE_DICT["token"]["catalog"][3] ['endpoints'][2]["url"]) self.assertEqual(cs.auth_token, self.TEST_RESPONSE_HEADERS["X-Subject-Token"])
def test_list_groups_for_user(self): user_id = uuid.uuid4().hex ref_list = [self.new_ref(), self.new_ref()] resp = utils.TestResponse({ "status_code": 200, "text": self.serialize(ref_list), }) method = 'GET' kwargs = copy.copy(self.TEST_REQUEST_BASE) kwargs['headers'] = self.headers[method] requests.request( method, urlparse.urljoin(self.TEST_URL, 'v3/users/%s/%s' % (user_id, self.collection_key)), **kwargs).AndReturn((resp)) self.mox.ReplayAll() returned_list = self.manager.list(user=user_id) self.assertTrue(len(returned_list)) [self.assertTrue(isinstance(r, self.model)) for r in returned_list]
def test_authenticate_success_password_unscoped(self): del self.TEST_RESPONSE_DICT['token']['catalog'] del self.TEST_REQUEST_BODY['auth']['scope'] resp = utils.TestResponse({ "status_code": 200, "text": json.dumps(self.TEST_RESPONSE_DICT), "headers": self.TEST_RESPONSE_HEADERS, }) kwargs = copy.copy(self.TEST_REQUEST_BASE) kwargs['headers'] = self.TEST_REQUEST_HEADERS kwargs['data'] = json.dumps(self.TEST_REQUEST_BODY, sort_keys=True) requests.request('POST', self.TEST_URL + "/auth/tokens", **kwargs).AndReturn((resp)) self.mox.ReplayAll() cs = client.Client(user_domain_name=self.TEST_DOMAIN_NAME, username=self.TEST_USER, password=self.TEST_TOKEN, auth_url=self.TEST_URL) self.assertEqual(cs.auth_token, self.TEST_RESPONSE_HEADERS["X-Subject-Token"]) self.assertFalse('catalog' in cs.service_catalog.catalog)
def test_authenticate_success_domain_username_password_scoped(self): resp = utils.TestResponse({ "status_code": 200, "text": json.dumps(self.TEST_RESPONSE_DICT), "headers": self.TEST_RESPONSE_HEADERS, }) kwargs = copy.copy(self.TEST_REQUEST_BASE) kwargs['headers'] = self.TEST_REQUEST_HEADERS kwargs['data'] = json.dumps(self.TEST_REQUEST_BODY, sort_keys=True) requests.request('POST', self.TEST_URL + "/auth/tokens", **kwargs).AndReturn((resp)) self.mox.ReplayAll() cs = client.Client(user_domain_name=self.TEST_DOMAIN_NAME, username=self.TEST_USER, password=self.TEST_TOKEN, project_id=self.TEST_TENANT_ID, auth_url=self.TEST_URL) self.assertEqual( cs.management_url, self.TEST_RESPONSE_DICT["token"]["catalog"][3] ['endpoints'][2]["url"]) self.assertEqual(cs.auth_token, self.TEST_RESPONSE_HEADERS["X-Subject-Token"])
def setUp(self): super(ServiceCatalogTest, self).setUp() self.AUTH_RESPONSE_BODY = client_fixtures.AUTH_RESPONSE_BODY self.RESPONSE = utils.TestResponse( {"headers": client_fixtures.AUTH_RESPONSE_HEADERS})