1# Licensed under the Apache License, Version 2.0 (the "License"); 2# you may not use this file except in compliance with the License. 3# You may obtain a copy of the License at 4# 5# http://www.apache.org/licenses/LICENSE-2.0 6# 7# Unless required by applicable law or agreed to in writing, software 8# distributed under the License is distributed on an "AS IS" BASIS, 9# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10# See the License for the specific language governing permissions and 11# limitations under the License. 12 13""" 14test_groups 15---------------------------------- 16 17Functional tests for `shade` keystone group resource. 18""" 19 20import openstack.cloud 21from openstack.tests.functional import base 22 23 24class TestGroup(base.BaseFunctionalTest): 25 26 def setUp(self): 27 super(TestGroup, self).setUp() 28 i_ver = self.operator_cloud.config.get_api_version('identity') 29 if i_ver in ('2', '2.0'): 30 self.skipTest('Identity service does not support groups') 31 self.group_prefix = self.getUniqueString('group') 32 self.addCleanup(self._cleanup_groups) 33 34 def _cleanup_groups(self): 35 exception_list = list() 36 for group in self.operator_cloud.list_groups(): 37 if group['name'].startswith(self.group_prefix): 38 try: 39 self.operator_cloud.delete_group(group['id']) 40 except Exception as e: 41 exception_list.append(str(e)) 42 continue 43 44 if exception_list: 45 # Raise an error: we must make users aware that something went 46 # wrong 47 raise openstack.cloud.OpenStackCloudException( 48 '\n'.join(exception_list)) 49 50 def test_create_group(self): 51 group_name = self.group_prefix + '_create' 52 group = self.operator_cloud.create_group(group_name, 'test group') 53 54 for key in ('id', 'name', 'description', 'domain_id'): 55 self.assertIn(key, group) 56 self.assertEqual(group_name, group['name']) 57 self.assertEqual('test group', group['description']) 58 59 def test_delete_group(self): 60 group_name = self.group_prefix + '_delete' 61 62 group = self.operator_cloud.create_group(group_name, 'test group') 63 self.assertIsNotNone(group) 64 65 self.assertTrue(self.operator_cloud.delete_group(group_name)) 66 67 results = self.operator_cloud.search_groups( 68 filters=dict(name=group_name)) 69 self.assertEqual(0, len(results)) 70 71 def test_delete_group_not_exists(self): 72 self.assertFalse(self.operator_cloud.delete_group('xInvalidGroupx')) 73 74 def test_search_groups(self): 75 group_name = self.group_prefix + '_search' 76 77 # Shouldn't find any group with this name yet 78 results = self.operator_cloud.search_groups( 79 filters=dict(name=group_name)) 80 self.assertEqual(0, len(results)) 81 82 # Now create a new group 83 group = self.operator_cloud.create_group(group_name, 'test group') 84 self.assertEqual(group_name, group['name']) 85 86 # Now we should find only the new group 87 results = self.operator_cloud.search_groups( 88 filters=dict(name=group_name)) 89 self.assertEqual(1, len(results)) 90 self.assertEqual(group_name, results[0]['name']) 91 92 def test_update_group(self): 93 group_name = self.group_prefix + '_update' 94 group_desc = 'test group' 95 96 group = self.operator_cloud.create_group(group_name, group_desc) 97 self.assertEqual(group_name, group['name']) 98 self.assertEqual(group_desc, group['description']) 99 100 updated_group_name = group_name + '_xyz' 101 updated_group_desc = group_desc + ' updated' 102 updated_group = self.operator_cloud.update_group( 103 group_name, 104 name=updated_group_name, 105 description=updated_group_desc) 106 self.assertEqual(updated_group_name, updated_group['name']) 107 self.assertEqual(updated_group_desc, updated_group['description']) 108