NSB: fix port topology
[yardstick.git] / tests / unit / network_services / helpers / test_samplevnf_helper.py
index 608f317..3d3f6dc 100644 (file)
 from __future__ import absolute_import
 from __future__ import division
 
-import os
 import unittest
 
 import mock
 
-from yardstick.network_services.helpers.samplevnf_helper import MultiPortConfig
+from yardstick.network_services.helpers.samplevnf_helper import MultiPortConfig, PortPairs
+from yardstick.network_services.vnf_generic.vnf.base import VnfdHelper
+
+
+class TestPortPairs(unittest.TestCase):
+    def test_port_pairs_list(self):
+        vnfd = TestMultiPortConfig.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        interfaces = vnfd['vdu'][0]['external-interface']
+        port_pairs = PortPairs(interfaces)
+        self.assertEqual(port_pairs.port_pair_list, [("xe0", "xe1")])
+
+    def test_valid_networks(self):
+        vnfd = TestMultiPortConfig.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        interfaces = vnfd['vdu'][0]['external-interface']
+        port_pairs = PortPairs(interfaces)
+        self.assertEqual(port_pairs.valid_networks, [("private_0", "public_0")])
+
+    def test_all_ports(self):
+        vnfd = TestMultiPortConfig.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        interfaces = vnfd['vdu'][0]['external-interface']
+        port_pairs = PortPairs(interfaces)
+        self.assertEqual(set(port_pairs.all_ports), {"xe0", "xe1"})
+
+    def test_priv_ports(self):
+        vnfd = TestMultiPortConfig.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        interfaces = vnfd['vdu'][0]['external-interface']
+        port_pairs = PortPairs(interfaces)
+        self.assertEqual(port_pairs.priv_ports, ["xe0"])
+
+    def test_pub_ports(self):
+        vnfd = TestMultiPortConfig.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        interfaces = vnfd['vdu'][0]['external-interface']
+        port_pairs = PortPairs(interfaces)
+        self.assertEqual(port_pairs.pub_ports, ["xe1"])
 
 
 class TestMultiPortConfig(unittest.TestCase):
