Merge "Tox: add a pep8 target"
[yardstick.git] / tests / unit / network_services / vnf_generic / vnf / test_sample_vnf.py
index 983c21e..85b10c5 100644 (file)
@@ -29,7 +29,6 @@ from yardstick.benchmark.contexts.base import Context
 from yardstick.network_services.nfvi.resource import ResourceProfile
 from yardstick.network_services.traffic_profile.base import TrafficProfile
 from yardstick.network_services.vnf_generic.vnf.base import VnfdHelper
-from yardstick.ssh import SSHError
 
 
 class MockError(BaseException):
@@ -98,10 +97,12 @@ class TestVnfSshHelper(unittest.TestCase):
                             'local_ip': '152.16.100.19',
                             'type': 'PCI-PASSTHROUGH',
                             'netmask': '255.255.255.0',
-                            'dpdk_port_num': '0',
+                            'dpdk_port_num': 0,
                             'bandwidth': '10 Gbps',
                             'dst_ip': '152.16.100.20',
-                            'local_mac': '00:00:00:00:00:01'
+                            'local_mac': '00:00:00:00:00:01',
+                            'vld_id': 'uplink_0',
+                            'ifname': 'xe0',
                         },
                         'vnfd-connection-point-ref': 'xe0',
                         'name': 'xe0'
@@ -113,10 +114,12 @@ class TestVnfSshHelper(unittest.TestCase):
                             'local_ip': '152.16.40.19',
                             'type': 'PCI-PASSTHROUGH',
                             'netmask': '255.255.255.0',
-                            'dpdk_port_num': '1',
+                            'dpdk_port_num': 1,
                             'bandwidth': '10 Gbps',
                             'dst_ip': '152.16.40.20',
-                            'local_mac': '00:00:00:00:00:02'
+                            'local_mac': '00:00:00:00:00:02',
+                            'vld_id': 'downlink_0',
+                            'ifname': 'xe1',
                         },
                         'vnfd-connection-point-ref': 'xe1',
                         'name': 'xe1'
@@ -292,10 +295,12 @@ class TestSetupEnvHelper(unittest.TestCase):
                             'local_ip': '152.16.100.19',
                             'type': 'PCI-PASSTHROUGH',
                             'netmask': '255.255.255.0',
-                            'dpdk_port_num': '0',
+                            'dpdk_port_num': 0,
                             'bandwidth': '10 Gbps',
                             'dst_ip': '152.16.100.20',
-                            'local_mac': '00:00:00:00:00:01'
+                            'local_mac': '00:00:00:00:00:01',
+                            'vld_id': 'uplink_0',
+                            'ifname': 'xe0',
                         },
                         'vnfd-connection-point-ref': 'xe0',
                         'name': 'xe0'
@@ -307,10 +312,12 @@ class TestSetupEnvHelper(unittest.TestCase):
                             'local_ip': '152.16.40.19',
                             'type': 'PCI-PASSTHROUGH',
                             'netmask': '255.255.255.0',
-                            'dpdk_port_num': '1',
+                            'dpdk_port_num': 1,
                             'bandwidth': '10 Gbps',
                             'dst_ip': '152.16.40.20',
-                            'local_mac': '00:00:00:00:00:02'
+                            'local_mac': '00:00:00:00:00:02',
+                            'vld_id': 'downlink_0',
+                            'ifname': 'xe1',
                         },
                         'vnfd-connection-point-ref': 'xe1',
                         'name': 'xe1'
@@ -352,15 +359,6 @@ class TestSetupEnvHelper(unittest.TestCase):
         with self.assertRaises(NotImplementedError):
             setup_env_helper.build_config()
 
-    def test__get_ports_gateway(self):
-        vnfd_helper = VnfdHelper(self.VNFD_0)
-        setup_env_helper = SetupEnvHelper(vnfd_helper, mock.Mock(), mock.Mock())
-        result = setup_env_helper._get_ports_gateway("xe0")
-        self.assertEqual(result, "152.16.100.20")
-
-        result = setup_env_helper._get_ports_gateway("xe123")
-        self.assertIsNone(result)
-
     def test_setup_vnf_environment(self):
         setup_env_helper = SetupEnvHelper(mock.Mock(), mock.Mock(), mock.Mock())
         self.assertIsNone(setup_env_helper.setup_vnf_environment())
@@ -414,16 +412,15 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
                         'virtual-interface': {
                             'dst_mac': '00:00:00:00:00:03',
                             'vpci': '0000:05:00.0',
-                            'dpdk_port_num': '0',
+                            'dpdk_port_num': 0,
                             'driver': 'i40e',
                             'local_ip': '152.16.100.19',
                             'type': 'PCI-PASSTHROUGH',
                             'netmask': '255.255.255.0',
-                            'dpdk_port_num': '0',
                             'bandwidth': '10 Gbps',
                             'dst_ip': '152.16.100.20',
                             'local_mac': '00:00:00:00:00:01',
-                            'vld_id': 'private_0',
+                            'vld_id': 'uplink_0',
                             'ifname': 'xe0',
                         },
                         'vnfd-connection-point-ref': 'xe0',
@@ -433,16 +430,15 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
                         'virtual-interface': {
                             'dst_mac': '00:00:00:00:00:04',
                             'vpci': '0000:05:00.1',
-                            'dpdk_port_num': '1',
+                            'dpdk_port_num': 1,
                             'driver': 'ixgbe',
                             'local_ip': '152.16.40.19',
                             'type': 'PCI-PASSTHROUGH',
                             'netmask': '255.255.255.0',
-                            'dpdk_port_num': '1',
                             'bandwidth': '10 Gbps',
                             'dst_ip': '152.16.40.20',
                             'local_mac': '00:00:00:00:00:02',
-                            'vld_id': 'public_0',
+                            'vld_id': 'downlink_0',
                             'ifname': 'xe1',
                         },
                         'vnfd-connection-point-ref': 'xe1',
