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