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