@@ -549,7 +545,8 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
         call_args_iter = (args[0][0] for args in ssh_helper.execute.call_args_list)
         self.assertIsNone(result)
         self.assertEqual(ssh_helper.execute.call_count, 3)
-        for expect_start, expect_in, arg0 in zip(expect_start_list, expect_in_list, call_args_iter):
+        for expect_start, expect_in, arg0 in zip(expect_start_list, expect_in_list,
+                                                 call_args_iter):
             self.assertTrue(arg0.startswith(expect_start))
             self.assertIn(expect_in, arg0)
 
@@ -566,19 +563,11 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
         call_args_iter = (args[0][0] for args in ssh_helper.execute.call_args_list)
         self.assertIsNone(result)
         self.assertEqual(ssh_helper.execute.call_count, 3)
-        for expect_start, expect_in, arg0 in zip(expect_start_list, expect_in_list, call_args_iter):
+        for expect_start, expect_in, arg0 in zip(expect_start_list, expect_in_list,
+                                                 call_args_iter):
             self.assertTrue(arg0.startswith(expect_start))
             self.assertIn(expect_in, arg0)
 
-    def test__get_dpdk_port_num(self):
-        vnfd_helper = VnfdHelper(self.VNFD_0)
-        ssh_helper = mock.Mock()
-        scenario_helper = mock.Mock()
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-        expected = '0'
-        result = dpdk_setup_helper._get_dpdk_port_num('xe0')
-        self.assertEqual(result, expected)
-
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.open')
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.find_relative_file')
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.MultiPortConfig')
@@ -590,7 +579,6 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
         scenario_helper.vnf_cfg = {}
         scenario_helper.all_options = {}
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-        dpdk_setup_helper.all_ports = []
 
         dpdk_setup_helper.PIPELINE_COMMAND = expected = 'pipeline command'
         result = dpdk_setup_helper.build_config()
@@ -614,184 +602,31 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
         expected = {
             'cfg_file': 'config',
             'script': 'script',
-            'ports_len_hex': '0xf',
+            'port_mask_hex': '0x3',
             'tool_path': 'tool_path',
         }
         dpdk_setup_helper._build_pipeline_kwargs()
         self.assertDictEqual(dpdk_setup_helper.pipeline_kwargs, expected)
 
