Implement connection_check via shade too
[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 api_check
19 from functest.opnfv_tests.openstack.snaps import health_check
20 from functest.opnfv_tests.openstack.snaps import smoke
21
22
23 class APICheckTesting(unittest.TestCase):
24     """
25     Ensures the VPingUserdata class can run in Functest. This test does not
26     actually connect with an OpenStack pod.
27     """
28
29     def setUp(self):
30         self.os_creds = OSCreds(
31             username='user', password='pass',
32             auth_url='http://foo.com:5000/v3', project_name='bar')
33
34         self.api_check = api_check.ApiCheck(
35             os_creds=self.os_creds, ext_net_name='foo')
36
37     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
38                 'add_openstack_client_tests')
39     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
40                 'add_openstack_api_tests')
41     @mock.patch('unittest.TextTestRunner.run',
42                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
43     def test_run_success(self, *args):
44         args[0].return_value.testsRun = 100
45         args[0].return_value.failures = []
46         args[0].return_value.errors = []
47         self.assertEquals(testcase.TestCase.EX_OK, self.api_check.run())
48         self.assertEquals(
49             testcase.TestCase.EX_OK, self.api_check.is_successful())
50         args[0].assert_called_with(mock.ANY)
51         args[1].assert_called_with(
52             ext_net_name='foo', image_metadata=mock.ANY,
53             os_creds=self.os_creds, suite=mock.ANY, use_keystone=True)
54
55     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
56                 'add_openstack_client_tests')
57     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
58                 'add_openstack_api_tests')
59     @mock.patch('unittest.TextTestRunner.run',
60                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
61     def test_run_1_of_100_ko(self, *args):
62         args[0].return_value.testsRun = 100
63         args[0].return_value.failures = ['foo']
64         args[0].return_value.errors = []
65         self.assertEquals(testcase.TestCase.EX_OK, self.api_check.run())
66         self.assertEquals(
67             testcase.TestCase.EX_TESTCASE_FAILED,
68             self.api_check.is_successful())
69         args[0].assert_called_with(mock.ANY)
70         args[1].assert_called_with(
71             ext_net_name='foo', image_metadata=mock.ANY,
72             os_creds=self.os_creds, suite=mock.ANY, use_keystone=True)
73
74     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
75                 'add_openstack_client_tests')
76     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
77                 'add_openstack_api_tests')
78     @mock.patch('unittest.TextTestRunner.run',
79                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
80     def test_run_1_of_100_ko_criteria(self, *args):
81         self.api_check.criteria = 90
82         args[0].return_value.testsRun = 100
83         args[0].return_value.failures = ['foo']
84         args[0].return_value.errors = []
85         self.assertEquals(testcase.TestCase.EX_OK, self.api_check.run())
86         self.assertEquals(
87             testcase.TestCase.EX_OK, self.api_check.is_successful())
88         args[0].assert_called_with(mock.ANY)
89         args[1].assert_called_with(
90             ext_net_name='foo', image_metadata=mock.ANY,
91             os_creds=self.os_creds, suite=mock.ANY, use_keystone=True)
92
93
94 class HealthCheckTesting(unittest.TestCase):
95     """
96     Ensures the VPingUserdata class can run in Functest. This test does not
97     actually connect with an OpenStack pod.
98     """
99
100     def setUp(self):
101         self.os_creds = OSCreds(
102             username='user', password='pass',
103             auth_url='http://foo.com:5000/v3', project_name='bar')
104
105         self.health_check = health_check.HealthCheck(
106             os_creds=self.os_creds, ext_net_name='foo')
107
108     @mock.patch('snaps.openstack.tests.os_source_file_test.'
109                 'OSIntegrationTestCase.parameterize')
110     @mock.patch('unittest.TextTestRunner.run',
111                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
112     def test_run_success(self, *args):
113         args[0].return_value.testsRun = 100
114         args[0].return_value.failures = []
115         args[0].return_value.errors = []
116         self.assertEquals(testcase.TestCase.EX_OK, self.health_check.run())
117         self.assertEquals(
118             testcase.TestCase.EX_OK, self.health_check.is_successful())
119         args[0].assert_called_with(mock.ANY)
120         args[1].assert_called_with(
121             mock.ANY, ext_net_name='foo', flavor_metadata=mock.ANY,
122             image_metadata=mock.ANY, netconf_override=None,
123             os_creds=self.os_creds, use_keystone=True)
124
125     @mock.patch('snaps.openstack.tests.os_source_file_test.'
126                 'OSIntegrationTestCase.parameterize')
127     @mock.patch('unittest.TextTestRunner.run',
128                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
129     def test_run_1_of_100_ko(self, *args):
130         args[0].return_value.testsRun = 100
131         args[0].return_value.failures = ['foo']
132         args[0].return_value.errors = []
133         self.assertEquals(testcase.TestCase.EX_OK, self.health_check.run())
134         self.assertEquals(
135             testcase.TestCase.EX_TESTCASE_FAILED,
136             self.health_check.is_successful())
137         args[0].assert_called_with(mock.ANY)
138         args[1].assert_called_with(
139             mock.ANY, ext_net_name='foo', flavor_metadata=mock.ANY,
140             image_metadata=mock.ANY, netconf_override=None,
141             os_creds=self.os_creds, use_keystone=True)
142
143     @mock.patch('snaps.openstack.tests.os_source_file_test.'
144                 'OSIntegrationTestCase.parameterize')
145     @mock.patch('unittest.TextTestRunner.run',
146                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
147     def test_run_1_of_100_ko_criteria(self, *args):
148         self.health_check.criteria = 90
149         args[0].return_value.testsRun = 100
150         args[0].return_value.failures = ['foo']
151         args[0].return_value.errors = []
152         self.assertEquals(testcase.TestCase.EX_OK, self.health_check.run())
153         self.assertEquals(
154             testcase.TestCase.EX_OK, self.health_check.is_successful())
155         args[0].assert_called_with(mock.ANY)
156         args[1].assert_called_with(
157             mock.ANY, ext_net_name='foo', flavor_metadata=mock.ANY,
158             image_metadata=mock.ANY, netconf_override=None,
159             os_creds=self.os_creds, use_keystone=True)
160
161
162 class SmokeTesting(unittest.TestCase):
163     """
164     Ensures the VPingUserdata class can run in Functest. This test does not
165     actually connect with an OpenStack pod.
166     """
167
168     def setUp(self):
169         self.os_creds = OSCreds(
170             username='user', password='pass',
171             auth_url='http://foo.com:5000/v3', project_name='bar')
172
173         self.smoke = smoke.SnapsSmoke(
174             os_creds=self.os_creds, ext_net_name='foo')
175
176     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
177                 'add_openstack_integration_tests')
178     @mock.patch('unittest.TextTestRunner.run',
179                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
180     def test_run_success(self, *args):
181         args[0].return_value.testsRun = 100
182         args[0].return_value.failures = []
183         args[0].return_value.errors = []
184         self.assertEquals(testcase.TestCase.EX_OK, self.smoke.run())
185         self.assertEquals(testcase.TestCase.EX_OK, self.smoke.is_successful())
186         args[0].assert_called_with(mock.ANY)
187         args[1].assert_called_with(
188             ext_net_name='foo', flavor_metadata=mock.ANY,
189             image_metadata=mock.ANY, netconf_override=None,
190             os_creds=self.os_creds, suite=mock.ANY, use_floating_ips=True,
191             use_keystone=True)
192
193     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
194                 'add_openstack_integration_tests')
195     @mock.patch('unittest.TextTestRunner.run',
196                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
197     def test_run_1_of_100_ko(self, *args):
198         args[0].return_value.testsRun = 100
199         args[0].return_value.failures = ['foo']
200         args[0].return_value.errors = []
201         self.assertEquals(testcase.TestCase.EX_OK, self.smoke.run())
202         self.assertEquals(
203             testcase.TestCase.EX_TESTCASE_FAILED, self.smoke.is_successful())
204         args[0].assert_called_with(mock.ANY)
205         args[1].assert_called_with(
206             ext_net_name='foo', flavor_metadata=mock.ANY,
207             image_metadata=mock.ANY, netconf_override=mock.ANY,
208             os_creds=self.os_creds, suite=mock.ANY, use_floating_ips=True,
209             use_keystone=True)
210
211     @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
212                 'add_openstack_integration_tests')
213     @mock.patch('unittest.TextTestRunner.run',
214                 return_value=mock.MagicMock(name='unittest.TextTestResult'))
215     def test_run_1_of_100_ko_criteria(self, *args):
216         self.smoke.criteria = 90
217         args[0].return_value.testsRun = 100
218         args[0].return_value.failures = ['foo']
219         args[0].return_value.errors = []
220         self.assertEquals(testcase.TestCase.EX_OK, self.smoke.run())
221         self.assertEquals(
222             testcase.TestCase.EX_OK, self.smoke.is_successful())
223         args[0].assert_called_with(mock.ANY)
224         args[1].assert_called_with(
225             ext_net_name='foo', flavor_metadata=mock.ANY,
226             image_metadata=mock.ANY, netconf_override=None,
227             os_creds=self.os_creds, suite=mock.ANY, use_floating_ips=True,
228             use_keystone=True)
229
230
231 if __name__ == "__main__":
232     logging.disable(logging.CRITICAL)
233     unittest.main(verbosity=2)