-    VNFD = {'vnfd:vnfd-catalog':
-                {'vnfd':
-                     [{'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:04',
-                                             'vpci': '0000:05:00.0',
-                                             'local_ip': '152.16.100.19',
-                                             'type': 'PCI-PASSTHROUGH',
-                                             'netmask': '255.255.255.0',
-                                             'dpdk_port_num': '0',
-                                             'bandwidth': '10 Gbps',
-                                             'driver': "i40e",
-                                             'dst_ip': '152.16.100.20',
-                                             'ifname': 'xe0',
-                                             'local_iface_name': 'eth0',
-                                             'local_mac': '00:00:00:00:00:02',
-                                             'vld_id': 'private_1',
-                                         },
-                                         'vnfd-connection-point-ref': 'xe0',
-                                         'name': 'xe0'},
-                                     {'virtual-interface':
-                                         {
-                                             'dst_mac': '00:00:00:00:00:03',
-                                             'vpci': '0000:05:00.1',
-                                             'local_ip': '152.16.40.19',
-                                             'type': 'PCI-PASSTHROUGH',
-                                             'driver': "i40e",
-                                             'netmask': '255.255.255.0',
-                                             'dpdk_port_num': '1',
-                                             'bandwidth': '10 Gbps',
-                                             'dst_ip': '152.16.40.20',
-                                             'ifname': 'xe1',
-                                             'local_iface_name': 'eth1',
-                                             'local_mac': '00:00:00:00:00:01',
-                                             'vld_id': 'public_1',
-                                         },
-                                         'vnfd-connection-point-ref': 'xe1',
-                                         'name': 'xe1'}
-                                 ]}],
-                       'description': 'Vpe approximation using DPDK',
-                       'mgmt-interface':
-                           {'vdu-id': 'vpevnf-baremetal',
-                            'host': '1.2.1.1',
-                            'password': 'r00t',
-                            'user': 'root',
-                            'ip': '1.2.1.1'},
-                       'benchmark':
-                           {'kpi': ['packets_in', 'packets_fwd', 'packets_dropped']},
-                       'connection-point': [{'type': 'VPORT', 'name': 'xe0'},
-                                            {'type': 'VPORT', 'name': 'xe1'}],
-                       'id': 'AclApproxVnf', 'name': 'VPEVnfSsh'}]}}
+
+    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:04',
+                                    'vpci': '0000:05:00.0',
+                                    'local_ip': '152.16.100.19',
+                                    'type': 'PCI-PASSTHROUGH',
+                                    'netmask': '255.255.255.0',
+                                    'dpdk_port_num': 0,
+                                    'bandwidth': '10 Gbps',
+                                    'driver': "i40e",
+                                    'dst_ip': '152.16.100.20',
+                                    'ifname': 'xe0',
+                                    'local_iface_name': 'eth0',
+                                    'local_mac': '00:00:00:00:00:02',
+                                    'vld_id': 'private_0',
+                                },
+                                'vnfd-connection-point-ref': 'xe0',
+                                'name': 'xe0'},
+                            {'virtual-interface':
+                                {
+                                    'dst_mac': '00:00:00:00:00:03',
+                                    'vpci': '0000:05:00.1',
+                                    'local_ip': '152.16.40.19',
+                                    'type': 'PCI-PASSTHROUGH',
+                                    'driver': "i40e",
+                                    'netmask': '255.255.255.0',
+                                    'dpdk_port_num': 1,
+                                    'bandwidth': '10 Gbps',
+                                    'dst_ip': '152.16.40.20',
+                                    'ifname': 'xe1',
+                                    'local_iface_name': 'eth1',
+                                    'local_mac': '00:00:00:00:00:01',
+                                    'vld_id': 'public_0',
+                                },
+                                'vnfd-connection-point-ref': 'xe1',
+                                'name': 'xe1'}
+                        ]}],
+              'description': 'Vpe approximation using DPDK',
+              'mgmt-interface':
+                  {'vdu-id': 'vpevnf-baremetal',
+                   'host': '1.2.1.1',
+                   'password': 'r00t',
+                   'user': 'root',
+                   'ip': '1.2.1.1'},
+              'benchmark':
+                  {'kpi': ['packets_in', 'packets_fwd', 'packets_dropped']},
+              'connection-point': [{'type': 'VPORT', 'name': 'xe0'},
+                                   {'type': 'VPORT', 'name': 'xe1'}],
+              'id': 'AclApproxVnf', 'name': 'VPEVnfSsh'}
+
+    VNFD = {
+        'vnfd:vnfd-catalog': {
+            'vnfd': [
+                VNFD_0,
+            ]
+        }
+    }
+
+    def test_validate_ip_and_prefixlen(self):
+        ip_addr, prefix_len = MultiPortConfig.validate_ip_and_prefixlen('10.20.30.40', '16')
+        self.assertEqual(ip_addr, '10.20.30.40')
+        self.assertEqual(prefix_len, 16)
+
+        ip_addr, prefix_len = MultiPortConfig.validate_ip_and_prefixlen('::1', '40')
+        self.assertEqual(ip_addr, '0000:0000:0000:0000:0000:0000:0000:0001')
+        self.assertEqual(prefix_len, 40)
+
+    def test_validate_ip_and_prefixlen_negative(self):
+        with self.assertRaises(AttributeError):
+            MultiPortConfig.validate_ip_and_prefixlen('', '')
+
+        with self.assertRaises(AttributeError):
+            MultiPortConfig.validate_ip_and_prefixlen('10.20.30.400', '16')
+
+        with self.assertRaises(AttributeError):
+            MultiPortConfig.validate_ip_and_prefixlen('10.20.30.40', '33')
+
+        with self.assertRaises(AttributeError):
+            MultiPortConfig.validate_ip_and_prefixlen('::1', '129')
 
     @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
     @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
