Define v3 credentials_client as library

Migrate v3 API credentials_client to tempest.lib and add unit
tests for the service client.
Partially implements blueprint consistent-service-method-names

Change-Id: I0ae04d76738fe6f639d90af8c142bdbc6a1fa83f
This commit is contained in:
Martin Kopec 2016-09-05 13:57:14 +00:00 committed by Daniel Mellado
parent c8d641a0f9
commit 356bb48382
5 changed files with 196 additions and 9 deletions

View File

@ -12,3 +12,4 @@ features:
* identity_client(v3)
* roles_client(v3)
* inherited_roles_client(v3)
* credentials_client(v3)

View File

@ -12,6 +12,8 @@
# License for the specific language governing permissions and limitations under
# the License.
from tempest.lib.services.identity.v3.credentials_client import \
CredentialsClient
from tempest.lib.services.identity.v3.endpoints_client import EndPointsClient
from tempest.lib.services.identity.v3.groups_client import GroupsClient
from tempest.lib.services.identity.v3.identity_client import IdentityClient
@ -25,12 +27,9 @@ from tempest.lib.services.identity.v3.services_client import ServicesClient
from tempest.lib.services.identity.v3.token_client import V3TokenClient
from tempest.lib.services.identity.v3.trusts_client import TrustsClient
from tempest.lib.services.identity.v3.users_client import UsersClient
from tempest.services.identity.v3.json.credentials_client import \
CredentialsClient
from tempest.services.identity.v3.json.domains_client import DomainsClient
__all__ = ['EndPointsClient', 'GroupsClient', 'IdentityClient',
'InheritedRolesClient', 'PoliciesClient', 'ProjectsClient',
'RegionsClient', 'RolesClient', 'ServicesClient', 'V3TokenClient',
'TrustsClient', 'UsersClient', 'CredentialsClient', 'DomainsClient',
]
__all__ = ['CredentialsClient', 'EndPointsClient', 'GroupsClient',
'IdentityClient', 'InheritedRolesClient', 'PoliciesClient',
'ProjectsClient', 'RegionsClient', 'RolesClient', 'ServicesClient',
'V3TokenClient', 'TrustsClient', 'UsersClient', 'DomainsClient', ]

View File

@ -12,6 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
import copy
from oslo_serialization import jsonutils as json
from oslotest import mockpatch
@ -31,7 +32,7 @@ class BaseServiceTest(base.TestCase):
def check_service_client_function(self, function, function2mock,
body, to_utf=False, status=200,
headers=None, **kwargs):
headers=None, cr_blob=False, **kwargs):
mocked_response = self.create_response(body, to_utf, status, headers)
self.useFixture(mockpatch.Patch(
function2mock, return_value=mocked_response))
@ -39,4 +40,11 @@ class BaseServiceTest(base.TestCase):
resp = function(**kwargs)
else:
resp = function()
self.assertEqual(body, resp)
if cr_blob:
evaluated_body = copy.deepcopy(body)
nested_json = json.loads(evaluated_body['credential']['blob'])
evaluated_body['credential']['blob'] = nested_json
self.assertEqual(evaluated_body, resp)
else:
self.assertEqual(body, resp)

View File

