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