Removal of test from API check.
[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         HeatUtilsFlavorTests, 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         HeatUtilsKeypairTests, 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         HeatUtilsSecurityGroupTests, 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         CinderUtilsQoSTests, 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         CinderUtilsVolumeTests, 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         CinderUtilsSimpleVolumeTypeTests, 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         CinderUtilsAddEncryptionTests, 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         CinderUtilsVolumeTypeCompleteTests, os_creds=os_creds,
361         ext_net_name=ext_net_name, log_level=log_level,
362         image_metadata=image_metadata))
363
364
365 def add_openstack_integration_tests(suite, os_creds, ext_net_name,
366                                     use_keystone=True, flavor_metadata=None,
367                                     image_metadata=None, use_floating_ips=True,
368                                     log_level=logging.INFO):
369     """
370     Adds tests written to exercise all long-running OpenStack integration tests
371     meaning they will be creating VM instances and potentially performing some
372     SSH functions through floatingIPs
373     :param suite: the unittest.TestSuite object to which to add the tests
374     :param os_creds: and instance of OSCreds that holds the credentials
375                      required by OpenStack
376     :param ext_net_name: the name of an external network on the cloud under
377                          test
378     :param use_keystone: when True, tests requiring direct access to Keystone
379                          are added as these need to be running on a host that
380                          has access to the cloud's private network
381     :param image_metadata: dict() object containing metadata for creating an
382                            image with custom config
383                            (see YAML files in examples/image-metadata)
384     :param flavor_metadata: dict() object containing the metadata required by
385                             your flavor based on your configuration:
386                             (i.e. {'hw:mem_page_size': 'large'})
387     :param use_floating_ips: when true, all tests requiring Floating IPs will
388                              be added to the suite
389     :param log_level: the logging level
390     :return: None as the tests will be adding to the 'suite' parameter object
391     """
392     # Tests the OpenStack API calls via a creator. If use_keystone, objects
393     # will be created with a custom user and project
394
395     # Creator Object tests
396     suite.addTest(OSIntegrationTestCase.parameterize(
397         CreateSecurityGroupTests, os_creds=os_creds, ext_net_name=ext_net_name,
398         use_keystone=use_keystone,
399         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
400         log_level=log_level))
401     suite.addTest(OSIntegrationTestCase.parameterize(
402         CreateImageSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
403         use_keystone=use_keystone,
404         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
405         log_level=log_level))
406     suite.addTest(OSIntegrationTestCase.parameterize(
407         CreateImageNegativeTests, os_creds=os_creds, ext_net_name=ext_net_name,
408         use_keystone=use_keystone,
409         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
410         log_level=log_level))
411     suite.addTest(OSIntegrationTestCase.parameterize(
412         CreateMultiPartImageTests, os_creds=os_creds,
413         ext_net_name=ext_net_name, use_keystone=use_keystone,
414         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
415         log_level=log_level))
416     suite.addTest(OSIntegrationTestCase.parameterize(
417         CreateKeypairsTests, os_creds=os_creds, ext_net_name=ext_net_name,
418         use_keystone=use_keystone,
419         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
420         log_level=log_level))
421     suite.addTest(OSIntegrationTestCase.parameterize(
422         CreateKeypairsCleanupTests, os_creds=os_creds,
423         ext_net_name=ext_net_name,
424         use_keystone=use_keystone,
425         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
426         log_level=log_level))
427     suite.addTest(OSIntegrationTestCase.parameterize(
428         CreateNetworkSuccessTests, os_creds=os_creds,
429         ext_net_name=ext_net_name, use_keystone=use_keystone,
430         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
431         log_level=log_level))
432     suite.addTest(OSIntegrationTestCase.parameterize(
433         CreateRouterSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
434         use_keystone=use_keystone,
435         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
436         log_level=log_level))
437     suite.addTest(OSIntegrationTestCase.parameterize(
438         CreateRouterNegativeTests, os_creds=os_creds,
439         ext_net_name=ext_net_name, use_keystone=use_keystone,
440         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
441         log_level=log_level))
442     suite.addTest(OSIntegrationTestCase.parameterize(
443         CreateQoSTests, os_creds=os_creds,
444         ext_net_name=ext_net_name, use_keystone=use_keystone,
445         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
446         log_level=log_level))
447     suite.addTest(OSIntegrationTestCase.parameterize(
448         CreateSimpleVolumeTypeSuccessTests, os_creds=os_creds,
449         ext_net_name=ext_net_name, use_keystone=use_keystone,
450         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
451         log_level=log_level))
452     suite.addTest(OSIntegrationTestCase.parameterize(
453         CreateVolumeTypeComplexTests, os_creds=os_creds,
454         ext_net_name=ext_net_name, use_keystone=use_keystone,
455         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
456         log_level=log_level))
457     suite.addTest(OSIntegrationTestCase.parameterize(
458         CreateSimpleVolumeSuccessTests, os_creds=os_creds,
459         ext_net_name=ext_net_name, use_keystone=use_keystone,
460         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
461         log_level=log_level))
462     suite.addTest(OSIntegrationTestCase.parameterize(
463         CreateSimpleVolumeFailureTests, os_creds=os_creds,
464         ext_net_name=ext_net_name, use_keystone=use_keystone,
465         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
466         log_level=log_level))
467     suite.addTest(OSIntegrationTestCase.parameterize(
468         CreateVolumeWithTypeTests, os_creds=os_creds,
469         ext_net_name=ext_net_name, use_keystone=use_keystone,
470         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
471         log_level=log_level))
472     suite.addTest(OSIntegrationTestCase.parameterize(
473         CreateVolumeWithImageTests, os_creds=os_creds,
474         ext_net_name=ext_net_name, use_keystone=use_keystone,
475         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
476         log_level=log_level))
477
478     # VM Instances
479     suite.addTest(OSIntegrationTestCase.parameterize(
480         SimpleHealthCheck, os_creds=os_creds, ext_net_name=ext_net_name,
481         use_keystone=use_keystone,
482         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
483         log_level=log_level))
484     suite.addTest(OSIntegrationTestCase.parameterize(
485         CreateInstanceTwoNetTests, os_creds=os_creds,
486         ext_net_name=ext_net_name, use_keystone=use_keystone,
487         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
488         log_level=log_level))
489     suite.addTest(OSIntegrationTestCase.parameterize(
490         CreateInstanceSimpleTests, os_creds=os_creds,
491         ext_net_name=ext_net_name, use_keystone=use_keystone,
492         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
493         log_level=log_level))
494     suite.addTest(OSIntegrationTestCase.parameterize(
495         CreateInstancePortManipulationTests, os_creds=os_creds,
496         ext_net_name=ext_net_name, use_keystone=use_keystone,
497         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
498         log_level=log_level))
499     suite.addTest(OSIntegrationTestCase.parameterize(
500         InstanceSecurityGroupTests, os_creds=os_creds,
501         ext_net_name=ext_net_name, use_keystone=use_keystone,
502         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
503         log_level=log_level))
504     suite.addTest(OSIntegrationTestCase.parameterize(
505         CreateInstanceOnComputeHost, os_creds=os_creds,
506         ext_net_name=ext_net_name, use_keystone=use_keystone,
507         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
508         log_level=log_level))
509     suite.addTest(OSIntegrationTestCase.parameterize(
510         CreateInstanceFromThreePartImage, os_creds=os_creds,
511         ext_net_name=ext_net_name, use_keystone=use_keystone,
512         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
513         log_level=log_level))
514     suite.addTest(OSIntegrationTestCase.parameterize(
515         CreateInstanceVolumeTests, os_creds=os_creds,
516         ext_net_name=ext_net_name, use_keystone=use_keystone,
517         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
518         log_level=log_level))
519     suite.addTest(OSIntegrationTestCase.parameterize(
520         CreateStackSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
521         use_keystone=use_keystone,
522         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
523         log_level=log_level))
524     suite.addTest(OSIntegrationTestCase.parameterize(
525         CreateStackVolumeTests, os_creds=os_creds, ext_net_name=ext_net_name,
526         use_keystone=use_keystone,
527         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
528         log_level=log_level))
529     suite.addTest(OSIntegrationTestCase.parameterize(
530         CreateStackFlavorTests, os_creds=os_creds, ext_net_name=ext_net_name,
531         use_keystone=use_keystone,
532         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
533         log_level=log_level))
534     suite.addTest(OSIntegrationTestCase.parameterize(
535         CreateStackKeypairTests, os_creds=os_creds, ext_net_name=ext_net_name,
536         use_keystone=use_keystone,
537         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
538         log_level=log_level))
539     suite.addTest(OSIntegrationTestCase.parameterize(
540         CreateStackSecurityGroupTests, os_creds=os_creds,
541         ext_net_name=ext_net_name, use_keystone=use_keystone,
542         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
543         log_level=log_level))
544     suite.addTest(OSIntegrationTestCase.parameterize(
545         CreateStackNegativeTests, os_creds=os_creds, ext_net_name=ext_net_name,
546         use_keystone=use_keystone,
547         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
548         log_level=log_level))
549
550     if use_floating_ips:
551         suite.addTest(OSIntegrationTestCase.parameterize(
552             CreateInstanceSingleNetworkTests, os_creds=os_creds,
553             ext_net_name=ext_net_name, use_keystone=use_keystone,
554             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
555             log_level=log_level))
556         suite.addTest(OSIntegrationTestCase.parameterize(
557             CreateStackFloatingIpTests, os_creds=os_creds,
558             ext_net_name=ext_net_name, use_keystone=use_keystone,
559             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
560             log_level=log_level))
561         suite.addTest(OSIntegrationTestCase.parameterize(
562             AnsibleProvisioningTests, os_creds=os_creds,
563             ext_net_name=ext_net_name, use_keystone=use_keystone,
564             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
565             log_level=log_level))
566
567
568 def add_openstack_ci_tests(
569         suite, os_creds, ext_net_name, use_keystone=True, flavor_metadata=None,
570         image_metadata=None, use_floating_ips=True, log_level=logging.INFO):
571     """
572     Adds tests written for a CI server to run the tests to validate code
573     changes
574     :param suite: the unittest.TestSuite object to which to add the tests
575     :param os_creds: and instance of OSCreds that holds the credentials
576                      required by OpenStack
577     :param ext_net_name: the name of an external network on the cloud under
578                          test
579     :param use_keystone: when True, tests requiring direct access to Keystone
580                          are added as these need to be running on a host that
581                          has access to the cloud's private network
582     :param image_metadata: dict() object containing metadata for creating an
583                            image with custom config
584                            (see YAML files in examples/image-metadata)
585     :param flavor_metadata: dict() object containing the metadata required by
586                             your flavor based on your configuration:
587                             (i.e. {'hw:mem_page_size': 'large'})
588     :param use_floating_ips: when true, all tests requiring Floating IPs will
589                              be added to the suite
590     :param log_level: the logging level
591     :return: None as the tests will be adding to the 'suite' parameter object
592     """
593
594     add_unit_tests(suite)
595
596     add_openstack_client_tests(suite, os_creds, ext_net_name, use_keystone,
597                                log_level)
598
599     add_openstack_api_tests(suite, os_creds, ext_net_name, use_keystone,
600                             image_metadata, log_level)
601
602     suite.addTest(OSIntegrationTestCase.parameterize(
603         SimpleHealthCheck, os_creds=os_creds, ext_net_name=ext_net_name,
604         use_keystone=use_keystone,
605         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
606         log_level=log_level))
607
608     if use_floating_ips:
609         suite.addTest(OSIntegrationTestCase.parameterize(
610             CreateInstanceSingleNetworkTests, os_creds=os_creds,
611             ext_net_name=ext_net_name, use_keystone=use_keystone,
612             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
613             log_level=log_level))
614
615     suite.addTest(OSIntegrationTestCase.parameterize(
616         CreateStackSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
617         use_keystone=use_keystone,
618         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
619         log_level=log_level))
620     suite.addTest(OSIntegrationTestCase.parameterize(
621         CreateStackNegativeTests, os_creds=os_creds, ext_net_name=ext_net_name,
622         use_keystone=use_keystone,
623         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
624         log_level=log_level))
625
626
627 def add_openstack_staging_tests(suite, os_creds, ext_net_name,
628                                 log_level=logging.INFO):
629     """
630     Adds tests that are still in development have not been designed to run
631     successfully against all OpenStack pods
632     :param suite: the unittest.TestSuite object to which to add the tests
633     :param os_creds: Instance of OSCreds that holds the credentials
634                     required by OpenStack
635     :param ext_net_name: the name of an external network on the cloud under
636                          test
637     :param log_level: the logging level
638     :return: None as the tests will be adding to the 'suite' parameter object
639     """
640     suite.addTest(OSComponentTestCase.parameterize(
641         CreateNetworkTypeTests, os_creds=os_creds, ext_net_name=ext_net_name,
642         log_level=log_level))
643     suite.addTest(OSComponentTestCase.parameterize(
644         CreateInstanceMockOfflineTests, os_creds=os_creds,
645         ext_net_name=ext_net_name, log_level=log_level))
646     suite.addTest(OSIntegrationTestCase.parameterize(
647             CreateInstancePubPrivNetTests, os_creds=os_creds,
648             ext_net_name=ext_net_name, log_level=log_level))
649     suite.addTest(OSComponentTestCase.parameterize(
650         HeatUtilsVolumeTests, os_creds=os_creds,
651         ext_net_name=ext_net_name, log_level=log_level))