-    def test__get_app_cpu(self):
-        vnfd_helper = VnfdHelper(self.VNFD_0)
-        ssh_helper = mock.Mock()
-        ssh_helper.provision_tool.return_value = 'tool_path'
-        scenario_helper = mock.Mock()
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-
-        dpdk_setup_helper.CORES = expected = [5, 4, 3]
-        result = dpdk_setup_helper._get_app_cpu()
-        self.assertEqual(result, expected)
-
-    @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.CpuSysCores')
-    def test__get_app_cpu_no_cores_sw(self, mock_cpu_sys_cores_class):
-        mock_cpu_sys_cores = mock_cpu_sys_cores_class()
-        mock_cpu_sys_cores.get_core_socket.return_value = {
-            'socket': [2, 4, 8, 10, 12],
-        }
-        vnfd_helper = VnfdHelper(self.VNFD_0)
-        ssh_helper = mock.Mock()
-        ssh_helper.provision_tool.return_value = 'tool_path'
-        scenario_helper = mock.Mock()
-        scenario_helper.vnf_cfg = {
-            'worker_threads': '2',
-        }
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-        dpdk_setup_helper.CORES = []
-        dpdk_setup_helper.SW_DEFAULT_CORE = 1
-        dpdk_setup_helper.HW_DEFAULT_CORE = 2
-        dpdk_setup_helper.socket = 'socket'
-
-        expected = [2, 4, 8]
-        result = dpdk_setup_helper._get_app_cpu()
-        self.assertEqual(result, expected)
-
-    @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.CpuSysCores')
-    def test__get_app_cpu_no_cores_hw(self, mock_cpu_sys_cores_class):
-        mock_cpu_sys_cores = mock_cpu_sys_cores_class()
-        mock_cpu_sys_cores.get_core_socket.return_value = {
-            'socket': [2, 4, 8, 10, 12],
-        }
-        vnfd_helper = VnfdHelper(self.VNFD_0)
-        ssh_helper = mock.Mock()
-        scenario_helper = mock.Mock()
-        scenario_helper.vnf_cfg = {
-            'worker_threads': '2',
-            'lb_config': 'HW',
-        }
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-        dpdk_setup_helper.CORES = []
-        dpdk_setup_helper.SW_DEFAULT_CORE = 1
-        dpdk_setup_helper.HW_DEFAULT_CORE = 2
-        dpdk_setup_helper.socket = 'socket'
-
-        expected = [2, 4, 8, 10]
-        result = dpdk_setup_helper._get_app_cpu()
-        self.assertEqual(result, expected)
-
-    def test__get_cpu_sibling_list(self):
-        vnfd_helper = VnfdHelper(self.VNFD_0)
-        ssh_helper = mock.Mock()
-        ssh_helper.execute.side_effect = iter([(0, '5', ''), (0, '3,4', ''), (0, '10', '')])
-        scenario_helper = mock.Mock()
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-        dpdk_setup_helper._get_app_cpu = mock.Mock(return_value=[])
-
-        expected = ['5', '3', '4', '10']
-        result = dpdk_setup_helper._get_cpu_sibling_list([1, 3, 7])
-        self.assertEqual(result, expected)
-
-    def test__get_cpu_sibling_list_no_core_arg(self):
-        vnfd_helper = VnfdHelper(self.VNFD_0)
-        ssh_helper = mock.Mock()
-        ssh_helper.execute.side_effect = iter([(0, '5', ''), (0, '3,4', ''), (0, '10', '')])
-        scenario_helper = mock.Mock()
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-        dpdk_setup_helper._get_app_cpu = mock.Mock(return_value=[1, 7])
-
-        expected = ['5', '3', '4']
-        result = dpdk_setup_helper._get_cpu_sibling_list()
-        self.assertEqual(result, expected)
-
-    def test__get_cpu_sibling_list_ssh_failure(self):
-        vnfd_helper = VnfdHelper(self.VNFD_0)
-        ssh_helper = mock.Mock()
-        ssh_helper.execute.side_effect = iter([(0, '5', ''), SSHError, (0, '10', '')])
-        scenario_helper = mock.Mock()
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-        dpdk_setup_helper._get_app_cpu = mock.Mock(return_value=[])
-
-        expected = []
-        result = dpdk_setup_helper._get_cpu_sibling_list([1, 3, 7])
-        self.assertEqual(result, expected)
-
-    def test__validate_cpu_cfg(self):
-        vnfd_helper = VnfdHelper(self.VNFD_0)
-        ssh_helper = mock.Mock()
-        ssh_helper.execute.side_effect = iter([(0, '5', ''), (0, '3,4', ''), (0, '10', '')])
-        scenario_helper = mock.Mock()
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-        dpdk_setup_helper._get_app_cpu = mock.Mock(return_value=[1, 3, 7])
-
-        expected = ['5', '3', '4', '10']
-        result = dpdk_setup_helper._validate_cpu_cfg()
-        self.assertEqual(result, expected)
-
-    def test__find_used_drivers(self):
-        vnfd_helper = VnfdHelper(self.VNFD_0)
-        ssh_helper = mock.Mock()
-        stdout = '''
-00:01.2 foo drv=name1
-00:01.4 drv foo=name2
-00:02.2 drv=name3
-00:02.3 drv=name4
-'''
-        ssh_helper.execute.return_value = 0, stdout, ''
-        scenario_helper = mock.Mock()
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-        dpdk_setup_helper.used_drivers = None
-        dpdk_setup_helper._dpdk_nic_bind = ''
-        dpdk_setup_helper.bound_pci = [
-            'pci 00:01.2',
-            'pci 00:02.3',
-        ]
-
-        expected = {
-            '00:01.2': (0, 'name1'),
-            '00:02.3': (2, 'name4'),
-        }
-        dpdk_setup_helper._find_used_drivers()
-        self.assertEqual(dpdk_setup_helper.used_drivers, expected)
-
-    def test_dpdk_nic_bind(self):
-        vnfd_helper = VnfdHelper(self.VNFD_0)
-        ssh_helper = mock.Mock()
-        ssh_helper.provision_tool.return_value = nic_bind = object()
-        scenario_helper = mock.Mock()
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-
-        self.assertIsNone(dpdk_setup_helper._dpdk_nic_bind)
-        self.assertIs(dpdk_setup_helper.dpdk_nic_bind, nic_bind)
-        self.assertIs(dpdk_setup_helper.dpdk_nic_bind, nic_bind)
-        self.assertEqual(ssh_helper.provision_tool.call_count, 1)
-
-        # ensure provision tool is not called a second time
-        self.assertIs(dpdk_setup_helper.dpdk_nic_bind, nic_bind)
-        self.assertEqual(ssh_helper.provision_tool.call_count, 1)
-
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
     @mock.patch('yardstick.ssh.SSH')
     def test_setup_vnf_environment(self, _, mock_time):
-        cores = ['3', '4']
+        def execute(cmd, *args, **kwargs):
+            if cmd.startswith('which '):
+                return exec_failure
+            return exec_success
 
-        vnfd_helper = VnfdHelper(deepcopy(self.VNFD_0))
+        exec_success = (0, 'good output', '')
+        exec_failure = (1, 'bad output', 'error output')
+
+        vnfd_helper = VnfdHelper(self.VNFD_0)
         ssh_helper = mock.Mock()
-        ssh_helper.execute.return_value = 1, 'bad output', 'error output'
-        ssh_helper.join_bin_path.return_value = 'joined_path'
-        ssh_helper.provision_tool.return_value = 'provision string'
-        scenario_helper = mock.Mock()
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-        dpdk_setup_helper._setup_hugepages = mock.Mock()
-        dpdk_setup_helper._validate_cpu_cfg = mock.Mock(return_value=cores)
-        dpdk_setup_helper._find_used_drivers = mock.Mock()
-        dpdk_setup_helper.used_drivers = {
-            '0000:05:00.0': (1, ''),
-            '0000:05:01.0': (3, ''),
-        }
+        ssh_helper.execute = execute
 
-        result = dpdk_setup_helper.setup_vnf_environment()
-        self.assertIsInstance(result, ResourceProfile)
-        self.assertEqual(result.cores, cores)
-        self.assertEqual(vnfd_helper.interfaces[0]['dpdk_port_num'], 1)
-        self.assertNotIn('dpdk_port_num', vnfd_helper.interfaces[1])
+        dpdk_vnf_setup_env_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, mock.Mock())
+        dpdk_vnf_setup_env_helper._validate_cpu_cfg = mock.Mock(return_value=[])
+
+        self.assertIsInstance(dpdk_vnf_setup_env_helper.setup_vnf_environment(), ResourceProfile)
 
     def test__setup_dpdk_early_success(self):
         vnfd_helper = VnfdHelper(self.VNFD_0)
