3 # Copyright (c) 2017 Intel Corporation
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
18 # Unittest for yardstick.network_services.vnf_generic.vnf.sample_vnf
20 from __future__ import absolute_import
24 from copy import deepcopy
26 from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
27 from tests.unit import STL_MOCKS
28 from yardstick.benchmark.contexts.base import Context
29 from yardstick.network_services.nfvi.resource import ResourceProfile
30 from yardstick.network_services.traffic_profile.base import TrafficProfile
31 from yardstick.network_services.vnf_generic.vnf.base import VnfdHelper
32 from yardstick.ssh import SSHError
35 class MockError(BaseException):
39 STLClient = mock.MagicMock()
40 stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
44 from yardstick.network_services.vnf_generic.vnf.sample_vnf import VnfSshHelper
45 from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNFDeployHelper
46 from yardstick.network_services.vnf_generic.vnf.sample_vnf import ScenarioHelper
47 from yardstick.network_services.vnf_generic.vnf.sample_vnf import ResourceHelper
48 from yardstick.network_services.vnf_generic.vnf.sample_vnf import ClientResourceHelper
49 from yardstick.network_services.vnf_generic.vnf.sample_vnf import Rfc2544ResourceHelper
50 from yardstick.network_services.vnf_generic.vnf.sample_vnf import SetupEnvHelper
51 from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNF
52 from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNFTrafficGen
53 from yardstick.network_services.vnf_generic.vnf.sample_vnf import DpdkVnfSetupEnvHelper
56 class TestVnfSshHelper(unittest.TestCase):
59 'short-name': 'VpeVnf',
64 'network': '152.16.100.20',
65 'netmask': '255.255.255.0',
66 'gateway': '152.16.100.20',
70 'network': '152.16.40.20',
71 'netmask': '255.255.255.0',
72 'gateway': '152.16.40.20',
76 'description': 'VPE approximation using DPDK',
77 'name': 'vpevnf-baremetal',
80 'network': '0064:ff9b:0:0:0:0:9810:6414',
82 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
86 'network': '0064:ff9b:0:0:0:0:9810:2814',
88 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
92 'id': 'vpevnf-baremetal',
93 'external-interface': [
95 'virtual-interface': {
96 'dst_mac': '00:00:00:00:00:03',
97 'vpci': '0000:05:00.0',
98 'local_ip': '152.16.100.19',
99 'type': 'PCI-PASSTHROUGH',
100 'netmask': '255.255.255.0',
102 'bandwidth': '10 Gbps',
103 'dst_ip': '152.16.100.20',
104 'local_mac': '00:00:00:00:00:01',
105 'vld_id': 'uplink_0',
108 'vnfd-connection-point-ref': 'xe0',
112 'virtual-interface': {
113 'dst_mac': '00:00:00:00:00:04',
114 'vpci': '0000:05:00.1',
115 'local_ip': '152.16.40.19',
116 'type': 'PCI-PASSTHROUGH',
117 'netmask': '255.255.255.0',
119 'bandwidth': '10 Gbps',
120 'dst_ip': '152.16.40.20',
121 'local_mac': '00:00:00:00:00:02',
122 'vld_id': 'downlink_0',
125 'vnfd-connection-point-ref': 'xe1',
131 'description': 'Vpe approximation using DPDK',
133 'vdu-id': 'vpevnf-baremetal',
146 'connection-point': [
156 'id': 'VpeApproxVnf', 'name': 'VPEVnfSsh'
160 'vnfd:vnfd-catalog': {
167 def assertAll(self, iterable, message=None):
168 self.assertTrue(all(iterable), message)
170 def test_get_class(self):
171 self.assertIs(VnfSshHelper.get_class(), VnfSshHelper)
173 @mock.patch('yardstick.ssh.paramiko')
174 def test_copy(self, _):
175 ssh_helper = VnfSshHelper(self.VNFD_0['mgmt-interface'], 'my/bin/path')
176 ssh_helper._run = mock.Mock()
178 ssh_helper.execute('ls')
179 self.assertTrue(ssh_helper.is_connected)
180 result = ssh_helper.copy()
181 self.assertIsInstance(result, VnfSshHelper)
182 self.assertFalse(result.is_connected)
183 self.assertEqual(result.bin_path, ssh_helper.bin_path)
184 self.assertEqual(result.host, ssh_helper.host)
185 self.assertEqual(result.port, ssh_helper.port)
186 self.assertEqual(result.user, ssh_helper.user)
187 self.assertEqual(result.password, ssh_helper.password)
188 self.assertEqual(result.key_filename, ssh_helper.key_filename)
190 @mock.patch('yardstick.ssh.paramiko')
191 def test_upload_config_file(self, mock_paramiko):
192 ssh_helper = VnfSshHelper(self.VNFD_0['mgmt-interface'], 'my/bin/path')
193 ssh_helper._run = mock.MagicMock()
195 self.assertFalse(ssh_helper.is_connected)
196 cfg_file = ssh_helper.upload_config_file('my/prefix', 'my content')
197 self.assertTrue(ssh_helper.is_connected)
198 self.assertEqual(mock_paramiko.SSHClient.call_count, 1)
199 self.assertTrue(cfg_file.startswith('/tmp'))
201 cfg_file = ssh_helper.upload_config_file('/my/prefix', 'my content')
202 self.assertTrue(ssh_helper.is_connected)
203 self.assertEqual(mock_paramiko.SSHClient.call_count, 1)
204 self.assertEqual(cfg_file, '/my/prefix')
206 def test_join_bin_path(self):
207 ssh_helper = VnfSshHelper(self.VNFD_0['mgmt-interface'], 'my/bin/path')
209 expected_start = 'my'
210 expected_middle_list = ['bin']
211 expected_end = 'path'
212 result = ssh_helper.join_bin_path()
213 self.assertTrue(result.startswith(expected_start))
214 self.assertAll(middle in result for middle in expected_middle_list)
215 self.assertTrue(result.endswith(expected_end))
217 expected_middle_list.append(expected_end)
218 expected_end = 'some_file.sh'
219 result = ssh_helper.join_bin_path('some_file.sh')
220 self.assertTrue(result.startswith(expected_start))
221 self.assertAll(middle in result for middle in expected_middle_list)
222 self.assertTrue(result.endswith(expected_end))
224 expected_middle_list.append('some_dir')
225 expected_end = 'some_file.sh'
226 result = ssh_helper.join_bin_path('some_dir', 'some_file.sh')
227 self.assertTrue(result.startswith(expected_start))
228 self.assertAll(middle in result for middle in expected_middle_list)
229 self.assertTrue(result.endswith(expected_end))
231 @mock.patch('yardstick.ssh.paramiko')
232 @mock.patch('yardstick.ssh.provision_tool')
233 def test_provision_tool(self, mock_provision_tool, mock_paramiko):
234 ssh_helper = VnfSshHelper(self.VNFD_0['mgmt-interface'], 'my/bin/path')
235 ssh_helper._run = mock.MagicMock()
237 self.assertFalse(ssh_helper.is_connected)
238 ssh_helper.provision_tool()
239 self.assertTrue(ssh_helper.is_connected)
240 self.assertEqual(mock_paramiko.SSHClient.call_count, 1)
241 self.assertEqual(mock_provision_tool.call_count, 1)
243 ssh_helper.provision_tool(tool_file='my_tool.sh')
244 self.assertTrue(ssh_helper.is_connected)
245 self.assertEqual(mock_paramiko.SSHClient.call_count, 1)
246 self.assertEqual(mock_provision_tool.call_count, 2)
248 ssh_helper.provision_tool('tool_path', 'my_tool.sh')
249 self.assertTrue(ssh_helper.is_connected)
250 self.assertEqual(mock_paramiko.SSHClient.call_count, 1)
251 self.assertEqual(mock_provision_tool.call_count, 3)
254 class TestSetupEnvHelper(unittest.TestCase):
257 'short-name': 'VpeVnf',
262 'network': '152.16.100.20',
263 'netmask': '255.255.255.0',
264 'gateway': '152.16.100.20',
268 'network': '152.16.40.20',
269 'netmask': '255.255.255.0',
270 'gateway': '152.16.40.20',
274 'description': 'VPE approximation using DPDK',
275 'name': 'vpevnf-baremetal',
278 'network': '0064:ff9b:0:0:0:0:9810:6414',
280 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
284 'network': '0064:ff9b:0:0:0:0:9810:2814',
286 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
290 'id': 'vpevnf-baremetal',
291 'external-interface': [
293 'virtual-interface': {
294 'dst_mac': '00:00:00:00:00:03',
295 'vpci': '0000:05:00.0',
296 'local_ip': '152.16.100.19',
297 'type': 'PCI-PASSTHROUGH',
298 'netmask': '255.255.255.0',
300 'bandwidth': '10 Gbps',
301 'dst_ip': '152.16.100.20',
302 'local_mac': '00:00:00:00:00:01',
303 'vld_id': 'uplink_0',
306 'vnfd-connection-point-ref': 'xe0',
310 'virtual-interface': {
311 'dst_mac': '00:00:00:00:00:04',
312 'vpci': '0000:05:00.1',
313 'local_ip': '152.16.40.19',
314 'type': 'PCI-PASSTHROUGH',
315 'netmask': '255.255.255.0',
317 'bandwidth': '10 Gbps',
318 'dst_ip': '152.16.40.20',
319 'local_mac': '00:00:00:00:00:02',
320 'vld_id': 'downlink_0',
323 'vnfd-connection-point-ref': 'xe1',
329 'description': 'Vpe approximation using DPDK',
331 'vdu-id': 'vpevnf-baremetal',
344 'connection-point': [
354 'id': 'VpeApproxVnf', 'name': 'VPEVnfSsh'
357 def test_build_config(self):
358 setup_env_helper = SetupEnvHelper(mock.Mock(), mock.Mock(), mock.Mock())
360 with self.assertRaises(NotImplementedError):
361 setup_env_helper.build_config()
363 def test_setup_vnf_environment(self):
364 setup_env_helper = SetupEnvHelper(mock.Mock(), mock.Mock(), mock.Mock())
365 self.assertIsNone(setup_env_helper.setup_vnf_environment())
367 def test_tear_down(self):
368 setup_env_helper = SetupEnvHelper(mock.Mock(), mock.Mock(), mock.Mock())
370 with self.assertRaises(NotImplementedError):
371 setup_env_helper.tear_down()
374 class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
377 'short-name': 'VpeVnf',
382 'network': '152.16.100.20',
383 'netmask': '255.255.255.0',
384 'gateway': '152.16.100.20',
388 'network': '152.16.40.20',
389 'netmask': '255.255.255.0',
390 'gateway': '152.16.40.20',
394 'description': 'VPE approximation using DPDK',
395 'name': 'vpevnf-baremetal',
398 'network': '0064:ff9b:0:0:0:0:9810:6414',
400 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
404 'network': '0064:ff9b:0:0:0:0:9810:2814',
406 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
410 'id': 'vpevnf-baremetal',
411 'external-interface': [
413 'virtual-interface': {
414 'dst_mac': '00:00:00:00:00:03',
415 'vpci': '0000:05:00.0',
418 'local_ip': '152.16.100.19',
419 'type': 'PCI-PASSTHROUGH',
420 'netmask': '255.255.255.0',
421 'bandwidth': '10 Gbps',
422 'dst_ip': '152.16.100.20',
423 'local_mac': '00:00:00:00:00:01',
424 'vld_id': 'uplink_0',
427 'vnfd-connection-point-ref': 'xe0',
431 'virtual-interface': {
432 'dst_mac': '00:00:00:00:00:04',
433 'vpci': '0000:05:00.1',
436 'local_ip': '152.16.40.19',
437 'type': 'PCI-PASSTHROUGH',
438 'netmask': '255.255.255.0',
439 'bandwidth': '10 Gbps',
440 'dst_ip': '152.16.40.20',
441 'local_mac': '00:00:00:00:00:02',
442 'vld_id': 'downlink_0',
445 'vnfd-connection-point-ref': 'xe1',
451 'description': 'Vpe approximation using DPDK',
453 'vdu-id': 'vpevnf-baremetal',
466 'connection-point': [
476 'id': 'VpeApproxVnf', 'name': 'VPEVnfSsh'
480 'vnfd:vnfd-catalog': {
487 def test__update_packet_type(self):
488 ip_pipeline_cfg = 'pkt_type = ipv4'
489 pkt_type = {'pkt_type': '1'}
491 expected = "pkt_type = 1"
492 result = DpdkVnfSetupEnvHelper._update_packet_type(ip_pipeline_cfg, pkt_type)
493 self.assertEqual(result, expected)
495 def test__update_packet_type_no_op(self):
496 ip_pipeline_cfg = 'pkt_type = ipv6'
497 pkt_type = {'pkt_type': '1'}
499 expected = "pkt_type = ipv6"
500 result = DpdkVnfSetupEnvHelper._update_packet_type(ip_pipeline_cfg, pkt_type)
501 self.assertEqual(result, expected)
503 def test__update_packet_type_multi_op(self):
504 ip_pipeline_cfg = 'pkt_type = ipv4\npkt_type = 1\npkt_type = ipv4'
505 pkt_type = {'pkt_type': '1'}
507 expected = 'pkt_type = 1\npkt_type = 1\npkt_type = 1'
508 result = DpdkVnfSetupEnvHelper._update_packet_type(ip_pipeline_cfg, pkt_type)
509 self.assertEqual(result, expected)
511 def test__update_traffic_type(self):
512 ip_pipeline_cfg = 'pkt_type = ipv4'
514 traffic_options = {"vnf_type": DpdkVnfSetupEnvHelper.APP_NAME, 'traffic_type': 4}
515 expected = "pkt_type = ipv4"
516 result = DpdkVnfSetupEnvHelper._update_traffic_type(ip_pipeline_cfg, traffic_options)
517 self.assertEqual(result, expected)
519 def test__update_traffic_type_ipv6(self):
520 ip_pipeline_cfg = 'pkt_type = ipv4'
522 traffic_options = {"vnf_type": DpdkVnfSetupEnvHelper.APP_NAME, 'traffic_type': 6}
523 expected = "pkt_type = ipv6"
524 result = DpdkVnfSetupEnvHelper._update_traffic_type(ip_pipeline_cfg, traffic_options)
525 self.assertEqual(result, expected)
527 def test__update_traffic_type_not_app_name(self):
528 ip_pipeline_cfg = 'traffic_type = 4'
530 vnf_type = ''.join(["Not", DpdkVnfSetupEnvHelper.APP_NAME])
531 traffic_options = {"vnf_type": vnf_type, 'traffic_type': 8}
532 expected = "traffic_type = 8"
533 result = DpdkVnfSetupEnvHelper._update_traffic_type(ip_pipeline_cfg, traffic_options)
534 self.assertEqual(result, expected)
536 def test__setup_hugepages(self):
537 vnfd_helper = VnfdHelper(self.VNFD_0)
538 ssh_helper = mock.Mock()
539 ssh_helper.execute.return_value = 0, '', ''
540 scenario_helper = mock.Mock()
541 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
543 result = dpdk_setup_helper._setup_hugepages()
544 expect_start_list = ['awk', 'awk', 'echo']
545 expect_in_list = ['meminfo', 'nr_hugepages', '16']
546 call_args_iter = (args[0][0] for args in ssh_helper.execute.call_args_list)
547 self.assertIsNone(result)
548 self.assertEqual(ssh_helper.execute.call_count, 3)
549 for expect_start, expect_in, arg0 in zip(expect_start_list, expect_in_list,
551 self.assertTrue(arg0.startswith(expect_start))
552 self.assertIn(expect_in, arg0)
554 def test__setup_hugepages_2_mb(self):
555 vnfd_helper = VnfdHelper(self.VNFD_0)
556 ssh_helper = mock.Mock()
557 ssh_helper.execute.return_value = 0, '2048kB ', ''
558 scenario_helper = mock.Mock()
559 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
561 result = dpdk_setup_helper._setup_hugepages()
562 expect_start_list = ['awk', 'awk', 'echo']
563 expect_in_list = ['meminfo', 'nr_hugepages', '8192']
564 call_args_iter = (args[0][0] for args in ssh_helper.execute.call_args_list)
565 self.assertIsNone(result)
566 self.assertEqual(ssh_helper.execute.call_count, 3)
567 for expect_start, expect_in, arg0 in zip(expect_start_list, expect_in_list,
569 self.assertTrue(arg0.startswith(expect_start))
570 self.assertIn(expect_in, arg0)
572 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.open')
573 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.find_relative_file')
574 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.MultiPortConfig')
575 def test_build_config(self, mock_multi_port_config_class, mock_find, _):
576 mock_multi_port_config = mock_multi_port_config_class()
577 vnfd_helper = VnfdHelper(self.VNFD_0)
578 ssh_helper = mock.Mock()
579 scenario_helper = mock.Mock()
580 scenario_helper.vnf_cfg = {}
581 scenario_helper.all_options = {}
582 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
584 dpdk_setup_helper.PIPELINE_COMMAND = expected = 'pipeline command'
585 result = dpdk_setup_helper.build_config()
586 self.assertEqual(result, expected)
587 self.assertGreaterEqual(ssh_helper.upload_config_file.call_count, 2)
588 self.assertGreaterEqual(mock_find.call_count, 1)
589 self.assertGreaterEqual(mock_multi_port_config.generate_config.call_count, 1)
590 self.assertGreaterEqual(mock_multi_port_config.generate_script.call_count, 1)
592 def test__build_pipeline_kwargs(self):
593 vnfd_helper = VnfdHelper(self.VNFD_0)
594 ssh_helper = mock.Mock()
595 ssh_helper.provision_tool.return_value = 'tool_path'
596 scenario_helper = mock.Mock()
597 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
598 dpdk_setup_helper.CFG_CONFIG = 'config'
599 dpdk_setup_helper.CFG_SCRIPT = 'script'
600 dpdk_setup_helper.pipeline_kwargs = {}
601 dpdk_setup_helper.all_ports = [0, 1, 2]
604 'cfg_file': 'config',
606 'port_mask_hex': '0x3',
607 'tool_path': 'tool_path',
609 dpdk_setup_helper._build_pipeline_kwargs()
610 self.assertDictEqual(dpdk_setup_helper.pipeline_kwargs, expected)
612 def test__get_app_cpu(self):
613 vnfd_helper = VnfdHelper(self.VNFD_0)
614 ssh_helper = mock.Mock()
615 ssh_helper.provision_tool.return_value = 'tool_path'
616 scenario_helper = mock.Mock()
617 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
619 dpdk_setup_helper.CORES = expected = [5, 4, 3]
620 result = dpdk_setup_helper._get_app_cpu()
621 self.assertEqual(result, expected)
623 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.CpuSysCores')
624 def test__get_app_cpu_no_cores_sw(self, mock_cpu_sys_cores_class):
625 mock_cpu_sys_cores = mock_cpu_sys_cores_class()
626 mock_cpu_sys_cores.get_core_socket.return_value = {
627 'socket': [2, 4, 8, 10, 12],
629 vnfd_helper = VnfdHelper(self.VNFD_0)
630 ssh_helper = mock.Mock()
631 ssh_helper.provision_tool.return_value = 'tool_path'
632 scenario_helper = mock.Mock()
633 scenario_helper.vnf_cfg = {
634 'worker_threads': '2',
636 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
637 dpdk_setup_helper.CORES = []
638 dpdk_setup_helper.SW_DEFAULT_CORE = 1
639 dpdk_setup_helper.HW_DEFAULT_CORE = 2
640 dpdk_setup_helper.socket = 'socket'
643 result = dpdk_setup_helper._get_app_cpu()
644 self.assertEqual(result, expected)
646 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.CpuSysCores')
647 def test__get_app_cpu_no_cores_hw(self, mock_cpu_sys_cores_class):
648 mock_cpu_sys_cores = mock_cpu_sys_cores_class()
649 mock_cpu_sys_cores.get_core_socket.return_value = {
650 'socket': [2, 4, 8, 10, 12],
652 vnfd_helper = VnfdHelper(self.VNFD_0)
653 ssh_helper = mock.Mock()
654 scenario_helper = mock.Mock()
655 scenario_helper.vnf_cfg = {
656 'worker_threads': '2',
659 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
660 dpdk_setup_helper.CORES = []
661 dpdk_setup_helper.SW_DEFAULT_CORE = 1
662 dpdk_setup_helper.HW_DEFAULT_CORE = 2
663 dpdk_setup_helper.socket = 'socket'
665 expected = [2, 4, 8, 10]
666 result = dpdk_setup_helper._get_app_cpu()
667 self.assertEqual(result, expected)
669 def test__get_cpu_sibling_list(self):
670 vnfd_helper = VnfdHelper(self.VNFD_0)
671 ssh_helper = mock.Mock()
672 ssh_helper.execute.side_effect = iter([(0, '5', ''), (0, '3,4', ''), (0, '10', '')])
673 scenario_helper = mock.Mock()
674 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
675 dpdk_setup_helper._get_app_cpu = mock.Mock(return_value=[])
677 expected = ['5', '3', '4', '10']
678 result = dpdk_setup_helper._get_cpu_sibling_list([1, 3, 7])
679 self.assertEqual(result, expected)
681 def test__get_cpu_sibling_list_no_core_arg(self):
682 vnfd_helper = VnfdHelper(self.VNFD_0)
683 ssh_helper = mock.Mock()
684 ssh_helper.execute.side_effect = iter([(0, '5', ''), (0, '3,4', ''), (0, '10', '')])
685 scenario_helper = mock.Mock()
686 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
687 dpdk_setup_helper._get_app_cpu = mock.Mock(return_value=[1, 7])
689 expected = ['5', '3', '4']
690 result = dpdk_setup_helper._get_cpu_sibling_list()
691 self.assertEqual(result, expected)
693 def test__get_cpu_sibling_list_ssh_failure(self):
694 vnfd_helper = VnfdHelper(self.VNFD_0)
695 ssh_helper = mock.Mock()
696 ssh_helper.execute.side_effect = iter([(0, '5', ''), SSHError, (0, '10', '')])
697 scenario_helper = mock.Mock()
698 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
699 dpdk_setup_helper._get_app_cpu = mock.Mock(return_value=[])
702 result = dpdk_setup_helper._get_cpu_sibling_list([1, 3, 7])
703 self.assertEqual(result, expected)
705 def test__validate_cpu_cfg(self):
706 vnfd_helper = VnfdHelper(self.VNFD_0)
707 ssh_helper = mock.Mock()
708 ssh_helper.execute.side_effect = iter([(0, '5', ''), (0, '3,4', ''), (0, '10', '')])
709 scenario_helper = mock.Mock()
710 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
711 dpdk_setup_helper._get_app_cpu = mock.Mock(return_value=[1, 3, 7])
713 expected = ['5', '3', '4', '10']
714 result = dpdk_setup_helper._validate_cpu_cfg()
715 self.assertEqual(result, expected)
717 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
718 @mock.patch('yardstick.ssh.SSH')
719 def test_setup_vnf_environment(self, _, mock_time):
720 def execute(cmd, *args, **kwargs):
721 if cmd.startswith('which '):
725 exec_success = (0, 'good output', '')
726 exec_failure = (1, 'bad output', 'error output')
728 vnfd_helper = VnfdHelper(self.VNFD_0)
729 ssh_helper = mock.Mock()
730 ssh_helper.execute = execute
732 dpdk_vnf_setup_env_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, mock.Mock())
733 dpdk_vnf_setup_env_helper._validate_cpu_cfg = mock.Mock(return_value=[])
735 self.assertIsInstance(dpdk_vnf_setup_env_helper.setup_vnf_environment(), ResourceProfile)
737 def test__setup_dpdk_early_success(self):
738 vnfd_helper = VnfdHelper(self.VNFD_0)
739 ssh_helper = mock.Mock()
740 ssh_helper.execute.return_value = 0, 'output', ''
741 ssh_helper.join_bin_path.return_value = 'joined_path'
742 ssh_helper.provision_tool.return_value = 'provision string'
743 scenario_helper = mock.Mock()
744 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
745 dpdk_setup_helper._setup_hugepages = mock.Mock()
747 self.assertIsNone(dpdk_setup_helper._setup_dpdk())
748 self.assertEqual(dpdk_setup_helper.ssh_helper.execute.call_count, 2)
750 @mock.patch('yardstick.ssh.SSH')
751 def test__setup_dpdk_short(self, _):
752 def execute_side(cmd, *args, **kwargs):
753 if 'joined_path' in cmd:
754 return 0, 'output', ''
755 return 1, 'bad output', 'error output'
757 vnfd_helper = VnfdHelper(self.VNFD_0)
758 ssh_helper = mock.Mock()
759 ssh_helper.execute.side_effect = execute_side
760 ssh_helper.join_bin_path.return_value = 'joined_path'
761 ssh_helper.provision_tool.return_value = 'provision string'
762 scenario_helper = mock.Mock()
763 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
764 dpdk_setup_helper._setup_hugepages = mock.Mock()
766 self.assertIsNone(dpdk_setup_helper._setup_dpdk())
767 self.assertEqual(dpdk_setup_helper.ssh_helper.execute.call_count, 3)
769 @mock.patch('yardstick.ssh.SSH')
770 def test__setup_resources(self, _):
771 vnfd_helper = VnfdHelper(deepcopy(self.VNFD_0))
772 ssh_helper = mock.Mock()
773 scenario_helper = mock.Mock()
774 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
775 dpdk_setup_helper._validate_cpu_cfg = mock.Mock()
777 dpdk_setup_helper.bound_pci = [v['virtual-interface']["vpci"] for v in
778 vnfd_helper.interfaces]
779 result = dpdk_setup_helper._setup_resources()
780 self.assertIsInstance(result, ResourceProfile)
781 self.assertEqual(dpdk_setup_helper.socket, 0)
783 @mock.patch('yardstick.ssh.SSH')
784 def test__setup_resources_socket_1(self, _):
785 vnfd_helper = VnfdHelper(deepcopy(self.VNFD_0))
786 vnfd_helper.interfaces[0]['virtual-interface']['vpci'] = '0000:55:00.0'
787 vnfd_helper.interfaces[1]['virtual-interface']['vpci'] = '0000:35:00.0'
788 ssh_helper = mock.Mock()
789 scenario_helper = mock.Mock()
790 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
791 dpdk_setup_helper._validate_cpu_cfg = mock.Mock()
793 dpdk_setup_helper.bound_pci = [v['virtual-interface']["vpci"] for v in
794 vnfd_helper.interfaces]
795 result = dpdk_setup_helper._setup_resources()
796 self.assertIsInstance(result, ResourceProfile)
797 self.assertEqual(dpdk_setup_helper.socket, 1)
799 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
800 def test__detect_and_bind_drivers(self, mock_time):
801 vnfd_helper = VnfdHelper(deepcopy(self.VNFD_0))
802 ssh_helper = mock.Mock()
803 # ssh_helper.execute = mock.Mock(return_value = (0, 'text', ''))
804 # ssh_helper.execute.return_value = 0, 'output', ''
805 scenario_helper = mock.Mock()
806 rv = ['0000:05:00.1', '0000:05:00.0']
808 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
809 dpdk_setup_helper.dpdk_bind_helper._get_bound_pci_addresses = mock.Mock(return_value=rv)
810 dpdk_setup_helper.dpdk_bind_helper.bind = mock.Mock()
811 dpdk_setup_helper.dpdk_bind_helper.read_status = mock.Mock()
813 self.assertIsNone(dpdk_setup_helper._detect_and_bind_drivers())
815 intf_0 = vnfd_helper.vdu[0]['external-interface'][0]['virtual-interface']
816 intf_1 = vnfd_helper.vdu[0]['external-interface'][1]['virtual-interface']
817 self.assertEquals(0, intf_0['dpdk_port_num'])
818 self.assertEquals(1, intf_1['dpdk_port_num'])
820 def test_tear_down(self):
821 vnfd_helper = VnfdHelper(self.VNFD_0)
822 ssh_helper = mock.Mock()
823 scenario_helper = mock.Mock()
824 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
825 dpdk_setup_helper.dpdk_bind_helper.bind = mock.Mock()
826 dpdk_setup_helper.dpdk_bind_helper.used_drivers = {
827 'd1': ['0000:05:00.0'],
828 'd3': ['0000:05:01.0'],
831 self.assertIsNone(dpdk_setup_helper.tear_down())
832 dpdk_setup_helper.dpdk_bind_helper.bind.assert_any_call(['0000:05:00.0'], 'd1', True)
833 dpdk_setup_helper.dpdk_bind_helper.bind.assert_any_call(['0000:05:01.0'], 'd3', True)
836 class TestResourceHelper(unittest.TestCase):
839 'short-name': 'VpeVnf',
844 'network': '152.16.100.20',
845 'netmask': '255.255.255.0',
846 'gateway': '152.16.100.20',
850 'network': '152.16.40.20',
851 'netmask': '255.255.255.0',
852 'gateway': '152.16.40.20',
856 'description': 'VPE approximation using DPDK',
857 'name': 'vpevnf-baremetal',
860 'network': '0064:ff9b:0:0:0:0:9810:6414',
862 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
866 'network': '0064:ff9b:0:0:0:0:9810:2814',
868 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
872 'id': 'vpevnf-baremetal',
873 'external-interface': [
875 'virtual-interface': {
876 'dst_mac': '00:00:00:00:00:03',
877 'vpci': '0000:05:00.0',
879 'local_ip': '152.16.100.19',
880 'type': 'PCI-PASSTHROUGH',
881 'netmask': '255.255.255.0',
883 'bandwidth': '10 Gbps',
884 'dst_ip': '152.16.100.20',
885 'local_mac': '00:00:00:00:00:01'
887 'vnfd-connection-point-ref': 'xe0',
891 'virtual-interface': {
892 'dst_mac': '00:00:00:00:00:04',
893 'vpci': '0000:05:00.1',
895 'local_ip': '152.16.40.19',
896 'type': 'PCI-PASSTHROUGH',
897 'netmask': '255.255.255.0',
899 'bandwidth': '10 Gbps',
900 'dst_ip': '152.16.40.20',
901 'local_mac': '00:00:00:00:00:02'
903 'vnfd-connection-point-ref': 'xe1',
909 'description': 'Vpe approximation using DPDK',
911 'vdu-id': 'vpevnf-baremetal',
924 'connection-point': [
934 'id': 'VpeApproxVnf', 'name': 'VPEVnfSsh'
937 def test_setup(self):
939 vnfd_helper = VnfdHelper(self.VNFD_0)
940 ssh_helper = mock.Mock()
941 scenario_helper = mock.Mock()
942 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
943 dpdk_setup_helper.setup_vnf_environment = mock.Mock(return_value=resource)
944 resource_helper = ResourceHelper(dpdk_setup_helper)
946 self.assertIsNone(resource_helper.setup())
947 self.assertIs(resource_helper.resource, resource)
949 def test_generate_cfg(self):
950 vnfd_helper = VnfdHelper(self.VNFD_0)
951 ssh_helper = mock.Mock()
952 scenario_helper = mock.Mock()
953 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
954 resource_helper = ResourceHelper(dpdk_setup_helper)
956 self.assertIsNone(resource_helper.generate_cfg())
958 def test_stop_collect(self):
959 vnfd_helper = VnfdHelper(self.VNFD_0)
960 ssh_helper = mock.Mock()
961 scenario_helper = mock.Mock()
962 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
963 resource_helper = ResourceHelper(dpdk_setup_helper)
964 resource_helper.resource = mock.Mock()
966 self.assertIsNone(resource_helper.stop_collect())
968 def test_stop_collect_none(self):
969 vnfd_helper = VnfdHelper(self.VNFD_0)
970 ssh_helper = mock.Mock()
971 scenario_helper = mock.Mock()
972 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
973 resource_helper = ResourceHelper(dpdk_setup_helper)
974 resource_helper.resource = None
976 self.assertIsNone(resource_helper.stop_collect())
979 class TestClientResourceHelper(unittest.TestCase):
982 'short-name': 'VpeVnf',
987 'network': '152.16.100.20',
988 'netmask': '255.255.255.0',
989 'gateway': '152.16.100.20',
993 'network': '152.16.40.20',
994 'netmask': '255.255.255.0',
995 'gateway': '152.16.40.20',
999 'description': 'VPE approximation using DPDK',
1000 'name': 'vpevnf-baremetal',
1003 'network': '0064:ff9b:0:0:0:0:9810:6414',
1005 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
1009 'network': '0064:ff9b:0:0:0:0:9810:2814',
1011 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
1015 'id': 'vpevnf-baremetal',
1016 'external-interface': [
1018 'virtual-interface': {
1019 'dst_mac': '00:00:00:00:00:03',
1020 'vpci': '0000:05:00.0',
1022 'local_ip': '152.16.100.19',
1023 'type': 'PCI-PASSTHROUGH',
1024 'netmask': '255.255.255.0',
1026 'bandwidth': '10 Gbps',
1027 'dst_ip': '152.16.100.20',
1028 'local_mac': '00:00:00:00:00:01',
1029 'vld_id': 'uplink_0',
1032 'vnfd-connection-point-ref': 'xe0',
1036 'virtual-interface': {
1037 'dst_mac': '00:00:00:00:00:04',
1038 'vpci': '0000:05:00.1',
1040 'local_ip': '152.16.40.19',
1041 'type': 'PCI-PASSTHROUGH',
1042 'netmask': '255.255.255.0',
1044 'bandwidth': '10 Gbps',
1045 'dst_ip': '152.16.40.20',
1046 'local_mac': '00:00:00:00:00:02',
1047 'vld_id': 'downlink_0',
1050 'vnfd-connection-point-ref': 'xe1',
1054 'virtual-interface': {
1055 'dst_mac': '00:00:00:00:00:13',
1056 'vpci': '0000:05:00.2',
1058 'local_ip': '152.16.40.19',
1059 'type': 'PCI-PASSTHROUGH',
1060 'netmask': '255.255.255.0',
1062 'bandwidth': '10 Gbps',
1063 'dst_ip': '152.16.40.30',
1064 'local_mac': '00:00:00:00:00:11'
1066 'vnfd-connection-point-ref': 'xe2',
1072 'description': 'Vpe approximation using DPDK',
1074 'vdu-id': 'vpevnf-baremetal',
1087 'connection-point': [
1097 'id': 'VpeApproxVnf', 'name': 'VPEVnfSsh'
1101 'vnfd:vnfd-catalog': {
1108 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.LOG')
1109 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.STLError',
1110 new_callable=lambda: MockError)
1111 def test_get_stats_not_connected(self, mock_state_error, mock_logger):
1112 vnfd_helper = VnfdHelper(self.VNFD_0)
1113 ssh_helper = mock.Mock()
1114 scenario_helper = mock.Mock()
1115 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1116 client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
1117 client_resource_helper.client = mock.MagicMock()
1118 client_resource_helper.client.get_stats.side_effect = mock_state_error
1120 self.assertEqual(client_resource_helper.get_stats(), {})
1121 self.assertEqual(client_resource_helper.client.get_stats.call_count, 1)
1123 def test_generate_samples(self):
1124 vnfd_helper = VnfdHelper(self.VNFD_0)
1125 ssh_helper = mock.Mock()
1126 scenario_helper = mock.Mock()
1127 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1128 client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
1129 client_resource_helper.client = mock.MagicMock()
1130 client_resource_helper.client.get_stats.return_value = {
1148 "rx_throughput_fps": 5.5,
1149 "tx_throughput_fps": 4.9,
1150 "rx_throughput_mbps": 234.78,
1151 "tx_throughput_mbps": 243.11,
1152 "in_packets": 34251,
1153 "out_packets": 52342,
1156 "rx_throughput_fps": 0.0,
1157 "tx_throughput_fps": 5.9,
1158 "rx_throughput_mbps": 434.78,
1159 "tx_throughput_mbps": 0.0,
1161 "out_packets": 48791,
1164 ports = vnfd_helper.port_nums(vnfd_helper.port_pairs.all_ports)
1165 result = client_resource_helper.generate_samples(ports)
1166 self.assertDictEqual(result, expected)
1168 def test_generate_samples_with_key(self):
1169 vnfd_helper = VnfdHelper(self.VNFD_0)
1170 ssh_helper = mock.Mock()
1171 scenario_helper = mock.Mock()
1172 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1173 client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
1174 client_resource_helper.client = mock.MagicMock()
1175 client_resource_helper.client.get_stats.return_value = {
1176 'key_name': 'key_value',
1194 'key_name': 'key_value',
1195 "rx_throughput_fps": 5.5,
1196 "tx_throughput_fps": 4.9,
1197 "rx_throughput_mbps": 234.78,
1198 "tx_throughput_mbps": 243.11,
1199 "in_packets": 34251,
1200 "out_packets": 52342,
1203 'key_name': 'key_value',
1204 "rx_throughput_fps": 0.0,
1205 "tx_throughput_fps": 5.9,
1206 "rx_throughput_mbps": 434.78,
1207 "tx_throughput_mbps": 0.0,
1209 "out_packets": 48791,
1212 ports = vnfd_helper.port_nums(vnfd_helper.port_pairs.all_ports)
1213 result = client_resource_helper.generate_samples(ports, 'key_name')
1214 self.assertDictEqual(result, expected)
1216 def test_generate_samples_with_key_and_default(self):
1217 vnfd_helper = VnfdHelper(self.VNFD_0)
1218 ssh_helper = mock.Mock()
1219 scenario_helper = mock.Mock()
1220 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1221 client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
1222 client_resource_helper.client = mock.MagicMock()
1223 client_resource_helper.client.get_stats.return_value = {
1241 'key_name': 'default',
1242 "rx_throughput_fps": 5.5,
1243 "tx_throughput_fps": 4.9,
1244 "rx_throughput_mbps": 234.78,
1245 "tx_throughput_mbps": 243.11,
1246 "in_packets": 34251,
1247 "out_packets": 52342,
1250 'key_name': 'default',
1251 "rx_throughput_fps": 0.0,
1252 "tx_throughput_fps": 5.9,
1253 "rx_throughput_mbps": 434.78,
1254 "tx_throughput_mbps": 0.0,
1256 "out_packets": 48791,
1259 ports = vnfd_helper.port_nums(vnfd_helper.port_pairs.all_ports)
1260 result = client_resource_helper.generate_samples(ports, 'key_name', 'default')
1261 self.assertDictEqual(result, expected)
1263 def test_clear_stats(self):
1264 vnfd_helper = VnfdHelper(self.VNFD_0)
1265 ssh_helper = mock.Mock()
1266 scenario_helper = mock.Mock()
1267 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1268 client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
1269 client_resource_helper.client = mock.Mock()
1271 self.assertIsNone(client_resource_helper.clear_stats())
1272 self.assertEqual(client_resource_helper.client.clear_stats.call_count, 1)
1274 def test_clear_stats_of_ports(self):
1275 vnfd_helper = VnfdHelper(self.VNFD_0)
1276 ssh_helper = mock.Mock()
1277 scenario_helper = mock.Mock()
1278 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1279 client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
1280 client_resource_helper.client = mock.Mock()
1282 self.assertIsNone(client_resource_helper.clear_stats([3, 4]))
1283 self.assertEqual(client_resource_helper.client.clear_stats.call_count, 1)
1285 def test_start(self):
1286 vnfd_helper = VnfdHelper(self.VNFD_0)
1287 ssh_helper = mock.Mock()
1288 scenario_helper = mock.Mock()
1289 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1290 client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
1291 client_resource_helper.client = mock.Mock()
1293 self.assertIsNone(client_resource_helper.start())
1294 self.assertEqual(client_resource_helper.client.start.call_count, 1)
1296 def test_start_ports(self):
1297 vnfd_helper = VnfdHelper(self.VNFD_0)
1298 ssh_helper = mock.Mock()
1299 scenario_helper = mock.Mock()
1300 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1301 client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
1302 client_resource_helper.client = mock.Mock()
1304 self.assertIsNone(client_resource_helper.start([3, 4]))
1305 self.assertEqual(client_resource_helper.client.start.call_count, 1)
1307 def test_collect_kpi_with_queue(self):
1308 vnfd_helper = VnfdHelper(self.VNFD_0)
1309 ssh_helper = mock.Mock()
1310 scenario_helper = mock.Mock()
1311 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1312 client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
1313 client_resource_helper._result = {'existing': 43, 'replaceable': 12}
1314 client_resource_helper._queue = mock.Mock()
1315 client_resource_helper._queue.empty.return_value = False
1316 client_resource_helper._queue.get.return_value = {'incoming': 34, 'replaceable': 99}
1323 result = client_resource_helper.collect_kpi()
1324 self.assertDictEqual(result, expected)
1326 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
1327 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.LOG')
1328 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.STLError',
1329 new_callable=lambda: MockError)
1330 def test__connect_with_failures(self, mock_error, mock_logger, mock_time):
1331 vnfd_helper = VnfdHelper(self.VNFD_0)
1332 ssh_helper = mock.Mock()
1333 scenario_helper = mock.Mock()
1334 dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1335 client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
1336 client = mock.MagicMock()
1337 client.connect.side_effect = mock_error
1339 self.assertIs(client_resource_helper._connect(client), client)
1342 class TestRfc2544ResourceHelper(unittest.TestCase):
1346 'correlated_traffic': True,
1347 'allowed_drop_rate': '0.1 - 0.15',
1351 'allowed_drop_rate': ' 0.25 - 0.05 ',
1355 'allowed_drop_rate': '0.2',
1364 'rfc2544': RFC2544_CFG_1,
1370 'rfc2544': RFC2544_CFG_2,
1376 'rfc2544': RFC2544_CFG_3,
1382 'rfc2544': RFC2544_CFG_4,
1386 def test_property_rfc2544(self):
1387 scenario_helper = ScenarioHelper('name1')
1388 scenario_helper.scenario_cfg = self.SCENARIO_CFG_1
1389 rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
1391 self.assertIsNone(rfc2544_resource_helper._rfc2544)
1392 self.assertDictEqual(rfc2544_resource_helper.rfc2544, self.RFC2544_CFG_1)
1393 self.assertDictEqual(rfc2544_resource_helper._rfc2544, self.RFC2544_CFG_1)
1394 scenario_helper.scenario_cfg = {} # ensure that resource_helper caches
1395 self.assertDictEqual(rfc2544_resource_helper.rfc2544, self.RFC2544_CFG_1)
1397 def test_property_tolerance_high(self):
1398 scenario_helper = ScenarioHelper('name1')
1399 scenario_helper.scenario_cfg = self.SCENARIO_CFG_1
1400 rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
1402 self.assertIsNone(rfc2544_resource_helper._tolerance_high)
1403 self.assertEqual(rfc2544_resource_helper.tolerance_high, 0.15)
1404 self.assertEqual(rfc2544_resource_helper._tolerance_high, 0.15)
1405 scenario_helper.scenario_cfg = {} # ensure that resource_helper caches
1406 self.assertEqual(rfc2544_resource_helper.tolerance_high, 0.15)
1408 def test_property_tolerance_low(self):
1409 scenario_helper = ScenarioHelper('name1')
1410 scenario_helper.scenario_cfg = self.SCENARIO_CFG_1
1411 rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
1413 self.assertIsNone(rfc2544_resource_helper._tolerance_low)
1414 self.assertEqual(rfc2544_resource_helper.tolerance_low, 0.1)
1415 self.assertEqual(rfc2544_resource_helper._tolerance_low, 0.1)
1416 scenario_helper.scenario_cfg = {} # ensure that resource_helper caches
1417 self.assertEqual(rfc2544_resource_helper.tolerance_low, 0.1)
1419 def test_property_tolerance_high_range_swap(self):
1420 scenario_helper = ScenarioHelper('name1')
1421 scenario_helper.scenario_cfg = self.SCENARIO_CFG_2
1422 rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
1424 self.assertEqual(rfc2544_resource_helper.tolerance_high, 0.25)
1426 def test_property_tolerance_low_range_swap(self):
1427 scenario_helper = ScenarioHelper('name1')
1428 scenario_helper.scenario_cfg = self.SCENARIO_CFG_2
1429 rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
1431 self.assertEqual(rfc2544_resource_helper.tolerance_low, 0.05)
1433 def test_property_tolerance_high_not_range(self):
1434 scenario_helper = ScenarioHelper('name1')
1435 scenario_helper.scenario_cfg = self.SCENARIO_CFG_3
1436 rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
1438 self.assertEqual(rfc2544_resource_helper.tolerance_high, 0.2)
1440 def test_property_tolerance_low_not_range(self):
1441 scenario_helper = ScenarioHelper('name1')
1442 scenario_helper.scenario_cfg = self.SCENARIO_CFG_3
1443 rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
1445 self.assertEqual(rfc2544_resource_helper.tolerance_low, 0.2)
1447 def test_property_tolerance_high_default(self):
1448 scenario_helper = ScenarioHelper('name1')
1449 scenario_helper.scenario_cfg = self.SCENARIO_CFG_4
1450 rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
1452 self.assertEqual(rfc2544_resource_helper.tolerance_high, 0.0001)
1454 def test_property_tolerance_low_default(self):
1455 scenario_helper = ScenarioHelper('name1')
1456 scenario_helper.scenario_cfg = self.SCENARIO_CFG_4
1457 rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
1459 self.assertEqual(rfc2544_resource_helper.tolerance_low, 0.0001)
1461 def test_property_latency(self):
1462 scenario_helper = ScenarioHelper('name1')
1463 scenario_helper.scenario_cfg = self.SCENARIO_CFG_1
1464 rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
1466 self.assertIsNone(rfc2544_resource_helper._latency)
1467 self.assertTrue(rfc2544_resource_helper.latency)
1468 self.assertTrue(rfc2544_resource_helper._latency)
1469 scenario_helper.scenario_cfg = {} # ensure that resource_helper caches
1470 self.assertTrue(rfc2544_resource_helper.latency)
1472 def test_property_latency_default(self):
1473 scenario_helper = ScenarioHelper('name1')
1474 scenario_helper.scenario_cfg = self.SCENARIO_CFG_2
1475 rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
1477 self.assertFalse(rfc2544_resource_helper.latency)
1479 def test_property_correlated_traffic(self):
1480 scenario_helper = ScenarioHelper('name1')
1481 scenario_helper.scenario_cfg = self.SCENARIO_CFG_1
1482 rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
1484 self.assertIsNone(rfc2544_resource_helper._correlated_traffic)
1485 self.assertTrue(rfc2544_resource_helper.correlated_traffic)
1486 self.assertTrue(rfc2544_resource_helper._correlated_traffic)
1487 scenario_helper.scenario_cfg = {} # ensure that resource_helper caches
1488 self.assertTrue(rfc2544_resource_helper.correlated_traffic)
1490 def test_property_correlated_traffic_default(self):
1491 scenario_helper = ScenarioHelper('name1')
1492 scenario_helper.scenario_cfg = self.SCENARIO_CFG_2
1493 rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
1495 self.assertFalse(rfc2544_resource_helper.correlated_traffic)
1498 class TestSampleVNFDeployHelper(unittest.TestCase):
1500 @mock.patch('subprocess.check_output')
1501 def test_deploy_vnfs_disabled(self, mock_check_output):
1502 vnfd_helper = mock.Mock()
1503 ssh_helper = mock.Mock()
1504 ssh_helper.join_bin_path.return_value = 'joined_path'
1505 ssh_helper.execute.return_value = 1, 'bad output', 'error output'
1506 ssh_helper.put.return_value = None
1507 sample_vnf_deploy_helper = SampleVNFDeployHelper(vnfd_helper, ssh_helper)
1509 self.assertIsNone(sample_vnf_deploy_helper.deploy_vnfs('name1'))
1510 sample_vnf_deploy_helper.DISABLE_DEPLOY = True
1511 self.assertEqual(ssh_helper.execute.call_count, 5)
1512 self.assertEqual(ssh_helper.put.call_count, 1)
1514 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
1515 @mock.patch('subprocess.check_output')
1516 def test_deploy_vnfs(self, mock_check_output, mock_time):
1517 vnfd_helper = mock.Mock()
1518 ssh_helper = mock.Mock()
1519 ssh_helper.join_bin_path.return_value = 'joined_path'
1520 ssh_helper.execute.return_value = 1, 'bad output', 'error output'
1521 ssh_helper.put.return_value = None
1522 sample_vnf_deploy_helper = SampleVNFDeployHelper(vnfd_helper, ssh_helper)
1523 sample_vnf_deploy_helper.DISABLE_DEPLOY = False
1525 self.assertIsNone(sample_vnf_deploy_helper.deploy_vnfs('name1'))
1526 self.assertEqual(ssh_helper.execute.call_count, 5)
1527 self.assertEqual(ssh_helper.put.call_count, 1)
1529 @mock.patch('subprocess.check_output')
1530 def test_deploy_vnfs_early_success(self, mock_check_output):
1531 vnfd_helper = mock.Mock()
1532 ssh_helper = mock.Mock()
1533 ssh_helper.join_bin_path.return_value = 'joined_path'
1534 ssh_helper.execute.return_value = 0, 'output', ''
1535 ssh_helper.put.return_value = None
1536 sample_vnf_deploy_helper = SampleVNFDeployHelper(vnfd_helper, ssh_helper)
1537 sample_vnf_deploy_helper.DISABLE_DEPLOY = False
1539 self.assertIsNone(sample_vnf_deploy_helper.deploy_vnfs('name1'))
1540 self.assertEqual(ssh_helper.execute.call_count, 1)
1541 self.assertEqual(ssh_helper.put.call_count, 0)
1544 class TestScenarioHelper(unittest.TestCase):
1546 def test_property_task_path(self):
1547 scenario_helper = ScenarioHelper('name1')
1548 scenario_helper.scenario_cfg = {
1549 'task_path': 'my_path',
1552 self.assertEqual(scenario_helper.task_path, 'my_path')
1554 def test_property_nodes(self):
1555 nodes = ['node1', 'node2']
1556 scenario_helper = ScenarioHelper('name1')
1557 scenario_helper.scenario_cfg = {
1561 self.assertEqual(scenario_helper.nodes, nodes)
1563 def test_property_all_options(self):
1570 scenario_helper = ScenarioHelper('name1')
1571 scenario_helper.scenario_cfg = {
1575 self.assertDictEqual(scenario_helper.all_options, data)
1577 def test_property_options(self):
1582 scenario_helper = ScenarioHelper('name1')
1583 scenario_helper.scenario_cfg = {
1589 self.assertDictEqual(scenario_helper.options, data)
1591 def test_property_vnf_cfg(self):
1592 scenario_helper = ScenarioHelper('name1')
1593 scenario_helper.scenario_cfg = {
1596 'vnf_config': 'my_config',
1601 self.assertEqual(scenario_helper.vnf_cfg, 'my_config')
1603 def test_property_vnf_cfg_default(self):
1604 scenario_helper = ScenarioHelper('name1')
1605 scenario_helper.scenario_cfg = {
1611 self.assertDictEqual(scenario_helper.vnf_cfg, ScenarioHelper.DEFAULT_VNF_CFG)
1613 def test_property_topology(self):
1614 scenario_helper = ScenarioHelper('name1')
1615 scenario_helper.scenario_cfg = {
1616 'topology': 'my_topology',
1619 self.assertEqual(scenario_helper.topology, 'my_topology')
1622 class TestSampleVnf(unittest.TestCase):
1625 'short-name': 'VpeVnf',
1630 'network': '152.16.100.20',
1631 'netmask': '255.255.255.0',
1632 'gateway': '152.16.100.20',
1636 'network': '152.16.40.20',
1637 'netmask': '255.255.255.0',
1638 'gateway': '152.16.40.20',
1642 'description': 'VPE approximation using DPDK',
1643 'name': 'vpevnf-baremetal',
1646 'network': '0064:ff9b:0:0:0:0:9810:6414',
1648 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
1652 'network': '0064:ff9b:0:0:0:0:9810:2814',
1654 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
1658 'id': 'vpevnf-baremetal',
1659 'external-interface': [
1661 'virtual-interface': {
1662 'dst_mac': '00:00:00:00:00:03',
1663 'vpci': '0000:05:00.0',
1664 'local_ip': '152.16.100.19',
1665 'type': 'PCI-PASSTHROUGH',
1666 'netmask': '255.255.255.0',
1668 'bandwidth': '10 Gbps',
1669 'dst_ip': '152.16.100.20',
1670 'local_mac': '00:00:00:00:00:01'
1672 'vnfd-connection-point-ref': 'xe0',
1676 'virtual-interface': {
1677 'dst_mac': '00:00:00:00:00:04',
1678 'vpci': '0000:05:00.1',
1679 'local_ip': '152.16.40.19',
1680 'type': 'PCI-PASSTHROUGH',
1681 'netmask': '255.255.255.0',
1683 'bandwidth': '10 Gbps',
1684 'dst_ip': '152.16.40.20',
1685 'local_mac': '00:00:00:00:00:02'
1687 'vnfd-connection-point-ref': 'xe1',
1693 'description': 'Vpe approximation using DPDK',
1695 'vdu-id': 'vpevnf-baremetal',
1708 'connection-point': [
1718 'id': 'VpeApproxVnf', 'name': 'VPEVnfSsh'
1722 'vnfd:vnfd-catalog': {
1730 "schema": "isb:traffic_profile:0.1",
1732 "description": "Fixed traffic profile to run UDP traffic",
1733 "traffic_profile": {
1734 "traffic_type": "FixedTraffic",
1735 "frame_rate": 100, # pps
1741 def test___init__(self):
1742 sample_vnf = SampleVNF('vnf1', self.VNFD_0)
1744 self.assertEqual(sample_vnf.name, 'vnf1')
1745 self.assertDictEqual(sample_vnf.vnfd_helper, self.VNFD_0)
1747 # test the default setup helper is SetupEnvHelper, not subclass
1748 self.assertEqual(type(sample_vnf.setup_helper), SetupEnvHelper)
1750 # test the default resource helper is ResourceHelper, not subclass
1751 self.assertEqual(type(sample_vnf.resource_helper), ResourceHelper)
1753 def test___init___alt_types(self):
1754 class MySetupEnvHelper(SetupEnvHelper):
1757 class MyResourceHelper(ResourceHelper):
1760 sample_vnf = SampleVNF('vnf1', self.VNFD_0, MySetupEnvHelper, MyResourceHelper)
1762 self.assertEqual(sample_vnf.name, 'vnf1')
1763 self.assertDictEqual(sample_vnf.vnfd_helper, self.VNFD_0)
1765 # test the default setup helper is MySetupEnvHelper, not subclass
1766 self.assertEqual(type(sample_vnf.setup_helper), MySetupEnvHelper)
1768 # test the default resource helper is MyResourceHelper, not subclass
1769 self.assertEqual(type(sample_vnf.resource_helper), MyResourceHelper)
1771 def test__get_port0localip6(self):
1772 sample_vnf = SampleVNF('vnf1', self.VNFD_0)
1773 expected = '0064:ff9b:0:0:0:0:9810:6414'
1774 result = sample_vnf._get_port0localip6()
1775 self.assertEqual(result, expected)
1777 def test__get_port1localip6(self):
1778 sample_vnf = SampleVNF('vnf1', self.VNFD_0)
1779 expected = '0064:ff9b:0:0:0:0:9810:2814'
1780 result = sample_vnf._get_port1localip6()
1781 self.assertEqual(result, expected)
1783 def test__get_port0prefixip6(self):
1784 sample_vnf = SampleVNF('vnf1', self.VNFD_0)
1786 result = sample_vnf._get_port0prefixlen6()
1787 self.assertEqual(result, expected)
1789 def test__get_port1prefixip6(self):
1790 sample_vnf = SampleVNF('vnf1', self.VNFD_0)
1792 result = sample_vnf._get_port1prefixlen6()
1793 self.assertEqual(result, expected)
1795 def test__get_port0gateway6(self):
1796 sample_vnf = SampleVNF('vnf1', self.VNFD_0)
1797 expected = '0064:ff9b:0:0:0:0:9810:6414'
1798 result = sample_vnf._get_port0gateway6()
1799 self.assertEqual(result, expected)
1801 def test__get_port1gateway6(self):
1802 sample_vnf = SampleVNF('vnf1', self.VNFD_0)
1803 expected = '0064:ff9b:0:0:0:0:9810:2814'
1804 result = sample_vnf._get_port1gateway6()
1805 self.assertEqual(result, expected)
1807 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.Process')
1808 def test__start_vnf(self, mock_process_type):
1809 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
1810 sample_vnf = SampleVNF('vnf1', vnfd)
1811 sample_vnf._run = mock.Mock()
1813 self.assertIsNone(sample_vnf.queue_wrapper)
1814 self.assertIsNone(sample_vnf._vnf_process)
1815 self.assertIsNone(sample_vnf._start_vnf())
1816 self.assertIsNotNone(sample_vnf.queue_wrapper)
1817 self.assertIsNotNone(sample_vnf._vnf_process)
1819 @mock.patch("yardstick.ssh.SSH")
1820 def test_instantiate(self, ssh):
1828 context1 = mock.Mock()
1829 context1._get_server.return_value = None
1830 context2 = mock.Mock()
1831 context2._get_server.return_value = context2
1834 Context.list.clear()
1835 except AttributeError:
1836 # clear() but works in Py2.7
1837 Context.list[:] = []
1839 Context.list.extend([
1844 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
1845 sample_vnf = SampleVNF('vnf1', vnfd)
1846 sample_vnf.APP_NAME = 'sample1'
1847 sample_vnf._start_server = mock.Mock(return_value=0)
1848 sample_vnf._vnf_process = mock.MagicMock()
1849 sample_vnf._vnf_process._is_alive.return_value = 1
1850 sample_vnf.ssh_helper = mock.MagicMock()
1851 sample_vnf.deploy_helper = mock.MagicMock()
1852 sample_vnf.resource_helper.ssh_helper = mock.MagicMock()
1857 self.assertIsNone(sample_vnf.instantiate(scenario_cfg, {}))
1858 self.assertEqual(sample_vnf.nfvi_context, context2)
1860 @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
1861 @mock.patch("yardstick.ssh.SSH")
1862 def test_wait_for_instantiate_empty_queue(self, ssh, mock_time):
1863 mock_ssh(ssh, exec_result=(1, "", ""))
1877 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
1878 sample_vnf = SampleVNF('vnf1', vnfd)
1879 sample_vnf.APP_NAME = 'sample1'
1880 sample_vnf.WAIT_TIME_FOR_SCRIPT = 0
1881 sample_vnf._start_server = mock.Mock(return_value=0)
1882 sample_vnf._vnf_process = mock.MagicMock()
1883 sample_vnf._vnf_process.exitcode = 0
1884 sample_vnf._vnf_process._is_alive.return_value = 1
1885 sample_vnf.queue_wrapper = mock.Mock()
1886 sample_vnf.q_out = mock.Mock()
1887 sample_vnf.q_out.qsize.side_effect = iter(queue_size_list)
1888 sample_vnf.q_out.get.side_effect = iter(queue_get_list)
1889 sample_vnf.ssh_helper = mock.MagicMock()
1890 sample_vnf.resource_helper.ssh_helper = mock.MagicMock()
1891 sample_vnf.resource_helper.start_collect = mock.MagicMock()
1893 self.assertEqual(sample_vnf.wait_for_instantiate(), 0)
1895 def test__build_ports(self):
1896 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
1897 sample_vnf = SampleVNF('vnf1', vnfd)
1899 self.assertIsNone(sample_vnf._build_ports())
1900 self.assertIsNotNone(sample_vnf.networks)
1901 self.assertIsNotNone(sample_vnf.uplink_ports)
1902 self.assertIsNotNone(sample_vnf.downlink_ports)
1903 self.assertIsNotNone(sample_vnf.my_ports)
1905 @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
1906 def test_vnf_execute_with_queue_data(self, mock_time):
1918 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
1919 sample_vnf = SampleVNF('vnf1', vnfd)
1920 sample_vnf.APP_NAME = 'sample1'
1921 sample_vnf.q_out = mock.Mock()
1922 sample_vnf.q_out.qsize.side_effect = iter(queue_size_list)
1923 sample_vnf.q_out.get.side_effect = iter(queue_get_list)
1925 self.assertEqual(sample_vnf.vnf_execute('my command'), 'hello world')
1927 def test_terminate_without_vnf_process(self):
1928 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
1929 sample_vnf = SampleVNF('vnf1', vnfd)
1930 sample_vnf.APP_NAME = 'sample1'
1931 sample_vnf.vnf_execute = mock.Mock()
1932 sample_vnf.ssh_helper = mock.Mock()
1933 sample_vnf._tear_down = mock.Mock()
1934 sample_vnf.resource_helper = mock.Mock()
1936 self.assertIsNone(sample_vnf.terminate())
1938 def test_get_stats(self):
1939 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
1940 sample_vnf = SampleVNF('vnf1', vnfd)
1941 sample_vnf.APP_NAME = 'sample1'
1942 sample_vnf.APP_WORD = 'sample1'
1943 sample_vnf.vnf_execute = mock.Mock(return_value='the stats')
1945 self.assertEqual(sample_vnf.get_stats(), 'the stats')
1947 def test_collect_kpi(self):
1948 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
1949 sample_vnf = SampleVNF('vnf1', vnfd)
1950 sample_vnf.APP_NAME = 'sample1'
1951 sample_vnf.COLLECT_KPI = '\s(\d+)\D*(\d+)\D*(\d+)'
1952 sample_vnf.COLLECT_MAP = {
1957 sample_vnf.get_stats = mock.Mock(return_value='index0: 34 -- 91, 27')
1958 sample_vnf.resource_helper = mock.Mock()
1959 sample_vnf.resource_helper.collect_kpi.return_value = {}
1965 'collect_stats': {},
1967 result = sample_vnf.collect_kpi()
1968 self.assertDictEqual(result, expected)
1970 def test_collect_kpi_default(self):
1971 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
1972 sample_vnf = SampleVNF('vnf1', vnfd)
1973 sample_vnf.APP_NAME = 'sample1'
1974 sample_vnf.COLLECT_KPI = '\s(\d+)\D*(\d+)\D*(\d+)'
1975 sample_vnf.get_stats = mock.Mock(return_value='')
1980 'packets_dropped': 0,
1982 result = sample_vnf.collect_kpi()
1983 self.assertDictEqual(result, expected)
1986 class TestSampleVNFTrafficGen(unittest.TestCase):
1989 'short-name': 'VpeVnf',
1994 'network': '152.16.100.20',
1995 'netmask': '255.255.255.0',
1996 'gateway': '152.16.100.20',
2000 'network': '152.16.40.20',
2001 'netmask': '255.255.255.0',
2002 'gateway': '152.16.40.20',
2006 'description': 'VPE approximation using DPDK',
2007 'name': 'vpevnf-baremetal',
2010 'network': '0064:ff9b:0:0:0:0:9810:6414',
2012 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
2016 'network': '0064:ff9b:0:0:0:0:9810:2814',
2018 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
2022 'id': 'vpevnf-baremetal',
2023 'external-interface': [
2025 'virtual-interface': {
2026 'dst_mac': '00:00:00:00:00:03',
2027 'vpci': '0000:05:00.0',
2029 'local_ip': '152.16.100.19',
2030 'type': 'PCI-PASSTHROUGH',
2031 'netmask': '255.255.255.0',
2033 'bandwidth': '10 Gbps',
2034 'dst_ip': '152.16.100.20',
2035 'local_mac': '00:00:00:00:00:01'
2037 'vnfd-connection-point-ref': 'xe0',
2041 'virtual-interface': {
2042 'dst_mac': '00:00:00:00:00:04',
2043 'vpci': '0000:05:00.1',
2045 'local_ip': '152.16.40.19',
2046 'type': 'PCI-PASSTHROUGH',
2047 'netmask': '255.255.255.0',
2049 'bandwidth': '10 Gbps',
2050 'dst_ip': '152.16.40.20',
2051 'local_mac': '00:00:00:00:00:02'
2053 'vnfd-connection-point-ref': 'xe1',
2059 'description': 'Vpe approximation using DPDK',
2061 'vdu-id': 'vpevnf-baremetal',
2074 'connection-point': [
2084 'id': 'VpeApproxVnf', 'name': 'VPEVnfSsh'
2088 'vnfd:vnfd-catalog': {
2096 "schema": "isb:traffic_profile:0.1",
2098 "description": "Fixed traffic profile to run UDP traffic",
2099 "traffic_profile": {
2100 "traffic_type": "FixedTraffic",
2101 "frame_rate": 100, # pps
2107 def test__check_status(self):
2108 sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
2110 with self.assertRaises(NotImplementedError):
2111 sample_vnf_tg._check_status()
2113 def test_listen_traffic(self):
2114 sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
2116 sample_vnf_tg.listen_traffic(mock.Mock())
2118 def test_verify_traffic(self):
2119 sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
2121 sample_vnf_tg.verify_traffic(mock.Mock())
2123 def test_terminate(self):
2124 sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
2125 sample_vnf_tg._traffic_process = mock.Mock()
2126 sample_vnf_tg._tg_process = mock.Mock()
2128 sample_vnf_tg.terminate()
2130 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
2131 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.LOG')
2132 def test_wait_for_instantiate(self, mock_logger, mock_time):
2133 sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
2134 sample_vnf_tg._check_status = mock.Mock(side_effect=iter([1, 0]))
2135 sample_vnf_tg._tg_process = mock.Mock()
2136 sample_vnf_tg._tg_process.is_alive.return_value = True
2137 sample_vnf_tg._tg_process.exitcode = 234
2139 self.assertEqual(sample_vnf_tg.wait_for_instantiate(), 234)
2141 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
2142 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.LOG')
2143 def test_wait_for_instantiate_not_alive(self, mock_logger, mock_time):
2144 sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
2145 sample_vnf_tg._check_status = mock.Mock(return_value=1)
2146 sample_vnf_tg._tg_process = mock.Mock()
2147 sample_vnf_tg._tg_process.is_alive.side_effect = iter([True, False])
2148 sample_vnf_tg._tg_process.exitcode = 234
2150 with self.assertRaises(RuntimeError):
2151 sample_vnf_tg.wait_for_instantiate()
2153 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
2154 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.LOG')
2155 @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.Process')
2156 def test_wait_for_instantiate_delayed(self, mock_process, mock_logger, mock_time):
2157 class MockClientStarted(mock.Mock):
2159 def __init__(self, *args, **kwargs):
2160 super(MockClientStarted, self).__init__(*args, **kwargs)
2161 self.iter = iter([0, 0, 1])
2165 return next(self.iter)
2167 mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
2168 mock_traffic_profile.get_traffic_definition.return_value = "64"
2169 mock_traffic_profile.execute_traffic.return_value = "64"
2170 mock_traffic_profile.params = self.TRAFFIC_PROFILE
2172 sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
2173 sample_vnf_tg._check_status = mock.Mock(side_effect=iter([1, 0]))
2174 sample_vnf_tg._tg_process = mock.Mock()
2175 sample_vnf_tg._tg_process.is_alive.return_value = True
2176 sample_vnf_tg._tg_process.exitcode = 234
2177 sample_vnf_tg.resource_helper = mock.Mock()
2178 sample_vnf_tg.resource_helper.client_started = MockClientStarted()
2180 self.assertTrue(sample_vnf_tg.run_traffic(mock_traffic_profile))
2181 self.assertEqual(mock_time.sleep.call_count, 2)