Merge "Created domain class for routers."
[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.domain.test.flavor_tests import FlavorDomainObjectTests
20 from snaps.domain.test.image_tests import ImageDomainObjectTests
21 from snaps.domain.test.keypair_tests import KeypairDomainObjectTests
22 from snaps.domain.test.network_tests import (
23     SecurityGroupDomainObjectTests, SecurityGroupRuleDomainObjectTests,
24     PortDomainObjectTests, RouterDomainObjectTests,
25     InterfaceRouterDomainObjectTests)
26 from snaps.domain.test.project_tests import ProjectDomainObjectTests
27 from snaps.domain.test.role_tests import RoleDomainObjectTests
28 from snaps.domain.test.stack_tests import StackDomainObjectTests
29 from snaps.domain.test.user_tests import UserDomainObjectTests
30 from snaps.domain.test.vm_inst_tests import (
31     VmInstDomainObjectTests, FloatingIpDomainObjectTests)
32 from snaps.openstack.tests.conf.os_credentials_tests import (
33     ProxySettingsUnitTests, OSCredsUnitTests)
34 from snaps.openstack.tests.create_flavor_tests import (
35     CreateFlavorTests, FlavorSettingsUnitTests)
36 from snaps.openstack.tests.create_image_tests import (
37     CreateImageSuccessTests, CreateImageNegativeTests, ImageSettingsUnitTests,
38     CreateMultiPartImageTests)
39 from snaps.openstack.tests.create_instance_tests import (
40     CreateInstanceSingleNetworkTests, CreateInstancePubPrivNetTests,
41     CreateInstanceOnComputeHost, CreateInstanceSimpleTests,
42     FloatingIpSettingsUnitTests, InstanceSecurityGroupTests,
43     VmInstanceSettingsUnitTests, CreateInstancePortManipulationTests,
44     SimpleHealthCheck, CreateInstanceFromThreePartImage,
45     CreateInstanceMockOfflineTests)
46 from snaps.openstack.tests.create_keypairs_tests import (
47     CreateKeypairsTests, KeypairSettingsUnitTests)
48 from snaps.openstack.tests.create_network_tests import (
49     CreateNetworkSuccessTests, NetworkSettingsUnitTests, PortSettingsUnitTests,
50     SubnetSettingsUnitTests, CreateNetworkTypeTests)
51 from snaps.openstack.tests.create_project_tests import (
52     CreateProjectSuccessTests, ProjectSettingsUnitTests,
53     CreateProjectUserTests)
54 from snaps.openstack.tests.create_router_tests import (
55     CreateRouterSuccessTests, CreateRouterNegativeTests,
56     RouterSettingsUnitTests)
57 from snaps.openstack.tests.create_security_group_tests import (
58     CreateSecurityGroupTests, SecurityGroupRuleSettingsUnitTests,
59     SecurityGroupSettingsUnitTests)
60 from snaps.openstack.tests.create_stack_tests import (
61     StackSettingsUnitTests, CreateStackSuccessTests,  CreateStackNegativeTests)
62 from snaps.openstack.tests.create_user_tests import (
63     UserSettingsUnitTests, CreateUserSuccessTests)
64 from snaps.openstack.tests.os_source_file_test import (
65     OSComponentTestCase, OSIntegrationTestCase)
66 from snaps.openstack.utils.tests.glance_utils_tests import (
67     GlanceSmokeTests, GlanceUtilsTests)
68 from snaps.openstack.utils.tests.heat_utils_tests import (
69     HeatUtilsCreateStackTests, HeatSmokeTests)
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)
79 from snaps.provisioning.tests.ansible_utils_tests import (
80     AnsibleProvisioningTests)
81 from snaps.tests.file_utils_tests import FileUtilsTests
82
83 __author__ = 'spisarski'
84
85
86 def add_unit_tests(suite):
87     """
88     Adds tests that do not require external resources
89     :param suite: the unittest.TestSuite object to which to add the tests
90     :return: None as the tests will be adding to the 'suite' parameter object
91     """
92     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(FileUtilsTests))
93     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
94         SecurityGroupRuleSettingsUnitTests))
95     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
96         ProxySettingsUnitTests))
97     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
98         OSCredsUnitTests))
99     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
100         SecurityGroupSettingsUnitTests))
101     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
102         SecurityGroupDomainObjectTests))
103     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
104         SecurityGroupRuleDomainObjectTests))
105     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
106         ImageSettingsUnitTests))
107     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
108         ImageDomainObjectTests))
109     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
110         FlavorSettingsUnitTests))
111     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
112         FlavorDomainObjectTests))
113     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
114         KeypairSettingsUnitTests))
115     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
116         KeypairDomainObjectTests))
117     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
118         UserSettingsUnitTests))
119     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
120         UserDomainObjectTests))
121     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
122         ProjectSettingsUnitTests))
123     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
124         ProjectDomainObjectTests))
125     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
126         RoleDomainObjectTests))
127     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
128         NetworkSettingsUnitTests))
129     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
130         SubnetSettingsUnitTests))
131     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
132         PortSettingsUnitTests))
133     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
134         PortDomainObjectTests))
135     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
136         RouterSettingsUnitTests))
137     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
138         RouterDomainObjectTests))
139     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
140         InterfaceRouterDomainObjectTests))
141     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
142         FloatingIpSettingsUnitTests))
143     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
144         VmInstanceSettingsUnitTests))
145     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
146         StackDomainObjectTests))
147     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
148         StackSettingsUnitTests))
149     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
150         VmInstDomainObjectTests))
151     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
152         FloatingIpDomainObjectTests))
153
154
155 def add_openstack_client_tests(suite, os_creds, ext_net_name,
156                                use_keystone=True, log_level=logging.INFO):
157     """
158     Adds tests written to exercise OpenStack client retrieval
159     :param suite: the unittest.TestSuite object to which to add the tests
160     :param os_creds: and instance of OSCreds that holds the credentials
161                      required by OpenStack
162     :param ext_net_name: the name of an external network on the cloud under
163                          test
164     :param use_keystone: when True, tests requiring direct access to Keystone
165                          are added as these need to be running on a host that
166                          has access to the cloud's private network
167     :param log_level: the logging level
168     :return: None as the tests will be adding to the 'suite' parameter object
169     """
170     # Basic connection tests
171     suite.addTest(
172         OSComponentTestCase.parameterize(
173             GlanceSmokeTests, os_creds=os_creds, ext_net_name=ext_net_name,
174             log_level=log_level))
175
176     if use_keystone:
177         suite.addTest(
178             OSComponentTestCase.parameterize(
179                 KeystoneSmokeTests, os_creds=os_creds,
180                 ext_net_name=ext_net_name, log_level=log_level))
181
182     suite.addTest(
183         OSComponentTestCase.parameterize(
184             NeutronSmokeTests, os_creds=os_creds, ext_net_name=ext_net_name,
185             log_level=log_level))
186     suite.addTest(
187         OSComponentTestCase.parameterize(
188             NovaSmokeTests, os_creds=os_creds, ext_net_name=ext_net_name,
189             log_level=log_level))
190     suite.addTest(
191         OSComponentTestCase.parameterize(
192             HeatSmokeTests, os_creds=os_creds, ext_net_name=ext_net_name,
193             log_level=log_level))
194
195
196 def add_openstack_api_tests(suite, os_creds, ext_net_name, use_keystone=True,
197                             image_metadata=None, log_level=logging.INFO):
198     """
199     Adds tests written to exercise all existing OpenStack APIs
200     :param suite: the unittest.TestSuite object to which to add the tests
201     :param os_creds: Instance of OSCreds that holds the credentials
202                      required by OpenStack
203     :param ext_net_name: the name of an external network on the cloud under
204                          test
205     :param use_keystone: when True, tests requiring direct access to Keystone
206                          are added as these need to be running on a host that
207                          has access to the cloud's private network
208     :param image_metadata: dict() object containing metadata for creating an
209                            image with custom config
210                            (see YAML files in examples/image-metadata)
211     :param log_level: the logging level
212     :return: None as the tests will be adding to the 'suite' parameter object
213     """
214     # Tests the OpenStack API calls
215     if use_keystone:
216         suite.addTest(OSComponentTestCase.parameterize(
217             KeystoneUtilsTests, os_creds=os_creds, ext_net_name=ext_net_name,
218             log_level=log_level))
219         suite.addTest(OSComponentTestCase.parameterize(
220             CreateUserSuccessTests, os_creds=os_creds,
221             ext_net_name=ext_net_name, log_level=log_level))
222         suite.addTest(OSComponentTestCase.parameterize(
223             CreateProjectSuccessTests, os_creds=os_creds,
224             ext_net_name=ext_net_name, log_level=log_level))
225         suite.addTest(OSComponentTestCase.parameterize(
226             CreateProjectUserTests, os_creds=os_creds,
227             ext_net_name=ext_net_name, log_level=log_level))
228
229     suite.addTest(OSComponentTestCase.parameterize(
230         GlanceUtilsTests, os_creds=os_creds, ext_net_name=ext_net_name,
231         image_metadata=image_metadata,
232         log_level=log_level))
233     suite.addTest(OSComponentTestCase.parameterize(
234         NeutronUtilsNetworkTests, os_creds=os_creds, ext_net_name=ext_net_name,
235         log_level=log_level))
236     suite.addTest(OSComponentTestCase.parameterize(
237         NeutronUtilsSubnetTests, os_creds=os_creds, ext_net_name=ext_net_name,
238         log_level=log_level))
239     suite.addTest(OSComponentTestCase.parameterize(
240         NeutronUtilsRouterTests, os_creds=os_creds, ext_net_name=ext_net_name,
241         log_level=log_level))
242     suite.addTest(OSComponentTestCase.parameterize(
243         NeutronUtilsSecurityGroupTests, os_creds=os_creds,
244         ext_net_name=ext_net_name, log_level=log_level))
245     suite.addTest(OSComponentTestCase.parameterize(
246         NeutronUtilsFloatingIpTests, os_creds=os_creds,
247         ext_net_name=ext_net_name, log_level=log_level))
248     suite.addTest(OSComponentTestCase.parameterize(
249         NovaUtilsKeypairTests, os_creds=os_creds, ext_net_name=ext_net_name,
250         log_level=log_level))
251     suite.addTest(OSComponentTestCase.parameterize(
252         NovaUtilsFlavorTests, os_creds=os_creds, ext_net_name=ext_net_name,
253         log_level=log_level))
254     suite.addTest(OSComponentTestCase.parameterize(
255         NovaUtilsInstanceTests, os_creds=os_creds, ext_net_name=ext_net_name,
256         log_level=log_level, image_metadata=image_metadata))
257     suite.addTest(OSComponentTestCase.parameterize(
258         CreateFlavorTests, os_creds=os_creds, ext_net_name=ext_net_name,
259         log_level=log_level))
260     suite.addTest(OSComponentTestCase.parameterize(
261         HeatUtilsCreateStackTests, os_creds=os_creds,
262         ext_net_name=ext_net_name, log_level=log_level,
263         image_metadata=image_metadata))
264
265
266 def add_openstack_integration_tests(suite, os_creds, ext_net_name,
267                                     use_keystone=True, flavor_metadata=None,
268                                     image_metadata=None, use_floating_ips=True,
269                                     log_level=logging.INFO):
270     """
271     Adds tests written to exercise all long-running OpenStack integration tests
272     meaning they will be creating VM instances and potentially performing some
273     SSH functions through floatingIPs
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 image_metadata: dict() object containing metadata for creating an
283                            image with custom config
284                            (see YAML files in examples/image-metadata)
285     :param flavor_metadata: dict() object containing the metadata required by
286                             your flavor based on your configuration:
287                             (i.e. {'hw:mem_page_size': 'large'})
288     :param use_floating_ips: when true, all tests requiring Floating IPs will
289                              be added to the suite
290     :param log_level: the logging level
291     :return: None as the tests will be adding to the 'suite' parameter object
292     """
293     # Tests the OpenStack API calls via a creator. If use_keystone, objects
294     # will be created with a custom user and project
295
296     # Creator Object tests
297     suite.addTest(OSIntegrationTestCase.parameterize(
298         CreateSecurityGroupTests, os_creds=os_creds, ext_net_name=ext_net_name,
299         use_keystone=use_keystone,
300         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
301         log_level=log_level))
302     suite.addTest(OSIntegrationTestCase.parameterize(
303         CreateImageSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
304         use_keystone=use_keystone,
305         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
306         log_level=log_level))
307     suite.addTest(OSIntegrationTestCase.parameterize(
308         CreateImageNegativeTests, os_creds=os_creds, ext_net_name=ext_net_name,
309         use_keystone=use_keystone,
310         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
311         log_level=log_level))
312     suite.addTest(OSIntegrationTestCase.parameterize(
313         CreateMultiPartImageTests, os_creds=os_creds,
314         ext_net_name=ext_net_name, use_keystone=use_keystone,
315         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
316         log_level=log_level))
317     suite.addTest(OSIntegrationTestCase.parameterize(
318         CreateKeypairsTests, os_creds=os_creds, ext_net_name=ext_net_name,
319         use_keystone=use_keystone,
320         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
321         log_level=log_level))
322     suite.addTest(OSIntegrationTestCase.parameterize(
323         CreateNetworkSuccessTests, os_creds=os_creds,
324         ext_net_name=ext_net_name, use_keystone=use_keystone,
325         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
326         log_level=log_level))
327     suite.addTest(OSIntegrationTestCase.parameterize(
328         CreateRouterSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
329         use_keystone=use_keystone,
330         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
331         log_level=log_level))
332     suite.addTest(OSIntegrationTestCase.parameterize(
333         CreateRouterNegativeTests, os_creds=os_creds,
334         ext_net_name=ext_net_name, use_keystone=use_keystone,
335         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
336         log_level=log_level))
337
338     # VM Instances
339     suite.addTest(OSIntegrationTestCase.parameterize(
340         SimpleHealthCheck, os_creds=os_creds, ext_net_name=ext_net_name,
341         use_keystone=use_keystone,
342         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
343         log_level=log_level))
344     suite.addTest(OSIntegrationTestCase.parameterize(
345         CreateInstanceSimpleTests, os_creds=os_creds,
346         ext_net_name=ext_net_name, use_keystone=use_keystone,
347         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
348         log_level=log_level))
349     suite.addTest(OSIntegrationTestCase.parameterize(
350         CreateInstancePortManipulationTests, os_creds=os_creds,
351         ext_net_name=ext_net_name, use_keystone=use_keystone,
352         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
353         log_level=log_level))
354     suite.addTest(OSIntegrationTestCase.parameterize(
355         InstanceSecurityGroupTests, os_creds=os_creds,
356         ext_net_name=ext_net_name, use_keystone=use_keystone,
357         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
358         log_level=log_level))
359     suite.addTest(OSIntegrationTestCase.parameterize(
360         CreateInstanceOnComputeHost, os_creds=os_creds,
361         ext_net_name=ext_net_name, use_keystone=use_keystone,
362         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
363         log_level=log_level))
364     suite.addTest(OSIntegrationTestCase.parameterize(
365         CreateInstanceFromThreePartImage, os_creds=os_creds,
366         ext_net_name=ext_net_name, use_keystone=use_keystone,
367         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
368         log_level=log_level))
369     suite.addTest(OSIntegrationTestCase.parameterize(
370         CreateStackSuccessTests, os_creds=os_creds, ext_net_name=ext_net_name,
371         use_keystone=use_keystone,
372         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
373         log_level=log_level))
374     suite.addTest(OSIntegrationTestCase.parameterize(
375         CreateStackNegativeTests, os_creds=os_creds, ext_net_name=ext_net_name,
376         use_keystone=use_keystone,
377         flavor_metadata=flavor_metadata, image_metadata=image_metadata,
378         log_level=log_level))
379
380     if use_floating_ips:
381         suite.addTest(OSIntegrationTestCase.parameterize(
382             CreateInstanceSingleNetworkTests, os_creds=os_creds,
383             ext_net_name=ext_net_name, use_keystone=use_keystone,
384             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
385             log_level=log_level))
386         suite.addTest(OSIntegrationTestCase.parameterize(
387             CreateInstancePubPrivNetTests, os_creds=os_creds,
388             ext_net_name=ext_net_name, use_keystone=use_keystone,
389             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
390             log_level=log_level))
391         suite.addTest(OSIntegrationTestCase.parameterize(
392             AnsibleProvisioningTests, os_creds=os_creds,
393             ext_net_name=ext_net_name, use_keystone=use_keystone,
394             flavor_metadata=flavor_metadata, image_metadata=image_metadata,
395             log_level=log_level))
396
397
398 def add_openstack_staging_tests(suite, os_creds, ext_net_name,
399                                 log_level=logging.INFO):
400     """
401     Adds tests that are still in development have not been designed to run
402     successfully against all OpenStack pods
403     :param suite: the unittest.TestSuite object to which to add the tests
404     :param os_creds: Instance of OSCreds that holds the credentials
405                     required by OpenStack
406     :param ext_net_name: the name of an external network on the cloud under
407                          test
408     :param log_level: the logging level
409     :return: None as the tests will be adding to the 'suite' parameter object
410     """
411     suite.addTest(OSComponentTestCase.parameterize(
412         CreateNetworkTypeTests, os_creds=os_creds, ext_net_name=ext_net_name,
413         log_level=log_level))
414     suite.addTest(OSComponentTestCase.parameterize(
415         CreateInstanceMockOfflineTests, os_creds=os_creds,
416         ext_net_name=ext_net_name, log_level=log_level))