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