@@ -833,6 +668,8 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
         dpdk_setup_helper._validate_cpu_cfg = mock.Mock()
 
+        dpdk_setup_helper.bound_pci = [v['virtual-interface']["vpci"] for v in
+                                       vnfd_helper.interfaces]
         result = dpdk_setup_helper._setup_resources()
         self.assertIsInstance(result, ResourceProfile)
         self.assertEqual(dpdk_setup_helper.socket, 0)
@@ -847,87 +684,153 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
         dpdk_setup_helper._validate_cpu_cfg = mock.Mock()
 
+        dpdk_setup_helper.bound_pci = [v['virtual-interface']["vpci"] for v in
+                                       vnfd_helper.interfaces]
         result = dpdk_setup_helper._setup_resources()
         self.assertIsInstance(result, ResourceProfile)
         self.assertEqual(dpdk_setup_helper.socket, 1)
 
-    def test__bind_dpdk_unforced(self):
-        vnfd_helper = VnfdHelper(self.VNFD_0)
-        ssh_helper = mock.Mock()
-        scenario_helper = mock.Mock()
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-
-        dpdk_setup_helper._bind_dpdk('x', 'y', force=False)
-        self.assertNotIn('--force', ssh_helper.execute.call_args_list[0][0][0])
-
-    def test__detect_and_bind_dpdk_short(self):
-        vnfd_helper = VnfdHelper(self.VNFD_0)
-        ssh_helper = mock.Mock()
-        ssh_helper.execute.return_value = 0, 'output', ''
-        scenario_helper = mock.Mock()
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-
-        self.assertIsNone(dpdk_setup_helper._detect_and_bind_dpdk('a', 'b'))
-        self.assertEqual(ssh_helper.execute.call_count, 1)
-
-    def test__detect_and_bind_dpdk_fail_to_bind(self):
-        vnfd_helper = VnfdHelper(self.VNFD_0)
+    @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
+    def test__detect_and_bind_drivers(self, mock_time):
+        vnfd_helper = VnfdHelper(deepcopy(self.VNFD_0))
         ssh_helper = mock.Mock()
-        ssh_helper.execute.return_value = 1, 'bad output', 'error output'
+        # ssh_helper.execute = mock.Mock(return_value = (0, 'text', ''))
+        # ssh_helper.execute.return_value = 0, 'output', ''
         scenario_helper = mock.Mock()
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-        dpdk_setup_helper._bind_dpdk = mock.Mock()
+        rv = ['0000:05:00.1', '0000:05:00.0']
 
-        self.assertIsNone(dpdk_setup_helper._detect_and_bind_dpdk('a', 'b'))
-        self.assertEqual(ssh_helper.execute.call_count, 2)
-
-    def test__detect_and_bind_dpdk(self):
-        vnfd_helper = VnfdHelper(self.VNFD_0)
-        ssh_helper = mock.Mock()
-        ssh_helper.execute.side_effect = iter([
-            (1, 'bad output', 'error output'),
-            (0, 'output', ''),
-        ])
-        scenario_helper = mock.Mock()
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-        dpdk_setup_helper._bind_dpdk = mock.Mock()
+        dpdk_setup_helper.dpdk_bind_helper._get_bound_pci_addresses = mock.Mock(return_value=rv)
+        dpdk_setup_helper.dpdk_bind_helper.bind = mock.Mock()
+        dpdk_setup_helper.dpdk_bind_helper.read_status = mock.Mock()
 
-        self.assertEqual(dpdk_setup_helper._detect_and_bind_dpdk('a', 'b'), 'output')
-        self.assertEqual(ssh_helper.execute.call_count, 2)
+        self.assertIsNone(dpdk_setup_helper._detect_and_bind_drivers())
 
