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