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
8 # pylint: disable=missing-docstring
16 from functest.opnfv_tests.openstack.tempest import conf_utils
17 from functest.utils import config
20 class OSTempestConfUtilsTesting(unittest.TestCase):
21 # pylint: disable=too-many-public-methods
23 @mock.patch('subprocess.check_output')
24 def test_create_rally_deployment(self, mock_exec):
25 self.assertEqual(conf_utils.create_rally_deployment(), None)
27 mock.call(['rally', 'deployment', 'destroy', '--deployment',
28 str(getattr(config.CONF, 'rally_deployment_name'))]),
29 mock.call(['rally', 'deployment', 'create', '--fromenv', '--name',
30 str(getattr(config.CONF, 'rally_deployment_name'))],
32 mock.call(['rally', 'deployment', 'check'])]
33 mock_exec.assert_has_calls(calls)
35 @mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils'
37 def test_create_verifier(self, mock_logger_debug):
38 mock_popen = mock.Mock()
39 attrs = {'poll.return_value': None,
40 'stdout.readline.return_value': '0'}
41 mock_popen.configure_mock(**attrs)
43 setattr(config.CONF, 'tempest_verifier_name', 'test_verifier_name')
44 with mock.patch('subprocess.Popen', side_effect=Exception), \
45 self.assertRaises(Exception):
46 conf_utils.create_verifier()
47 mock_logger_debug.assert_any_call("Tempest test_verifier_name"
50 @mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
51 'create_verifier', return_value=mock.Mock())
52 @mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
53 'create_rally_deployment', return_value=mock.Mock())
54 def test_get_verif_id_missing_verif(self, mock_rally, mock_tempest):
55 # pylint: disable=unused-argument
56 setattr(config.CONF, 'tempest_verifier_name', 'test_verifier_name')
57 with mock.patch('functest.opnfv_tests.openstack.tempest.'
58 'conf_utils.subprocess.Popen') as mock_popen, \
59 self.assertRaises(Exception):
60 mock_stdout = mock.Mock()
61 attrs = {'stdout.readline.return_value': ''}
62 mock_stdout.configure_mock(**attrs)
63 mock_popen.return_value = mock_stdout
64 conf_utils.get_verifier_id()
66 @mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
67 'create_verifier', return_value=mock.Mock())
68 @mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
69 'create_rally_deployment', return_value=mock.Mock())
70 def test_get_verifier_id_default(self, mock_rally, mock_tempest):
71 # pylint: disable=unused-argument
72 setattr(config.CONF, 'tempest_verifier_name', 'test_verifier_name')
73 with mock.patch('functest.opnfv_tests.openstack.tempest.'
74 'conf_utils.subprocess.Popen') as mock_popen:
75 mock_stdout = mock.Mock()
76 attrs = {'stdout.readline.return_value': 'test_deploy_id'}
77 mock_stdout.configure_mock(**attrs)
78 mock_popen.return_value = mock_stdout
80 self.assertEqual(conf_utils.get_verifier_id(),
83 def test_get_depl_id_missing_rally(self):
84 setattr(config.CONF, 'tempest_verifier_name', 'test_deploy_name')
85 with mock.patch('functest.opnfv_tests.openstack.tempest.'
86 'conf_utils.subprocess.Popen') as mock_popen, \
87 self.assertRaises(Exception):
88 mock_stdout = mock.Mock()
89 attrs = {'stdout.readline.return_value': ''}
90 mock_stdout.configure_mock(**attrs)
91 mock_popen.return_value = mock_stdout
92 conf_utils.get_verifier_deployment_id()
94 def test_get_depl_id_default(self):
95 setattr(config.CONF, 'tempest_verifier_name', 'test_deploy_name')
96 with mock.patch('functest.opnfv_tests.openstack.tempest.'
97 'conf_utils.subprocess.Popen') as mock_popen:
98 mock_stdout = mock.Mock()
99 attrs = {'stdout.readline.return_value': 'test_deploy_id'}
100 mock_stdout.configure_mock(**attrs)
101 mock_popen.return_value = mock_stdout
103 self.assertEqual(conf_utils.get_verifier_deployment_id(),
106 def test_get_verif_repo_dir_default(self):
107 with mock.patch('functest.opnfv_tests.openstack.tempest.'
108 'conf_utils.os.path.join',
109 return_value='test_verifier_repo_dir'), \
110 mock.patch('functest.opnfv_tests.openstack.tempest.'
111 'conf_utils.get_verifier_id') as mock_get_id:
112 self.assertEqual(conf_utils.get_verifier_repo_dir(''),
113 'test_verifier_repo_dir')
114 self.assertTrue(mock_get_id.called)
116 def test_get_depl_dir_default(self):
117 with mock.patch('functest.opnfv_tests.openstack.tempest.'
118 'conf_utils.os.path.join',
119 return_value='test_verifier_repo_dir'), \
120 mock.patch('functest.opnfv_tests.openstack.tempest.'
121 'conf_utils.get_verifier_id') as mock_get_vid, \
122 mock.patch('functest.opnfv_tests.openstack.tempest.'
123 'conf_utils.get_verifier_deployment_id') \
125 self.assertEqual(conf_utils.get_verifier_deployment_dir('', ''),
126 'test_verifier_repo_dir')
127 self.assertTrue(mock_get_vid.called)
128 self.assertTrue(mock_get_did.called)
130 def _test_missing_param(self, params, image_id, flavor_id, alt=False):
131 with mock.patch('six.moves.configparser.RawConfigParser.'
133 mock.patch('six.moves.configparser.RawConfigParser.'
135 mock.patch('six.moves.configparser.RawConfigParser.'
136 'write') as mwrite, \
137 mock.patch('six.moves.builtins.open', mock.mock_open()), \
138 mock.patch('functest.utils.functest_utils.yaml.safe_load',
139 return_value={'validation': {'ssh_timeout': 300}}):
140 os.environ['OS_INTERFACE'] = ''
142 conf_utils.configure_tempest_update_params(
143 'test_conf_file', image_id=image_id,
145 mset.assert_any_call(params[0], params[1], params[2])
147 conf_utils.configure_tempest_update_params(
148 'test_conf_file', image_alt_id=image_id,
149 flavor_alt_id=flavor_id)
150 mset.assert_any_call(params[0], params[1], params[2])
151 self.assertTrue(mread.called)
152 self.assertTrue(mwrite.called)
154 def test_upd_missing_image_id(self):
155 self._test_missing_param(('compute', 'image_ref', 'test_image_id'),
156 'test_image_id', None)
158 def test_upd_missing_image_id_alt(self):
159 self._test_missing_param(
160 ('compute', 'image_ref_alt', 'test_image_id_alt'),
161 'test_image_id_alt', None, alt=True)
163 def test_upd_missing_flavor_id(self):
164 self._test_missing_param(('compute', 'flavor_ref', 'test_flavor_id'),
165 None, 'test_flavor_id')
167 def test_upd_missing_flavor_id_alt(self):
168 self._test_missing_param(
169 ('compute', 'flavor_ref_alt', 'test_flavor_id_alt'),
170 None, 'test_flavor_id_alt', alt=True)
172 def test_verif_missing_conf_file(self):
173 with mock.patch('functest.opnfv_tests.openstack.tempest.'
174 'conf_utils.os.path.isfile',
175 return_value=False), \
176 mock.patch('subprocess.check_output') as mexe, \
177 self.assertRaises(Exception) as context:
178 conf_utils.configure_verifier('test_dep_dir')
179 mexe.assert_called_once_with("rally verify configure-verifier")
180 msg = ("Tempest configuration file 'test_dep_dir/tempest.conf'"
182 self.assertTrue(msg in context.exception)
184 def test_configure_verifier_default(self):
185 with mock.patch('functest.opnfv_tests.openstack.tempest.'
186 'conf_utils.os.path.isfile',
187 return_value=True), \
188 mock.patch('subprocess.check_output') as mexe:
189 self.assertEqual(conf_utils.configure_verifier('test_dep_dir'),
190 'test_dep_dir/tempest.conf')
191 mexe.assert_called_once_with(
192 ['rally', 'verify', 'configure-verifier', '--reconfigure',
193 '--id', str(getattr(config.CONF, 'tempest_verifier_name'))])
196 if __name__ == "__main__":
197 logging.disable(logging.CRITICAL)
198 unittest.main(verbosity=2)