-    def test__bind_kernel_devices(self):
-        bind_iter = iter([
-            None,
-            'output',
-        ])
-
-        vnfd_helper = VnfdHelper(self.VNFD_0)
-        ssh_helper = mock.Mock()
-        scenario_helper = mock.Mock()
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-        dpdk_setup_helper._detect_and_bind_dpdk = mock.Mock(side_effect=bind_iter)
-
-        self.assertIsNone(dpdk_setup_helper._bind_kernel_devices())
+        intf_0 = vnfd_helper.vdu[0]['external-interface'][0]['virtual-interface']
+        intf_1 = vnfd_helper.vdu[0]['external-interface'][1]['virtual-interface']
+        self.assertEquals(0, intf_0['dpdk_port_num'])
+        self.assertEquals(1, intf_1['dpdk_port_num'])
 
     def test_tear_down(self):
         vnfd_helper = VnfdHelper(self.VNFD_0)
         ssh_helper = mock.Mock()
         scenario_helper = mock.Mock()
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-        dpdk_setup_helper._dpdk_nic_bind = 'a'
-        dpdk_setup_helper.used_drivers = {
-            '0000:05:00.0': (1, 'd1'),
-            '0000:05:01.0': (3, 'd3'),
+        dpdk_setup_helper.dpdk_bind_helper.bind = mock.Mock()
+        dpdk_setup_helper.dpdk_bind_helper.used_drivers = {
+            'd1': ['0000:05:00.0'],
+            'd3': ['0000:05:01.0'],
         }
 
         self.assertIsNone(dpdk_setup_helper.tear_down())
+        dpdk_setup_helper.dpdk_bind_helper.bind.assert_any_call(['0000:05:00.0'], 'd1', True)
+        dpdk_setup_helper.dpdk_bind_helper.bind.assert_any_call(['0000:05:01.0'], 'd3', True)
 
 
 class TestResourceHelper(unittest.TestCase):
 
+    VNFD_0 = {
+        'short-name': 'VpeVnf',
+        'vdu': [
+            {
+                'routing_table': [
+                    {
+                        'network': '152.16.100.20',
+                        'netmask': '255.255.255.0',
+                        'gateway': '152.16.100.20',
+                        'if': 'xe0'
+                    },
+                    {
+                        'network': '152.16.40.20',
+                        'netmask': '255.255.255.0',
+                        'gateway': '152.16.40.20',
+                        'if': 'xe1'
+                    },
+                ],
+                'description': 'VPE approximation using DPDK',
+                'name': 'vpevnf-baremetal',
+                'nd_route_tbl': [
+                    {
+                        'network': '0064:ff9b:0:0:0:0:9810:6414',
+                        'netmask': '112',
+                        'gateway': '0064:ff9b:0:0:0:0:9810:6414',
+                        'if': 'xe0'
+                    },
+                    {
+                        'network': '0064:ff9b:0:0:0:0:9810:2814',
+                        'netmask': '112',
+                        'gateway': '0064:ff9b:0:0:0:0:9810:2814',
+                        'if': 'xe1'
+                    },
+                ],
+                'id': 'vpevnf-baremetal',
+                'external-interface': [
+                    {
+                        'virtual-interface': {
+                            'dst_mac': '00:00:00:00:00:03',
+                            'vpci': '0000:05:00.0',
+                            'driver': 'i40e',
+                            'local_ip': '152.16.100.19',
+                            'type': 'PCI-PASSTHROUGH',
+                            'netmask': '255.255.255.0',
+                            'dpdk_port_num': 0,
+                            'bandwidth': '10 Gbps',
+                            'dst_ip': '152.16.100.20',
+                            'local_mac': '00:00:00:00:00:01'
+                        },
+                        'vnfd-connection-point-ref': 'xe0',
+                        'name': 'xe0'
+                    },
+                    {
+                        'virtual-interface': {
+                            'dst_mac': '00:00:00:00:00:04',
+                            'vpci': '0000:05:00.1',
+                            'driver': 'ixgbe',
+                            'local_ip': '152.16.40.19',
+                            'type': 'PCI-PASSTHROUGH',
+                            'netmask': '255.255.255.0',
+                            'dpdk_port_num': 1,
+                            'bandwidth': '10 Gbps',
+                            'dst_ip': '152.16.40.20',
+                            'local_mac': '00:00:00:00:00:02'
+                        },
+                        'vnfd-connection-point-ref': 'xe1',
+                        'name': 'xe1'
+                    },
+                ],
+            },
+        ],
+        'description': 'Vpe approximation using DPDK',
+        'mgmt-interface': {
+            'vdu-id': 'vpevnf-baremetal',
+            'host': '1.1.1.1',
+            'password': 'r00t',
+            'user': 'root',
+            'ip': '1.1.1.1'
+        },
+        'benchmark': {
+            'kpi': [
+                'packets_in',
+                'packets_fwd',
+                'packets_dropped',
+            ],
+        },
+        'connection-point': [
+            {
+                'type': 'VPORT',
+                'name': 'xe0',
+            },
+            {
+                'type': 'VPORT',
+                'name': 'xe1',
+            },
+        ],
+        'id': 'VpeApproxVnf', 'name': 'VPEVnfSsh'
+    }
+
     def test_setup(self):
         resource = object()
-        vnfd_helper = VnfdHelper({})
+        vnfd_helper = VnfdHelper(self.VNFD_0)
         ssh_helper = mock.Mock()
         scenario_helper = mock.Mock()
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
@@ -938,7 +841,7 @@ class TestResourceHelper(unittest.TestCase):
         self.assertIs(resource_helper.resource, resource)
 
     def test_generate_cfg(self):
-        vnfd_helper = VnfdHelper({})
+        vnfd_helper = VnfdHelper(self.VNFD_0)
         ssh_helper = mock.Mock()
         scenario_helper = mock.Mock()
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
@@ -947,7 +850,7 @@ class TestResourceHelper(unittest.TestCase):
         self.assertIsNone(resource_helper.generate_cfg())
 
     def test_stop_collect(self):
-        vnfd_helper = VnfdHelper({})
+        vnfd_helper = VnfdHelper(self.VNFD_0)
         ssh_helper = mock.Mock()
         scenario_helper = mock.Mock()
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
@@ -957,7 +860,7 @@ class TestResourceHelper(unittest.TestCase):
         self.assertIsNone(resource_helper.stop_collect())
 
     def test_stop_collect_none(self):
-        vnfd_helper = VnfdHelper({})
+        vnfd_helper = VnfdHelper(self.VNFD_0)
         ssh_helper = mock.Mock()
         scenario_helper = mock.Mock()
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
@@ -966,6 +869,7 @@ class TestResourceHelper(unittest.TestCase):
 
         self.assertIsNone(resource_helper.stop_collect())
 
+
 class TestClientResourceHelper(unittest.TestCase):
 
     VNFD_0 = {
@@ -1012,10 +916,12 @@ class TestClientResourceHelper(unittest.TestCase):
                             'local_ip': '152.16.100.19',
                             'type': 'PCI-PASSTHROUGH',
                             'netmask': '255.255.255.0',
-                            'dpdk_port_num': '0',
+                            'dpdk_port_num': 0,
                             'bandwidth': '10 Gbps',
                             'dst_ip': '152.16.100.20',
-                            'local_mac': '00:00:00:00:00:01'
+                            'local_mac': '00:00:00:00:00:01',
+                            'vld_id': 'uplink_0',
+                            'ifname': 'xe0',
                         },
                         'vnfd-connection-point-ref': 'xe0',
                         'name': 'xe0'
@@ -1028,10 +934,12 @@ class TestClientResourceHelper(unittest.TestCase):
                             'local_ip': '152.16.40.19',
                             'type': 'PCI-PASSTHROUGH',
                             'netmask': '255.255.255.0',
-                            'dpdk_port_num': '1',
+                            'dpdk_port_num': 1,
                             'bandwidth': '10 Gbps',
                             'dst_ip': '152.16.40.20',
-                            'local_mac': '00:00:00:00:00:02'
+                            'local_mac': '00:00:00:00:00:02',
+                            'vld_id': 'downlink_0',
+                            'ifname': 'xe1',
                         },
                         'vnfd-connection-point-ref': 'xe1',
                         'name': 'xe1'
