1 # Copyright (c) 2017 Cable Television Laboratories, Inc. ("CableLabs")
2 # and others. All rights reserved.
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at:
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
18 from snaps.openstack.create_project import (
19 OpenStackProject, ProjectSettings, ProjectSettingsError)
20 from snaps.openstack.create_security_group import OpenStackSecurityGroup
21 from snaps.openstack.create_security_group import SecurityGroupSettings
22 from snaps.openstack.create_user import OpenStackUser
23 from snaps.openstack.create_user import UserSettings
24 from snaps.openstack.tests.os_source_file_test import OSComponentTestCase
25 from snaps.openstack.utils import keystone_utils
27 __author__ = 'spisarski'
30 class ProjectSettingsUnitTests(unittest.TestCase):
32 Tests the construction of the ProjectSettings class
35 def test_no_params(self):
36 with self.assertRaises(ProjectSettingsError):
39 def test_empty_config(self):
40 with self.assertRaises(ProjectSettingsError):
41 ProjectSettings(**dict())
43 def test_name_only(self):
44 settings = ProjectSettings(name='foo')
45 self.assertEqual('foo', settings.name)
46 self.assertEqual('default', settings.domain)
47 self.assertIsNone(settings.description)
48 self.assertTrue(settings.enabled)
50 def test_config_with_name_only(self):
51 settings = ProjectSettings(**{'name': 'foo'})
52 self.assertEqual('foo', settings.name)
53 self.assertEqual('default', settings.domain)
54 self.assertIsNone(settings.description)
55 self.assertTrue(settings.enabled)
58 settings = ProjectSettings(name='foo', domain='bar',
59 description='foobar', enabled=False)
60 self.assertEqual('foo', settings.name)
61 self.assertEqual('bar', settings.domain)
62 self.assertEqual('foobar', settings.description)
63 self.assertFalse(settings.enabled)
65 def test_config_all(self):
66 settings = ProjectSettings(
67 **{'name': 'foo', 'domain': 'bar', 'description': 'foobar',
69 self.assertEqual('foo', settings.name)
70 self.assertEqual('bar', settings.domain)
71 self.assertEqual('foobar', settings.description)
72 self.assertFalse(settings.enabled)
75 class CreateProjectSuccessTests(OSComponentTestCase):
77 Test for the CreateImage class defined in create_image.py
82 Instantiates the CreateImage object that is responsible for downloading
83 and creating an OS image file within OpenStack
85 guid = str(uuid.uuid4())[:-19]
86 guid = self.__class__.__name__ + '-' + guid
87 self.project_settings = ProjectSettings(name=guid + '-name')
89 self.keystone = keystone_utils.keystone_client(self.os_creds)
91 # Initialize for cleanup
92 self.project_creator = None
96 Cleans the image and downloaded image file
98 if self.project_creator:
99 self.project_creator.clean()
101 def test_create_project(self):
103 Tests the creation of an OpenStack project.
105 self.project_creator = OpenStackProject(self.os_creds,
106 self.project_settings)
107 created_project = self.project_creator.create()
108 self.assertIsNotNone(created_project)
110 retrieved_project = keystone_utils.get_project(
111 keystone=self.keystone, project_name=self.project_settings.name)
112 self.assertIsNotNone(retrieved_project)
113 self.assertEqual(created_project, retrieved_project)
115 def test_create_project_2x(self):
117 Tests the creation of an OpenStack project twice to ensure it only
120 self.project_creator = OpenStackProject(self.os_creds,
121 self.project_settings)
122 created_project = self.project_creator.create()
123 self.assertIsNotNone(created_project)
125 retrieved_project = keystone_utils.get_project(
126 keystone=self.keystone, project_name=self.project_settings.name)
127 self.assertIsNotNone(retrieved_project)
128 self.assertEqual(created_project, retrieved_project)
130 project2 = OpenStackProject(self.os_creds,
131 self.project_settings).create()
132 self.assertEqual(retrieved_project, project2)
134 def test_create_delete_project(self):
136 Tests the creation of an OpenStack project, it's deletion, then cleanup
139 self.project_creator = OpenStackProject(self.os_creds,
140 self.project_settings)
141 created_project = self.project_creator.create()
142 self.assertIsNotNone(created_project)
144 keystone_utils.delete_project(self.keystone, created_project)
146 self.project_creator.clean()
148 self.assertIsNone(self.project_creator.get_project())
150 # TODO - Expand tests
153 class CreateProjectUserTests(OSComponentTestCase):
155 Test for the CreateImage class defined in create_image.py
160 Instantiates the CreateImage object that is responsible for downloading
161 and creating an OS image file within OpenStack
163 guid = str(uuid.uuid4())[:-19]
164 self.guid = self.__class__.__name__ + '-' + guid
165 self.project_settings = ProjectSettings(name=self.guid + '-name')
167 self.keystone = keystone_utils.keystone_client(self.os_creds)
169 # Initialize for cleanup
170 self.project_creator = None
171 self.user_creators = list()
173 self.sec_grp_creators = list()
177 Cleans the image and downloaded image file
179 for sec_grp_creator in self.sec_grp_creators:
180 sec_grp_creator.clean()
182 for user_creator in self.user_creators:
185 if self.project_creator:
186 self.project_creator.clean()
188 def test_create_project_sec_grp_one_user(self):
190 Tests the creation of an OpenStack object to a project with a new users
191 and to create a security group
193 self.project_creator = OpenStackProject(self.os_creds,
194 self.project_settings)
195 created_project = self.project_creator.create()
196 self.assertIsNotNone(created_project)
198 user_creator = OpenStackUser(
199 self.os_creds, UserSettings(
200 name=self.guid + '-user',
201 password=self.guid, roles={'admin': 'admin'}))
202 self.project_creator.assoc_user(user_creator.create())
203 self.user_creators.append(user_creator)
205 sec_grp_os_creds = user_creator.get_os_creds(
206 self.project_creator.get_project().name)
207 sec_grp_creator = OpenStackSecurityGroup(
208 sec_grp_os_creds, SecurityGroupSettings(name=self.guid + '-name',
209 description='hello group'))
210 sec_grp = sec_grp_creator.create()
211 self.assertIsNotNone(sec_grp)
212 self.sec_grp_creators.append(sec_grp_creator)
214 self.assertEqual(self.project_creator.get_project().id,
217 def test_create_project_sec_grp_two_users(self):
219 Tests the creation of an OpenStack object to a project with two new
220 users and use each user to create a security group
222 self.project_creator = OpenStackProject(self.os_creds,
223 self.project_settings)
224 created_project = self.project_creator.create()
225 self.assertIsNotNone(created_project)
227 user_creator_1 = OpenStackUser(
228 self.os_creds, UserSettings(
229 name=self.guid + '-user1', password=self.guid,
230 roles={'admin': 'admin'}))
231 self.project_creator.assoc_user(user_creator_1.create())
232 self.user_creators.append(user_creator_1)
234 user_creator_2 = OpenStackUser(
235 self.os_creds, UserSettings(
236 name=self.guid + '-user2', password=self.guid,
237 roles={'admin': 'admin'}))
238 self.project_creator.assoc_user(user_creator_2.create())
239 self.user_creators.append(user_creator_2)
242 for user_creator in self.user_creators:
244 sec_grp_os_creds = user_creator.get_os_creds(
245 self.project_creator.get_project().name)
247 sec_grp_creator = OpenStackSecurityGroup(
249 SecurityGroupSettings(name=self.guid + '-name',
250 description='hello group'))
251 sec_grp = sec_grp_creator.create()
252 self.assertIsNotNone(sec_grp)
253 self.sec_grp_creators.append(sec_grp_creator)
255 self.assertEqual(self.project_creator.get_project().id,