blob: 1213cfcf7a6cbe60c6c5782a2a9d536f668f8878 [file] [log] [blame]
nayna-patel914b4712013-07-16 08:29:05 +00001# Copyright 2013 OpenStack Foundation
2# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
ghanshyam9507e6b2016-09-15 17:34:24 +090015from oslo_serialization import jsonutils as json
nayna-patel914b4712013-07-16 08:29:05 +000016
17from tempest.api.identity import base
Martin Kopec213d0a42023-11-30 10:28:14 +010018from tempest import config
Ken'ichi Ohmichi7bd25752017-03-10 10:45:39 -080019from tempest.lib.common.utils import data_utils
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080020from tempest.lib import decorators
nayna-patel914b4712013-07-16 08:29:05 +000021
Martin Kopec213d0a42023-11-30 10:28:14 +010022CONF = config.CONF
23
nayna-patel914b4712013-07-16 08:29:05 +000024
Matthew Treinishdb2c5972014-01-31 22:18:59 +000025class CredentialsTestJSON(base.BaseIdentityV3AdminTest):
zhufl23925882020-04-29 08:42:40 +080026 """Test keystone credentials"""
27
mccasland, trevor (tm2086)c59d1132018-07-11 16:36:04 -050028 # NOTE: force_tenant_isolation is true in the base class by default but
29 # overridden to false here to allow test execution for clouds using the
30 # pre-provisioned credentials provider.
31 force_tenant_isolation = False
nayna-patel914b4712013-07-16 08:29:05 +000032
33 @classmethod
Andrea Frittoli7688e742014-09-15 12:38:22 +010034 def resource_setup(cls):
35 super(CredentialsTestJSON, cls).resource_setup()
nayna-patel914b4712013-07-16 08:29:05 +000036 cls.projects = list()
37 cls.creds_list = [['project_id', 'user_id', 'id'],
38 ['access', 'secret']]
zhufl8e9a0732017-01-26 16:15:21 +080039 for _ in range(2):
Andrea Frittoli7f60fa62017-09-09 16:31:34 +020040 project = cls.projects_client.create_project(
Martin Kopec213d0a42023-11-30 10:28:14 +010041 data_utils.rand_name(
42 name='project', prefix=CONF.resource_name_prefix),
43 description=data_utils.rand_name(
44 name='project-desc',
45 prefix=CONF.resource_name_prefix))['project']
Andrea Frittoli7f60fa62017-09-09 16:31:34 +020046 cls.addClassResourceCleanup(
47 cls.projects_client.delete_project, project['id'])
48 cls.projects.append(project['id'])
mccasland, trevor (tm2086)c59d1132018-07-11 16:36:04 -050049 cls.user_body = cls.users_client.show_user(
50 cls.os_primary.credentials.user_id)['user']
nayna-patel914b4712013-07-16 08:29:05 +000051
52 def _delete_credential(self, cred_id):
David Kranz2aaf5312014-08-29 09:22:10 -040053 self.creds_client.delete_credential(cred_id)
nayna-patel914b4712013-07-16 08:29:05 +000054
Jordan Pittier3b46d272017-04-12 16:17:28 +020055 @decorators.attr(type='smoke')
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080056 @decorators.idempotent_id('7cd59bf9-bda4-4c72-9467-d21cab278355')
nayna-patel914b4712013-07-16 08:29:05 +000057 def test_credentials_create_get_update_delete(self):
zhufl23925882020-04-29 08:42:40 +080058 """Test creating, getting, updating, deleting of credentials"""
Martin Kopec213d0a42023-11-30 10:28:14 +010059 prefix = CONF.resource_name_prefix
Yaroslav Lobankov17e8c852015-11-09 14:03:50 +030060 blob = '{"access": "%s", "secret": "%s"}' % (
Martin Kopec213d0a42023-11-30 10:28:14 +010061 data_utils.rand_name(name='Access', prefix=prefix),
62 data_utils.rand_name(name='Secret', prefix=prefix))
David Kranzd8ccb792014-12-29 11:32:05 -050063 cred = self.creds_client.create_credential(
Yaroslav Lobankov17e8c852015-11-09 14:03:50 +030064 user_id=self.user_body['id'], project_id=self.projects[0],
65 blob=blob, type='ec2')['credential']
nayna-patel914b4712013-07-16 08:29:05 +000066 self.addCleanup(self._delete_credential, cred['id'])
nayna-patel914b4712013-07-16 08:29:05 +000067 for value1 in self.creds_list[0]:
68 self.assertIn(value1, cred)
69 for value2 in self.creds_list[1]:
70 self.assertIn(value2, cred['blob'])
71
Martin Kopec213d0a42023-11-30 10:28:14 +010072 new_keys = [data_utils.rand_name(name='NewAccess', prefix=prefix),
73 data_utils.rand_name(name='NewSecret', prefix=prefix)]
Yaroslav Lobankov17e8c852015-11-09 14:03:50 +030074 blob = '{"access": "%s", "secret": "%s"}' % (new_keys[0], new_keys[1])
David Kranzd8ccb792014-12-29 11:32:05 -050075 update_body = self.creds_client.update_credential(
Yaroslav Lobankov17e8c852015-11-09 14:03:50 +030076 cred['id'], blob=blob, project_id=self.projects[1],
77 type='ec2')['credential']
ghanshyam9507e6b2016-09-15 17:34:24 +090078 update_body['blob'] = json.loads(update_body['blob'])
nayna-patel914b4712013-07-16 08:29:05 +000079 self.assertEqual(cred['id'], update_body['id'])
80 self.assertEqual(self.projects[1], update_body['project_id'])
81 self.assertEqual(self.user_body['id'], update_body['user_id'])
82 self.assertEqual(update_body['blob']['access'], new_keys[0])
83 self.assertEqual(update_body['blob']['secret'], new_keys[1])
84
lei zhangf7169e22015-11-28 22:51:36 +080085 get_body = self.creds_client.show_credential(cred['id'])['credential']
ghanshyam9507e6b2016-09-15 17:34:24 +090086 get_body['blob'] = json.loads(get_body['blob'])
nayna-patel914b4712013-07-16 08:29:05 +000087 for value1 in self.creds_list[0]:
88 self.assertEqual(update_body[value1],
89 get_body[value1])
90 for value2 in self.creds_list[1]:
91 self.assertEqual(update_body['blob'][value2],
92 get_body['blob'][value2])
93
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080094 @decorators.idempotent_id('13202c00-0021-42a1-88d4-81b44d448aab')
nayna-patel914b4712013-07-16 08:29:05 +000095 def test_credentials_list_delete(self):
zhufl23925882020-04-29 08:42:40 +080096 """Test listing credentials"""
nayna-patel914b4712013-07-16 08:29:05 +000097 created_cred_ids = list()
98 fetched_cred_ids = list()
Martin Kopec213d0a42023-11-30 10:28:14 +010099 prefix = CONF.resource_name_prefix
nayna-patel914b4712013-07-16 08:29:05 +0000100
zhufl8e9a0732017-01-26 16:15:21 +0800101 for _ in range(2):
Yaroslav Lobankov17e8c852015-11-09 14:03:50 +0300102 blob = '{"access": "%s", "secret": "%s"}' % (
Martin Kopec213d0a42023-11-30 10:28:14 +0100103 data_utils.rand_name(name='Access', prefix=prefix),
104 data_utils.rand_name(name='Secret', prefix=prefix))
David Kranzd8ccb792014-12-29 11:32:05 -0500105 cred = self.creds_client.create_credential(
Yaroslav Lobankov17e8c852015-11-09 14:03:50 +0300106 user_id=self.user_body['id'], project_id=self.projects[0],
107 blob=blob, type='ec2')['credential']
nayna-patel914b4712013-07-16 08:29:05 +0000108 created_cred_ids.append(cred['id'])
109 self.addCleanup(self._delete_credential, cred['id'])
110
John Warrenf3ac5cc2015-08-10 18:06:43 +0000111 creds = self.creds_client.list_credentials()['credentials']
nayna-patel914b4712013-07-16 08:29:05 +0000112
113 for i in creds:
114 fetched_cred_ids.append(i['id'])
115 missing_creds = [c for c in created_cred_ids
116 if c not in fetched_cred_ids]
Masayuki Igawaf9009b42017-04-10 14:49:29 +0900117 self.assertEmpty(missing_creds,
nayna-patel914b4712013-07-16 08:29:05 +0000118 "Failed to find cred %s in fetched list" %
DennyZhangb432bac2013-09-17 16:24:12 +0000119 ', '.join(m_cred for m_cred in missing_creds))