Remove the tenant and user created for tempest
[functest.git] / functest / tests / unit / openstack / tempest / test_conf_utils.py
1 #!/usr/bin/env python
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 # http://www.apache.org/licenses/LICENSE-2.0
7
8 import logging
9 import unittest
10
11 import mock
12
13 from functest.opnfv_tests.openstack.tempest import conf_utils
14 from functest.utils.constants import CONST
15
16
17 class OSTempestConfUtilsTesting(unittest.TestCase):
18
19     def test_create_tempest_resources_missing_network_dic(self):
20         with mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
21                         'os_utils.get_keystone_client',
22                         return_value=mock.Mock()), \
23             mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
24                        'os_utils.create_shared_network_full',
25                        return_value=None), \
26                 self.assertRaises(Exception) as context:
27             conf_utils.create_tempest_resources()
28             msg = 'Failed to create private network'
29             self.assertTrue(msg in context)
30
31     def test_create_tempest_resources_missing_image(self):
32         with mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
33                         'os_utils.get_keystone_client',
34                         return_value=mock.Mock()), \
35             mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
36                        'os_utils.create_shared_network_full',
37                        return_value=mock.Mock()), \
38             mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
39                        'os_utils.get_or_create_image',
40                        return_value=(mock.Mock(), None)), \
41                 self.assertRaises(Exception) as context:
42
43             CONST.__setattr__('tempest_use_custom_images', True)
44             conf_utils.create_tempest_resources()
45             msg = 'Failed to create image'
46             self.assertTrue(msg in context)
47
48             CONST.__setattr__('tempest_use_custom_images', False)
49             conf_utils.create_tempest_resources(use_custom_images=True)
50             msg = 'Failed to create image'
51             self.assertTrue(msg in context)
52
53     def test_create_tempest_resources_missing_flavor(self):
54         with mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
55                         'os_utils.get_keystone_client',
56                         return_value=mock.Mock()), \
57             mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
58                        'os_utils.create_shared_network_full',
59                        return_value=mock.Mock()), \
60             mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
61                        'os_utils.get_or_create_image',
62                        return_value=(mock.Mock(), 'image_id')), \
63             mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
64                        'os_utils.get_or_create_flavor',
65                        return_value=(mock.Mock(), None)), \
66                 self.assertRaises(Exception) as context:
67             CONST.__setattr__('tempest_use_custom_images', True)
68             CONST.__setattr__('tempest_use_custom_flavors', True)
69             conf_utils.create_tempest_resources()
70             msg = 'Failed to create flavor'
71             self.assertTrue(msg in context)
72
73             CONST.__setattr__('tempest_use_custom_images', True)
74             CONST.__setattr__('tempest_use_custom_flavors', False)
75             conf_utils.create_tempest_resources(use_custom_flavors=False)
76             msg = 'Failed to create flavor'
77             self.assertTrue(msg in context)
78
79     def test_get_verifier_id_missing_verifier(self):
80         CONST.__setattr__('tempest_deployment_name', 'test_deploy_name')
81         with mock.patch('functest.opnfv_tests.openstack.tempest.'
82                         'conf_utils.subprocess.Popen') as mock_popen, \
83                 self.assertRaises(Exception):
84             mock_stdout = mock.Mock()
85             attrs = {'stdout.readline.return_value': ''}
86             mock_stdout.configure_mock(**attrs)
87             mock_popen.return_value = mock_stdout
88             conf_utils.get_verifier_id(),
89
90     def test_get_verifier_id_default(self):
91         CONST.__setattr__('tempest_deployment_name', 'test_deploy_name')
92         with mock.patch('functest.opnfv_tests.openstack.tempest.'
93                         'conf_utils.subprocess.Popen') as mock_popen:
94             mock_stdout = mock.Mock()
95             attrs = {'stdout.readline.return_value': 'test_deploy_id'}
96             mock_stdout.configure_mock(**attrs)
97             mock_popen.return_value = mock_stdout
98
99             self.assertEqual(conf_utils.get_verifier_id(),
100                              'test_deploy_id')
101
102     def test_get_verifier_deployment_id_missing_rally(self):
103         CONST.__setattr__('tempest_deployment_name', 'test_deploy_name')
104         with mock.patch('functest.opnfv_tests.openstack.tempest.'
105                         'conf_utils.subprocess.Popen') as mock_popen, \
106                 self.assertRaises(Exception):
107             mock_stdout = mock.Mock()
108             attrs = {'stdout.readline.return_value': ''}
109             mock_stdout.configure_mock(**attrs)
110             mock_popen.return_value = mock_stdout
111             conf_utils.get_verifier_deployment_id(),
112
113     def test_get_verifier_deployment_id_default(self):
114         CONST.__setattr__('tempest_deployment_name', 'test_deploy_name')
115         with mock.patch('functest.opnfv_tests.openstack.tempest.'
116                         'conf_utils.subprocess.Popen') as mock_popen:
117             mock_stdout = mock.Mock()
118             attrs = {'stdout.readline.return_value': 'test_deploy_id'}
119             mock_stdout.configure_mock(**attrs)
120             mock_popen.return_value = mock_stdout
121
122             self.assertEqual(conf_utils.get_verifier_deployment_id(),
123                              'test_deploy_id')
124
125     def test_get_verifier_repo_dir_default(self):
126         with mock.patch('functest.opnfv_tests.openstack.tempest.'
127                         'conf_utils.os.path.join',
128                         return_value='test_verifier_repo_dir'), \
129             mock.patch('functest.opnfv_tests.openstack.tempest.'
130                        'conf_utils.get_verifier_id') as m:
131             self.assertEqual(conf_utils.get_verifier_repo_dir(''),
132                              'test_verifier_repo_dir')
133             self.assertTrue(m.called)
134
135     def test_get_verifier_deployment_dir_default(self):
136         with mock.patch('functest.opnfv_tests.openstack.tempest.'
137                         'conf_utils.os.path.join',
138                         return_value='test_verifier_repo_dir'), \
139             mock.patch('functest.opnfv_tests.openstack.tempest.'
140                        'conf_utils.get_verifier_id') as m1, \
141             mock.patch('functest.opnfv_tests.openstack.tempest.'
142                        'conf_utils.get_verifier_deployment_id') as m2:
143             self.assertEqual(conf_utils.get_verifier_deployment_dir('', ''),
144                              'test_verifier_repo_dir')
145             self.assertTrue(m1.called)
146             self.assertTrue(m2.called)
147
148     def test_get_repo_tag_default(self):
149         mock_popen = mock.Mock()
150         attrs = {'stdout.readline.return_value': 'test_tag'}
151         mock_popen.configure_mock(**attrs)
152
153         with mock.patch('functest.opnfv_tests.openstack.tempest.'
154                         'conf_utils.subprocess.Popen',
155                         return_value=mock_popen):
156             self.assertEqual(conf_utils.get_repo_tag('test_repo'),
157                              'test_tag')
158
159     def test_backup_tempest_config_default(self):
160         with mock.patch('functest.opnfv_tests.openstack.tempest.'
161                         'conf_utils.os.path.exists',
162                         return_value=False), \
163             mock.patch('functest.opnfv_tests.openstack.tempest.'
164                        'conf_utils.os.makedirs') as m1, \
165             mock.patch('functest.opnfv_tests.openstack.tempest.'
166                        'conf_utils.shutil.copyfile') as m2:
167             conf_utils.backup_tempest_config('test_conf_file')
168             self.assertTrue(m1.called)
169             self.assertTrue(m2.called)
170
171         with mock.patch('functest.opnfv_tests.openstack.tempest.'
172                         'conf_utils.os.path.exists',
173                         return_value=True), \
174             mock.patch('functest.opnfv_tests.openstack.tempest.'
175                        'conf_utils.shutil.copyfile') as m2:
176             conf_utils.backup_tempest_config('test_conf_file')
177             self.assertTrue(m2.called)
178
179     def test_configure_tempest_default(self):
180         with mock.patch('functest.opnfv_tests.openstack.tempest.'
181                         'conf_utils.configure_verifier',
182                         return_value='test_conf_file'), \
183             mock.patch('functest.opnfv_tests.openstack.tempest.'
184                        'conf_utils.configure_tempest_update_params') as m1:
185             conf_utils.configure_tempest('test_dep_dir')
186             self.assertTrue(m1.called)
187
188     def test_configure_tempest_defcore_default(self):
189         img_flavor_dict = {'image_id': 'test_image_id',
190                            'flavor_id': 'test_flavor_id',
191                            'image_id_alt': 'test_image_alt_id',
192                            'flavor_id_alt': 'test_flavor_alt_id'}
193         with mock.patch('functest.opnfv_tests.openstack.tempest.'
194                         'conf_utils.configure_verifier',
195                         return_value='test_conf_file'), \
196             mock.patch('functest.opnfv_tests.openstack.tempest.'
197                        'conf_utils.configure_tempest_update_params'), \
198             mock.patch('functest.opnfv_tests.openstack.tempest.'
199                        'conf_utils.ConfigParser.RawConfigParser.'
200                        'set') as mset, \
201             mock.patch('functest.opnfv_tests.openstack.tempest.'
202                        'conf_utils.ConfigParser.RawConfigParser.'
203                        'read') as mread, \
204             mock.patch('functest.opnfv_tests.openstack.tempest.'
205                        'conf_utils.ConfigParser.RawConfigParser.'
206                        'write') as mwrite, \
207             mock.patch('__builtin__.open', mock.mock_open()), \
208             mock.patch('functest.opnfv_tests.openstack.tempest.'
209                        'conf_utils.shutil.copyfile'):
210             conf_utils.configure_tempest_defcore('test_dep_dir',
211                                                  img_flavor_dict)
212             mset.assert_any_call('compute', 'image_ref', 'test_image_id')
213             mset.assert_any_call('compute', 'image_ref_alt',
214                                  'test_image_alt_id')
215             mset.assert_any_call('compute', 'flavor_ref', 'test_flavor_id')
216             mset.assert_any_call('compute', 'flavor_ref_alt',
217                                  'test_flavor_alt_id')
218             self.assertTrue(mread.called)
219             self.assertTrue(mwrite.called)
220
221     def _test_missing_param(self, params, image_id, flavor_id):
222         with mock.patch('functest.opnfv_tests.openstack.tempest.'
223                         'conf_utils.ConfigParser.RawConfigParser.'
224                         'set') as mset, \
225             mock.patch('functest.opnfv_tests.openstack.tempest.'
226                        'conf_utils.ConfigParser.RawConfigParser.'
227                        'read') as mread, \
228             mock.patch('functest.opnfv_tests.openstack.tempest.'
229                        'conf_utils.ConfigParser.RawConfigParser.'
230                        'write') as mwrite, \
231             mock.patch('__builtin__.open', mock.mock_open()), \
232             mock.patch('functest.opnfv_tests.openstack.tempest.'
233                        'conf_utils.backup_tempest_config'), \
234             mock.patch('functest.utils.functest_utils.yaml.safe_load',
235                        return_value={'validation': {'ssh_timeout': 300}}):
236             CONST.__setattr__('OS_ENDPOINT_TYPE', None)
237             conf_utils.\
238                 configure_tempest_update_params('test_conf_file',
239                                                 IMAGE_ID=image_id,
240                                                 FLAVOR_ID=flavor_id)
241             mset.assert_any_call(params[0], params[1], params[2])
242             self.assertTrue(mread.called)
243             self.assertTrue(mwrite.called)
244
245     def test_configure_tempest_update_params_missing_image_id(self):
246             CONST.__setattr__('tempest_use_custom_images', True)
247             self._test_missing_param(('compute', 'image_ref',
248                                       'test_image_id'), 'test_image_id',
249                                      None)
250
251     def test_configure_tempest_update_params_missing_image_id_alt(self):
252             CONST.__setattr__('tempest_use_custom_images', True)
253             conf_utils.IMAGE_ID_ALT = 'test_image_id_alt'
254             self._test_missing_param(('compute', 'image_ref_alt',
255                                       'test_image_id_alt'), None, None)
256
257     def test_configure_tempest_update_params_missing_flavor_id(self):
258             CONST.__setattr__('tempest_use_custom_flavors', True)
259             self._test_missing_param(('compute', 'flavor_ref',
260                                       'test_flavor_id'), None,
261                                      'test_flavor_id')
262
263     def test_configure_tempest_update_params_missing_flavor_id_alt(self):
264             CONST.__setattr__('tempest_use_custom_flavors', True)
265             conf_utils.FLAVOR_ID_ALT = 'test_flavor_id_alt'
266             self._test_missing_param(('compute', 'flavor_ref_alt',
267                                       'test_flavor_id_alt'), None,
268                                      None)
269
270     def test_configure_verifier_missing_temp_conf_file(self):
271         with mock.patch('functest.opnfv_tests.openstack.tempest.'
272                         'conf_utils.os.path.isfile',
273                         return_value=False), \
274             mock.patch('functest.opnfv_tests.openstack.tempest.'
275                        'conf_utils.ft_utils.execute_command') as mexe, \
276                 self.assertRaises(Exception) as context:
277             conf_utils.configure_verifier('test_dep_dir')
278             mexe.assert_any_call("rally verify configure-verifier")
279             msg = ("Tempest configuration file 'test_dep_dir/tempest.conf'"
280                    " NOT found.")
281             self.assertTrue(msg in context)
282
283     def test_configure_verifier_default(self):
284         with mock.patch('functest.opnfv_tests.openstack.tempest.'
285                         'conf_utils.os.path.isfile',
286                         return_value=True), \
287             mock.patch('functest.opnfv_tests.openstack.tempest.'
288                        'conf_utils.ft_utils.execute_command') as mexe:
289             self.assertEqual(conf_utils.configure_verifier('test_dep_dir'),
290                              'test_dep_dir/tempest.conf')
291             mexe.assert_any_call("rally verify configure-verifier "
292                                  "--reconfigure")
293
294
295 if __name__ == "__main__":
296     logging.disable(logging.CRITICAL)
297     unittest.main(verbosity=2)