Adapt integration tests to use custom image config
[snaps.git] / snaps / test_suite_builder.py
1 # Copyright (c) 2016 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.openstack.utils.tests.glance_utils_tests import GlanceSmokeTests, GlanceUtilsTests
20 from snaps.openstack.tests.create_flavor_tests import CreateFlavorTests
21 from snaps.tests.file_utils_tests import FileUtilsTests
22 from snaps.openstack.tests.create_security_group_tests import CreateSecurityGroupTests, \
23     SecurityGroupRuleSettingsUnitTests, SecurityGroupSettingsUnitTests
24 from snaps.openstack.tests.create_project_tests import CreateProjectSuccessTests, ProjectSettingsUnitTests, \
25     CreateProjectUserTests
26 from snaps.openstack.tests.create_user_tests import UserSettingsUnitTests, CreateUserSuccessTests
27 from snaps.openstack.utils.tests.keystone_utils_tests import KeystoneSmokeTests, KeystoneUtilsTests
28 from snaps.openstack.utils.tests.neutron_utils_tests import NeutronSmokeTests, NeutronUtilsNetworkTests, \
29     NeutronUtilsSubnetTests, NeutronUtilsRouterTests, NeutronUtilsSecurityGroupTests
30 from snaps.openstack.tests.create_image_tests import CreateImageSuccessTests, CreateImageNegativeTests, \
31     ImageSettingsUnitTests, CreateMultiPartImageTests
32 from snaps.openstack.tests.create_keypairs_tests import CreateKeypairsTests, KeypairSettingsUnitTests
33 from snaps.openstack.tests.create_network_tests import CreateNetworkSuccessTests, NetworkSettingsUnitTests, \
34     PortSettingsUnitTests, SubnetSettingsUnitTests, CreateNetworkTypeTests
35 from snaps.openstack.tests.create_router_tests import CreateRouterSuccessTests, CreateRouterNegativeTests
36 from snaps.openstack.tests.create_instance_tests import CreateInstanceSingleNetworkTests, \
37     CreateInstancePubPrivNetTests, CreateInstanceOnComputeHost, CreateInstanceSimpleTests, \
38     FloatingIpSettingsUnitTests, InstanceSecurityGroupTests, VmInstanceSettingsUnitTests, \
39     CreateInstancePortManipulationTests, SimpleHealthCheck, CreateInstanceFromThreePartImage
40 from snaps.provisioning.tests.ansible_utils_tests import AnsibleProvisioningTests
41 from snaps.openstack.tests.os_source_file_test import OSComponentTestCase, OSIntegrationTestCase
42 from snaps.openstack.utils.tests.nova_utils_tests import NovaSmokeTests, NovaUtilsKeypairTests, NovaUtilsFlavorTests
43
44 __author__ = 'spisarski'
45
46
47 def add_unit_tests(suite):
48     """
49     Adds tests that do not require external resources
50     :param suite: the unittest.TestSuite object to which to add the tests
51     :return: None as the tests will be adding to the 'suite' parameter object
52     """
53     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(FileUtilsTests))
54     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(SecurityGroupRuleSettingsUnitTests))
55     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(SecurityGroupSettingsUnitTests))
56     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(ImageSettingsUnitTests))
57     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(KeypairSettingsUnitTests))
58     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(UserSettingsUnitTests))
59     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(ProjectSettingsUnitTests))
60     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(NetworkSettingsUnitTests))
61     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(SubnetSettingsUnitTests))
62     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(PortSettingsUnitTests))
63     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(FloatingIpSettingsUnitTests))
64     suite.addTest(unittest.TestLoader().loadTestsFromTestCase(VmInstanceSettingsUnitTests))
65
66
67 def add_openstack_client_tests(suite, source_filename, ext_net_name, use_keystone=True, http_proxy_str=None,
68                                log_level=logging.INFO):
69     """
70     Adds tests written to exercise OpenStack client retrieval
71     :param suite: the unittest.TestSuite object to which to add the tests
72     :param source_filename: the OpenStack credentials filename
73     :param ext_net_name: the name of an external network on the cloud under test
74     :param http_proxy_str: <host>:<port> of the proxy server (optional)
75     :param use_keystone: when True, tests requiring direct access to Keystone are added as these need to be running on
76                          a host that has access to the cloud's private network
77     :param log_level: the logging level
78     :return: None as the tests will be adding to the 'suite' parameter object
79     """
80     # Basic connection tests
81     suite.addTest(OSComponentTestCase.parameterize(GlanceSmokeTests, source_filename, ext_net_name,
82                                                    http_proxy_str=http_proxy_str, log_level=log_level))
83
84     if use_keystone:
85         suite.addTest(OSComponentTestCase.parameterize(KeystoneSmokeTests, source_filename, ext_net_name,
86                                                        http_proxy_str=http_proxy_str, log_level=log_level))
87
88     suite.addTest(OSComponentTestCase.parameterize(NeutronSmokeTests, source_filename, ext_net_name,
89                                                    http_proxy_str=http_proxy_str, log_level=log_level))
90     suite.addTest(OSComponentTestCase.parameterize(NovaSmokeTests, source_filename, ext_net_name,
91                                                    http_proxy_str=http_proxy_str, log_level=log_level))
92
93
94 def add_openstack_api_tests(suite, source_filename, ext_net_name, http_proxy_str=None, use_keystone=True,
95                             log_level=logging.INFO):
96     """
97     Adds tests written to exercise all existing OpenStack APIs
98     :param suite: the unittest.TestSuite object to which to add the tests
99     :param source_filename: the OpenStack credentials filename
100     :param ext_net_name: the name of an external network on the cloud under test
101     :param http_proxy_str: <host>:<port> of the proxy server (optional)
102     :param use_keystone: when True, tests requiring direct access to Keystone are added as these need to be running on
103                          a host that has access to the cloud's private network
104     :param log_level: the logging level
105     :return: None as the tests will be adding to the 'suite' parameter object
106     """
107     # Tests the OpenStack API calls
108     if use_keystone:
109         suite.addTest(OSComponentTestCase.parameterize(KeystoneUtilsTests, source_filename, ext_net_name,
110                                                        http_proxy_str=http_proxy_str, log_level=log_level))
111         suite.addTest(OSComponentTestCase.parameterize(CreateUserSuccessTests, source_filename, ext_net_name,
112                                                        http_proxy_str=http_proxy_str, log_level=log_level))
113         suite.addTest(OSComponentTestCase.parameterize(CreateProjectSuccessTests, source_filename, ext_net_name,
114                                                        http_proxy_str=http_proxy_str, log_level=log_level))
115         suite.addTest(OSComponentTestCase.parameterize(CreateProjectUserTests, source_filename, ext_net_name,
116                                                        http_proxy_str=http_proxy_str, log_level=log_level))
117
118     suite.addTest(OSComponentTestCase.parameterize(GlanceUtilsTests, source_filename, ext_net_name,
119                                                    http_proxy_str=http_proxy_str, log_level=log_level))
120     suite.addTest(OSComponentTestCase.parameterize(NeutronUtilsNetworkTests, source_filename, ext_net_name,
121                                                    http_proxy_str=http_proxy_str, log_level=log_level))
122     suite.addTest(OSComponentTestCase.parameterize(NeutronUtilsSubnetTests, source_filename, ext_net_name,
123                                                    http_proxy_str=http_proxy_str, log_level=log_level))
124     suite.addTest(OSComponentTestCase.parameterize(NeutronUtilsRouterTests, source_filename, ext_net_name,
125                                                    http_proxy_str=http_proxy_str, log_level=log_level))
126     suite.addTest(OSComponentTestCase.parameterize(NeutronUtilsSecurityGroupTests, source_filename, ext_net_name,
127                                                    http_proxy_str=http_proxy_str, log_level=log_level))
128     suite.addTest(OSComponentTestCase.parameterize(NovaUtilsKeypairTests, source_filename, ext_net_name,
129                                                    http_proxy_str=http_proxy_str, log_level=log_level))
130     suite.addTest(OSComponentTestCase.parameterize(NovaUtilsFlavorTests, source_filename, ext_net_name,
131                                                    http_proxy_str=http_proxy_str, log_level=log_level))
132     suite.addTest(OSComponentTestCase.parameterize(CreateFlavorTests, source_filename, ext_net_name,
133                                                    http_proxy_str=http_proxy_str, log_level=log_level))
134
135
136 def add_openstack_integration_tests(suite, source_filename, ext_net_name, proxy_settings=None, ssh_proxy_cmd=None,
137                                     use_keystone=True, flavor_metadata=None, image_metadata=None,
138                                     use_floating_ips=True, log_level=logging.INFO):
139     """
140     Adds tests written to exercise all long-running OpenStack integration tests meaning they will be creating VM
141     instances and potentially performing some SSH functions through floating IPs
142     :param suite: the unittest.TestSuite object to which to add the tests
143     :param source_filename: the OpenStack credentials filename
144     :param ext_net_name: the name of an external network on the cloud under test
145     :param proxy_settings: <host>:<port> of the proxy server (optional)
146     :param ssh_proxy_cmd: the command your environment requires for creating ssh connections through a proxy
147     :param use_keystone: when True, tests requiring direct access to Keystone are added as these need to be running on
148                          a host that has access to the cloud's private network
149     :param image_metadata: dict() object containing metadata for creating an image with custom config:
150                            (i.e. {'hw_video_model' : 'vga'}). It can be used to override the default url and
151                            create 3-part images by passing kerner_url and ramdisk_url info
152     :param flavor_metadata: dict() object containing the metadata required by your flavor based on your configuration:
153                             (i.e. {'hw:mem_page_size': 'large'})
154     :param use_floating_ips: when true, all tests requiring Floating IPs will be added to the suite
155     :param log_level: the logging level
156     :return: None as the tests will be adding to the 'suite' parameter object
157     """
158     # Tests the OpenStack API calls via a creator. If use_keystone, objects will be created with a custom user
159     # and project
160
161     # Creator Object tests
162     suite.addTest(OSIntegrationTestCase.parameterize(CreateSecurityGroupTests, source_filename, ext_net_name,
163                                                      http_proxy_str=proxy_settings, use_keystone=use_keystone,
164                                                      flavor_metadata=flavor_metadata, image_metadata=image_metadata,
165                                                      log_level=log_level))
166     suite.addTest(OSIntegrationTestCase.parameterize(CreateImageSuccessTests, source_filename, ext_net_name,
167                                                      http_proxy_str=proxy_settings, use_keystone=use_keystone,
168                                                      flavor_metadata=flavor_metadata, image_metadata=image_metadata,
169                                                      log_level=log_level))
170     suite.addTest(OSIntegrationTestCase.parameterize(CreateImageNegativeTests, source_filename, ext_net_name,
171                                                      http_proxy_str=proxy_settings, use_keystone=use_keystone,
172                                                      flavor_metadata=flavor_metadata, image_metadata=image_metadata,
173                                                      log_level=log_level))
174     suite.addTest(OSIntegrationTestCase.parameterize(CreateMultiPartImageTests, source_filename, ext_net_name,
175                                                      http_proxy_str=proxy_settings, use_keystone=use_keystone,
176                                                      flavor_metadata=flavor_metadata, image_metadata=image_metadata,
177                                                      log_level=log_level))
178     suite.addTest(OSIntegrationTestCase.parameterize(CreateKeypairsTests, source_filename, ext_net_name,
179                                                      http_proxy_str=proxy_settings, use_keystone=use_keystone,
180                                                      flavor_metadata=flavor_metadata, image_metadata=image_metadata,
181                                                      log_level=log_level))
182     suite.addTest(OSIntegrationTestCase.parameterize(CreateNetworkSuccessTests, source_filename, ext_net_name,
183                                                      http_proxy_str=proxy_settings, use_keystone=use_keystone,
184                                                      flavor_metadata=flavor_metadata, image_metadata=image_metadata,
185                                                      log_level=log_level))
186     suite.addTest(OSIntegrationTestCase.parameterize(CreateRouterSuccessTests, source_filename, ext_net_name,
187                                                      http_proxy_str=proxy_settings, use_keystone=use_keystone,
188                                                      flavor_metadata=flavor_metadata, image_metadata=image_metadata,
189                                                      log_level=log_level))
190     suite.addTest(OSIntegrationTestCase.parameterize(CreateRouterNegativeTests, source_filename, ext_net_name,
191                                                      http_proxy_str=proxy_settings, use_keystone=use_keystone,
192                                                      flavor_metadata=flavor_metadata, image_metadata=image_metadata,
193                                                      log_level=log_level))
194
195     # VM Instances
196     suite.addTest(OSIntegrationTestCase.parameterize(SimpleHealthCheck, source_filename, ext_net_name,
197                                                      http_proxy_str=proxy_settings, use_keystone=use_keystone,
198                                                      flavor_metadata=flavor_metadata, image_metadata=image_metadata,
199                                                      log_level=log_level))
200     suite.addTest(OSIntegrationTestCase.parameterize(CreateInstanceSimpleTests, source_filename, ext_net_name,
201                                                      http_proxy_str=proxy_settings, use_keystone=use_keystone,
202                                                      flavor_metadata=flavor_metadata, image_metadata=image_metadata,
203                                                      log_level=log_level))
204     suite.addTest(OSIntegrationTestCase.parameterize(CreateInstancePortManipulationTests, source_filename, ext_net_name,
205                                                      http_proxy_str=proxy_settings, use_keystone=use_keystone,
206                                                      flavor_metadata=flavor_metadata, image_metadata=image_metadata,
207                                                      log_level=log_level))
208     suite.addTest(OSIntegrationTestCase.parameterize(InstanceSecurityGroupTests, source_filename, ext_net_name,
209                                                      http_proxy_str=proxy_settings, use_keystone=use_keystone,
210                                                      flavor_metadata=flavor_metadata, image_metadata=image_metadata,
211                                                      log_level=log_level))
212     suite.addTest(OSIntegrationTestCase.parameterize(CreateInstanceOnComputeHost, source_filename, ext_net_name,
213                                                      http_proxy_str=proxy_settings, use_keystone=use_keystone,
214                                                      flavor_metadata=flavor_metadata, image_metadata=image_metadata,
215                                                      log_level=log_level))
216     suite.addTest(OSIntegrationTestCase.parameterize(CreateInstanceFromThreePartImage, source_filename, ext_net_name,
217                                                      http_proxy_str=proxy_settings, use_keystone=use_keystone,
218                                                      flavor_metadata=flavor_metadata, image_metadata=image_metadata,
219                                                      log_level=log_level))
220
221     if use_floating_ips:
222         suite.addTest(OSIntegrationTestCase.parameterize(CreateInstanceSingleNetworkTests, source_filename,
223                                                          ext_net_name, http_proxy_str=proxy_settings,
224                                                          ssh_proxy_cmd=ssh_proxy_cmd, use_keystone=use_keystone,
225                                                          flavor_metadata=flavor_metadata, image_metadata=image_metadata,
226                                                          log_level=log_level))
227         suite.addTest(OSIntegrationTestCase.parameterize(CreateInstancePubPrivNetTests, source_filename,
228                                                          ext_net_name, http_proxy_str=proxy_settings,
229                                                          ssh_proxy_cmd=ssh_proxy_cmd, use_keystone=use_keystone,
230                                                          flavor_metadata=flavor_metadata, image_metadata=image_metadata,
231                                                          log_level=log_level))
232         suite.addTest(OSIntegrationTestCase.parameterize(AnsibleProvisioningTests, source_filename,
233                                                          ext_net_name, http_proxy_str=proxy_settings,
234                                                          ssh_proxy_cmd=ssh_proxy_cmd, use_keystone=use_keystone,
235                                                          flavor_metadata=flavor_metadata, image_metadata=image_metadata,
236                                                          log_level=log_level))
237
238
239 def add_openstack_staging_tests(suite, source_filename, ext_net_name, proxy_settings=None, log_level=logging.INFO):
240     """
241     Adds tests that are still in development have not been designed to run successfully against all OpenStack pods
242     :param suite: the unittest.TestSuite object to which to add the tests
243     :param source_filename: the OpenStack credentials filename
244     :param ext_net_name: the name of an external network on the cloud under test
245     :param proxy_settings: <host>:<port> of the proxy server (optional)
246     :param log_level: the logging level
247     :return: None as the tests will be adding to the 'suite' parameter object
248     """
249     suite.addTest(OSComponentTestCase.parameterize(CreateNetworkTypeTests, source_filename, ext_net_name,
250                                                    http_proxy_str=proxy_settings, log_level=log_level))