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