blob: c7525320862b49cdac27c2fb5436d405713d45c2 [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
Ken'ichi Ohmichi7bd25752017-03-10 10:45:39 -080018from tempest.lib.common.utils import data_utils
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080019from tempest.lib import decorators
Masayuki Igawadf154682014-03-19 18:32:00 +090020from tempest import test
nayna-patel914b4712013-07-16 08:29:05 +000021
22
Matthew Treinishdb2c5972014-01-31 22:18:59 +000023class CredentialsTestJSON(base.BaseIdentityV3AdminTest):
nayna-patel914b4712013-07-16 08:29:05 +000024
25 @classmethod
Andrea Frittoli7688e742014-09-15 12:38:22 +010026 def resource_setup(cls):
27 super(CredentialsTestJSON, cls).resource_setup()
nayna-patel914b4712013-07-16 08:29:05 +000028 cls.projects = list()
29 cls.creds_list = [['project_id', 'user_id', 'id'],
30 ['access', 'secret']]
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000031 u_name = data_utils.rand_name('user')
nayna-patel914b4712013-07-16 08:29:05 +000032 u_desc = '%s description' % u_name
33 u_email = '%s@testmail.tm' % u_name
Zack Feldsteind8c5f7a2015-12-14 10:44:07 -060034 u_password = data_utils.rand_password()
zhufl8e9a0732017-01-26 16:15:21 +080035 for _ in range(2):
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -060036 cls.project = cls.projects_client.create_project(
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000037 data_utils.rand_name('project'),
John Warren56317e02015-08-12 20:48:32 +000038 description=data_utils.rand_name('project-desc'))['project']
nayna-patel914b4712013-07-16 08:29:05 +000039 cls.projects.append(cls.project['id'])
40
Daniel Mellado7aea5342016-02-09 09:10:12 +000041 cls.user_body = cls.users_client.create_user(
ghanshyam7f817db2016-08-01 18:37:13 +090042 name=u_name, description=u_desc, password=u_password,
John Warren56317e02015-08-12 20:48:32 +000043 email=u_email, project_id=cls.projects[0])['user']
nayna-patel914b4712013-07-16 08:29:05 +000044
45 @classmethod
Andrea Frittoli7688e742014-09-15 12:38:22 +010046 def resource_cleanup(cls):
Daniel Mellado7aea5342016-02-09 09:10:12 +000047 cls.users_client.delete_user(cls.user_body['id'])
nayna-patel914b4712013-07-16 08:29:05 +000048 for p in cls.projects:
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -060049 cls.projects_client.delete_project(p)
Andrea Frittoli7688e742014-09-15 12:38:22 +010050 super(CredentialsTestJSON, cls).resource_cleanup()
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
Masayuki Igawadf154682014-03-19 18:32:00 +090055 @test.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):
Yaroslav Lobankov17e8c852015-11-09 14:03:50 +030058 blob = '{"access": "%s", "secret": "%s"}' % (
59 data_utils.rand_name('Access'), data_utils.rand_name('Secret'))
David Kranzd8ccb792014-12-29 11:32:05 -050060 cred = self.creds_client.create_credential(
Yaroslav Lobankov17e8c852015-11-09 14:03:50 +030061 user_id=self.user_body['id'], project_id=self.projects[0],
62 blob=blob, type='ec2')['credential']
nayna-patel914b4712013-07-16 08:29:05 +000063 self.addCleanup(self._delete_credential, cred['id'])
nayna-patel914b4712013-07-16 08:29:05 +000064 for value1 in self.creds_list[0]:
65 self.assertIn(value1, cred)
66 for value2 in self.creds_list[1]:
67 self.assertIn(value2, cred['blob'])
68
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000069 new_keys = [data_utils.rand_name('NewAccess'),
70 data_utils.rand_name('NewSecret')]
Yaroslav Lobankov17e8c852015-11-09 14:03:50 +030071 blob = '{"access": "%s", "secret": "%s"}' % (new_keys[0], new_keys[1])
David Kranzd8ccb792014-12-29 11:32:05 -050072 update_body = self.creds_client.update_credential(
Yaroslav Lobankov17e8c852015-11-09 14:03:50 +030073 cred['id'], blob=blob, project_id=self.projects[1],
74 type='ec2')['credential']
ghanshyam9507e6b2016-09-15 17:34:24 +090075 update_body['blob'] = json.loads(update_body['blob'])
nayna-patel914b4712013-07-16 08:29:05 +000076 self.assertEqual(cred['id'], update_body['id'])
77 self.assertEqual(self.projects[1], update_body['project_id'])
78 self.assertEqual(self.user_body['id'], update_body['user_id'])
79 self.assertEqual(update_body['blob']['access'], new_keys[0])
80 self.assertEqual(update_body['blob']['secret'], new_keys[1])
81
lei zhangf7169e22015-11-28 22:51:36 +080082 get_body = self.creds_client.show_credential(cred['id'])['credential']
ghanshyam9507e6b2016-09-15 17:34:24 +090083 get_body['blob'] = json.loads(get_body['blob'])
nayna-patel914b4712013-07-16 08:29:05 +000084 for value1 in self.creds_list[0]:
85 self.assertEqual(update_body[value1],
86 get_body[value1])
87 for value2 in self.creds_list[1]:
88 self.assertEqual(update_body['blob'][value2],
89 get_body['blob'][value2])
90
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080091 @decorators.idempotent_id('13202c00-0021-42a1-88d4-81b44d448aab')
nayna-patel914b4712013-07-16 08:29:05 +000092 def test_credentials_list_delete(self):
93 created_cred_ids = list()
94 fetched_cred_ids = list()
95
zhufl8e9a0732017-01-26 16:15:21 +080096 for _ in range(2):
Yaroslav Lobankov17e8c852015-11-09 14:03:50 +030097 blob = '{"access": "%s", "secret": "%s"}' % (
98 data_utils.rand_name('Access'), data_utils.rand_name('Secret'))
David Kranzd8ccb792014-12-29 11:32:05 -050099 cred = self.creds_client.create_credential(
Yaroslav Lobankov17e8c852015-11-09 14:03:50 +0300100 user_id=self.user_body['id'], project_id=self.projects[0],
101 blob=blob, type='ec2')['credential']
nayna-patel914b4712013-07-16 08:29:05 +0000102 created_cred_ids.append(cred['id'])
103 self.addCleanup(self._delete_credential, cred['id'])
104
John Warrenf3ac5cc2015-08-10 18:06:43 +0000105 creds = self.creds_client.list_credentials()['credentials']
nayna-patel914b4712013-07-16 08:29:05 +0000106
107 for i in creds:
108 fetched_cred_ids.append(i['id'])
109 missing_creds = [c for c in created_cred_ids
110 if c not in fetched_cred_ids]
111 self.assertEqual(0, len(missing_creds),
112 "Failed to find cred %s in fetched list" %
DennyZhangb432bac2013-09-17 16:24:12 +0000113 ', '.join(m_cred for m_cred in missing_creds))