@ -0,0 +1,179 @@
# Copyright 2016 NEC Corporation. All rights reserved.
#
# 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.services.identity.v3 import credentials_client
from tempest.tests.lib import fake_auth_provider
from tempest.tests.lib.services import base
class TestCredentialsClient(base.BaseServiceTest):
FAKE_CREATE_CREDENTIAL = {
"credential": {
"blob": "{\"access\":\"181920\",\"secret\":\"secretKey\"}",
"project_id": "731fc6f265cd486d900f16e84c5cb594",
"type": "ec2",
"user_id": "bb5476fd12884539b41d5a88f838d773"
}
}
FAKE_INFO_CREDENTIAL = {
"credential": {
"user_id": "bb5476fd12884539b41d5a88f838d773",
"links": {
"self": "http://example.com/identity/v3/credentials/" +
"207e9b76935efc03804d3dd6ab52d22e9b22a0711e4" +
"ada4ff8b76165a07311d7"
},
"blob": "{\"access\": \"a42a27755ce6442596b049bd7dd8a563\"," +
" \"secret\": \"71faf1d40bb24c82b479b1c6fbbd9f0c\"}",
"project_id": "6e01855f345f4c59812999b5e459137d",
"type": "ec2",
"id": "207e9b76935efc03804d3dd6ab52d22e9b22a0711e4ada4f"
}
}
FAKE_LIST_CREDENTIALS = {
"credentials": [
{
"user_id": "bb5476fd12884539b41d5a88f838d773",
"links": {
"self": "http://example.com/identity/v3/credentials/" +
"207e9b76935efc03804d3dd6ab52d22e9b22a0711e4" +
"ada4ff8b76165a07311d7"
},
"blob": "{\"access\": \"a42a27755ce6442596b049bd7dd8a563\"," +
" \"secret\": \"71faf1d40bb24c82b479b1c6fbbd9f0c\"," +
" \"trust_id\": null}",
"project_id": "6e01855f345f4c59812999b5e459137d",
"type": "ec2",
"id": "207e9b76935efc03804d3dd6ab52d22e9b22a0711e4ada4f"
},
{
"user_id": "6f556708d04b4ea6bc72d7df2296b71a",
"links": {
"self": "http://example.com/identity/v3/credentials/" +
"2441494e52ab6d594a34d74586075cb299489bdd1e9" +
"389e3ab06467a4f460609"
},
"blob": "{\"access\": \"7da79ff0aa364e1396f067e352b9b79a\"," +
" \"secret\": \"7a18d68ba8834b799d396f3ff6f1e98c\"," +
" \"trust_id\": null}",
"project_id": "1a1d14690f3c4ec5bf5f321c5fde3c16",
"type": "ec2",
"id": "2441494e52ab6d594a34d74586075cb299489bdd1e9389e3"
},
{
"user_id": "c14107e65d5c4a7f8894fc4b3fc209ff",
"links": {
"self": "http://example.com/identity/v3/credentials/" +
"3397b204b5f04c495bcdc8f34c8a39996f280f91726" +
"58241873e15f070ec79d7"
},
"blob": "{\"access\": \"db9c58a558534a10a070110de4f9f20c\"," +
" \"secret\": \"973e790b88db447ba6f93bca02bc745b\"," +
" \"trust_id\": null}",
"project_id": "7396e43183db40dcbf40dd727637b548",
"type": "ec2",
"id": "3397b204b5f04c495bcdc8f34c8a39996f280f9172658241"
},
{
"user_id": "bb5476fd12884539b41d5a88f838d773",
"links": {
"self": "http://example.com/identity/v3/credentials/" +
"7ef4faa904ae7b8b4ddc7bad15b05ee359dad7d7a9b" +
"82861d4ad92fdbbb2eb4e"
},
"blob": "{\"access\": \"7d7559359b57419eb5f5f5dcd65ab57d\"," +
" \"secret\": \"570652bcf8c2483c86eb29e9734eed3c\"," +
" \"trust_id\": null}",
"project_id": "731fc6f265cd486d900f16e84c5cb594",
"type": "ec2",
"id": "7ef4faa904ae7b8b4ddc7bad15b05ee359dad7d7a9b82861"
},
],
"links": {
"self": "http://example.com/identity/v3/credentials",
"previous": None,
"next": None
}
}
def setUp(self):
super(TestCredentialsClient, self).setUp()
fake_auth = fake_auth_provider.FakeAuthProvider()
self.client = credentials_client.CredentialsClient(fake_auth,
'identity',
'regionOne')
def _test_create_credential(self, bytes_body=False):
self.check_service_client_function(
self.client.create_credential,
'tempest.lib.common.rest_client.RestClient.post',
self.FAKE_CREATE_CREDENTIAL,
bytes_body, status=201, cr_blob=True)
def _test_show_credential(self, bytes_body=False):
self.check_service_client_function(
self.client.show_credential,
'tempest.lib.common.rest_client.RestClient.get',
self.FAKE_INFO_CREDENTIAL,
bytes_body, cr_blob=True,
credential_id="207e9b76935efc03804d3dd6ab52d22e9b22a0711e4ada4f")
def _test_update_credential(self, bytes_body=False):
self.check_service_client_function(
self.client.update_credential,
'tempest.lib.common.rest_client.RestClient.patch',
self.FAKE_INFO_CREDENTIAL,
bytes_body, cr_blob=True,
credential_id="207e9b76935efc03804d3dd6ab52d22e9b22a0711e4ada4f")
def _test_list_credentials(self, bytes_body=False):
self.check_service_client_function(
self.client.list_credentials,
'tempest.lib.common.rest_client.RestClient.get',
self.FAKE_LIST_CREDENTIALS,
bytes_body)
def test_create_credential_with_str_body(self):
self._test_create_credential()
def test_create_credential_with_bytes_body(self):
self._test_create_credential(bytes_body=True)
def test_show_credential_with_str_body(self):
self._test_show_credential()
def test_show_credential_with_bytes_body(self):
self._test_show_credential(bytes_body=True)
def test_update_credential_with_str_body(self):
self._test_update_credential()
def test_update_credential_with_bytes_body(self):
self._test_update_credential(bytes_body=True)
def test_list_credentials_with_str_body(self):
self._test_list_credentials()
def test_list_credentials_with_bytes_body(self):
self._test_list_credentials(bytes_body=True)
def test_delete_credential(self):
self.check_service_client_function(
self.client.delete_credential,
'tempest.lib.common.rest_client.RestClient.delete',
{},
credential_id="207e9b76935efc03804d3dd6ab52d22e9b22a0711e4ada4f",
status=204)