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