@@ -1044,7 +952,7 @@ class TestClientResourceHelper(unittest.TestCase):
                             'local_ip': '152.16.40.19',
                             'type': 'PCI-PASSTHROUGH',
                             'netmask': '255.255.255.0',
-                            'dpdk_port_num': '1',
+                            'dpdk_port_num': 2,
                             'bandwidth': '10 Gbps',
                             'dst_ip': '152.16.40.30',
                             'local_mac': '00:00:00:00:00:11'
@@ -1095,7 +1003,7 @@ class TestClientResourceHelper(unittest.TestCase):
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.STLError',
                 new_callable=lambda: MockError)
     def test_get_stats_not_connected(self, mock_state_error, mock_logger):
-        vnfd_helper = VnfdHelper({})
+        vnfd_helper = VnfdHelper(self.VNFD_0)
         ssh_helper = mock.Mock()
         scenario_helper = mock.Mock()
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
@@ -1113,11 +1021,6 @@ class TestClientResourceHelper(unittest.TestCase):
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
         client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
         client_resource_helper.client = mock.MagicMock()
-        client_resource_helper._vpci_ascending = [
-            '0000:05:00.0',
-            '0000:05:00.1',
-            '0000:05:00.2',
-        ]
         client_resource_helper.client.get_stats.return_value = {
             0: {
                 'rx_pps': 5.5,
@@ -1151,16 +1054,9 @@ class TestClientResourceHelper(unittest.TestCase):
                 "in_packets": 0,
                 "out_packets": 48791,
             },
-            'xe2': {
-                "rx_throughput_fps": 0.0,
-                "tx_throughput_fps": 0.0,
-                "rx_throughput_mbps": 0.0,
-                "tx_throughput_mbps": 0.0,
-                "in_packets": 0,
-                "out_packets": 0,
-            },
         }
-        result = client_resource_helper.generate_samples()
+        ports = vnfd_helper.port_nums(vnfd_helper.port_pairs.all_ports)
+        result = client_resource_helper.generate_samples(ports)
         self.assertDictEqual(result, expected)
 
     def test_generate_samples_with_key(self):
@@ -1170,10 +1066,6 @@ class TestClientResourceHelper(unittest.TestCase):
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
         client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
         client_resource_helper.client = mock.MagicMock()
-        client_resource_helper._vpci_ascending = [
-            '0000:05:00.0',
-            '0000:05:00.1',
-        ]
         client_resource_helper.client.get_stats.return_value = {
             'key_name': 'key_value',
             0: {
@@ -1211,7 +1103,8 @@ class TestClientResourceHelper(unittest.TestCase):
                 "out_packets": 48791,
             },
         }
-        result = client_resource_helper.generate_samples('key_name')
+        ports = vnfd_helper.port_nums(vnfd_helper.port_pairs.all_ports)
+        result = client_resource_helper.generate_samples(ports, 'key_name')
         self.assertDictEqual(result, expected)
 
     def test_generate_samples_with_key_and_default(self):
@@ -1221,10 +1114,6 @@ class TestClientResourceHelper(unittest.TestCase):
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
         client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
         client_resource_helper.client = mock.MagicMock()
-        client_resource_helper._vpci_ascending = [
-            '0000:05:00.0',
-            '0000:05:00.1',
-        ]
         client_resource_helper.client.get_stats.return_value = {
             0: {
                 'rx_pps': 5.5,
@@ -1261,11 +1150,12 @@ class TestClientResourceHelper(unittest.TestCase):
                 "out_packets": 48791,
             },
         }
-        result = client_resource_helper.generate_samples('key_name', 'default')
+        ports = vnfd_helper.port_nums(vnfd_helper.port_pairs.all_ports)
+        result = client_resource_helper.generate_samples(ports, 'key_name', 'default')
         self.assertDictEqual(result, expected)
 
     def test_clear_stats(self):
-        vnfd_helper = VnfdHelper({})
+        vnfd_helper = VnfdHelper(self.VNFD_0)
         ssh_helper = mock.Mock()
         scenario_helper = mock.Mock()
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
@@ -1276,7 +1166,7 @@ class TestClientResourceHelper(unittest.TestCase):
         self.assertEqual(client_resource_helper.client.clear_stats.call_count, 1)
 
     def test_clear_stats_of_ports(self):
-        vnfd_helper = VnfdHelper({})
+        vnfd_helper = VnfdHelper(self.VNFD_0)
         ssh_helper = mock.Mock()
         scenario_helper = mock.Mock()
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
@@ -1287,7 +1177,7 @@ class TestClientResourceHelper(unittest.TestCase):
         self.assertEqual(client_resource_helper.client.clear_stats.call_count, 1)
 
     def test_start(self):
