40dfad877b4bcf160ba78fa972085cd326fa3e20
[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, CreateInstanceIPv6NetworkTests)
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, CreateNetworkIPv6Tests)
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, NeutronUtilsIPv6Tests)
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         NeutronUtilsIPv6Tests, os_creds=os_creds, ext_net_name=ext_net_name,
300         log_level=log_level))
301     suite.addTest(OSComponentTestCase.parameterize(
302         NeutronUtilsRouterTests, os_creds=os_creds, ext_net_name=ext_net_name,
303         log_level=log_level))
304     suite.addTest(OSComponentTestCase.parameterize(
305         NeutronUtilsSecurityGroupTests, os_creds=os_creds,
306         ext_net_name=ext_net_name, log_level=log_level))
307     suite.addTest(OSComponentTestCase.parameterize(
308         NeutronUtilsFloatingIpTests, os_creds=os_creds,
309         ext_net_name=ext_net_name, log_level=log_level))
310     suite.addTest(OSComponentTestCase.parameterize(
311         NovaUtilsKeypairTests, os_creds=os_creds, ext_net_name=ext_net_name,
312         log_level=log_level))
313     suite.addTest(OSComponentTestCase.parameterize(
314         NovaUtilsFlavorTests, os_creds=os_creds, ext_net_name=ext_net_name,
315         log_level=log_level))
316     suite.addTest(OSComponentTestCase.parameterize(
317         NovaUtilsInstanceTests, os_creds=os_creds, ext_net_name=ext_net_name,
318         log_level=log_level, image_metadata=image_metadata))
319     suite.addTest(OSComponentTestCase.parameterize(
320         NovaUtilsInstanceVolumeTests, os_creds=os_creds,
321         ext_net_name=ext_net_name, log_level=log_level,
322         image_metadata=image_metadata))
323     suite.addTest(OSComponentTestCase.parameterize(
324         CreateFlavorTests, os_creds=os_creds, ext_net_name=ext_net_name,
325         log_level=log_level))
326     suite.addTest(OSComponentTestCase.parameterize(
327         HeatUtilsCreateSimpleStackTests, os_creds=os_creds,
328         ext_net_name=ext_net_name, log_level=log_level,
329         image_metadata=image_metadata))
330     suite.addTest(OSComponentTestCase.parameterize(
331         HeatUtilsCreateComplexStackTests, os_creds=os_creds,
332         ext_net_name=ext_net_name, log_level=log_level,
333         image_metadata=image_metadata))
334     suite.addTest(OSComponentTestCase.parameterize(
335         HeatUtilsFlavorTests, os_creds=os_creds,
336         ext_net_name=ext_net_name, log_level=log_level,
337         image_metadata=image_metadata))
338     suite.addTest(OSComponentTestCase.parameterize(
339         HeatUtilsKeypairTests, os_creds=os_creds,
340         ext_net_name=ext_net_name, log_level=log_level,
341         image_metadata=image_metadata))
342     suite.addTest(OSComponentTestCase.parameterize(
343         HeatUtilsSecurityGroupTests, os_creds=os_creds,
344         ext_net_name=ext_net_name, log_level=log_level,
345         image_metadata=image_metadata))
346     suite.addTest(OSComponentTestCase.parameterize(
347         CinderUtilsQoSTests, os_creds=os_creds,
348         ext_net_name=ext_net_name, log_level=log_level,
349         image_metadata=image_metadata))
350     suite.addTest(OSComponentTestCase.parameterize(
351         CinderUtilsVolumeTests, 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         CinderUtilsSimpleVolumeTypeTests, 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         CinderUtilsAddEncryptionTests, 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         CinderUtilsVolumeTypeCompleteTests, os_creds=os_creds,
364         ext_net_name=ext_net_name, log_level=log_level,
365         image_metadata=image_metadata))
366
367
368 def add_openstack_integration_tests(suite, os_creds, ext_net_name,
369                                     use_keystone=True, flavor_metadata=None,
370                                     image_metadata=None, use_floating_ips=True,
371                                     log_level=logging.INFO):
372     """
373     Adds tests written to exercise all long-running OpenStack integration tests
374     meaning they will be creating VM instances and potentially performing some
375     SSH functions through floatingIPs
376     :param suite: the unittest.TestSuite object to which to add the tests
377     :param os_creds: and instance of OSCreds that holds the credentials
378                      required by OpenStack
379     :param ext_net_name: the name of an external network on the cloud under
380                          test
381     :param use_keystone: when True, tests requiring direct access to Keystone
382                          are added as these need to be running on a host that
383                          has access to the cloud's private network
384     :param image_metadata: dict() object containing metadata for creating an
385                            image with custom config
386                            (see YAML files in examples/image-metadata)
387     :param flavor_metadata: dict() object containing the metadata required by
388                             your flavor based on your configuration:
389                             (i.e. {'hw:mem_page_size': 'large'})
390     :param use_floating_ips: when true, all tests requiring Floating IPs will
391                              be added to the suite
392     :param log_level: the logging level
393     :return: None as the tests will be adding to the 'suite' parameter object
394     """
395     # Tests the OpenStack API calls via a creator. If use_keystone, objects
396     # will be created with a custom user and project
397
398     # Creator Object tests
399     suite.addTest(OSIntegrationTestCase.parameterize(
400         CreateSecurityGroupTests, os_creds=os_creds, ext_net_name=ext_net_name,
401         use_keystone=use_keystone,
402         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
403         log_level=log_level))
404     suite.addTest(OSIntegrationTestCase.parameterize(
405         CreateImageSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
406         use_keystone=use_keystone,
407         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
408         log_level=log_level))
409     suite.addTest(OSIntegrationTestCase.parameterize(
410         CreateImageNegativeTests, os_creds=os_creds, ext_net_name=ext_net_name,
411         use_keystone=use_keystone,
412         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
413         log_level=log_level))
414     suite.addTest(OSIntegrationTestCase.parameterize(
415         CreateMultiPartImageTests, os_creds=os_creds,
416         ext_net_name=ext_net_name, use_keystone=use_keystone,
417         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
418         log_level=log_level))
419     suite.addTest(OSIntegrationTestCase.parameterize(
420         CreateKeypairsTests, os_creds=os_creds, ext_net_name=ext_net_name,
421         use_keystone=use_keystone,
422         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
423         log_level=log_level))
424     suite.addTest(OSIntegrationTestCase.parameterize(
425         CreateKeypairsCleanupTests, os_creds=os_creds,
426         ext_net_name=ext_net_name,
427         use_keystone=use_keystone,
428         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
429         log_level=log_level))
430     suite.addTest(OSIntegrationTestCase.parameterize(
431         CreateNetworkSuccessTests, os_creds=os_creds,
432         ext_net_name=ext_net_name, use_keystone=use_keystone,
433         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
434         log_level=log_level))
435     suite.addTest(OSIntegrationTestCase.parameterize(
436         CreateNetworkIPv6Tests, os_creds=os_creds,
437         ext_net_name=ext_net_name, use_keystone=use_keystone,
438         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
439         log_level=log_level))
440     suite.addTest(OSIntegrationTestCase.parameterize(
441         CreateRouterSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
442         use_keystone=use_keystone,
443         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
444         log_level=log_level))
445     suite.addTest(OSIntegrationTestCase.parameterize(
446         CreateRouterNegativeTests, os_creds=os_creds,
447         ext_net_name=ext_net_name, use_keystone=use_keystone,
448         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
449         log_level=log_level))
450     suite.addTest(OSIntegrationTestCase.parameterize(
451         CreateQoSTests, os_creds=os_creds,
452         ext_net_name=ext_net_name, use_keystone=use_keystone,
453         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
454         log_level=log_level))
455     suite.addTest(OSIntegrationTestCase.parameterize(
456         CreateSimpleVolumeTypeSuccessTests, os_creds=os_creds,
457         ext_net_name=ext_net_name, use_keystone=use_keystone,
458         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
459         log_level=log_level))
460     suite.addTest(OSIntegrationTestCase.parameterize(
461         CreateVolumeTypeComplexTests, os_creds=os_creds,
462         ext_net_name=ext_net_name, use_keystone=use_keystone,
463         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
464         log_level=log_level))
465     suite.addTest(OSIntegrationTestCase.parameterize(
466         CreateSimpleVolumeSuccessTests, 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         CreateSimpleVolumeFailureTests, 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         CreateVolumeWithTypeTests, 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         CreateVolumeWithImageTests, 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
486     # VM Instances
487     suite.addTest(OSIntegrationTestCase.parameterize(
488         SimpleHealthCheck, os_creds=os_creds, ext_net_name=ext_net_name,
489         use_keystone=use_keystone,
490         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
491         log_level=log_level))
492     suite.addTest(OSIntegrationTestCase.parameterize(
493         CreateInstanceTwoNetTests, os_creds=os_creds,
494         ext_net_name=ext_net_name, use_keystone=use_keystone,
495         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
496         log_level=log_level))
497     suite.addTest(OSIntegrationTestCase.parameterize(
498         CreateInstanceSimpleTests, os_creds=os_creds,
499         ext_net_name=ext_net_name, use_keystone=use_keystone,
500         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
501         log_level=log_level))
502     suite.addTest(OSIntegrationTestCase.parameterize(
503         CreateInstancePortManipulationTests, os_creds=os_creds,
504         ext_net_name=ext_net_name, use_keystone=use_keystone,
505         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
506         log_level=log_level))
507     suite.addTest(OSIntegrationTestCase.parameterize(
508         InstanceSecurityGroupTests, os_creds=os_creds,
509         ext_net_name=ext_net_name, use_keystone=use_keystone,
510         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
511         log_level=log_level))
512     suite.addTest(OSIntegrationTestCase.parameterize(
513         CreateInstanceOnComputeHost, 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         CreateInstanceFromThreePartImage, 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         CreateInstanceVolumeTests, 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     suite.addTest(OSIntegrationTestCase.parameterize(
528         CreateStackSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
529         use_keystone=use_keystone,
530         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
531         log_level=log_level))
532     suite.addTest(OSIntegrationTestCase.parameterize(
533         CreateStackVolumeTests, os_creds=os_creds, ext_net_name=ext_net_name,
534         use_keystone=use_keystone,
535         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
536         log_level=log_level))
537     suite.addTest(OSIntegrationTestCase.parameterize(
538         CreateStackFlavorTests, os_creds=os_creds, ext_net_name=ext_net_name,
539         use_keystone=use_keystone,
540         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
541         log_level=log_level))
542     suite.addTest(OSIntegrationTestCase.parameterize(
543         CreateStackKeypairTests, os_creds=os_creds, ext_net_name=ext_net_name,
544         use_keystone=use_keystone,
545         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
546         log_level=log_level))
547     suite.addTest(OSIntegrationTestCase.parameterize(
548         CreateStackSecurityGroupTests, os_creds=os_creds,
549         ext_net_name=ext_net_name, use_keystone=use_keystone,
550         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
551         log_level=log_level))
552     suite.addTest(OSIntegrationTestCase.parameterize(
553         CreateStackNegativeTests, os_creds=os_creds, ext_net_name=ext_net_name,
554         use_keystone=use_keystone,
555         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
556         log_level=log_level))
557
558     if use_floating_ips:
559         suite.addTest(OSIntegrationTestCase.parameterize(
560             CreateInstanceSingleNetworkTests, os_creds=os_creds,
561             ext_net_name=ext_net_name, use_keystone=use_keystone,
562             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
563             log_level=log_level))
564         suite.addTest(OSIntegrationTestCase.parameterize(
565             CreateStackFloatingIpTests, os_creds=os_creds,
566             ext_net_name=ext_net_name, use_keystone=use_keystone,
567             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
568             log_level=log_level))
569         suite.addTest(OSIntegrationTestCase.parameterize(
570             AnsibleProvisioningTests, os_creds=os_creds,
571             ext_net_name=ext_net_name, use_keystone=use_keystone,
572             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
573             log_level=log_level))
574
575
576 def add_openstack_ci_tests(
577         suite, os_creds, ext_net_name, use_keystone=True, flavor_metadata=None,
578         image_metadata=None, use_floating_ips=True, log_level=logging.INFO):
579     """
580     Adds tests written for a CI server to run the tests to validate code
581     changes
582     :param suite: the unittest.TestSuite object to which to add the tests
583     :param os_creds: and instance of OSCreds that holds the credentials
584                      required by OpenStack
585     :param ext_net_name: the name of an external network on the cloud under
586                          test
587     :param use_keystone: when True, tests requiring direct access to Keystone
588                          are added as these need to be running on a host that
589                          has access to the cloud's private network
590     :param image_metadata: dict() object containing metadata for creating an
591                            image with custom config
592                            (see YAML files in examples/image-metadata)
593     :param flavor_metadata: dict() object containing the metadata required by
594                             your flavor based on your configuration:
595                             (i.e. {'hw:mem_page_size': 'large'})
596     :param use_floating_ips: when true, all tests requiring Floating IPs will
597                              be added to the suite
598     :param log_level: the logging level
599     :return: None as the tests will be adding to the 'suite' parameter object
600     """
601
602     add_unit_tests(suite)
603
604     add_openstack_client_tests(suite, os_creds, ext_net_name, use_keystone,
605                                log_level)
606
607     add_openstack_api_tests(suite, os_creds, ext_net_name, use_keystone,
608                             image_metadata, log_level)
609
610     suite.addTest(OSIntegrationTestCase.parameterize(
611         SimpleHealthCheck, os_creds=os_creds, ext_net_name=ext_net_name,
612         use_keystone=use_keystone,
613         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
614         log_level=log_level))
615
616     if use_floating_ips:
617         suite.addTest(OSIntegrationTestCase.parameterize(
618             CreateInstanceSingleNetworkTests, os_creds=os_creds,
619             ext_net_name=ext_net_name, use_keystone=use_keystone,
620             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
621             log_level=log_level))
622
623     suite.addTest(OSIntegrationTestCase.parameterize(
624         CreateStackSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
625         use_keystone=use_keystone,
626         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
627         log_level=log_level))
628     suite.addTest(OSIntegrationTestCase.parameterize(
629         CreateStackNegativeTests, os_creds=os_creds, ext_net_name=ext_net_name,
630         use_keystone=use_keystone,
631         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
632         log_level=log_level))
633
634
635 def add_openstack_staging_tests(suite, os_creds, ext_net_name,
636                                 log_level=logging.INFO):
637     """
638     Adds tests that are still in development have not been designed to run
639     successfully against all OpenStack pods
640     :param suite: the unittest.TestSuite object to which to add the tests
641     :param os_creds: Instance of OSCreds that holds the credentials
642                     required by OpenStack
643     :param ext_net_name: the name of an external network on the cloud under
644                          test
645     :param log_level: the logging level
646     :return: None as the tests will be adding to the 'suite' parameter object
647     """
648     suite.addTest(OSComponentTestCase.parameterize(
649         CreateNetworkTypeTests, os_creds=os_creds,
650         ext_net_name=ext_net_name, log_level=log_level))
651     suite.addTest(OSComponentTestCase.parameterize(
652         CreateInstanceMockOfflineTests, os_creds=os_creds,
653         ext_net_name=ext_net_name, log_level=log_level))
654     suite.addTest(OSIntegrationTestCase.parameterize(
655         CreateInstancePubPrivNetTests, os_creds=os_creds,
656         ext_net_name=ext_net_name, log_level=log_level))
657     suite.addTest(OSIntegrationTestCase.parameterize(
658         CreateInstanceIPv6NetworkTests, os_creds=os_creds,
659         ext_net_name=ext_net_name, log_level=log_level))
660     suite.addTest(OSComponentTestCase.parameterize(
661         HeatUtilsVolumeTests, os_creds=os_creds,
662         ext_net_name=ext_net_name, log_level=log_level))