@@ -111,11 +172,12 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         self.assertEqual(0, opnfv_vnf.swq)
         mock_os.path = mock.MagicMock()
         mock_os.path.isfile = mock.Mock(return_value=False)
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         self.assertEqual(0, opnfv_vnf.swq)
 
     @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
@@ -125,7 +187,8 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.get_config_tpl_data = mock.MagicMock()
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
@@ -139,7 +202,8 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = VnfdHelper(self.VNFD_0)
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.get_config_tpl_data = mock.MagicMock()
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
@@ -148,7 +212,7 @@ class TestMultiPortConfig(unittest.TestCase):
             mock.Mock(return_value={'link_config': 0, 'arp_config': '',
                                     'arp_config6': '', 'actions': '',
                                     'rules': ''})
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         self.assertIsNotNone(opnfv_vnf.generate_script(self.VNFD))
         opnfv_vnf.lb_config = 'HW'
         self.assertIsNotNone(opnfv_vnf.generate_script(self.VNFD))
@@ -160,12 +224,13 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.get_config_tpl_data = mock.MagicMock()
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
         opnfv_vnf.update_write_parser = mock.MagicMock()
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.vnf_type = 'ACL'
         opnfv_vnf.generate_link_config = mock.Mock()
         opnfv_vnf.generate_arp_config = mock.Mock()
@@ -181,7 +246,8 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.get_config_tpl_data = mock.MagicMock()
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
@@ -190,7 +256,7 @@ class TestMultiPortConfig(unittest.TestCase):
             mock.Mock(return_value={'link_config': 0, 'arp_config': '',
                                     'arp_config6': '', 'actions': '',
                                     'rules': ''})
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.get_port_pairs = mock.Mock()
         opnfv_vnf.vnf_type = 'ACL'
         opnfv_vnf.get_ports_gateway = mock.Mock(return_value=u'1.1.1.1')
@@ -212,7 +278,8 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.get_config_tpl_data = mock.MagicMock()
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
@@ -221,7 +288,7 @@ class TestMultiPortConfig(unittest.TestCase):
             mock.Mock(return_value={'link_config': 0, 'arp_config': '',
                                     'arp_config6': '', 'actions': '',
                                     'rules': ''})
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.get_port_pairs = mock.Mock()
         opnfv_vnf.vnf_type = 'VFW'
         opnfv_vnf.get_ports_gateway = mock.Mock(return_value=u'1.1.1.1')
@@ -239,7 +306,8 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.get_config_tpl_data = mock.MagicMock()
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
@@ -248,7 +316,7 @@ class TestMultiPortConfig(unittest.TestCase):
             mock.Mock(return_value={'link_config': 0, 'arp_config': '',
                                     'arp_config6': '', 'actions': '',
                                     'rules': ''})
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.get_port_pairs = mock.Mock()
         opnfv_vnf.vnf_type = 'VFW'
         opnfv_vnf.get_ports_gateway = mock.Mock(return_value=u'1.1.1.1')
@@ -268,7 +336,8 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.get_config_tpl_data = mock.MagicMock()
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
@@ -277,7 +346,7 @@ class TestMultiPortConfig(unittest.TestCase):
             mock.Mock(return_value={'link_config': 0, 'arp_config': '',
                                     'arp_config6': '', 'actions': '',
                                     'rules': ''})
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.get_port_pairs = mock.Mock()
         opnfv_vnf.vnf_type = 'VFW'
         opnfv_vnf.get_ports_gateway = mock.Mock(return_value=u'1.1.1.1')
@@ -297,7 +366,8 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.get_config_tpl_data = mock.MagicMock()
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
@@ -306,7 +376,7 @@ class TestMultiPortConfig(unittest.TestCase):
             mock.Mock(return_value={'link_config': 0, 'arp_config': '',
                                     'arp_config6': '', 'actions': '',
                                     'rules': ''})
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.get_port_pairs = mock.Mock()
         opnfv_vnf.vnf_type = 'VFW'
         opnfv_vnf.txrx_pipeline = ''
