1 # Copyright (c) 2016-2017 Intel Corporation
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 from __future__ import absolute_import
22 from yardstick.benchmark.contexts.standalone import sriov
26 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
27 'pci': ['0000:06:00.0', '0000:06:00.1'],
31 'interface': {0: 'enp6s0f0', 1: 'enp6s0f1'},
32 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
33 'pci': ['0000:06:00.0', '0000:06:00.1'],
36 CORRECT_FILE_PATH = "/etc/yardstick/nodes/pod_sriov.yaml"
37 WRONG_FILE_PATH = "/etc/yardstick/wrong.yaml"
38 SAMPLE_FILE = "sriov_sample_write_to_file.txt"
41 'auth_type': 'ssh_key',
45 'key_filename': '/root/.ssh/id_rsa',
46 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
49 'images': '/var/lib/libvirt/images/ubuntu1.img',
51 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}]
54 'auth_type': 'password',
56 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
60 'images': '/var/lib/libvirt/images/ubuntu1.img',
62 'password': 'password',
63 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}]
66 PCIS = ['0000:06:00.0', '0000:06:00.1']
69 class SriovTestCase(unittest.TestCase):
71 NODES_SAMPLE_SSH = "sriov_sample_ssh_key.yaml"
72 NODES_SAMPLE_PASSWORD = "sriov_sample_password.yaml"
75 self.test_context = sriov.Sriov()
77 def test_construct(self):
78 self.assertIsNone(self.test_context.name)
79 self.assertIsNone(self.test_context.file_path)
80 self.assertEqual(self.test_context.nodes, [])
81 self.assertEqual(self.test_context.sriov, [])
82 self.assertFalse(self.test_context.vm_deploy)
83 self.assertTrue(self.test_context.first_run)
84 self.assertEqual(self.test_context.user, "")
85 self.assertEqual(self.test_context.ssh_ip, "")
86 self.assertEqual(self.test_context.passwd, "")
87 self.assertEqual(self.test_context.ssh_port, "")
88 self.assertEqual(self.test_context.auth_type, "")
91 self.test_context.parse_pod_and_get_data = mock.Mock()
92 self.test_context.file_path = CORRECT_FILE_PATH
93 self.test_context.init()
94 self.assertIsNone(self.test_context.init())
96 def test_successful_init_with_ssh(self):
97 CORRECT_FILE_PATH = self._get_file_abspath(self.NODES_SAMPLE_SSH)
98 self.test_context.parse_pod_and_get_data(CORRECT_FILE_PATH)
100 def test_successful_init_with_password(self):
101 CORRECT_FILE_PATH = self._get_file_abspath(self.NODES_SAMPLE_PASSWORD)
102 self.test_context.parse_pod_and_get_data(CORRECT_FILE_PATH)
104 def test_unsuccessful_init(self):
107 lambda: self.test_context.parse_pod_and_get_data(WRONG_FILE_PATH))
109 @mock.patch('yardstick.network_services.utils.provision_tool', return_value="a")
110 def test_ssh_connection(self, mock_prov):
111 with mock.patch("yardstick.ssh.SSH") as ssh:
112 ssh_mock = mock.Mock(autospec=ssh.SSH)
114 mock.Mock(return_value=(1, "a", ""))
115 ssh.return_value = ssh_mock
116 mock_prov.provision_tool = mock.Mock()
117 sriov_obj = sriov.Sriov()
118 sriov_obj.connection = ssh_mock
119 sriov_obj.sriov = SRIOV_PASSWORD
120 self.assertIsNone(sriov_obj.ssh_remote_machine())
122 @mock.patch('yardstick.network_services.utils.provision_tool', return_value="a")
123 def test_ssh_connection_ssh_key(self, mock_prov):
124 with mock.patch("yardstick.ssh.SSH") as ssh:
125 ssh_mock = mock.Mock(autospec=ssh.SSH)
127 mock.Mock(return_value=(1, "a", ""))
128 ssh.return_value = ssh_mock
129 mock_prov.provision_tool = mock.Mock()
130 sriov_obj = sriov.Sriov()
131 sriov_obj.connection = ssh_mock
132 sriov_obj.sriov = SRIOV
133 sriov_obj.key_filename = '/root/.ssh/id_rsa'
134 self.assertIsNone(sriov_obj.ssh_remote_machine())
136 def test_get_nic_details(self):
137 with mock.patch("yardstick.ssh.SSH") as ssh:
138 ssh_mock = mock.Mock(autospec=ssh.SSH)
140 mock.Mock(return_value=(0, "eth0 eth1", ""))
141 ssh.return_value = ssh_mock
142 sriov_obj = sriov.Sriov()
143 sriov_obj.sriov = SRIOV
144 sriov_obj.connection = ssh_mock
145 self.assertIsNotNone(sriov_obj.get_nic_details())
147 def test_install_req_libs(self):
148 with mock.patch("yardstick.ssh.SSH") as ssh:
149 ssh_mock = mock.Mock(autospec=ssh.SSH)
151 mock.Mock(return_value=(0, {}, ""))
152 ssh.return_value = ssh_mock
153 sriov_obj = sriov.Sriov()
154 sriov_obj.first_run = True
155 sriov_obj.connection = ssh_mock
156 self.assertIsNone(sriov_obj.install_req_libs())
158 def test_configure_nics_for_sriov(self):
159 with mock.patch("yardstick.ssh.SSH") as ssh:
161 'interface': {0: 'enp6s0f0', 1: 'enp6s0f1'},
162 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
163 'pci': ['0000:06:00.0', '0000:06:00.1'],
164 'phy_driver': 'i40e',
166 ssh_mock = mock.Mock(autospec=ssh.SSH)
168 mock.Mock((DRIVER), return_value=(0, "0 driver", ""))
169 ssh.return_value = ssh_mock
171 mock.Mock(return_value=(0, {}, ""))
172 ssh.return_value = ssh_mock
173 for i in range(len(NIC_DETAILS['pci'])):
175 mock.Mock(return_value=(0, {}, ""))
177 mock.Mock(return_value=(0, {}, ""))
178 sriov_obj = sriov.Sriov()
179 sriov_obj.connection = ssh_mock
181 mock.Mock(return_value=(
183 "{'0':'06:02:00','1':'06:06:00'}",
185 sriov_obj.get_vf_datas = mock.Mock(return_value={
186 '0000:06:00.0': '0000:06:02.0'})
187 nic_details['vf_pci'][i] = sriov_obj.get_vf_datas.return_value
189 vf_pci[i] = sriov_obj.get_vf_datas.return_value
190 with mock.patch("yardstick.benchmark.contexts.standalone.sriov.time"):
191 self.assertIsNotNone(sriov_obj.configure_nics_for_sriov(DRIVER, NIC_DETAILS))
193 def test_setup_sriov_context(self):
194 with mock.patch("yardstick.ssh.SSH") as ssh:
196 'interface': {0: 'enp6s0f0', 1: 'enp6s0f1'},
197 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
198 'pci': ['0000:06:00.0', '0000:06:00.1'],
199 'phy_driver': 'i40e',
200 'vf_pci': [{'vf_pci': '06:02.00'}, {'vf_pci': '06:06.00'}]}
201 vf = [{'vf_pci': '06:02.00'}, {'vf_pci': '06:06.00'}]
202 ssh_mock = mock.Mock(autospec=ssh.SSH)
204 mock.Mock(return_value=(0, {}, ""))
205 ssh.return_value = ssh_mock
206 sriov_obj = sriov.Sriov()
207 sriov_obj.connection = ssh_mock
208 sriov_obj.sriov = SRIOV
209 blacklist = "/etc/modprobe.d/blacklist.conf"
210 self.assertEqual(vfnic, "i40evf")
211 mock_sriov = mock.Mock()
212 mock_sriov.sriov_obj.read_from_file(blacklist)
213 sriov_obj.read_from_file = mock.Mock(
214 return_value="some random text")
216 mock.Mock(return_value=(0, {}, ""))
217 sriov_obj.configure_nics_for_sriov = mock.Mock(
218 return_value=nic_details)
219 nic_details = sriov_obj.configure_nics_for_sriov.return_value
220 self.assertEqual(vf, nic_details['vf_pci'])
222 {'vf_pci': '06:02.00', 'mac': '00:00:00:00:00:0a'},
223 {'vf_pci': '06:06.00', 'mac': '00:00:00:00:00:0b'}]
224 sriov_obj.add_sriov_interface = mock.Mock()
226 mock.Mock(return_value=(0, {}, ""))
227 ssh_mock.put = mock.Mock()
228 sriov_obj.check_output = mock.Mock(return_value=(1, {}))
229 with mock.patch("yardstick.benchmark.contexts.standalone.sriov.time"):
230 self.assertIsNone(sriov_obj.setup_sriov_context(PCIS, nic_details, DRIVER))
232 def test_setup_sriov_context_vm_already_present(self):
233 with mock.patch("yardstick.ssh.SSH") as ssh:
235 'interface': {0: 'enp6s0f0', 1: 'enp6s0f1'},
236 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
237 'pci': ['0000:06:00.0', '0000:06:00.1'],
238 'phy_driver': 'i40e',
239 'vf_pci': [{'vf_pci': '06:02.00'}, {'vf_pci': '06:06.00'}]}
240 vf = [{'vf_pci': '06:02.00'}, {'vf_pci': '06:06.00'}]
241 ssh_mock = mock.Mock(autospec=ssh.SSH)
243 mock.Mock(return_value=(0, {}, ""))
244 ssh.return_value = ssh_mock
245 sriov_obj = sriov.Sriov()
246 sriov_obj.connection = ssh_mock
247 sriov_obj.sriov = SRIOV
248 blacklist = "/etc/modprobe.d/blacklist.conf"
249 self.assertEqual(vfnic, "i40evf")
250 mock_sriov = mock.Mock()
251 mock_sriov.sriov_obj.read_from_file(blacklist)
252 sriov_obj.read_from_file = mock.Mock(
253 return_value="some random text")
255 mock.Mock(return_value=(0, {}, ""))
256 sriov_obj.configure_nics_for_sriov = mock.Mock(
257 return_value=nic_details)
258 nic_details = sriov_obj.configure_nics_for_sriov.return_value
259 self.assertEqual(vf, nic_details['vf_pci'])
261 {'vf_pci': '06:02.00', 'mac': '00:00:00:00:00:0a'},
262 {'vf_pci': '06:06.00', 'mac': '00:00:00:00:00:0b'}]
263 sriov_obj.add_sriov_interface = mock.Mock()
265 mock.Mock(return_value=(0, {}, ""))
266 ssh_mock.put = mock.Mock()
267 sriov_obj.check_output = mock.Mock(return_value=(0, "vm1"))
268 with mock.patch("yardstick.benchmark.contexts.standalone.sriov.time"):
269 self.assertIsNone(sriov_obj.setup_sriov_context(PCIS, nic_details, DRIVER))
272 'yardstick.benchmark.contexts.standalone.sriov',
273 return_value="Domain vm1 created from /tmp/vm_sriov.xml")
274 def test_is_vm_created(self, NIC_INPUT):
275 with mock.patch("yardstick.ssh.SSH") as ssh:
276 ssh_mock = mock.Mock(autospec=ssh.SSH)
278 mock.Mock(return_value=(0, {}, ""))
279 ssh.return_value = ssh_mock
280 mock_sriov = mock.Mock()
281 pcis = NIC_DETAILS['pci']
282 driver = NIC_DETAILS['phy_driver']
283 self.assertIsNotNone(
284 mock_sriov.sriov_obj.setup_sriov_context(
289 def test_add_sriov_interface(self):
290 with mock.patch("yardstick.ssh.SSH") as ssh:
291 ssh_mock = mock.Mock(autospec=ssh.SSH)
293 mock.Mock(return_value=(0, {}, ""))
294 ssh.return_value = ssh_mock
295 sriov_obj = sriov.Sriov()
296 sriov_obj.connection = ssh_mock
297 with mock.patch("xml.etree.ElementTree.parse") as parse:
298 with mock.patch("re.search") as re:
299 with mock.patch("xml.etree.ElementTree.SubElement") \
301 parse = mock.Mock(return_value="root")
304 print("{0} {1} {2}".format(parse, re, elem))
305 self.assertIsNone(sriov_obj.add_sriov_interface(
309 "/tmp/vm_sriov.xml"))
311 def test_get_virtual_devices(self):
312 with mock.patch("yardstick.ssh.SSH") as ssh:
313 ssh_mock = mock.Mock(autospec=ssh.SSH)
315 mock.Mock(return_value=(0, {}, ""))
316 ssh.return_value = ssh_mock
317 sriov_obj = sriov.Sriov()
318 sriov_obj.connection = ssh_mock
322 PCI_SUBSYS_ID=8086:0000 \
323 PCI_SLOT_NAME=0000:06:02.0 \
325 pci:v00008086d0000154Csv00008086sd00000000bc02sc00i00"
327 sriov_obj.check_output = mock.Mock(return_value=(0, pci_out))
328 with mock.patch("re.search") as re:
329 re = mock.Mock(return_value="a")
330 print("{0}".format(re))
331 self.assertIsNotNone(sriov_obj.get_virtual_devices(pci))
333 def test_get_vf_datas(self):
334 with mock.patch("yardstick.ssh.SSH") as ssh:
335 ssh_mock = mock.Mock(autospec=ssh.SSH)
337 mock.Mock(return_value=(0, {}, ""))
338 ssh.return_value = ssh_mock
339 sriov_obj = sriov.Sriov()
340 sriov_obj.connection = ssh_mock
341 sriov_obj.get_virtual_devices = mock.Mock(
342 return_value={'0000:06:00.0': '0000:06:02.0'})
343 with mock.patch("re.search") as re:
345 print("{0}".format(re))
346 self.assertIsNotNone(sriov_obj.get_vf_datas(
348 {'0000:06:00.0': '0000:06:02.0'},
349 "00:00:00:00:00:0a"))
351 def test_check_output(self):
352 with mock.patch("yardstick.ssh.SSH") as ssh:
354 ssh_mock = mock.Mock(autospec=ssh.SSH)
356 mock.Mock(return_value=(0, {}, ""))
357 ssh.return_value = ssh_mock
358 sriov_obj = sriov.Sriov()
359 sriov_obj.connection = ssh_mock
360 self.assertIsNotNone(sriov_obj.check_output(cmd, None))
362 def test_split_cpu_list_available(self):
363 with mock.patch("itertools.chain") as iter1:
365 print("{0}".format(iter1))
366 sriov_obj = sriov.Sriov()
367 self.assertIsNotNone(sriov_obj.split_cpu_list('0,5'))
369 def test_split_cpu_list_null(self):
370 with mock.patch("itertools.chain") as iter1:
372 print("{0}".format(iter1))
373 sriov_obj = sriov.Sriov()
374 self.assertEqual(sriov_obj.split_cpu_list([]), [])
376 def test_destroy_vm_successful(self):
377 with mock.patch("yardstick.ssh.SSH") as ssh:
378 ssh_mock = mock.Mock(autospec=ssh.SSH)
380 mock.Mock(return_value=(0, {}, ""))
381 ssh.return_value = ssh_mock
382 sriov_obj = sriov.Sriov()
383 sriov_obj.connection = ssh_mock
384 sriov_obj.sriov = SRIOV
385 sriov_obj.check_output = mock.Mock(return_value=(0, "vm1"))
387 mock.Mock(return_value=(0, {}, ""))
389 mock.Mock(return_value=(0, {}, ""))
391 mock.Mock(return_value=(0, "0 i40e"))
393 mock.Mock(return_value=(0, "0 i40e"))
394 self.assertIsNone(sriov_obj.destroy_vm())
396 def test_destroy_vm_unsuccessful(self):
397 with mock.patch("yardstick.ssh.SSH") as ssh:
398 ssh_mock = mock.Mock(autospec=ssh.SSH)
400 mock.Mock(return_value=(0, {}, ""))
401 ssh.return_value = ssh_mock
402 sriov_obj = sriov.Sriov()
403 sriov_obj.connection = ssh_mock
404 sriov_obj.sriov = SRIOV
405 sriov_obj.check_output = mock.Mock(return_value=(1, {}))
406 self.assertIsNone(sriov_obj.destroy_vm())
408 def test_read_from_file(self):
409 CORRECT_FILE_PATH = self._get_file_abspath(self.NODES_SAMPLE_PASSWORD)
410 sriov_obj = sriov.Sriov()
411 self.assertIsNotNone(sriov_obj.read_from_file(CORRECT_FILE_PATH))
413 def test_write_to_file(self):
414 sriov_obj = sriov.Sriov()
415 self.assertIsNone(sriov_obj.write_to_file(SAMPLE_FILE, "some content"))
417 def _get_file_abspath(self, filename):
418 curr_path = os.path.dirname(os.path.abspath(__file__))
419 file_path = os.path.join(curr_path, filename)
422 if __name__ == '__main__':