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