-        vnfd_helper = VnfdHelper({})
+        vnfd_helper = VnfdHelper(self.VNFD_0)
         ssh_helper = mock.Mock()
         scenario_helper = mock.Mock()
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
@@ -1298,7 +1188,7 @@ class TestClientResourceHelper(unittest.TestCase):
         self.assertEqual(client_resource_helper.client.start.call_count, 1)
 
     def test_start_ports(self):
-        vnfd_helper = VnfdHelper({})
+        vnfd_helper = VnfdHelper(self.VNFD_0)
         ssh_helper = mock.Mock()
         scenario_helper = mock.Mock()
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
@@ -1309,7 +1199,7 @@ class TestClientResourceHelper(unittest.TestCase):
         self.assertEqual(client_resource_helper.client.start.call_count, 1)
 
     def test_collect_kpi_with_queue(self):
-        vnfd_helper = VnfdHelper({})
+        vnfd_helper = VnfdHelper(self.VNFD_0)
         ssh_helper = mock.Mock()
         scenario_helper = mock.Mock()
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
@@ -1332,7 +1222,7 @@ class TestClientResourceHelper(unittest.TestCase):
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.STLError',
                 new_callable=lambda: MockError)
     def test__connect_with_failures(self, mock_error, mock_logger, mock_time):
-        vnfd_helper = VnfdHelper({})
+        vnfd_helper = VnfdHelper(self.VNFD_0)
         ssh_helper = mock.Mock()
         scenario_helper = mock.Mock()
         dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
@@ -1501,8 +1391,9 @@ class TestRfc2544ResourceHelper(unittest.TestCase):
 
 class TestSampleVNFDeployHelper(unittest.TestCase):
 
+    @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
     @mock.patch('subprocess.check_output')
-    def test_deploy_vnfs_disabled(self, mock_check_output):
+    def test_deploy_vnfs_disabled(self, mock_check_output, mock_time):
         vnfd_helper = mock.Mock()
         ssh_helper = mock.Mock()
         ssh_helper.join_bin_path.return_value = 'joined_path'
@@ -1511,8 +1402,9 @@ class TestSampleVNFDeployHelper(unittest.TestCase):
         sample_vnf_deploy_helper = SampleVNFDeployHelper(vnfd_helper, ssh_helper)
 
         self.assertIsNone(sample_vnf_deploy_helper.deploy_vnfs('name1'))
-        self.assertEqual(ssh_helper.execute.call_count, 0)
-        self.assertEqual(ssh_helper.put.call_count, 0)
+        sample_vnf_deploy_helper.DISABLE_DEPLOY = True
+        self.assertEqual(ssh_helper.execute.call_count, 5)
+        self.assertEqual(ssh_helper.put.call_count, 1)
 
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
     @mock.patch('subprocess.check_output')
@@ -1667,7 +1559,7 @@ class TestSampleVnf(unittest.TestCase):
                             'local_ip': '152.16.100.19',
                             'type': 'PCI-PASSTHROUGH',
                             'netmask': '255.255.255.0',
-                            'dpdk_port_num': '0',
+                            'dpdk_port_num': 0,
                             'bandwidth': '10 Gbps',
                             'dst_ip': '152.16.100.20',
                             'local_mac': '00:00:00:00:00:01'
@@ -1682,7 +1574,7 @@ class TestSampleVnf(unittest.TestCase):
                             'local_ip': '152.16.40.19',
                             'type': 'PCI-PASSTHROUGH',
                             'netmask': '255.255.255.0',
-                            'dpdk_port_num': '1',
+                            'dpdk_port_num': 1,
                             'bandwidth': '10 Gbps',
                             'dst_ip': '152.16.40.20',
                             'local_mac': '00:00:00:00:00:02'
@@ -1757,7 +1649,6 @@ class TestSampleVnf(unittest.TestCase):
         class MySetupEnvHelper(SetupEnvHelper):
             pass
 
-
         class MyResourceHelper(ResourceHelper):
             pass
 
@@ -1881,6 +1772,7 @@ class TestSampleVnf(unittest.TestCase):
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
         sample_vnf = SampleVNF('vnf1', vnfd)
         sample_vnf.APP_NAME = 'sample1'
+        sample_vnf.WAIT_TIME_FOR_SCRIPT = 0
         sample_vnf._start_server = mock.Mock(return_value=0)
         sample_vnf._vnf_process = mock.MagicMock()
         sample_vnf._vnf_process.exitcode = 0
@@ -1895,6 +1787,16 @@ class TestSampleVnf(unittest.TestCase):
 
         self.assertEqual(sample_vnf.wait_for_instantiate(), 0)
 
+    def test__build_ports(self):
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        sample_vnf = SampleVNF('vnf1', vnfd)
+
+        self.assertIsNone(sample_vnf._build_ports())
+        self.assertIsNotNone(sample_vnf.networks)
+        self.assertIsNotNone(sample_vnf.uplink_ports)
+        self.assertIsNotNone(sample_vnf.downlink_ports)
+        self.assertIsNotNone(sample_vnf.my_ports)
+
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
     def test_vnf_execute_with_queue_data(self, mock_time):
         queue_size_list = [
@@ -2022,7 +1924,7 @@ class TestSampleVNFTrafficGen(unittest.TestCase):
                             'local_ip': '152.16.100.19',
                             'type': 'PCI-PASSTHROUGH',
                             'netmask': '255.255.255.0',
-                            'dpdk_port_num': '0',
+                            'dpdk_port_num': 0,
                             'bandwidth': '10 Gbps',
                             'dst_ip': '152.16.100.20',
                             'local_mac': '00:00:00:00:00:01'
@@ -2038,7 +1940,7 @@ class TestSampleVNFTrafficGen(unittest.TestCase):
                             'local_ip': '152.16.40.19',
                             'type': 'PCI-PASSTHROUGH',
                             'netmask': '255.255.255.0',
-                            'dpdk_port_num': '1',
+                            'dpdk_port_num': 1,
                             'bandwidth': '10 Gbps',
                             'dst_ip': '152.16.40.20',
                             'local_mac': '00:00:00:00:00:02'
@@ -2046,22 +1948,6 @@ class TestSampleVNFTrafficGen(unittest.TestCase):
                         'vnfd-connection-point-ref': 'xe1',
                         'name': 'xe1'
                     },
