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