Leverage on Xtesting
[functest.git] / functest / tests / unit / openstack / snaps / test_snaps.py
1 # Copyright (c) 2017 Cable Television Laboratories, Inc. and others.
2 #
3 # All rights reserved. This program and the accompanying materials
4 # are made available under the terms of the Apache License, Version 2.0
5 # which accompanies this distribution, and is available at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8
9 # pylint: disable=missing-docstring
10
11 import logging
12 import unittest
13
14 import mock
15 from snaps.openstack.os_credentials import OSCreds
16 from xtesting.core import testcase
17
18 from functest.opnfv_tests.openstack.snaps import (
19     connection_check, api_check, health_check, smoke)
20
21
22 class ConnectionCheckTesting(unittest.TestCase):
23     """
24     Ensures the VPingUserdata class can run in Functest. This test does not
25     actually connect with an OpenStack pod.
26     """
27
28     def setUp(self):
29         self.os_creds = OSCreds(
30             username='user', password='pass',
31             auth_url='http://foo.com:5000/v3', project_name='bar')
32
33         self.connection_check = connection_check.ConnectionCheck(
34             os_creds=self.os_creds, ext_net_name='foo')
35
36     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
37                 'add_openstack_client_tests')
38     @mock.patch('unittest.TextTestRunner.run',
39                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
40     def test_run_success(self, *args):
41         args[0].return_value.testsRun = 100
42         args[0].return_value.failures = []
43         args[0].return_value.errors = []
44         self.assertEquals(testcase.TestCase.EX_OK, self.connection_check.run())
45         self.assertEquals(
46             testcase.TestCase.EX_OK, self.connection_check.is_successful())
47         args[0].assert_called_with(mock.ANY)
48         args[1].assert_called_with(
49             ext_net_name='foo', os_creds=self.os_creds, suite=mock.ANY,
50             use_keystone=True)
51
52     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
53                 'add_openstack_client_tests')
54     @mock.patch('unittest.TextTestRunner.run',
55                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
56     def test_run_1_of_100_ko(self, *args):
57         args[0].return_value.testsRun = 100
58         args[0].return_value.failures = ['foo']
59         args[0].return_value.errors = []
60         self.assertEquals(testcase.TestCase.EX_OK, self.connection_check.run())
61         self.assertEquals(
62             testcase.TestCase.EX_TESTCASE_FAILED,
63             self.connection_check.is_successful())
64         args[0].assert_called_with(mock.ANY)
65         args[1].assert_called_with(
66             ext_net_name='foo', os_creds=self.os_creds, suite=mock.ANY,
67             use_keystone=True)
68
69     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
70                 'add_openstack_client_tests')
71     @mock.patch('unittest.TextTestRunner.run',
72                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
73     def test_run_1_of_100_ko_criteria(self, *args):
74         self.connection_check.criteria = 90
75         args[0].return_value.testsRun = 100
76         args[0].return_value.failures = ['foo']
77         args[0].return_value.errors = []
78         self.assertEquals(testcase.TestCase.EX_OK, self.connection_check.run())
79         self.assertEquals(
80             testcase.TestCase.EX_OK, self.connection_check.is_successful())
81         args[0].assert_called_with(mock.ANY)
82         args[1].assert_called_with(
83             ext_net_name='foo', os_creds=self.os_creds, suite=mock.ANY,
84             use_keystone=True)
85
86
87 class APICheckTesting(unittest.TestCase):
88     """
89     Ensures the VPingUserdata class can run in Functest. This test does not
90     actually connect with an OpenStack pod.
91     """
92
93     def setUp(self):
94         self.os_creds = OSCreds(
95             username='user', password='pass',
96             auth_url='http://foo.com:5000/v3', project_name='bar')
97
98         self.api_check = api_check.ApiCheck(
99             os_creds=self.os_creds, ext_net_name='foo')
100
101     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
102                 'add_openstack_api_tests')
103     @mock.patch('unittest.TextTestRunner.run',
104                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
105     def test_run_success(self, *args):
106         args[0].return_value.testsRun = 100
107         args[0].return_value.failures = []
108         args[0].return_value.errors = []
109         self.assertEquals(testcase.TestCase.EX_OK, self.api_check.run())
110         self.assertEquals(
111             testcase.TestCase.EX_OK, self.api_check.is_successful())
112         args[0].assert_called_with(mock.ANY)
113         args[1].assert_called_with(
114             ext_net_name='foo', image_metadata=mock.ANY,
115             os_creds=self.os_creds, suite=mock.ANY, use_keystone=True)
116
117     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
118                 'add_openstack_api_tests')
119     @mock.patch('unittest.TextTestRunner.run',
120                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
121     def test_run_1_of_100_ko(self, *args):
122         args[0].return_value.testsRun = 100
123         args[0].return_value.failures = ['foo']
124         args[0].return_value.errors = []
125         self.assertEquals(testcase.TestCase.EX_OK, self.api_check.run())
126         self.assertEquals(
127             testcase.TestCase.EX_TESTCASE_FAILED,
128             self.api_check.is_successful())
129         args[0].assert_called_with(mock.ANY)
130         args[1].assert_called_with(
131             ext_net_name='foo', image_metadata=mock.ANY,
132             os_creds=self.os_creds, suite=mock.ANY, use_keystone=True)
133
134     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
135                 'add_openstack_api_tests')
136     @mock.patch('unittest.TextTestRunner.run',
137                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
138     def test_run_1_of_100_ko_criteria(self, *args):
139         self.api_check.criteria = 90
140         args[0].return_value.testsRun = 100
141         args[0].return_value.failures = ['foo']
142         args[0].return_value.errors = []
143         self.assertEquals(testcase.TestCase.EX_OK, self.api_check.run())
144         self.assertEquals(
145             testcase.TestCase.EX_OK, self.api_check.is_successful())
146         args[0].assert_called_with(mock.ANY)
147         args[1].assert_called_with(
148             ext_net_name='foo', image_metadata=mock.ANY,
149             os_creds=self.os_creds, suite=mock.ANY, use_keystone=True)
150
151
152 class HealthCheckTesting(unittest.TestCase):
153     """
154     Ensures the VPingUserdata class can run in Functest. This test does not
155     actually connect with an OpenStack pod.
156     """
157
158     def setUp(self):
159         self.os_creds = OSCreds(
160             username='user', password='pass',
161             auth_url='http://foo.com:5000/v3', project_name='bar')
162
163         self.health_check = health_check.HealthCheck(
164             os_creds=self.os_creds, ext_net_name='foo')
165
166     @mock.patch('snaps.openstack.tests.os_source_file_test.'
167                 'OSIntegrationTestCase.parameterize')
168     @mock.patch('unittest.TextTestRunner.run',
169                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
170     def test_run_success(self, *args):
171         args[0].return_value.testsRun = 100
172         args[0].return_value.failures = []
173         args[0].return_value.errors = []
174         self.assertEquals(testcase.TestCase.EX_OK, self.health_check.run())
175         self.assertEquals(
176             testcase.TestCase.EX_OK, self.health_check.is_successful())
177         args[0].assert_called_with(mock.ANY)
178         args[1].assert_called_with(
179             mock.ANY, ext_net_name='foo', flavor_metadata=None,
180             image_metadata=mock.ANY, netconf_override=None,
181             os_creds=self.os_creds, use_keystone=True)
182
183     @mock.patch('snaps.openstack.tests.os_source_file_test.'
184                 'OSIntegrationTestCase.parameterize')
185     @mock.patch('unittest.TextTestRunner.run',
186                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
187     def test_run_1_of_100_ko(self, *args):
188         args[0].return_value.testsRun = 100
189         args[0].return_value.failures = ['foo']
190         args[0].return_value.errors = []
191         self.assertEquals(testcase.TestCase.EX_OK, self.health_check.run())
192         self.assertEquals(
193             testcase.TestCase.EX_TESTCASE_FAILED,
194             self.health_check.is_successful())
195         args[0].assert_called_with(mock.ANY)
196         args[1].assert_called_with(
197             mock.ANY, ext_net_name='foo', flavor_metadata=None,
198             image_metadata=mock.ANY, netconf_override=None,
199             os_creds=self.os_creds, use_keystone=True)
200
201     @mock.patch('snaps.openstack.tests.os_source_file_test.'
202                 'OSIntegrationTestCase.parameterize')
203     @mock.patch('unittest.TextTestRunner.run',
204                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
205     def test_run_1_of_100_ko_criteria(self, *args):
206         self.health_check.criteria = 90
207         args[0].return_value.testsRun = 100
208         args[0].return_value.failures = ['foo']
209         args[0].return_value.errors = []
210         self.assertEquals(testcase.TestCase.EX_OK, self.health_check.run())
211         self.assertEquals(
212             testcase.TestCase.EX_OK, self.health_check.is_successful())
213         args[0].assert_called_with(mock.ANY)
214         args[1].assert_called_with(
215             mock.ANY, ext_net_name='foo', flavor_metadata=None,
216             image_metadata=mock.ANY, netconf_override=None,
217             os_creds=self.os_creds, use_keystone=True)
218
219
220 class SmokeTesting(unittest.TestCase):
221     """
222     Ensures the VPingUserdata class can run in Functest. This test does not
223     actually connect with an OpenStack pod.
224     """
225
226     def setUp(self):
227         self.os_creds = OSCreds(
228             username='user', password='pass',
229             auth_url='http://foo.com:5000/v3', project_name='bar')
230
231         self.smoke = smoke.SnapsSmoke(
232             os_creds=self.os_creds, ext_net_name='foo')
233
234     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
235                 'add_openstack_integration_tests')
236     @mock.patch('unittest.TextTestRunner.run',
237                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
238     def test_run_success(self, *args):
239         args[0].return_value.testsRun = 100
240         args[0].return_value.failures = []
241         args[0].return_value.errors = []
242         self.assertEquals(testcase.TestCase.EX_OK, self.smoke.run())
243         self.assertEquals(testcase.TestCase.EX_OK, self.smoke.is_successful())
244         args[0].assert_called_with(mock.ANY)
245         args[1].assert_called_with(
246             ext_net_name='foo', flavor_metadata=None, image_metadata=mock.ANY,
247             netconf_override=None, os_creds=self.os_creds,
248             suite=mock.ANY, use_floating_ips=True, use_keystone=True)
249
250     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
251                 'add_openstack_integration_tests')
252     @mock.patch('unittest.TextTestRunner.run',
253                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
254     def test_run_1_of_100_ko(self, *args):
255         args[0].return_value.testsRun = 100
256         args[0].return_value.failures = ['foo']
257         args[0].return_value.errors = []
258         self.assertEquals(testcase.TestCase.EX_OK, self.smoke.run())
259         self.assertEquals(
260             testcase.TestCase.EX_TESTCASE_FAILED, self.smoke.is_successful())
261         args[0].assert_called_with(mock.ANY)
262         args[1].assert_called_with(
263             ext_net_name='foo', flavor_metadata=None, image_metadata=mock.ANY,
264             netconf_override=mock.ANY, os_creds=self.os_creds,
265             suite=mock.ANY, use_floating_ips=True, use_keystone=True)
266
267     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
268                 'add_openstack_integration_tests')
269     @mock.patch('unittest.TextTestRunner.run',
270                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
271     def test_run_1_of_100_ko_criteria(self, *args):
272         self.smoke.criteria = 90
273         args[0].return_value.testsRun = 100
274         args[0].return_value.failures = ['foo']
275         args[0].return_value.errors = []
276         self.assertEquals(testcase.TestCase.EX_OK, self.smoke.run())
277         self.assertEquals(
278             testcase.TestCase.EX_OK, self.smoke.is_successful())
279         args[0].assert_called_with(mock.ANY)
280         args[1].assert_called_with(
281             ext_net_name='foo', flavor_metadata=None, image_metadata=mock.ANY,
282             netconf_override=None, os_creds=self.os_creds,
283             suite=mock.ANY, use_floating_ips=True, use_keystone=True)
284
285
286 if __name__ == "__main__":
287     logging.disable(logging.CRITICAL)
288     unittest.main(verbosity=2)