nayna-patel | 4df72dc | 2013-05-29 10:27:24 +0000 | [diff] [blame] | 1 | # 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. |
| 15 | |
Martin Pavlasek | 4c3f2ab | 2014-04-15 17:15:15 +0200 | [diff] [blame] | 16 | from tempest.api.identity import base |
| 17 | from tempest import config |
Ken'ichi Ohmichi | 7bd2575 | 2017-03-10 10:45:39 -0800 | [diff] [blame] | 18 | from tempest.lib.common.utils import data_utils |
Castulo J. Martinez | 0a592b4 | 2016-05-13 09:15:23 -0700 | [diff] [blame] | 19 | from tempest.lib.common.utils import test_utils |
Ken'ichi Ohmichi | eeabdd2 | 2017-01-27 17:46:00 -0800 | [diff] [blame] | 20 | from tempest.lib import decorators |
Samuel de Medeiros Queiroz | 019088f | 2017-10-04 16:02:17 -0300 | [diff] [blame] | 21 | from tempest.lib import exceptions |
Martin Pavlasek | 4c3f2ab | 2014-04-15 17:15:15 +0200 | [diff] [blame] | 22 | |
Martin Pavlasek | 4c3f2ab | 2014-04-15 17:15:15 +0200 | [diff] [blame] | 23 | CONF = config.CONF |
nayna-patel | 4df72dc | 2013-05-29 10:27:24 +0000 | [diff] [blame] | 24 | |
| 25 | |
Matthew Treinish | db2c597 | 2014-01-31 22:18:59 +0000 | [diff] [blame] | 26 | class DomainsTestJSON(base.BaseIdentityV3AdminTest): |
zhufl | b935820 | 2020-04-27 16:12:52 +0800 | [diff] [blame] | 27 | """Test identity domains""" |
nayna-patel | 4df72dc | 2013-05-29 10:27:24 +0000 | [diff] [blame] | 28 | |
Castulo J. Martinez | 0a592b4 | 2016-05-13 09:15:23 -0700 | [diff] [blame] | 29 | @classmethod |
| 30 | def resource_setup(cls): |
| 31 | super(DomainsTestJSON, cls).resource_setup() |
| 32 | # Create some test domains to be used during tests |
| 33 | # One of those domains will be disabled |
| 34 | cls.setup_domains = list() |
| 35 | for i in range(3): |
zhufl | 2b33c1a | 2017-04-24 17:33:48 +0800 | [diff] [blame] | 36 | domain = cls.create_domain(enabled=i < 2) |
Castulo J. Martinez | 0a592b4 | 2016-05-13 09:15:23 -0700 | [diff] [blame] | 37 | cls.setup_domains.append(domain) |
| 38 | |
Ken'ichi Ohmichi | eeabdd2 | 2017-01-27 17:46:00 -0800 | [diff] [blame] | 39 | @decorators.idempotent_id('8cf516ef-2114-48f1-907b-d32726c734d4') |
nayna-patel | 4df72dc | 2013-05-29 10:27:24 +0000 | [diff] [blame] | 40 | def test_list_domains(self): |
zhufl | b935820 | 2020-04-27 16:12:52 +0800 | [diff] [blame] | 41 | """Test listing domains""" |
nayna-patel | 4df72dc | 2013-05-29 10:27:24 +0000 | [diff] [blame] | 42 | fetched_ids = list() |
nayna-patel | 4df72dc | 2013-05-29 10:27:24 +0000 | [diff] [blame] | 43 | # List and Verify Domains |
Daniel Mellado | 91a26b6 | 2016-02-11 11:13:04 +0000 | [diff] [blame] | 44 | body = self.domains_client.list_domains()['domains'] |
nayna-patel | 4df72dc | 2013-05-29 10:27:24 +0000 | [diff] [blame] | 45 | for d in body: |
| 46 | fetched_ids.append(d['id']) |
Castulo J. Martinez | 0a592b4 | 2016-05-13 09:15:23 -0700 | [diff] [blame] | 47 | missing_doms = [d for d in self.setup_domains |
| 48 | if d['id'] not in fetched_ids] |
Masayuki Igawa | f9009b4 | 2017-04-10 14:49:29 +0900 | [diff] [blame] | 49 | self.assertEmpty(missing_doms) |
nayna-patel | 4df72dc | 2013-05-29 10:27:24 +0000 | [diff] [blame] | 50 | |
Ken'ichi Ohmichi | eeabdd2 | 2017-01-27 17:46:00 -0800 | [diff] [blame] | 51 | @decorators.idempotent_id('c6aee07b-4981-440c-bb0b-eb598f58ffe9') |
Castulo J. Martinez | 0a592b4 | 2016-05-13 09:15:23 -0700 | [diff] [blame] | 52 | def test_list_domains_filter_by_name(self): |
zhufl | b935820 | 2020-04-27 16:12:52 +0800 | [diff] [blame] | 53 | """Test listing domains filtering by name""" |
Castulo J. Martinez | 0a592b4 | 2016-05-13 09:15:23 -0700 | [diff] [blame] | 54 | params = {'name': self.setup_domains[0]['name']} |
| 55 | fetched_domains = self.domains_client.list_domains( |
ghanshyam | 8af17d6 | 2016-08-01 16:19:42 +0900 | [diff] [blame] | 56 | **params)['domains'] |
Castulo J. Martinez | 0a592b4 | 2016-05-13 09:15:23 -0700 | [diff] [blame] | 57 | # Verify the filtered list is correct, domain names are unique |
| 58 | # so exactly one domain should be found with the provided name |
| 59 | self.assertEqual(1, len(fetched_domains)) |
| 60 | self.assertEqual(self.setup_domains[0]['name'], |
| 61 | fetched_domains[0]['name']) |
| 62 | |
Ken'ichi Ohmichi | eeabdd2 | 2017-01-27 17:46:00 -0800 | [diff] [blame] | 63 | @decorators.idempotent_id('3fd19840-65c1-43f8-b48c-51bdd066dff9') |
Castulo J. Martinez | 0a592b4 | 2016-05-13 09:15:23 -0700 | [diff] [blame] | 64 | def test_list_domains_filter_by_enabled(self): |
zhufl | b935820 | 2020-04-27 16:12:52 +0800 | [diff] [blame] | 65 | """Test listing domains filtering by enabled domains""" |
Castulo J. Martinez | 0a592b4 | 2016-05-13 09:15:23 -0700 | [diff] [blame] | 66 | params = {'enabled': True} |
| 67 | fetched_domains = self.domains_client.list_domains( |
ghanshyam | 8af17d6 | 2016-08-01 16:19:42 +0900 | [diff] [blame] | 68 | **params)['domains'] |
Castulo J. Martinez | 0a592b4 | 2016-05-13 09:15:23 -0700 | [diff] [blame] | 69 | # Verify the filtered list is correct |
| 70 | self.assertIn(self.setup_domains[0], fetched_domains) |
| 71 | self.assertIn(self.setup_domains[1], fetched_domains) |
| 72 | for domain in fetched_domains: |
| 73 | self.assertEqual(True, domain['enabled']) |
| 74 | |
Jordan Pittier | 3b46d27 | 2017-04-12 16:17:28 +0200 | [diff] [blame] | 75 | @decorators.attr(type='smoke') |
Ken'ichi Ohmichi | eeabdd2 | 2017-01-27 17:46:00 -0800 | [diff] [blame] | 76 | @decorators.idempotent_id('f2f5b44a-82e8-4dad-8084-0661ea3b18cf') |
nayna-patel | 049e157 | 2013-06-19 09:22:35 +0000 | [diff] [blame] | 77 | def test_create_update_delete_domain(self): |
zhufl | b935820 | 2020-04-27 16:12:52 +0800 | [diff] [blame] | 78 | """Test creating, updating and deleting domain""" |
Castulo J. Martinez | 0a592b4 | 2016-05-13 09:15:23 -0700 | [diff] [blame] | 79 | # Create domain |
Ken'ichi Ohmichi | 9650847 | 2015-03-23 01:43:42 +0000 | [diff] [blame] | 80 | d_name = data_utils.rand_name('domain') |
| 81 | d_desc = data_utils.rand_name('domain-desc') |
Daniel Mellado | 91a26b6 | 2016-02-11 11:13:04 +0000 | [diff] [blame] | 82 | domain = self.domains_client.create_domain( |
ghanshyam | 8af17d6 | 2016-08-01 16:19:42 +0900 | [diff] [blame] | 83 | name=d_name, description=d_desc)['domain'] |
Castulo J. Martinez | 0a592b4 | 2016-05-13 09:15:23 -0700 | [diff] [blame] | 84 | self.addCleanup(test_utils.call_and_ignore_notfound_exc, |
zhufl | eed21d7 | 2017-11-07 13:03:31 +0800 | [diff] [blame] | 85 | self.delete_domain, domain['id']) |
nayna-patel | 049e157 | 2013-06-19 09:22:35 +0000 | [diff] [blame] | 86 | self.assertIn('description', domain) |
| 87 | self.assertIn('name', domain) |
| 88 | self.assertIn('enabled', domain) |
| 89 | self.assertIn('links', domain) |
| 90 | self.assertIsNotNone(domain['id']) |
| 91 | self.assertEqual(d_name, domain['name']) |
| 92 | self.assertEqual(d_desc, domain['description']) |
Andrea Frittoli | c097835 | 2015-02-06 15:57:40 +0000 | [diff] [blame] | 93 | self.assertEqual(True, domain['enabled']) |
Castulo J. Martinez | 0a592b4 | 2016-05-13 09:15:23 -0700 | [diff] [blame] | 94 | # Update domain |
Ken'ichi Ohmichi | 9650847 | 2015-03-23 01:43:42 +0000 | [diff] [blame] | 95 | new_desc = data_utils.rand_name('new-desc') |
| 96 | new_name = data_utils.rand_name('new-name') |
Daniel Mellado | 91a26b6 | 2016-02-11 11:13:04 +0000 | [diff] [blame] | 97 | updated_domain = self.domains_client.update_domain( |
Castulo J. Martinez | 0a592b4 | 2016-05-13 09:15:23 -0700 | [diff] [blame] | 98 | domain['id'], name=new_name, description=new_desc, |
| 99 | enabled=False)['domain'] |
nayna-patel | 049e157 | 2013-06-19 09:22:35 +0000 | [diff] [blame] | 100 | self.assertIn('id', updated_domain) |
| 101 | self.assertIn('description', updated_domain) |
| 102 | self.assertIn('name', updated_domain) |
| 103 | self.assertIn('enabled', updated_domain) |
| 104 | self.assertIn('links', updated_domain) |
| 105 | self.assertIsNotNone(updated_domain['id']) |
| 106 | self.assertEqual(new_name, updated_domain['name']) |
| 107 | self.assertEqual(new_desc, updated_domain['description']) |
Castulo J. Martinez | 0a592b4 | 2016-05-13 09:15:23 -0700 | [diff] [blame] | 108 | self.assertEqual(False, updated_domain['enabled']) |
| 109 | # Show domain |
Daniel Mellado | 91a26b6 | 2016-02-11 11:13:04 +0000 | [diff] [blame] | 110 | fetched_domain = self.domains_client.show_domain( |
| 111 | domain['id'])['domain'] |
nayna-patel | 049e157 | 2013-06-19 09:22:35 +0000 | [diff] [blame] | 112 | self.assertEqual(new_name, fetched_domain['name']) |
| 113 | self.assertEqual(new_desc, fetched_domain['description']) |
Castulo J. Martinez | 0a592b4 | 2016-05-13 09:15:23 -0700 | [diff] [blame] | 114 | self.assertEqual(False, fetched_domain['enabled']) |
| 115 | # Delete domain |
| 116 | self.domains_client.delete_domain(domain['id']) |
| 117 | body = self.domains_client.list_domains()['domains'] |
| 118 | domains_list = [d['id'] for d in body] |
| 119 | self.assertNotIn(domain['id'], domains_list) |
ravikumar-venkatesan | bf2c494 | 2015-02-20 07:08:18 +0000 | [diff] [blame] | 120 | |
Samuel de Medeiros Queiroz | 019088f | 2017-10-04 16:02:17 -0300 | [diff] [blame] | 121 | @decorators.idempotent_id('d8d318b7-d1b3-4c37-94c5-3c5ba0b121ea') |
Samuel de Medeiros Queiroz | 019088f | 2017-10-04 16:02:17 -0300 | [diff] [blame] | 122 | def test_domain_delete_cascades_content(self): |
zhufl | b935820 | 2020-04-27 16:12:52 +0800 | [diff] [blame] | 123 | """Test deleting domain will delete its associated contents""" |
Samuel de Medeiros Queiroz | 019088f | 2017-10-04 16:02:17 -0300 | [diff] [blame] | 124 | # Create a domain with a user and a group in it |
| 125 | domain = self.setup_test_domain() |
| 126 | user = self.create_test_user(domain_id=domain['id']) |
Felipe Monteiro | d441507 | 2018-07-03 14:09:02 -0400 | [diff] [blame] | 127 | group = self.setup_test_group(domain_id=domain['id']) |
Samuel de Medeiros Queiroz | 019088f | 2017-10-04 16:02:17 -0300 | [diff] [blame] | 128 | # Delete the domain |
| 129 | self.delete_domain(domain['id']) |
| 130 | # Check the domain, its users and groups are gone |
| 131 | self.assertRaises(exceptions.NotFound, |
| 132 | self.domains_client.show_domain, domain['id']) |
| 133 | self.assertRaises(exceptions.NotFound, |
| 134 | self.users_client.show_user, user['id']) |
| 135 | self.assertRaises(exceptions.NotFound, |
| 136 | self.groups_client.show_group, group['id']) |
| 137 | |
Ken'ichi Ohmichi | eeabdd2 | 2017-01-27 17:46:00 -0800 | [diff] [blame] | 138 | @decorators.idempotent_id('036df86e-bb5d-42c0-a7c2-66b9db3a6046') |
ravikumar-venkatesan | bf2c494 | 2015-02-20 07:08:18 +0000 | [diff] [blame] | 139 | def test_create_domain_with_disabled_status(self): |
zhufl | b935820 | 2020-04-27 16:12:52 +0800 | [diff] [blame] | 140 | """Test creating domain with disabled status""" |
ravikumar-venkatesan | bf2c494 | 2015-02-20 07:08:18 +0000 | [diff] [blame] | 141 | # Create domain with enabled status as false |
Ken'ichi Ohmichi | 9650847 | 2015-03-23 01:43:42 +0000 | [diff] [blame] | 142 | d_name = data_utils.rand_name('domain') |
| 143 | d_desc = data_utils.rand_name('domain-desc') |
Daniel Mellado | 91a26b6 | 2016-02-11 11:13:04 +0000 | [diff] [blame] | 144 | domain = self.domains_client.create_domain( |
ghanshyam | 8af17d6 | 2016-08-01 16:19:42 +0900 | [diff] [blame] | 145 | name=d_name, description=d_desc, enabled=False)['domain'] |
Daniel Mellado | 91a26b6 | 2016-02-11 11:13:04 +0000 | [diff] [blame] | 146 | self.addCleanup(self.domains_client.delete_domain, domain['id']) |
ravikumar-venkatesan | bf2c494 | 2015-02-20 07:08:18 +0000 | [diff] [blame] | 147 | self.assertEqual(d_name, domain['name']) |
| 148 | self.assertFalse(domain['enabled']) |
| 149 | self.assertEqual(d_desc, domain['description']) |
ravikumar-venkatesan | ec4d497 | 2015-02-18 11:31:38 +0000 | [diff] [blame] | 150 | |
Ken'ichi Ohmichi | eeabdd2 | 2017-01-27 17:46:00 -0800 | [diff] [blame] | 151 | @decorators.idempotent_id('2abf8764-309a-4fa9-bc58-201b799817ad') |
ravikumar-venkatesan | ec4d497 | 2015-02-18 11:31:38 +0000 | [diff] [blame] | 152 | def test_create_domain_without_description(self): |
zhufl | b935820 | 2020-04-27 16:12:52 +0800 | [diff] [blame] | 153 | """Test creating domain without description""" |
ravikumar-venkatesan | ec4d497 | 2015-02-18 11:31:38 +0000 | [diff] [blame] | 154 | # Create domain only with name |
Ken'ichi Ohmichi | 80369a9 | 2015-04-06 23:41:14 +0000 | [diff] [blame] | 155 | d_name = data_utils.rand_name('domain') |
ghanshyam | 8af17d6 | 2016-08-01 16:19:42 +0900 | [diff] [blame] | 156 | domain = self.domains_client.create_domain(name=d_name)['domain'] |
zhufl | eed21d7 | 2017-11-07 13:03:31 +0800 | [diff] [blame] | 157 | self.addCleanup(self.delete_domain, domain['id']) |
ravikumar-venkatesan | ec4d497 | 2015-02-18 11:31:38 +0000 | [diff] [blame] | 158 | expected_data = {'name': d_name, 'enabled': True} |
Jordan Pittier | 9b198e6 | 2017-04-23 12:47:31 +0200 | [diff] [blame] | 159 | self.assertEqual('', domain['description']) |
Takashi Kajinami | bbe4f8c | 2021-11-30 13:29:18 +0900 | [diff] [blame] | 160 | self.assertLessEqual(expected_data.items(), domain.items()) |