Merge "Add modules docstrings in snaps"
[functest.git] / functest / opnfv_tests / openstack / snaps / snaps_suite_builder.py
1 #!/usr/bin/env python
2
3 # Copyright (c) 2017 Cable Television Laboratories, Inc. and others.
4 #
5 # This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10
11 """
12 Snaps test suite including openstack client tests, api tests and
13 integration tests.
14 add_openstack_client_tests: for connection_check
15 add_openstack_api_tests: for api_check
16 add_openstack_integration_tests: for snaps_smoke
17 """
18
19 import logging
20
21 from snaps.openstack.tests.create_flavor_tests import (
22     CreateFlavorTests)
23 from snaps.openstack.tests.create_image_tests import (
24     CreateImageSuccessTests, CreateImageNegativeTests,
25     CreateMultiPartImageTests)
26 from snaps.openstack.tests.create_instance_tests import (
27     CreateInstanceSingleNetworkTests, CreateInstanceOnComputeHost,
28     CreateInstanceSimpleTests, InstanceSecurityGroupTests,
29     CreateInstancePortManipulationTests, SimpleHealthCheck,
30     CreateInstanceFromThreePartImage, CreateInstanceTwoNetTests,
31     CreateInstanceVolumeTests)
32 from snaps.openstack.tests.create_keypairs_tests import (
33     CreateKeypairsTests, CreateKeypairsCleanupTests)
34 from snaps.openstack.tests.create_network_tests import (
35     CreateNetworkSuccessTests)
36 from snaps.openstack.tests.create_project_tests import (
37     CreateProjectSuccessTests, CreateProjectUserTests)
38 from snaps.openstack.tests.create_qos_tests import (
39     CreateQoSTests)
40 from snaps.openstack.tests.create_router_tests import (
41     CreateRouterSuccessTests, CreateRouterNegativeTests)
42 from snaps.openstack.tests.create_security_group_tests import (
43     CreateSecurityGroupTests)
44 from snaps.openstack.tests.create_stack_tests import (
45     CreateStackSuccessTests, CreateStackNegativeTests,
46     CreateStackFlavorTests, CreateStackFloatingIpTests,
47     CreateStackKeypairTests, CreateStackVolumeTests,
48     CreateStackSecurityGroupTests)
49 from snaps.openstack.tests.create_user_tests import (
50     CreateUserSuccessTests)
51 from snaps.openstack.tests.create_volume_tests import (
52     CreateSimpleVolumeSuccessTests,
53     CreateVolumeWithTypeTests, CreateVolumeWithImageTests,
54     CreateSimpleVolumeFailureTests)
55 from snaps.openstack.tests.create_volume_type_tests import (
56     CreateSimpleVolumeTypeSuccessTests,
57     CreateVolumeTypeComplexTests)
58 from snaps.openstack.tests.os_source_file_test import (
59     OSComponentTestCase, OSIntegrationTestCase)
60 from snaps.openstack.utils.tests.cinder_utils_tests import (
61     CinderSmokeTests, CinderUtilsQoSTests, CinderUtilsSimpleVolumeTypeTests,
62     CinderUtilsAddEncryptionTests, CinderUtilsVolumeTypeCompleteTests,
63     CinderUtilsVolumeTests)
64 from snaps.openstack.utils.tests.glance_utils_tests import (
65     GlanceSmokeTests, GlanceUtilsTests)
66 from snaps.openstack.utils.tests.heat_utils_tests import (
67     HeatSmokeTests, HeatUtilsCreateSimpleStackTests,
68     HeatUtilsCreateComplexStackTests, HeatUtilsFlavorTests,
69     HeatUtilsKeypairTests, HeatUtilsSecurityGroupTests)
70 from snaps.openstack.utils.tests.keystone_utils_tests import (
71     KeystoneSmokeTests, KeystoneUtilsTests)
72 from snaps.openstack.utils.tests.neutron_utils_tests import (
73     NeutronSmokeTests, NeutronUtilsNetworkTests, NeutronUtilsSubnetTests,
74     NeutronUtilsRouterTests, NeutronUtilsSecurityGroupTests,
75     NeutronUtilsFloatingIpTests)
76 from snaps.openstack.utils.tests.nova_utils_tests import (
77     NovaSmokeTests, NovaUtilsKeypairTests, NovaUtilsFlavorTests,
78     NovaUtilsInstanceTests, NovaUtilsInstanceVolumeTests)
79 from snaps.provisioning.tests.ansible_utils_tests import (
80     AnsibleProvisioningTests)
81
82
83 def add_openstack_client_tests(suite, os_creds, ext_net_name,
84                                use_keystone=True, log_level=logging.INFO):
85     """
86     Adds tests written to exercise OpenStack client retrieval
87     :param suite: the unittest.TestSuite object to which to add the tests
88     :param os_creds: and instance of OSCreds that holds the credentials
89                      required by OpenStack
90     :param ext_net_name: the name of an external network on the cloud under
91                          test
92     :param use_keystone: when True, tests requiring direct access to Keystone
93                          are added as these need to be running on a host that
94                          has access to the cloud's private network
95     :param log_level: the logging level
96     :return: None as the tests will be adding to the 'suite' parameter object
97     """
98     # Basic connection tests
99     suite.addTest(
100         OSComponentTestCase.parameterize(
101             GlanceSmokeTests, os_creds=os_creds, ext_net_name=ext_net_name,
102             log_level=log_level))
103
104     if use_keystone:
105         suite.addTest(
106             OSComponentTestCase.parameterize(
107                 KeystoneSmokeTests, os_creds=os_creds,
108                 ext_net_name=ext_net_name, log_level=log_level))
109
110     suite.addTest(
111         OSComponentTestCase.parameterize(
112             NeutronSmokeTests, os_creds=os_creds, ext_net_name=ext_net_name,
113             log_level=log_level))
114     suite.addTest(
115         OSComponentTestCase.parameterize(
116             NovaSmokeTests, os_creds=os_creds, ext_net_name=ext_net_name,
117             log_level=log_level))
118     suite.addTest(
119         OSComponentTestCase.parameterize(
120             HeatSmokeTests, os_creds=os_creds, ext_net_name=ext_net_name,
121             log_level=log_level))
122     suite.addTest(
123         OSComponentTestCase.parameterize(
124             CinderSmokeTests, os_creds=os_creds, ext_net_name=ext_net_name,
125             log_level=log_level))
126
127
128 def add_openstack_api_tests(suite, os_creds, ext_net_name, use_keystone=True,
129                             image_metadata=None, log_level=logging.INFO):
130     # pylint: disable=too-many-arguments
131     """
132     Adds tests written to exercise all existing OpenStack APIs
133     :param suite: the unittest.TestSuite object to which to add the tests
134     :param os_creds: Instance of OSCreds that holds the credentials
135                      required by OpenStack
136     :param ext_net_name: the name of an external network on the cloud under
137                          test
138     :param use_keystone: when True, tests requiring direct access to Keystone
139                          are added as these need to be running on a host that
140                          has access to the cloud's private network
141     :param image_metadata: dict() object containing metadata for creating an
142                            image with custom config
143                            (see YAML files in examples/image-metadata)
144     :param log_level: the logging level
145     :return: None as the tests will be adding to the 'suite' parameter object
146     """
147     # Tests the OpenStack API calls
148     if use_keystone:
149         suite.addTest(OSComponentTestCase.parameterize(
150             KeystoneUtilsTests, os_creds=os_creds, ext_net_name=ext_net_name,
151             log_level=log_level))
152         suite.addTest(OSComponentTestCase.parameterize(
153             CreateUserSuccessTests, os_creds=os_creds,
154             ext_net_name=ext_net_name, log_level=log_level))
155         suite.addTest(OSComponentTestCase.parameterize(
156             CreateProjectSuccessTests, os_creds=os_creds,
157             ext_net_name=ext_net_name, log_level=log_level))
158         suite.addTest(OSComponentTestCase.parameterize(
159             CreateProjectUserTests, os_creds=os_creds,
160             ext_net_name=ext_net_name, log_level=log_level))
161
162     suite.addTest(OSComponentTestCase.parameterize(
163         GlanceUtilsTests, os_creds=os_creds, ext_net_name=ext_net_name,
164         image_metadata=image_metadata,
165         log_level=log_level))
166     suite.addTest(OSComponentTestCase.parameterize(
167         NeutronUtilsNetworkTests, os_creds=os_creds, ext_net_name=ext_net_name,
168         log_level=log_level))
169     suite.addTest(OSComponentTestCase.parameterize(
170         NeutronUtilsSubnetTests, os_creds=os_creds, ext_net_name=ext_net_name,
171         log_level=log_level))
172     suite.addTest(OSComponentTestCase.parameterize(
173         NeutronUtilsRouterTests, os_creds=os_creds, ext_net_name=ext_net_name,
174         log_level=log_level))
175     suite.addTest(OSComponentTestCase.parameterize(
176         NeutronUtilsSecurityGroupTests, os_creds=os_creds,
177         ext_net_name=ext_net_name, log_level=log_level))
178     suite.addTest(OSComponentTestCase.parameterize(
179         NeutronUtilsFloatingIpTests, os_creds=os_creds,
180         ext_net_name=ext_net_name, log_level=log_level))
181     suite.addTest(OSComponentTestCase.parameterize(
182         NovaUtilsKeypairTests, os_creds=os_creds, ext_net_name=ext_net_name,
183         log_level=log_level))
184     suite.addTest(OSComponentTestCase.parameterize(
185         NovaUtilsFlavorTests, os_creds=os_creds, ext_net_name=ext_net_name,
186         log_level=log_level))
187     suite.addTest(OSComponentTestCase.parameterize(
188         NovaUtilsInstanceTests, os_creds=os_creds, ext_net_name=ext_net_name,
189         log_level=log_level, image_metadata=image_metadata))
190     suite.addTest(OSComponentTestCase.parameterize(
191         NovaUtilsInstanceVolumeTests, os_creds=os_creds,
192         ext_net_name=ext_net_name, log_level=log_level,
193         image_metadata=image_metadata))
194     suite.addTest(OSComponentTestCase.parameterize(
195         CreateFlavorTests, os_creds=os_creds, ext_net_name=ext_net_name,
196         log_level=log_level))
197     suite.addTest(OSComponentTestCase.parameterize(
198         HeatUtilsCreateSimpleStackTests, os_creds=os_creds,
199         ext_net_name=ext_net_name, log_level=log_level,
200         image_metadata=image_metadata))
201     suite.addTest(OSComponentTestCase.parameterize(
202         HeatUtilsCreateComplexStackTests, os_creds=os_creds,
203         ext_net_name=ext_net_name, log_level=log_level,
204         image_metadata=image_metadata))
205     suite.addTest(OSComponentTestCase.parameterize(
206         HeatUtilsFlavorTests, os_creds=os_creds,
207         ext_net_name=ext_net_name, log_level=log_level,
208         image_metadata=image_metadata))
209     suite.addTest(OSComponentTestCase.parameterize(
210         HeatUtilsKeypairTests, os_creds=os_creds,
211         ext_net_name=ext_net_name, log_level=log_level,
212         image_metadata=image_metadata))
213     suite.addTest(OSComponentTestCase.parameterize(
214         HeatUtilsSecurityGroupTests, os_creds=os_creds,
215         ext_net_name=ext_net_name, log_level=log_level,
216         image_metadata=image_metadata))
217     suite.addTest(OSComponentTestCase.parameterize(
218         CinderUtilsQoSTests, os_creds=os_creds,
219         ext_net_name=ext_net_name, log_level=log_level,
220         image_metadata=image_metadata))
221     suite.addTest(OSComponentTestCase.parameterize(
222         CinderUtilsVolumeTests, os_creds=os_creds,
223         ext_net_name=ext_net_name, log_level=log_level,
224         image_metadata=image_metadata))
225     suite.addTest(OSComponentTestCase.parameterize(
226         CinderUtilsSimpleVolumeTypeTests, os_creds=os_creds,
227         ext_net_name=ext_net_name, log_level=log_level,
228         image_metadata=image_metadata))
229     suite.addTest(OSComponentTestCase.parameterize(
230         CinderUtilsAddEncryptionTests, os_creds=os_creds,
231         ext_net_name=ext_net_name, log_level=log_level,
232         image_metadata=image_metadata))
233     suite.addTest(OSComponentTestCase.parameterize(
234         CinderUtilsVolumeTypeCompleteTests, os_creds=os_creds,
235         ext_net_name=ext_net_name, log_level=log_level,
236         image_metadata=image_metadata))
237
238
239 def add_openstack_integration_tests(suite, os_creds, ext_net_name,
240                                     use_keystone=True, flavor_metadata=None,
241                                     image_metadata=None, use_floating_ips=True,
242                                     netconf_override=None,
243                                     log_level=logging.INFO):
244     # pylint: disable=too-many-arguments
245     """
246     Adds tests written to exercise all long-running OpenStack integration tests
247     meaning they will be creating VM instances and potentially performing some
248     SSH functions through floatingIPs
249     :param suite: the unittest.TestSuite object to which to add the tests
250     :param os_creds: and instance of OSCreds that holds the credentials
251                      required by OpenStack
252     :param ext_net_name: the name of an external network on the cloud under
253                          test
254     :param use_keystone: when True, tests requiring direct access to Keystone
255                          are added as these need to be running on a host that
256                          has access to the cloud's private network
257     :param image_metadata: dict() object containing metadata for creating an
258                            image with custom config
259                            (see YAML files in examples/image-metadata)
260     :param flavor_metadata: dict() object containing the metadata required by
261                             your flavor based on your configuration:
262                             (i.e. {'hw:mem_page_size': 'large'})
263     :param use_floating_ips: when true, all tests requiring Floating IPs will
264                              be added to the suite
265     :param netconf_override: dict() containing the reconfigured network_type,
266                              physical_network and segmentation_id
267     :param log_level: the logging level
268     :return: None as the tests will be adding to the 'suite' parameter object
269     """
270     # Tests the OpenStack API calls via a creator. If use_keystone, objects
271     # will be created with a custom user and project
272
273     # Creator Object tests
274     suite.addTest(OSIntegrationTestCase.parameterize(
275         CreateSecurityGroupTests, os_creds=os_creds, ext_net_name=ext_net_name,
276         use_keystone=use_keystone,
277         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
278         log_level=log_level))
279     suite.addTest(OSIntegrationTestCase.parameterize(
280         CreateImageSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
281         use_keystone=use_keystone,
282         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
283         log_level=log_level))
284     suite.addTest(OSIntegrationTestCase.parameterize(
285         CreateImageNegativeTests, os_creds=os_creds, ext_net_name=ext_net_name,
286         use_keystone=use_keystone,
287         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
288         log_level=log_level))
289     suite.addTest(OSIntegrationTestCase.parameterize(
290         CreateMultiPartImageTests, os_creds=os_creds,
291         ext_net_name=ext_net_name, use_keystone=use_keystone,
292         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
293         log_level=log_level))
294     suite.addTest(OSIntegrationTestCase.parameterize(
295         CreateKeypairsTests, os_creds=os_creds, ext_net_name=ext_net_name,
296         use_keystone=use_keystone,
297         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
298         log_level=log_level))
299     suite.addTest(OSIntegrationTestCase.parameterize(
300         CreateKeypairsCleanupTests, os_creds=os_creds,
301         ext_net_name=ext_net_name,
302         use_keystone=use_keystone,
303         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
304         log_level=log_level))
305     suite.addTest(OSIntegrationTestCase.parameterize(
306         CreateNetworkSuccessTests, os_creds=os_creds,
307         ext_net_name=ext_net_name, use_keystone=use_keystone,
308         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
309         log_level=log_level))
310     suite.addTest(OSIntegrationTestCase.parameterize(
311         CreateRouterSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
312         use_keystone=use_keystone,
313         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
314         log_level=log_level))
315     suite.addTest(OSIntegrationTestCase.parameterize(
316         CreateRouterNegativeTests, os_creds=os_creds,
317         ext_net_name=ext_net_name, use_keystone=use_keystone,
318         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
319         log_level=log_level))
320     suite.addTest(OSIntegrationTestCase.parameterize(
321         CreateQoSTests, os_creds=os_creds,
322         ext_net_name=ext_net_name, use_keystone=use_keystone,
323         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
324         log_level=log_level))
325     suite.addTest(OSIntegrationTestCase.parameterize(
326         CreateSimpleVolumeTypeSuccessTests, os_creds=os_creds,
327         ext_net_name=ext_net_name, use_keystone=use_keystone,
328         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
329         log_level=log_level))
330     suite.addTest(OSIntegrationTestCase.parameterize(
331         CreateVolumeTypeComplexTests, os_creds=os_creds,
332         ext_net_name=ext_net_name, use_keystone=use_keystone,
333         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
334         log_level=log_level))
335     suite.addTest(OSIntegrationTestCase.parameterize(
336         CreateSimpleVolumeSuccessTests, os_creds=os_creds,
337         ext_net_name=ext_net_name, use_keystone=use_keystone,
338         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
339         log_level=log_level))
340     suite.addTest(OSIntegrationTestCase.parameterize(
341         CreateSimpleVolumeFailureTests, os_creds=os_creds,
342         ext_net_name=ext_net_name, use_keystone=use_keystone,
343         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
344         log_level=log_level))
345     suite.addTest(OSIntegrationTestCase.parameterize(
346         CreateVolumeWithTypeTests, os_creds=os_creds,
347         ext_net_name=ext_net_name, use_keystone=use_keystone,
348         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
349         log_level=log_level))
350     suite.addTest(OSIntegrationTestCase.parameterize(
351         CreateVolumeWithImageTests, os_creds=os_creds,
352         ext_net_name=ext_net_name, use_keystone=use_keystone,
353         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
354         log_level=log_level))
355
356     # VM Instances
357     suite.addTest(OSIntegrationTestCase.parameterize(
358         SimpleHealthCheck, os_creds=os_creds, ext_net_name=ext_net_name,
359         use_keystone=use_keystone,
360         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
361         log_level=log_level))
362     suite.addTest(OSIntegrationTestCase.parameterize(
363         CreateInstanceTwoNetTests, os_creds=os_creds,
364         ext_net_name=ext_net_name, use_keystone=use_keystone,
365         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
366         log_level=log_level))
367     suite.addTest(OSIntegrationTestCase.parameterize(
368         CreateInstanceSimpleTests, os_creds=os_creds,
369         ext_net_name=ext_net_name, use_keystone=use_keystone,
370         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
371         netconf_override=netconf_override, log_level=log_level))
372     suite.addTest(OSIntegrationTestCase.parameterize(
373         CreateInstancePortManipulationTests, os_creds=os_creds,
374         ext_net_name=ext_net_name, use_keystone=use_keystone,
375         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
376         netconf_override=netconf_override, log_level=log_level))
377     suite.addTest(OSIntegrationTestCase.parameterize(
378         InstanceSecurityGroupTests, os_creds=os_creds,
379         ext_net_name=ext_net_name, use_keystone=use_keystone,
380         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
381         netconf_override=netconf_override, log_level=log_level))
382     suite.addTest(OSIntegrationTestCase.parameterize(
383         CreateInstanceOnComputeHost, os_creds=os_creds,
384         ext_net_name=ext_net_name, use_keystone=use_keystone,
385         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
386         netconf_override=netconf_override, log_level=log_level))
387     suite.addTest(OSIntegrationTestCase.parameterize(
388         CreateInstanceFromThreePartImage, os_creds=os_creds,
389         ext_net_name=ext_net_name, use_keystone=use_keystone,
390         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
391         netconf_override=netconf_override, log_level=log_level))
392     suite.addTest(OSIntegrationTestCase.parameterize(
393         CreateInstanceVolumeTests, os_creds=os_creds,
394         ext_net_name=ext_net_name, use_keystone=use_keystone,
395         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
396         netconf_override=netconf_override, log_level=log_level))
397     suite.addTest(OSIntegrationTestCase.parameterize(
398         CreateStackSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
399         use_keystone=use_keystone,
400         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
401         log_level=log_level))
402     suite.addTest(OSIntegrationTestCase.parameterize(
403         CreateStackVolumeTests, os_creds=os_creds, ext_net_name=ext_net_name,
404         use_keystone=use_keystone,
405         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
406         log_level=log_level))
407     suite.addTest(OSIntegrationTestCase.parameterize(
408         CreateStackFlavorTests, os_creds=os_creds, ext_net_name=ext_net_name,
409         use_keystone=use_keystone,
410         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
411         log_level=log_level))
412     suite.addTest(OSIntegrationTestCase.parameterize(
413         CreateStackKeypairTests, os_creds=os_creds, ext_net_name=ext_net_name,
414         use_keystone=use_keystone,
415         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
416         log_level=log_level))
417     suite.addTest(OSIntegrationTestCase.parameterize(
418         CreateStackSecurityGroupTests, os_creds=os_creds,
419         ext_net_name=ext_net_name, use_keystone=use_keystone,
420         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
421         log_level=log_level))
422     suite.addTest(OSIntegrationTestCase.parameterize(
423         CreateStackNegativeTests, os_creds=os_creds, ext_net_name=ext_net_name,
424         use_keystone=use_keystone,
425         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
426         log_level=log_level))
427
428     if use_floating_ips:
429         suite.addTest(OSIntegrationTestCase.parameterize(
430             CreateInstanceSingleNetworkTests, os_creds=os_creds,
431             ext_net_name=ext_net_name, use_keystone=use_keystone,
432             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
433             log_level=log_level))
434         suite.addTest(OSIntegrationTestCase.parameterize(
435             CreateStackFloatingIpTests, os_creds=os_creds,
436             ext_net_name=ext_net_name, use_keystone=use_keystone,
437             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
438             log_level=log_level))
439         suite.addTest(OSIntegrationTestCase.parameterize(
440             AnsibleProvisioningTests, os_creds=os_creds,
441             ext_net_name=ext_net_name, use_keystone=use_keystone,
442             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
443             log_level=log_level))