Refactoring of KeypairSettings to extend KeypairConfig
[snaps.git] / snaps / test_suite_builder.py
1 # Copyright (c) 2017 Cable Television Laboratories, Inc. ("CableLabs")
2 #                    and others.  All rights reserved.
3 #
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:
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,
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.
15
16 import logging
17 import unittest
18
19 from snaps.config.tests.keypair_tests import KeypairConfigUnitTests
20 from snaps.config.tests.flavor_tests import FlavorConfigUnitTests
21 import snaps.config.tests.image_tests as image_tests
22 import snaps.openstack.tests.create_image_tests as creator_tests
23 from snaps.domain.test.flavor_tests import FlavorDomainObjectTests
24 from snaps.domain.test.image_tests import ImageDomainObjectTests
25 from snaps.domain.test.keypair_tests import KeypairDomainObjectTests
26 from snaps.domain.test.network_tests import (
27     SecurityGroupDomainObjectTests, SecurityGroupRuleDomainObjectTests,
28     PortDomainObjectTests, RouterDomainObjectTests,
29     InterfaceRouterDomainObjectTests, NetworkObjectTests, SubnetObjectTests)
30 from snaps.domain.test.project_tests import (
31     ProjectDomainObjectTests, DomainDomainObjectTests,
32     ComputeQuotasDomainObjectTests, NetworkQuotasDomainObjectTests)
33 from snaps.domain.test.role_tests import RoleDomainObjectTests
34 from snaps.domain.test.stack_tests import (
35     StackDomainObjectTests, ResourceDomainObjectTests)
36 from snaps.domain.test.user_tests import UserDomainObjectTests
37 from snaps.domain.test.vm_inst_tests import (
38     VmInstDomainObjectTests, FloatingIpDomainObjectTests)
39 from snaps.domain.test.volume_tests import (
40     QoSSpecDomainObjectTests, VolumeTypeDomainObjectTests,
41     VolumeTypeEncryptionObjectTests, VolumeDomainObjectTests)
42 from snaps.openstack.tests.conf.os_credentials_tests import (
43     ProxySettingsUnitTests, OSCredsUnitTests)
44 from snaps.openstack.tests.create_flavor_tests import (
45     CreateFlavorTests, FlavorSettingsUnitTests)
46 from snaps.openstack.tests.create_image_tests import (
47     CreateImageSuccessTests, CreateImageNegativeTests,
48     CreateMultiPartImageTests)
49 from snaps.openstack.tests.create_instance_tests import (
50     CreateInstanceSingleNetworkTests, CreateInstancePubPrivNetTests,
51     CreateInstanceOnComputeHost, CreateInstanceSimpleTests,
52     FloatingIpSettingsUnitTests, InstanceSecurityGroupTests,
53     VmInstanceSettingsUnitTests, CreateInstancePortManipulationTests,
54     SimpleHealthCheck, CreateInstanceFromThreePartImage,
55     CreateInstanceMockOfflineTests, CreateInstanceTwoNetTests,
56     CreateInstanceVolumeTests, CreateInstanceIPv6NetworkTests)
57 from snaps.openstack.tests.create_keypairs_tests import (
58     CreateKeypairsTests, KeypairSettingsUnitTests, CreateKeypairsCleanupTests)
59 from snaps.openstack.tests.create_network_tests import (
60     CreateNetworkSuccessTests, NetworkSettingsUnitTests, PortSettingsUnitTests,
61     SubnetSettingsUnitTests, CreateNetworkTypeTests, CreateNetworkIPv6Tests)
62 from snaps.openstack.tests.create_project_tests import (
63     CreateProjectSuccessTests, ProjectSettingsUnitTests,
64     CreateProjectUserTests)
65 from snaps.openstack.tests.create_qos_tests import (
66     QoSSettingsUnitTests, CreateQoSTests)
67 from snaps.openstack.tests.create_router_tests import (
68     CreateRouterSuccessTests, CreateRouterNegativeTests,
69     RouterSettingsUnitTests)
70 from snaps.openstack.tests.create_security_group_tests import (
71     CreateSecurityGroupTests, SecurityGroupRuleSettingsUnitTests,
72     SecurityGroupSettingsUnitTests)
73 from snaps.openstack.tests.create_stack_tests import (
74     StackSettingsUnitTests, CreateStackSuccessTests, CreateStackNegativeTests,
75     CreateStackFlavorTests, CreateStackFloatingIpTests,
76     CreateStackKeypairTests, CreateStackVolumeTests,
77     CreateStackSecurityGroupTests)
78 from snaps.openstack.tests.create_user_tests import (
79     UserSettingsUnitTests, CreateUserSuccessTests)
80 from snaps.openstack.tests.create_volume_tests import (
81     VolumeSettingsUnitTests, CreateSimpleVolumeSuccessTests,
82     CreateVolumeWithTypeTests, CreateVolumeWithImageTests,
83     CreateSimpleVolumeFailureTests)
84 from snaps.openstack.tests.create_volume_type_tests import (
85     VolumeTypeSettingsUnitTests, CreateSimpleVolumeTypeSuccessTests,
86     CreateVolumeTypeComplexTests)
87 from snaps.openstack.tests.os_source_file_test import (
88     OSComponentTestCase, OSIntegrationTestCase)
89 from snaps.openstack.utils.tests.cinder_utils_tests import (
90     CinderSmokeTests, CinderUtilsQoSTests, CinderUtilsSimpleVolumeTypeTests,
91     CinderUtilsAddEncryptionTests, CinderUtilsVolumeTypeCompleteTests,
92     CinderUtilsVolumeTests)
93 from snaps.openstack.utils.tests.glance_utils_tests import (
94     GlanceSmokeTests, GlanceUtilsTests)
95 from snaps.openstack.utils.tests.heat_utils_tests import (
96     HeatSmokeTests, HeatUtilsCreateSimpleStackTests,
97     HeatUtilsCreateComplexStackTests, HeatUtilsFlavorTests,
98     HeatUtilsKeypairTests, HeatUtilsVolumeTests, HeatUtilsSecurityGroupTests)
99 from snaps.openstack.utils.tests.keystone_utils_tests import (
100     KeystoneSmokeTests, KeystoneUtilsTests)
101 from snaps.openstack.utils.tests.neutron_utils_tests import (
102     NeutronSmokeTests, NeutronUtilsNetworkTests, NeutronUtilsSubnetTests,
103     NeutronUtilsRouterTests, NeutronUtilsSecurityGroupTests,
104     NeutronUtilsFloatingIpTests, NeutronUtilsIPv6Tests)
105 from snaps.openstack.utils.tests.nova_utils_tests import (
106     NovaSmokeTests, NovaUtilsKeypairTests, NovaUtilsFlavorTests,
107     NovaUtilsInstanceTests, NovaUtilsInstanceVolumeTests)
108 from snaps.openstack.utils.tests.settings_utils_tests import (
109     SettingsUtilsUnitTests)
110 from snaps.openstack.utils.tests.magnum_utils_tests import (
111     MagnumSmokeTests)
112 from snaps.provisioning.tests.ansible_utils_tests import (
113     AnsibleProvisioningTests)
114 from snaps.tests.file_utils_tests import FileUtilsTests
115
116 __author__ = 'spisarski'
117
118
119 def add_unit_tests(suite):
120     """
121     Adds tests that do not require external resources
122     :param suite: the unittest.TestSuite object to which to add the tests
123     :return: None as the tests will be adding to the 'suite' parameter object
124     """
125     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(FileUtilsTests))
126     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
127         SecurityGroupRuleSettingsUnitTests))
128     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
129         ProxySettingsUnitTests))
130     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
131         OSCredsUnitTests))
132     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
133         SecurityGroupSettingsUnitTests))
134     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
135         SecurityGroupDomainObjectTests))
136     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
137         SecurityGroupRuleDomainObjectTests))
138     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
139         image_tests.ImageConfigUnitTests))
140     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
141         creator_tests.ImageSettingsUnitTests))
142     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
143         ImageDomainObjectTests))
144     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
145         FlavorConfigUnitTests))
146     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
147         FlavorSettingsUnitTests))
148     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
149         FlavorDomainObjectTests))
150     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
151         KeypairConfigUnitTests))
152     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
153         KeypairSettingsUnitTests))
154     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
155         KeypairDomainObjectTests))
156     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
157         UserSettingsUnitTests))
158     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
159         UserDomainObjectTests))
160     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
161         ProjectSettingsUnitTests))
162     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
163         ProjectDomainObjectTests))
164     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
165         DomainDomainObjectTests))
166     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
167         ComputeQuotasDomainObjectTests))
168     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
169         NetworkQuotasDomainObjectTests))
170     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
171         RoleDomainObjectTests))
172     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
173         NetworkSettingsUnitTests))
174     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
175         NetworkObjectTests))
176     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
177         SubnetSettingsUnitTests))
178     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
179         SubnetObjectTests))
180     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
181         PortSettingsUnitTests))
182     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
183         PortDomainObjectTests))
184     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
185         RouterSettingsUnitTests))
186     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
187         RouterDomainObjectTests))
188     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
189         InterfaceRouterDomainObjectTests))
190     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
191         FloatingIpSettingsUnitTests))
192     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
193         VmInstanceSettingsUnitTests))
194     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
195         StackDomainObjectTests))
196     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
197         ResourceDomainObjectTests))
198     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
199         StackSettingsUnitTests))
200     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
201         VolumeTypeDomainObjectTests))
202     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
203         VolumeTypeEncryptionObjectTests))
204     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
205         VolumeDomainObjectTests))
206     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
207         QoSSpecDomainObjectTests))
208     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
209         VmInstDomainObjectTests))
210     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
211         FloatingIpDomainObjectTests))
212     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
213         QoSSettingsUnitTests))
214     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
215         VolumeTypeSettingsUnitTests))
216     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
217         VolumeSettingsUnitTests))
218     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
219         SettingsUtilsUnitTests))
220
221
222 def add_openstack_client_tests(suite, os_creds, ext_net_name,
223                                use_keystone=True, log_level=logging.INFO):
224     """
225     Adds tests written to exercise OpenStack client retrieval
226     :param suite: the unittest.TestSuite object to which to add the tests
227     :param os_creds: and instance of OSCreds that holds the credentials
228                      required by OpenStack
229     :param ext_net_name: the name of an external network on the cloud under
230                          test
231     :param use_keystone: when True, tests requiring direct access to Keystone
232                          are added as these need to be running on a host that
233                          has access to the cloud's private network
234     :param log_level: the logging level
235     :return: None as the tests will be adding to the 'suite' parameter object
236     """
237     # Basic connection tests
238     suite.addTest(
239         OSComponentTestCase.parameterize(
240             GlanceSmokeTests, os_creds=os_creds, ext_net_name=ext_net_name,
241             log_level=log_level))
242
243     if use_keystone:
244         suite.addTest(
245             OSComponentTestCase.parameterize(
246                 KeystoneSmokeTests, os_creds=os_creds,
247                 ext_net_name=ext_net_name, log_level=log_level))
248
249     suite.addTest(
250         OSComponentTestCase.parameterize(
251             NeutronSmokeTests, os_creds=os_creds, ext_net_name=ext_net_name,
252             log_level=log_level))
253     suite.addTest(
254         OSComponentTestCase.parameterize(
255             NovaSmokeTests, os_creds=os_creds, ext_net_name=ext_net_name,
256             log_level=log_level))
257     suite.addTest(
258         OSComponentTestCase.parameterize(
259             HeatSmokeTests, os_creds=os_creds, ext_net_name=ext_net_name,
260             log_level=log_level))
261     suite.addTest(
262         OSComponentTestCase.parameterize(
263             CinderSmokeTests, os_creds=os_creds, ext_net_name=ext_net_name,
264             log_level=log_level))
265
266
267 def add_openstack_api_tests(suite, os_creds, ext_net_name, use_keystone=True,
268                             image_metadata=None, log_level=logging.INFO):
269     """
270     Adds tests written to exercise all existing OpenStack APIs
271     :param suite: the unittest.TestSuite object to which to add the tests
272     :param os_creds: Instance of OSCreds that holds the credentials
273                      required by OpenStack
274     :param ext_net_name: the name of an external network on the cloud under
275                          test
276     :param use_keystone: when True, tests requiring direct access to Keystone
277                          are added as these need to be running on a host that
278                          has access to the cloud's private network
279     :param image_metadata: dict() object containing metadata for creating an
280                            image with custom config
281                            (see YAML files in examples/image-metadata)
282     :param log_level: the logging level
283     :return: None as the tests will be adding to the 'suite' parameter object
284     """
285     # Tests the OpenStack API calls
286     if use_keystone:
287         suite.addTest(OSComponentTestCase.parameterize(
288             KeystoneUtilsTests, os_creds=os_creds, ext_net_name=ext_net_name,
289             log_level=log_level))
290         suite.addTest(OSComponentTestCase.parameterize(
291             CreateUserSuccessTests, os_creds=os_creds,
292             ext_net_name=ext_net_name, log_level=log_level))
293         suite.addTest(OSComponentTestCase.parameterize(
294             CreateProjectSuccessTests, os_creds=os_creds,
295             ext_net_name=ext_net_name, log_level=log_level))
296         suite.addTest(OSComponentTestCase.parameterize(
297             CreateProjectUserTests, os_creds=os_creds,
298             ext_net_name=ext_net_name, log_level=log_level))
299
300     suite.addTest(OSComponentTestCase.parameterize(
301         GlanceUtilsTests, os_creds=os_creds, ext_net_name=ext_net_name,
302         image_metadata=image_metadata,
303         log_level=log_level))
304     suite.addTest(OSComponentTestCase.parameterize(
305         NeutronUtilsNetworkTests, os_creds=os_creds, ext_net_name=ext_net_name,
306         log_level=log_level))
307     suite.addTest(OSComponentTestCase.parameterize(
308         NeutronUtilsSubnetTests, os_creds=os_creds, ext_net_name=ext_net_name,
309         log_level=log_level))
310     suite.addTest(OSComponentTestCase.parameterize(
311         NeutronUtilsIPv6Tests, os_creds=os_creds, ext_net_name=ext_net_name,
312         log_level=log_level))
313     suite.addTest(OSComponentTestCase.parameterize(
314         NeutronUtilsRouterTests, os_creds=os_creds, ext_net_name=ext_net_name,
315         log_level=log_level))
316     suite.addTest(OSComponentTestCase.parameterize(
317         NeutronUtilsSecurityGroupTests, os_creds=os_creds,
318         ext_net_name=ext_net_name, log_level=log_level))
319     suite.addTest(OSComponentTestCase.parameterize(
320         NeutronUtilsFloatingIpTests, os_creds=os_creds,
321         ext_net_name=ext_net_name, log_level=log_level))
322     suite.addTest(OSComponentTestCase.parameterize(
323         NovaUtilsKeypairTests, os_creds=os_creds, ext_net_name=ext_net_name,
324         log_level=log_level))
325     suite.addTest(OSComponentTestCase.parameterize(
326         NovaUtilsFlavorTests, os_creds=os_creds, ext_net_name=ext_net_name,
327         log_level=log_level))
328     suite.addTest(OSComponentTestCase.parameterize(
329         NovaUtilsInstanceTests, os_creds=os_creds, ext_net_name=ext_net_name,
330         log_level=log_level, image_metadata=image_metadata))
331     suite.addTest(OSComponentTestCase.parameterize(
332         NovaUtilsInstanceVolumeTests, os_creds=os_creds,
333         ext_net_name=ext_net_name, log_level=log_level,
334         image_metadata=image_metadata))
335     suite.addTest(OSComponentTestCase.parameterize(
336         CreateFlavorTests, os_creds=os_creds, ext_net_name=ext_net_name,
337         log_level=log_level))
338     suite.addTest(OSComponentTestCase.parameterize(
339         HeatUtilsCreateSimpleStackTests, os_creds=os_creds,
340         ext_net_name=ext_net_name, log_level=log_level,
341         image_metadata=image_metadata))
342     suite.addTest(OSComponentTestCase.parameterize(
343         HeatUtilsCreateComplexStackTests, os_creds=os_creds,
344         ext_net_name=ext_net_name, log_level=log_level,
345         image_metadata=image_metadata))
346     suite.addTest(OSComponentTestCase.parameterize(
347         HeatUtilsFlavorTests, os_creds=os_creds,
348         ext_net_name=ext_net_name, log_level=log_level,
349         image_metadata=image_metadata))
350     suite.addTest(OSComponentTestCase.parameterize(
351         HeatUtilsKeypairTests, os_creds=os_creds,
352         ext_net_name=ext_net_name, log_level=log_level,
353         image_metadata=image_metadata))
354     suite.addTest(OSComponentTestCase.parameterize(
355         HeatUtilsSecurityGroupTests, os_creds=os_creds,
356         ext_net_name=ext_net_name, log_level=log_level,
357         image_metadata=image_metadata))
358     suite.addTest(OSComponentTestCase.parameterize(
359         CinderUtilsQoSTests, os_creds=os_creds,
360         ext_net_name=ext_net_name, log_level=log_level,
361         image_metadata=image_metadata))
362     suite.addTest(OSComponentTestCase.parameterize(
363         CinderUtilsVolumeTests, os_creds=os_creds,
364         ext_net_name=ext_net_name, log_level=log_level,
365         image_metadata=image_metadata))
366     suite.addTest(OSComponentTestCase.parameterize(
367         CinderUtilsSimpleVolumeTypeTests, os_creds=os_creds,
368         ext_net_name=ext_net_name, log_level=log_level,
369         image_metadata=image_metadata))
370     suite.addTest(OSComponentTestCase.parameterize(
371         CinderUtilsAddEncryptionTests, os_creds=os_creds,
372         ext_net_name=ext_net_name, log_level=log_level,
373         image_metadata=image_metadata))
374     suite.addTest(OSComponentTestCase.parameterize(
375         CinderUtilsVolumeTypeCompleteTests, os_creds=os_creds,
376         ext_net_name=ext_net_name, log_level=log_level,
377         image_metadata=image_metadata))
378
379
380 def add_openstack_integration_tests(suite, os_creds, ext_net_name,
381                                     use_keystone=True, flavor_metadata=None,
382                                     image_metadata=None, use_floating_ips=True,
383                                     log_level=logging.INFO):
384     """
385     Adds tests written to exercise all long-running OpenStack integration tests
386     meaning they will be creating VM instances and potentially performing some
387     SSH functions through floatingIPs
388     :param suite: the unittest.TestSuite object to which to add the tests
389     :param os_creds: and instance of OSCreds that holds the credentials
390                      required by OpenStack
391     :param ext_net_name: the name of an external network on the cloud under
392                          test
393     :param use_keystone: when True, tests requiring direct access to Keystone
394                          are added as these need to be running on a host that
395                          has access to the cloud's private network
396     :param image_metadata: dict() object containing metadata for creating an
397                            image with custom config
398                            (see YAML files in examples/image-metadata)
399     :param flavor_metadata: dict() object containing the metadata required by
400                             your flavor based on your configuration:
401                             (i.e. {'hw:mem_page_size': 'large'})
402     :param use_floating_ips: when true, all tests requiring Floating IPs will
403                              be added to the suite
404     :param log_level: the logging level
405     :return: None as the tests will be adding to the 'suite' parameter object
406     """
407     # Tests the OpenStack API calls via a creator. If use_keystone, objects
408     # will be created with a custom user and project
409
410     # Creator Object tests
411     suite.addTest(OSIntegrationTestCase.parameterize(
412         CreateSecurityGroupTests, os_creds=os_creds, ext_net_name=ext_net_name,
413         use_keystone=use_keystone,
414         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
415         log_level=log_level))
416     suite.addTest(OSIntegrationTestCase.parameterize(
417         CreateImageSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
418         use_keystone=use_keystone,
419         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
420         log_level=log_level))
421     suite.addTest(OSIntegrationTestCase.parameterize(
422         CreateImageNegativeTests, os_creds=os_creds, ext_net_name=ext_net_name,
423         use_keystone=use_keystone,
424         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
425         log_level=log_level))
426     suite.addTest(OSIntegrationTestCase.parameterize(
427         CreateMultiPartImageTests, os_creds=os_creds,
428         ext_net_name=ext_net_name, use_keystone=use_keystone,
429         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
430         log_level=log_level))
431     suite.addTest(OSIntegrationTestCase.parameterize(
432         CreateKeypairsTests, os_creds=os_creds, ext_net_name=ext_net_name,
433         use_keystone=use_keystone,
434         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
435         log_level=log_level))
436     suite.addTest(OSIntegrationTestCase.parameterize(
437         CreateKeypairsCleanupTests, os_creds=os_creds,
438         ext_net_name=ext_net_name,
439         use_keystone=use_keystone,
440         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
441         log_level=log_level))
442     suite.addTest(OSIntegrationTestCase.parameterize(
443         CreateNetworkSuccessTests, os_creds=os_creds,
444         ext_net_name=ext_net_name, use_keystone=use_keystone,
445         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
446         log_level=log_level))
447     suite.addTest(OSIntegrationTestCase.parameterize(
448         CreateNetworkIPv6Tests, os_creds=os_creds,
449         ext_net_name=ext_net_name, use_keystone=use_keystone,
450         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
451         log_level=log_level))
452     suite.addTest(OSIntegrationTestCase.parameterize(
453         CreateRouterSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
454         use_keystone=use_keystone,
455         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
456         log_level=log_level))
457     suite.addTest(OSIntegrationTestCase.parameterize(
458         CreateRouterNegativeTests, os_creds=os_creds,
459         ext_net_name=ext_net_name, use_keystone=use_keystone,
460         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
461         log_level=log_level))
462     suite.addTest(OSIntegrationTestCase.parameterize(
463         CreateQoSTests, os_creds=os_creds,
464         ext_net_name=ext_net_name, use_keystone=use_keystone,
465         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
466         log_level=log_level))
467     suite.addTest(OSIntegrationTestCase.parameterize(
468         CreateSimpleVolumeTypeSuccessTests, os_creds=os_creds,
469         ext_net_name=ext_net_name, use_keystone=use_keystone,
470         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
471         log_level=log_level))
472     suite.addTest(OSIntegrationTestCase.parameterize(
473         CreateVolumeTypeComplexTests, os_creds=os_creds,
474         ext_net_name=ext_net_name, use_keystone=use_keystone,
475         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
476         log_level=log_level))
477     suite.addTest(OSIntegrationTestCase.parameterize(
478         CreateSimpleVolumeSuccessTests, os_creds=os_creds,
479         ext_net_name=ext_net_name, use_keystone=use_keystone,
480         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
481         log_level=log_level))
482     suite.addTest(OSIntegrationTestCase.parameterize(
483         CreateSimpleVolumeFailureTests, os_creds=os_creds,
484         ext_net_name=ext_net_name, use_keystone=use_keystone,
485         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
486         log_level=log_level))
487     suite.addTest(OSIntegrationTestCase.parameterize(
488         CreateVolumeWithTypeTests, os_creds=os_creds,
489         ext_net_name=ext_net_name, use_keystone=use_keystone,
490         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
491         log_level=log_level))
492     suite.addTest(OSIntegrationTestCase.parameterize(
493         CreateVolumeWithImageTests, os_creds=os_creds,
494         ext_net_name=ext_net_name, use_keystone=use_keystone,
495         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
496         log_level=log_level))
497
498     # VM Instances
499     suite.addTest(OSIntegrationTestCase.parameterize(
500         SimpleHealthCheck, os_creds=os_creds, ext_net_name=ext_net_name,
501         use_keystone=use_keystone,
502         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
503         log_level=log_level))
504     suite.addTest(OSIntegrationTestCase.parameterize(
505         CreateInstanceTwoNetTests, os_creds=os_creds,
506         ext_net_name=ext_net_name, use_keystone=use_keystone,
507         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
508         log_level=log_level))
509     suite.addTest(OSIntegrationTestCase.parameterize(
510         CreateInstanceSimpleTests, os_creds=os_creds,
511         ext_net_name=ext_net_name, use_keystone=use_keystone,
512         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
513         log_level=log_level))
514     suite.addTest(OSIntegrationTestCase.parameterize(
515         CreateInstancePortManipulationTests, os_creds=os_creds,
516         ext_net_name=ext_net_name, use_keystone=use_keystone,
517         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
518         log_level=log_level))
519     suite.addTest(OSIntegrationTestCase.parameterize(
520         InstanceSecurityGroupTests, os_creds=os_creds,
521         ext_net_name=ext_net_name, use_keystone=use_keystone,
522         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
523         log_level=log_level))
524     suite.addTest(OSIntegrationTestCase.parameterize(
525         CreateInstanceOnComputeHost, os_creds=os_creds,
526         ext_net_name=ext_net_name, use_keystone=use_keystone,
527         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
528         log_level=log_level))
529     suite.addTest(OSIntegrationTestCase.parameterize(
530         CreateInstanceFromThreePartImage, os_creds=os_creds,
531         ext_net_name=ext_net_name, use_keystone=use_keystone,
532         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
533         log_level=log_level))
534     suite.addTest(OSIntegrationTestCase.parameterize(
535         CreateInstanceVolumeTests, os_creds=os_creds,
536         ext_net_name=ext_net_name, use_keystone=use_keystone,
537         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
538         log_level=log_level))
539     suite.addTest(OSIntegrationTestCase.parameterize(
540         CreateStackSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
541         use_keystone=use_keystone,
542         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
543         log_level=log_level))
544     suite.addTest(OSIntegrationTestCase.parameterize(
545         CreateStackVolumeTests, os_creds=os_creds, ext_net_name=ext_net_name,
546         use_keystone=use_keystone,
547         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
548         log_level=log_level))
549     suite.addTest(OSIntegrationTestCase.parameterize(
550         CreateStackFlavorTests, os_creds=os_creds, ext_net_name=ext_net_name,
551         use_keystone=use_keystone,
552         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
553         log_level=log_level))
554     suite.addTest(OSIntegrationTestCase.parameterize(
555         CreateStackKeypairTests, os_creds=os_creds, ext_net_name=ext_net_name,
556         use_keystone=use_keystone,
557         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
558         log_level=log_level))
559     suite.addTest(OSIntegrationTestCase.parameterize(
560         CreateStackSecurityGroupTests, os_creds=os_creds,
561         ext_net_name=ext_net_name, use_keystone=use_keystone,
562         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
563         log_level=log_level))
564     suite.addTest(OSIntegrationTestCase.parameterize(
565         CreateStackNegativeTests, os_creds=os_creds, ext_net_name=ext_net_name,
566         use_keystone=use_keystone,
567         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
568         log_level=log_level))
569
570     if use_floating_ips:
571         suite.addTest(OSIntegrationTestCase.parameterize(
572             CreateInstanceSingleNetworkTests, os_creds=os_creds,
573             ext_net_name=ext_net_name, use_keystone=use_keystone,
574             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
575             log_level=log_level))
576         suite.addTest(OSIntegrationTestCase.parameterize(
577             CreateStackFloatingIpTests, os_creds=os_creds,
578             ext_net_name=ext_net_name, use_keystone=use_keystone,
579             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
580             log_level=log_level))
581         suite.addTest(OSIntegrationTestCase.parameterize(
582             AnsibleProvisioningTests, os_creds=os_creds,
583             ext_net_name=ext_net_name, use_keystone=use_keystone,
584             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
585             log_level=log_level))
586
587
588 def add_openstack_ci_tests(
589         suite, os_creds, ext_net_name, use_keystone=True, flavor_metadata=None,
590         image_metadata=None, use_floating_ips=True, log_level=logging.INFO):
591     """
592     Adds tests written for a CI server to run the tests to validate code
593     changes
594     :param suite: the unittest.TestSuite object to which to add the tests
595     :param os_creds: and instance of OSCreds that holds the credentials
596                      required by OpenStack
597     :param ext_net_name: the name of an external network on the cloud under
598                          test
599     :param use_keystone: when True, tests requiring direct access to Keystone
600                          are added as these need to be running on a host that
601                          has access to the cloud's private network
602     :param image_metadata: dict() object containing metadata for creating an
603                            image with custom config
604                            (see YAML files in examples/image-metadata)
605     :param flavor_metadata: dict() object containing the metadata required by
606                             your flavor based on your configuration:
607                             (i.e. {'hw:mem_page_size': 'large'})
608     :param use_floating_ips: when true, all tests requiring Floating IPs will
609                              be added to the suite
610     :param log_level: the logging level
611     :return: None as the tests will be adding to the 'suite' parameter object
612     """
613
614     add_unit_tests(suite)
615
616     add_openstack_client_tests(suite, os_creds, ext_net_name, use_keystone,
617                                log_level)
618
619     add_openstack_api_tests(suite, os_creds, ext_net_name, use_keystone,
620                             image_metadata, log_level)
621
622     suite.addTest(OSIntegrationTestCase.parameterize(
623         SimpleHealthCheck, os_creds=os_creds, ext_net_name=ext_net_name,
624         use_keystone=use_keystone,
625         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
626         log_level=log_level))
627
628     if use_floating_ips:
629         suite.addTest(OSIntegrationTestCase.parameterize(
630             CreateInstanceSingleNetworkTests, os_creds=os_creds,
631             ext_net_name=ext_net_name, use_keystone=use_keystone,
632             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
633             log_level=log_level))
634
635     suite.addTest(OSIntegrationTestCase.parameterize(
636         CreateStackSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
637         use_keystone=use_keystone,
638         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
639         log_level=log_level))
640     suite.addTest(OSIntegrationTestCase.parameterize(
641         CreateStackNegativeTests, os_creds=os_creds, ext_net_name=ext_net_name,
642         use_keystone=use_keystone,
643         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
644         log_level=log_level))
645
646
647 def add_openstack_staging_tests(suite, os_creds, ext_net_name,
648                                 log_level=logging.INFO):
649     """
650     Adds tests that are still in development have not been designed to run
651     successfully against all OpenStack pods
652     :param suite: the unittest.TestSuite object to which to add the tests
653     :param os_creds: Instance of OSCreds that holds the credentials
654                     required by OpenStack
655     :param ext_net_name: the name of an external network on the cloud under
656                          test
657     :param log_level: the logging level
658     :return: None as the tests will be adding to the 'suite' parameter object
659     """
660     suite.addTest(OSComponentTestCase.parameterize(
661         CreateNetworkTypeTests, os_creds=os_creds,
662         ext_net_name=ext_net_name, log_level=log_level))
663     suite.addTest(OSComponentTestCase.parameterize(
664         CreateInstanceMockOfflineTests, os_creds=os_creds,
665         ext_net_name=ext_net_name, log_level=log_level))
666     suite.addTest(OSIntegrationTestCase.parameterize(
667         CreateInstancePubPrivNetTests, os_creds=os_creds,
668         ext_net_name=ext_net_name, log_level=log_level))
669     suite.addTest(OSIntegrationTestCase.parameterize(
670         CreateInstanceIPv6NetworkTests, os_creds=os_creds,
671         ext_net_name=ext_net_name, log_level=log_level))
672     suite.addTest(OSComponentTestCase.parameterize(
673         HeatUtilsVolumeTests, os_creds=os_creds,
674         ext_net_name=ext_net_name, log_level=log_level))
675     suite.addTest(OSComponentTestCase.parameterize(
676         MagnumSmokeTests, os_creds=os_creds,
677         ext_net_name=ext_net_name, log_level=log_level))