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