aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit/network_services/vnf_generic/vnf/test_base.py
diff options
context:
space:
mode:
authorDeepak S <deepak.s@linux.intel.com>2017-06-20 14:31:19 -0700
committerRoss Brattain <ross.b.brattain@intel.com>2017-08-08 08:54:23 -0700
commit5ce3b6f8c8b3217091e51a6041455738603d90b8 (patch)
treeca34e15a85d69e2b23ce498fead47761624ae42c /tests/unit/network_services/vnf_generic/vnf/test_base.py
parent72778951d6b8968f562fb8fefa02a57159ea1b83 (diff)
NSB update
Refactored main NSB VNF classes accroding to class diagram https://wiki.opnfv.org/display/yardstick/NSB+class+diagram All the SampleVNFs have been separated and placed under the SampleVNF class. Added AutoConnectSSH to automatically create SSH conneciton on demand. Added VnfdHelper class to wrap the VNFD dictionary in prepartion for class-based modeling. Extracted DpdkVnfSetupEnvHelper for DPDK based VNF setup. Extracted Stats and other client config to ResourceHelper Had to replace dict_key_flatten with deepgetitem due to Python 2.7 Jinja2 infinite recursion. Change-Id: Ia8840e9c44cdbdf39aab6b02e6d2176b31937dc9 Signed-off-by: Deepak S <deepak.s@linux.intel.com> Signed-off-by: Edward MacGillivray <edward.s.macgillivray@intel.com> Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
Diffstat (limited to 'tests/unit/network_services/vnf_generic/vnf/test_base.py')
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_base.py312
1 files changed, 156 insertions, 156 deletions
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_base.py b/tests/unit/network_services/vnf_generic/vnf/test_base.py
index 9f2912d1b..e4f4450ce 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_base.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_base.py
@@ -19,6 +19,7 @@
from __future__ import absolute_import
import unittest
+import os
import mock
from multiprocessing import Queue
@@ -34,6 +35,34 @@ IP_PIPELINE_ND_CFG_FILE_TPL = """
nd_route_tbl = ({port1_dst_ip_hex6},"""
"""{port1_dst_netmask_hex6},1,{port1_dst_ip_hex6})"""
+_LOCAL_OBJECT = object()
+
+
+class FileAbsPath(object):
+ def __init__(self, module_file):
+ super(FileAbsPath, self).__init__()
+ self.module_path = os.path.dirname(os.path.abspath(module_file))
+
+ def get_path(self, filename):
+ file_path = os.path.join(self.module_path, filename)
+ return file_path
+
+
+def mock_ssh(ssh, spec=None, exec_result=_LOCAL_OBJECT, run_result=_LOCAL_OBJECT):
+ if spec is None:
+ spec = ssh.SSH
+
+ if exec_result is _LOCAL_OBJECT:
+ exec_result = 0, "", ""
+
+ if run_result is _LOCAL_OBJECT:
+ run_result = 0, "", ""
+
+ ssh_mock = mock.Mock(autospec=spec)
+ ssh_mock.execute = mock.Mock(return_value=exec_result)
+ ssh_mock.run = mock.Mock(return_value=run_result)
+ ssh.from_node.return_value = ssh_mock
+
class TestQueueFileWrapper(unittest.TestCase):
def setUp(self):
@@ -52,6 +81,7 @@ class TestQueueFileWrapper(unittest.TestCase):
queue_file_wrapper.bufsize = 5
queue_file_wrapper.write("pipeline>")
queue_file_wrapper.close()
+ self.assertIsNone(queue_file_wrapper.clear())
self.assertIsNotNone(queue_file_wrapper.q_out.empty())
def test_close(self):
@@ -73,198 +103,168 @@ class TestQueueFileWrapper(unittest.TestCase):
class TestGenericVNF(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:03',
- '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',
- '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',
- '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'}]}}
+
+ 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',
+ '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',
+ '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'
+ }
+
+ VNFD = {
+ 'vnfd:vnfd-catalog': {
+ 'vnfd': [
+ VNFD_0,
+ ]
+ }
+ }
def test___init__(self):
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- assert generic_vn_f.kpi
+ generic_vnf = GenericVNF('vnf1', self.VNFD_0)
+ assert generic_vnf.kpi
def test_collect_kpi(self):
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- self.assertRaises(NotImplementedError, generic_vn_f.collect_kpi)
-
- def test_get_ip_version(self):
- ip_addr = "152.16.1.1"
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- self.assertEqual(4, generic_vn_f.get_ip_version(ip_addr))
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.base.LOG')
- def test_get_ip_version_error(self, mock_LOG):
- ip_addr = "152.16.1.1.1"
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- self.assertRaises(ValueError, generic_vn_f.get_ip_version(ip_addr))
-
- def test_ip_to_hex(self):
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- hex_ip = generic_vn_f._ip_to_hex("192.168.10.1")
- self.assertEqual("C0A80A01", hex_ip)
-
- def test_append_routes(self):
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- arp_route = generic_vn_f._append_routes(IP_PIPELINE_CFG_FILE_TPL)
- expected = '\narp_route_tbl = (98106414,FFFFFF00,0,98106414)' \
- ' (98102814,FFFFFF00,1,98102814)\n,'
- self.assertEqual(expected, arp_route)
-
- def test_append_nd_routes(self):
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- nd_route = generic_vn_f._append_nd_routes(IP_PIPELINE_ND_CFG_FILE_TPL)
- expected = '\nnd_route_tbl = (0064:ff9b:0:0:0:0:9810:6414,112,0,' \
- '0064:ff9b:0:0:0:0:9810:6414) '\
- '(0064:ff9b:0:0:0:0:9810:2814,112,'\
- '1,0064:ff9b:0:0:0:0:9810:2814)\n,'
- self.assertEqual(expected, nd_route)
-
- def test_get_port0localip6(self):
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- port0_v6 = generic_vn_f._get_port0localip6()
- expected = '0064:ff9b:0:0:0:0:9810:6414'
- self.assertEqual(expected, port0_v6)
-
- def test_get_port1localip6(self):
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- port1_v6 = generic_vn_f._get_port1localip6()
- expected = '0064:ff9b:0:0:0:0:9810:2814'
- self.assertEqual(expected, port1_v6)
-
- def test_get_port0prefixip6(self):
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- port0_v6 = generic_vn_f._get_port0prefixlen6()
- self.assertEqual('112', port0_v6)
-
- def test_get_port1prefixip6(self):
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- port1_v6 = generic_vn_f._get_port1prefixlen6()
- self.assertEqual('112', port1_v6)
-
- def test_get_port0gateway6(self):
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- port0_v6 = generic_vn_f._get_port0gateway6()
- self.assertEqual('0064:ff9b:0:0:0:0:9810:6414', port0_v6)
-
- def test_get_port1gateway6(self):
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- port1_v6 = generic_vn_f._get_port1gateway6()
- self.assertEqual('0064:ff9b:0:0:0:0:9810:2814', port1_v6)
-
- def test_get_dpdk_port_num(self):
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- port_num = generic_vn_f._get_dpdk_port_num('xe0')
- self.assertEqual('0', port_num)
+ generic_vnf = GenericVNF('vnf1', self.VNFD_0)
+ self.assertRaises(NotImplementedError, generic_vnf.collect_kpi)
def test__get_kpi_definition(self):
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- generic_vn_f = GenericVNF(vnfd)
- kpi = \
- generic_vn_f._get_kpi_definition(vnfd)
+ generic_vnf = GenericVNF('vnf1', vnfd)
+ kpi = generic_vnf._get_kpi_definition()
self.assertEqual(kpi, ['packets_in', 'packets_fwd', 'packets_dropped'])
def test_instantiate(self):
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- self.assertRaises(NotImplementedError,
- generic_vn_f.instantiate, {}, {})
+ generic_vnf = GenericVNF('vnf1', self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
+ with self.assertRaises(NotImplementedError):
+ generic_vnf.instantiate({}, {})
def test_scale(self):
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- self.assertRaises(NotImplementedError, generic_vn_f.scale)
+ generic_vnf = GenericVNF('vnf1', self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
+ with self.assertRaises(NotImplementedError):
+ generic_vnf.scale()
def test_terminate(self):
- generic_vn_f = GenericVNF(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- self.assertRaises(NotImplementedError, generic_vn_f.terminate)
+ generic_vnf = GenericVNF('vnf1', self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
+ with self.assertRaises(NotImplementedError):
+ generic_vnf.terminate()
class TestGenericTrafficGen(unittest.TestCase):
def test___init__(self):
vnfd = TestGenericVNF.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- generic_traffic_gen = \
- GenericTrafficGen(vnfd)
- assert generic_traffic_gen.name == "tgen__1"
+ generic_traffic_gen = GenericTrafficGen('vnf1', vnfd)
+ assert generic_traffic_gen.name == "vnf1"
def test_listen_traffic(self):
vnfd = TestGenericVNF.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- generic_traffic_gen = \
- GenericTrafficGen(vnfd)
+ generic_traffic_gen = GenericTrafficGen('vnf1', vnfd)
traffic_profile = {}
self.assertIsNone(generic_traffic_gen.listen_traffic(traffic_profile))
def test_run_traffic(self):
vnfd = TestGenericVNF.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- generic_traffic_gen = \
- GenericTrafficGen(vnfd)
+ generic_traffic_gen = GenericTrafficGen('vnf1', vnfd)
traffic_profile = {}
self.assertRaises(NotImplementedError,
generic_traffic_gen.run_traffic, traffic_profile)
def test_terminate(self):
vnfd = TestGenericVNF.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- generic_traffic_gen = \
- GenericTrafficGen(vnfd)
+ generic_traffic_gen = GenericTrafficGen('vnf1', vnfd)
self.assertRaises(NotImplementedError, generic_traffic_gen.terminate)
def test_verify_traffic(self):
vnfd = TestGenericVNF.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- generic_traffic_gen = \
- GenericTrafficGen(vnfd)
+ generic_traffic_gen = GenericTrafficGen('vnf1', vnfd)
traffic_profile = {}
self.assertIsNone(generic_traffic_gen.verify_traffic(traffic_profile))