@@ -323,7 +393,8 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.get_config_tpl_data = mock.MagicMock()
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
@@ -332,7 +403,7 @@ class TestMultiPortConfig(unittest.TestCase):
             mock.Mock(return_value={'link_config': 0, 'arp_config': '',
                                     'arp_config6': '', 'actions': '',
                                     'rules': ''})
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.get_port_pairs = mock.Mock()
         opnfv_vnf.vnf_type = 'VFW'
         opnfv_vnf.txrx_pipeline = ''
@@ -349,7 +420,8 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.get_config_tpl_data = mock.MagicMock()
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
@@ -358,7 +430,7 @@ class TestMultiPortConfig(unittest.TestCase):
             mock.Mock(return_value={'link_config': 0, 'arp_config': '',
                                     'arp_config6': '', 'actions': '',
                                     'rules': ''})
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.get_port_pairs = mock.Mock()
         opnfv_vnf.vnf_type = 'VFW'
         opnfv_vnf.txrx_pipeline = ''
@@ -375,7 +447,8 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.get_config_tpl_data = mock.MagicMock()
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
@@ -384,7 +457,7 @@ class TestMultiPortConfig(unittest.TestCase):
             mock.Mock(return_value={'link_config': 0, 'arp_config': '',
                                     'arp_config6': '', 'actions': '',
                                     'rules': ''})
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.get_port_pairs = mock.Mock()
         opnfv_vnf.vnf_type = 'VFW'
         opnfv_vnf.txrx_pipeline = ''
@@ -401,7 +474,9 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.get_config_tpl_data = mock.MagicMock()
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
@@ -410,7 +485,7 @@ class TestMultiPortConfig(unittest.TestCase):
             mock.Mock(return_value={'link_config': 0, 'arp_config': '',
                                     'arp_config6': '', 'actions': '',
                                     'rules': ''})
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.get_port_pairs = mock.Mock()
         opnfv_vnf.vnf_type = 'VFW'
         opnfv_vnf.txrx_pipeline = ''
@@ -418,7 +493,11 @@ class TestMultiPortConfig(unittest.TestCase):
         opnfv_vnf.get_ports_gateway6 = mock.Mock()
         opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
         opnfv_vnf.interfaces = opnfv_vnf.vnfd['vdu'][0]['external-interface']
-        self.assertIsNotNone(opnfv_vnf.generate_link_config())
+        opnfv_vnf.all_ports = ['32', '1', '987']
+        opnfv_vnf.validate_ip_and_prefixlen = mock.Mock(return_value=('10.20.30.40', 16))
+
+        result = opnfv_vnf.generate_link_config()
+        self.assertEqual(len(result.splitlines()), 9)
 
     @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
     @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
@@ -427,7 +506,8 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.get_config_tpl_data = mock.MagicMock()
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
@@ -436,7 +516,7 @@ class TestMultiPortConfig(unittest.TestCase):
             mock.Mock(return_value={'link_config': 0, 'arp_config': '',
                                     'arp_config6': '', 'actions': '',
                                     'rules': ''})
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.get_ports_gateway6 = mock.Mock()
@@ -459,10 +539,11 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.write_parser = mock.MagicMock()
@@ -482,10 +563,11 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.write_parser = mock.MagicMock()
@@ -505,10 +587,11 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.write_parser = mock.MagicMock()
@@ -533,10 +616,11 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.write_parser = mock.MagicMock()
@@ -556,10 +640,11 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.write_parser = mock.MagicMock()
@@ -581,10 +666,11 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.write_parser = mock.MagicMock()
@@ -614,10 +700,11 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.write_parser = mock.MagicMock()
@@ -649,10 +736,10 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = VnfdHelper(self.VNFD_0)
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.write_parser = mock.MagicMock()
@@ -666,10 +753,12 @@ class TestMultiPortConfig(unittest.TestCase):
         opnfv_vnf.worker_config = '1t'
         opnfv_vnf.start_core = 0
         opnfv_vnf.lb_count = 1
