Add functional test cases for v3-ext/OS-OAUTH1

Add functional test cases for OS-OAUTH1 API
https://developer.openstack.org/api-ref/identity/v3-ext/index.html?expanded=#os-oauth1-api

Change-Id: I8d5921a3b2de273019b075e2ea0e3694344c6912
Depends-On: I4c5369ae3ad7a7add630e3ac6a4fc52f854bc77c
Closes-Bug: #1687593
This commit is contained in:
Hemanth Nakkina 2017-06-12 12:56:14 +05:30
parent 360bbafa38
commit 6d76b8b929
2 changed files with 244 additions and 0 deletions

View File

@ -0,0 +1,241 @@
# Copyright 2017 AT&T Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from tempest.lib.common.utils import data_utils
from tempest.lib.common.utils import test_utils
from tempest.lib import decorators
from tempest.lib import exceptions as lib_exc
from keystone_tempest_plugin.tests import base
class OAUTH1TokensTest(base.BaseIdentityTest):
def _create_consumer(self):
"""Creates a consumer with a random description."""
description = data_utils.rand_name('test_create_consumer')
consumer = self.consumers_client.create_consumer(
description)['consumer']
# cleans up created consumers after tests
self.addCleanup(test_utils.call_and_ignore_notfound_exc,
self.consumers_client.delete_consumer,
consumer['id'])
return consumer
def _create_request_token(self, consumer):
"""Create request token to authorize access for a consumer."""
project_id = (
self.oauth_token_client.auth_provider.credentials.project_id)
request_token = self.oauth_token_client.create_request_token(
consumer['id'], consumer['secret'], project_id)
return request_token
def _authorize_request_token(self, request_token):
"""Authorize request token to provide access to specific roles."""
user_id = self.oauth_token_client.auth_provider.credentials.user_id
project_id = (
self.oauth_token_client.auth_provider.credentials.project_id)
roles = self.roles_client.list_user_roles_on_project(
project_id, user_id)
role_ids = [role['id'] for role in roles['roles']]
oauth_verifier = self.oauth_token_client.authorize_request_token(
request_token['oauth_token'], role_ids)
return oauth_verifier['token']
def _create_access_token(self, consumer):
"""Create access token for a consumer."""
request_token = self._create_request_token(consumer)
oauth_verifier = self._authorize_request_token(request_token)
access_token = self.oauth_token_client.create_access_token(
consumer['id'], consumer['secret'],
request_token['oauth_token'],
request_token['oauth_token_secret'],
oauth_verifier['oauth_verifier'])
# cleans up access tokens after tests
user_id = self.oauth_token_client.auth_provider.credentials.user_id
self.addCleanup(test_utils.call_and_ignore_notfound_exc,
self.oauth_token_client.revoke_access_token,
user_id, access_token['oauth_token'])
return access_token
@decorators.idempotent_id('23d2fe8d-fc8d-4bef-8aaa-289400732c3f')
def test_create_and_show_consumer(self):
"""Tests to make sure that a consumer with parameters is made."""
consumer = self._create_consumer()
# fetch created consumer from client
fetched_consumer = self.consumers_client.show_consumer(
consumer['id'])['consumer']
# assert that the fetched consumer matches the created one and
# has all parameters
for key in ['description', 'id', 'links']:
self.assertEqual(consumer[key], fetched_consumer[key])
@decorators.idempotent_id('3820f3d0-9b06-4d15-8f01-c7dd4eea30a2')
def test_delete_consumer(self):
"""Tests the delete functionality for resource consumer."""
consumer = self._create_consumer()
# fetch consumer from client to confirm it exists
fetched_consumer = self.consumers_client.show_consumer(
consumer['id'])['consumer']
self.assertEqual(consumer['id'], fetched_consumer['id'])
# delete existing consumer
self.consumers_client.delete_consumer(consumer['id'])
# check that consumer no longer exists
self.assertRaises(lib_exc.NotFound,
self.consumers_client.show_consumer,
consumer['id'])
@decorators.idempotent_id('5a03fa78-3a03-449b-a04c-ef9de80eb6c4')
def test_update_consumer(self):
"""Tests the update functionality for resource consumer."""
# create a new consumer to update
consumer = self._create_consumer()
# create new description
new_description = data_utils.rand_name('test_update_consumer')
# update consumer
self.consumers_client.update_consumer(consumer['id'],
new_description)
# check that the same consumer now has the new description
updated_consumer = self.consumers_client.show_consumer(
consumer['id'])['consumer']
self.assertEqual(new_description, updated_consumer['description'])
@decorators.idempotent_id('6da689b1-39a0-44ee-9624-445159119c57')
def test_list_consumers(self):
"""Test for listing consumers."""
# create two consumers to populate list
new_consumer_one = self._create_consumer()
new_consumer_two = self._create_consumer()
# fetch the list of consumers
consumer_list = self.consumers_client.list_consumers()['consumers']
# add fetched consumer ids to a list
id_list = [consumer['id'] for consumer in consumer_list]
# check if created consumers are in the list
self.assertIn(new_consumer_one['id'], id_list)
self.assertIn(new_consumer_two['id'], id_list)
@decorators.idempotent_id('a17d60e4-7cb5-4e06-9e16-b044f3ee6d94')
def test_create_request_token(self):
"""Test to create request token for consumer."""
consumer = self._create_consumer()
request_token = self._create_request_token(consumer)
# check that oauth token id and secret exists
self.assertIsNotNone(request_token['oauth_token'])
self.assertIsNotNone(request_token['oauth_token_secret'])
@decorators.idempotent_id('607aecc4-a623-4566-a3a5-bb0e2a6fc9c5')
def test_authorize_request_token(self):
"""Test to authorize a request token for specific role."""
consumer = self._create_consumer()
request_token = self._create_request_token(consumer)
oauth_verifier = self._authorize_request_token(request_token)
# check that oauth verifier exists
self.assertIsNotNone(oauth_verifier['oauth_verifier'])
@decorators.idempotent_id('7d488fc9-342c-4c12-b6b8-b158e2183925')
def test_create_access_token(self):
"""Test to create access token for consumer."""
consumer = self._create_consumer()
access_token = self._create_access_token(consumer)
user_id = self.oauth_token_client.auth_provider.credentials.user_id
project_id = (
self.oauth_token_client.auth_provider.credentials.project_id)
fetched_access_token = self.oauth_token_client.get_access_token(
user_id, access_token['oauth_token'])['access_token']
# check that access token details matches
self.assertEqual(access_token['oauth_token'],
fetched_access_token['id'])
self.assertEqual(consumer['id'], fetched_access_token['consumer_id'])
self.assertEqual(access_token['oauth_expires_at'],
fetched_access_token['expires_at'])
self.assertEqual(project_id, fetched_access_token['project_id'])
self.assertEqual(user_id, fetched_access_token['authorizing_user_id'])
@decorators.idempotent_id('1b802896-91a0-4cbb-a8b9-860c7087fad8')
def test_revoke_access_token(self):
"""Test to delete the access token provided for consumer."""
consumer = self._create_consumer()
access_token = self._create_access_token(consumer)
user_id = self.oauth_token_client.auth_provider.credentials.user_id
# delete existing access token
self.oauth_token_client.revoke_access_token(
user_id, access_token['oauth_token'])
# check that access token no longer exist
self.assertRaises(lib_exc.NotFound,
self.oauth_token_client.get_access_token,
user_id,
access_token['oauth_token'])
@decorators.idempotent_id('5929055d-7c0f-4661-a9a5-15c4b95082dc')
def test_list_access_tokens(self):
"""Test to list access tokens provided to consumer."""
# create two consumers and access token for each
new_consumer_one = self._create_consumer()
new_consumer_two = self._create_consumer()
access_token_one = self._create_access_token(new_consumer_one)
access_token_two = self._create_access_token(new_consumer_two)
user_id = self.oauth_token_client.auth_provider.credentials.user_id
# fetch the list of access tokens
access_token_list = self.oauth_token_client.list_access_tokens(
user_id)['access_tokens']
# add fetch access token ids to a list
id_list = [access_token['id'] for access_token in access_token_list]
# check if created access tokens are in the list
self.assertIn(access_token_one['oauth_token'], id_list)
self.assertIn(access_token_two['oauth_token'], id_list)
@decorators.idempotent_id('0075f413-e249-42e5-9bc9-d6e3aecf6cbc')
def test_list_roles_for_access_token(self):
"""Test to list roles for an access token."""
consumer = self._create_consumer()
access_token = self._create_access_token(consumer)
user_id = self.oauth_token_client.auth_provider.credentials.user_id
project_id = (
self.oauth_token_client.auth_provider.credentials.project_id)
fetched_roles = self.oauth_token_client.list_access_token_roles(
user_id, access_token['oauth_token'])['roles']
fetched_role_ids = [role['id'] for role in fetched_roles]
roles = self.roles_client.list_user_roles_on_project(
project_id, user_id)
role_ids = [role['id'] for role in roles['roles']]
# check that role ids matches
self.assertItemsEqual(fetched_role_ids, role_ids)
@decorators.idempotent_id('28aee994-86b1-4596-a652-572f558045e7')
def test_show_role_for_access_token(self):
"""Test to show role details for an access token."""
consumer = self._create_consumer()
access_token = self._create_access_token(consumer)
user_id = self.oauth_token_client.auth_provider.credentials.user_id
project_id = (
self.oauth_token_client.auth_provider.credentials.project_id)
roles = self.roles_client.list_user_roles_on_project(
project_id, user_id)
fetched_role = self.oauth_token_client.get_access_token_role(
user_id,
access_token['oauth_token'],
roles['roles'][0]['id'])
# check that role id matches
self.assertEqual(fetched_role['role']['id'], roles['roles'][0]['id'])

View File

@ -36,6 +36,9 @@ class BaseIdentityTest(test.BaseTestCase):
cls.auth_client = cls.keystone_manager.auth_client
cls.idps_client = cls.keystone_manager.identity_providers_client
cls.mappings_client = cls.keystone_manager.mapping_rules_client
cls.roles_client = cls.keystone_manager.roles_v3_client
cls.saml2_client = cls.keystone_manager.saml2_client
cls.sps_client = cls.keystone_manager.service_providers_client
cls.tokens_client = cls.keystone_manager.token_v3_client
cls.consumers_client = cls.keystone_manager.oauth_consumers_client
cls.oauth_token_client = cls.keystone_manager.oauth_token_client