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