+        opnfv_vnf._port_pairs = PortPairs(vnfd_mock.interfaces)
+        opnfv_vnf.port_pair_list = opnfv_vnf._port_pairs.port_pair_list
         result = opnfv_vnf.generate_lb_to_port_pair_mapping()
         self.assertEqual(None, result)
         result = opnfv_vnf.set_priv_to_pub_mapping()
-        self.assertEqual('(0, 1)', result)
+        self.assertEqual('(0,1)', result)
 
     @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
     @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
@@ -680,11 +769,12 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = VnfdHelper(self.VNFD_0)
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
-        opnfv_vnf.port_pairs = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
+        opnfv_vnf.port_pairs = [("xe0", "xe1")]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.write_parser = mock.MagicMock()
@@ -701,6 +791,43 @@ class TestMultiPortConfig(unittest.TestCase):
         result = opnfv_vnf.set_priv_que_handler()
         self.assertEqual(None, result)
 
+    @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
+    @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
+    def test_generate_arp_route_tbl(self, *_):
+        topology_file = mock.Mock()
+        config_tpl = mock.Mock()
+        tmp_file = mock.Mock()
+        vnfd_mock = mock.MagicMock()
+        vnfd_mock.port_num.side_effect = ['32', '1', '987']
+        vnfd_mock.find_interface.side_effect = [
+            {
+                'virtual-interface': {
+                    'dst_ip': '10.20.30.40',
+                    'netmask': '20',
+                },
+            },
+            {
+                'virtual-interface': {
+                    'dst_ip': '10.200.30.40',
+                    'netmask': '24',
+                },
+            },
+            {
+                'virtual-interface': {
+                    'dst_ip': '10.20.3.40',
+                    'netmask': '8',
+                },
+            },
+        ]
+
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
+        opnfv_vnf.all_ports = [3, 2, 5]
+
+        expected = '(0a141000,fffff000,32,0a141e28) (0ac81e00,ffffff00,1,0ac81e28) ' \
+                   '(0a000000,ff000000,987,0a140328)'
+        result = opnfv_vnf.generate_arp_route_tbl()
+        self.assertEqual(result, expected)
+
     @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
     @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
     @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
@@ -710,11 +837,12 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
-        opnfv_vnf.port_pairs = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
+        opnfv_vnf.port_pairs = [("xe0", "xe1")]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.write_parser = mock.MagicMock()
@@ -754,11 +882,12 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
-        opnfv_vnf.port_pairs = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
+        opnfv_vnf.port_pairs = [("xe0", "xe1")]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.write_parser = mock.MagicMock()
@@ -795,11 +924,12 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
-        opnfv_vnf.port_pairs = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
+        opnfv_vnf.port_pairs = [("xe0", "xe1")]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.write_parser = mock.MagicMock()
@@ -848,11 +978,12 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
-        opnfv_vnf.port_pairs = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
+        opnfv_vnf.port_pairs = [("xe0", "xe1")]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.write_parser = mock.MagicMock()
@@ -884,11 +1015,12 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
-        opnfv_vnf.port_pairs = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
+        opnfv_vnf.port_pairs = [("xe0", "xe1")]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.write_parser = mock.MagicMock()
@@ -932,11 +1064,12 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = VnfdHelper(self.VNFD_0)
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
-        opnfv_vnf.port_pairs = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
+        opnfv_vnf.port_pairs = [("xe0", "xe1")]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.write_parser = mock.MagicMock()
@@ -982,62 +1115,12 @@ class TestMultiPortConfig(unittest.TestCase):
         opnfv_vnf.loadb_tpl = mock.MagicMock()
         opnfv_vnf.vnf_type = 'CGNAPT'
         opnfv_vnf.update_timer = mock.Mock()
