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