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