-        opnfv_vnf.port_pair_list = [[[0], [1], [2]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1"), ("xe0", "xe2")]
         opnfv_vnf.lb_to_port_pair_mapping = [0, 1]
         opnfv_vnf.generate_arpicmp_data = mock.Mock()
         result = opnfv_vnf.generate_config_data()
         self.assertIsNone(result)
 
-    @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
-    @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
-    @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
-    @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
-    def test_get_port_pairs(self, mock_open, mock_os, ConfigParser,
-                            OrderedDict):
-        topology_file = mock.Mock()
-        config_tpl = mock.Mock()
-        tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
-        opnfv_vnf.socket = 0
-        opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
-        opnfv_vnf.port_pairs = [[[0], [1]]]
-        opnfv_vnf.txrx_pipeline = ''
-        opnfv_vnf.rules = ''
-        opnfv_vnf.write_parser = mock.MagicMock()
-        opnfv_vnf.read_parser = mock.MagicMock()
-        opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
-        opnfv_vnf.read_parser.has_option = mock.Mock(return_value=[])
-        opnfv_vnf.write_parser.set = mock.Mock()
-        opnfv_vnf.write_parser.add_section = mock.Mock()
-        opnfv_vnf.read_parser.items = mock.MagicMock()
-        opnfv_vnf.pipeline_counter = 0
-        opnfv_vnf.worker_config = '1t'
-        opnfv_vnf.start_core = 0
-        opnfv_vnf.lb_count = 1
-        opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
-        opnfv_vnf.interfaces = opnfv_vnf.vnfd['vdu'][0]['external-interface']
-        opnfv_vnf.lb_to_port_pair_mapping = [0, 1]
-        opnfv_vnf.lb_index = 1
-        opnfv_vnf.ports_len = 1
-        opnfv_vnf.pktq_out = ['1', '2']
-        opnfv_vnf.prv_que_handler = 0
-        opnfv_vnf.init_write_parser_template = mock.Mock()
-        opnfv_vnf.arpicmp_tpl = mock.MagicMock()
-        opnfv_vnf.txrx_tpl = mock.MagicMock()
-        opnfv_vnf.loadb_tpl = mock.MagicMock()
-        opnfv_vnf.vnf_tpl = {'public_ip_port_range': '98164810 (1,65535)',
-                             'vnf_set': '(2,4,5)'}
-        opnfv_vnf.generate_vnf_data = mock.Mock(return_value={})
-        opnfv_vnf.update_write_parser = mock.Mock()
-
-        curr_path = os.path.dirname(os.path.abspath(__file__))
-        opnfv_vnf.topology_file = \
-            os.path.join(curr_path, 'acl_vnf_topology_ixia.yaml')
-        opnfv_vnf.lb_count = 10
-        result = opnfv_vnf.get_port_pairs(opnfv_vnf.interfaces)
-        self.assertEqual(result[0], [('xe0', 'xe1')])
-
     @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
     @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
     @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
@@ -1047,11 +1130,12 @@ class TestMultiPortConfig(unittest.TestCase):
         topology_file = mock.Mock()
         config_tpl = mock.Mock()
         tmp_file = mock.Mock()
-        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file)
+        vnfd_mock = mock.MagicMock()
+        opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
         opnfv_vnf.socket = 0
         opnfv_vnf.start_core = 0
-        opnfv_vnf.port_pair_list = [[[0], [1]]]
-        opnfv_vnf.port_pairs = [[[0], [1]]]
+        opnfv_vnf.port_pair_list = [("xe0", "xe1")]
+        opnfv_vnf.port_pairs = [("xe0", "xe1")]
         opnfv_vnf.txrx_pipeline = ''
         opnfv_vnf.rules = ''
         opnfv_vnf.write_parser = mock.MagicMock()