-                    {
-                        'virtual-interface': {
-                            'dst_mac': '00:00:00:00:00:13',
-                            'vpci': '0000:05:00.2',
-                            'driver': 'ixgbe',
-                            'local_ip': '152.16.40.19',
-                            'type': 'PCI-PASSTHROUGH',
-                            'netmask': '255.255.255.0',
-                            'dpdk_port_num': '1',
-                            'bandwidth': '10 Gbps',
-                            'dst_ip': '152.16.40.30',
-                            'local_mac': '00:00:00:00:00:11'
-                        },
-                        'vnfd-connection-point-ref': 'xe2',
-                        'name': 'xe2'
-                    },
                 ],
             },
         ],
@@ -2132,58 +2018,36 @@ class TestSampleVNFTrafficGen(unittest.TestCase):
     def test_terminate(self):
         sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
         sample_vnf_tg._traffic_process = mock.Mock()
+        sample_vnf_tg._tg_process = mock.Mock()
 
         sample_vnf_tg.terminate()
 
-    @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
-    @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.LOG')
-    def test_wait_for_instantiate(self, mock_logger, mock_time):
+    def test__wait_for_process(self):
         sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
-        sample_vnf_tg._check_status = mock.Mock(side_effect=iter([1, 0]))
-        sample_vnf_tg._tg_process = mock.Mock()
-        sample_vnf_tg._tg_process.is_alive.return_value = True
-        sample_vnf_tg._tg_process.exitcode = 234
-
-        self.assertEqual(sample_vnf_tg.wait_for_instantiate(), 234)
-
-    @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
-    @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.LOG')
-    def test_wait_for_instantiate_not_alive(self, mock_logger, mock_time):
+        with mock.patch.object(sample_vnf_tg, '_check_status',
+                               return_value=0) as mock_status, \
+                mock.patch.object(sample_vnf_tg, '_tg_process') as mock_proc:
+            mock_proc.is_alive.return_value = True
+            mock_proc.exitcode = 234
+            self.assertEqual(sample_vnf_tg._wait_for_process(), 234)
+            mock_proc.is_alive.assert_called_once()
+            mock_status.assert_called_once()
+
+    def test__wait_for_process_not_alive(self):
         sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
-        sample_vnf_tg._check_status = mock.Mock(return_value=1)
-        sample_vnf_tg._tg_process = mock.Mock()
-        sample_vnf_tg._tg_process.is_alive.side_effect = iter([True, False])
-        sample_vnf_tg._tg_process.exitcode = 234
-
-        with self.assertRaises(RuntimeError):
-            sample_vnf_tg.wait_for_instantiate()
-
-    @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
-    @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.LOG')
-    @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.Process')
-    def test_wait_for_instantiate_delayed(self, mock_process, mock_logger, mock_time):
-        class MockClientStarted(mock.Mock):
-
-            def __init__(self, *args, **kwargs):
-                super(MockClientStarted, self).__init__(*args, **kwargs)
-                self.iter = iter([0, 0, 1])
-
-            @property
-            def value(self):
-                return next(self.iter)
-
-        mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
-        mock_traffic_profile.get_traffic_definition.return_value = "64"
-        mock_traffic_profile.execute.return_value = "64"
-        mock_traffic_profile.params = self.TRAFFIC_PROFILE
+        with mock.patch.object(sample_vnf_tg, '_tg_process') as mock_proc:
+            mock_proc.is_alive.return_value = False
+            self.assertRaises(RuntimeError, sample_vnf_tg._wait_for_process)
+            mock_proc.is_alive.assert_called_once()
 
+    def test__wait_for_process_delayed(self):
         sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
-        sample_vnf_tg._check_status = mock.Mock(side_effect=iter([1, 0]))
-        sample_vnf_tg._tg_process = mock.Mock()
-        sample_vnf_tg._tg_process.is_alive.return_value = True
-        sample_vnf_tg._tg_process.exitcode = 234
-        sample_vnf_tg.resource_helper = mock.Mock()
-        sample_vnf_tg.resource_helper.client_started = MockClientStarted()
-
-        self.assertTrue(sample_vnf_tg.run_traffic(mock_traffic_profile))
-        self.assertEqual(mock_time.sleep.call_count, 2)
+        with mock.patch.object(sample_vnf_tg, '_check_status',
+                               side_effect=[1, 0]) as mock_status, \
+                mock.patch.object(sample_vnf_tg,
+                                  '_tg_process') as mock_proc:
+            mock_proc.is_alive.return_value = True
+            mock_proc.exitcode = 234
+            self.assertEqual(sample_vnf_tg._wait_for_process(), 234)
+            mock_proc.is_alive.assert_has_calls([mock.call(), mock.call()])
+            mock_status.assert_has_calls([mock.call(), mock.call()])