Make GenericVNF an abstract class 25/47725/11
authorRodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
Thu, 23 Nov 2017 09:08:14 +0000 (09:08 +0000)
committerRodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
Wed, 3 Jan 2018 23:48:31 +0000 (23:48 +0000)
GenericVNF class is now an abstract class. Only optional methods are
implemented. Mandatory methods:
  - instantiate
  - wait_for_instantiate
  - terminate
  - scale
  - collect_kpi.

JIRA: YARDSTICK-866

Change-Id: Ia8766f9f98816e11894d1e72b0f3bd573d091d99
Signed-off-by: Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
20 files changed:
tests/unit/network_services/vnf_generic/vnf/test_acl_vnf.py
tests/unit/network_services/vnf_generic/vnf/test_base.py
tests/unit/network_services/vnf_generic/vnf/test_cgnapt_vnf.py
tests/unit/network_services/vnf_generic/vnf/test_prox_vnf.py
tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py
tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py
tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py
tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py
tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py
tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py
tests/unit/network_services/vnf_generic/vnf/test_udp_replay.py
tests/unit/network_services/vnf_generic/vnf/test_vfw_vnf.py
tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py
yardstick/common/exceptions.py
yardstick/network_services/vnf_generic/vnf/acl_vnf.py
yardstick/network_services/vnf_generic/vnf/base.py
yardstick/network_services/vnf_generic/vnf/sample_vnf.py
yardstick/network_services/vnf_generic/vnf/tg_ping.py
yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py
yardstick/network_services/vnf_generic/vnf/tg_trex.py

index e9444b4..2a2647a 100644 (file)
@@ -15,8 +15,6 @@
 # limitations under the License.
 #
 
-from __future__ import absolute_import
-
 import unittest
 import mock
 import os
@@ -241,14 +239,14 @@ class TestAclApproxVnf(unittest.TestCase):
                               'password': 'r00t',
                               'VNF model': 'acl_vnf.yaml'}}}
 
-    def test___init__(self, mock_process):
+    def test___init__(self, *args):
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
         acl_approx_vnf = AclApproxVnf(name, vnfd)
         self.assertIsNone(acl_approx_vnf._vnf_process)
 
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
     @mock.patch(SSH_HELPER)
-    def test_collect_kpi(self, ssh, mock_time, mock_process):
+    def test_collect_kpi(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -263,7 +261,7 @@ class TestAclApproxVnf(unittest.TestCase):
 
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
     @mock.patch(SSH_HELPER)
-    def test_vnf_execute_command(self, ssh, mock_time, mock_process):
+    def test_vnf_execute_command(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -275,7 +273,7 @@ class TestAclApproxVnf(unittest.TestCase):
         self.assertEqual("", acl_approx_vnf.vnf_execute(cmd))
 
     @mock.patch(SSH_HELPER)
-    def test_get_stats(self, ssh, mock_process):
+    def test_get_stats(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -296,7 +294,7 @@ class TestAclApproxVnf(unittest.TestCase):
     @mock.patch("yardstick.network_services.vnf_generic.vnf.acl_vnf.eval")
     @mock.patch('yardstick.network_services.vnf_generic.vnf.acl_vnf.open')
     @mock.patch(SSH_HELPER)
-    def test_run_acl(self, ssh, mock_open, mock_eval, mock_hex, mock_process):
+    def test_run_acl(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -317,7 +315,7 @@ class TestAclApproxVnf(unittest.TestCase):
     @mock.patch("yardstick.network_services.vnf_generic.vnf.acl_vnf.find_relative_file")
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
     @mock.patch(SSH_HELPER)
-    def test_instantiate(self, ssh, mock_context, mock_yang, mock_find, mock_process):
+    def test_instantiate(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -333,16 +331,9 @@ class TestAclApproxVnf(unittest.TestCase):
         self.assertIsNone(acl_approx_vnf.instantiate(self.scenario_cfg,
                                                      self.context_cfg))
 
-    def test_scale(self, mock_process):
-        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
-        acl_approx_vnf = AclApproxVnf(name, vnfd)
-        flavor = ""
-        with self.assertRaises(NotImplementedError):
-            acl_approx_vnf.scale(flavor)
-
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
     @mock.patch(SSH_HELPER)
-    def test_terminate(self, ssh, mock_time, mock_process):
+    def test_terminate(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -355,6 +346,3 @@ class TestAclApproxVnf(unittest.TestCase):
         acl_approx_vnf.dpdk_nic_bind = "dpdk_nic_bind.py"
         acl_approx_vnf._resource_collect_stop = mock.Mock()
         self.assertEqual(None, acl_approx_vnf.terminate())
-
-if __name__ == '__main__':
-    unittest.main()
index f812d67..e9488f7 100644 (file)
 
 # Unittest for yardstick.network_services.vnf_generic.vnf.test_base
 
-from __future__ import absolute_import
-import unittest
+import multiprocessing
 import os
+
 import mock
-from multiprocessing import Queue
+import unittest
 
-from yardstick.network_services.vnf_generic.vnf.base import \
-    QueueFileWrapper, GenericVNF, GenericTrafficGen
+from yardstick.network_services.vnf_generic.vnf import base
 from yardstick.ssh import SSH
 
-IP_PIPELINE_CFG_FILE_TPL = """
-arp_route_tbl = ({port0_local_ip_hex},{port0_netmask_hex},1,"""
-"""{port1_local_ip_hex}) ({port1_local_ip_hex},{port1_netmask_hex},0,"""
-"""{port0_local_ip_hex})"""
+
+IP_PIPELINE_CFG_FILE_TPL = ("arp_route_tbl = ({port0_local_ip_hex},"
+                            "{port0_netmask_hex},1,{port1_local_ip_hex}) "
+                            "({port1_local_ip_hex},{port1_netmask_hex},0,"
+                            "{port0_local_ip_hex})")
 
 IP_PIPELINE_ND_CFG_FILE_TPL = """
 nd_route_tbl = ({port1_dst_ip_hex6},"""
@@ -38,6 +38,111 @@ nd_route_tbl = ({port1_dst_ip_hex6},"""
 
 _LOCAL_OBJECT = object()
 
+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,
+        ]
+    }
+}
+
 
 class FileAbsPath(object):
     def __init__(self, module_file):
@@ -70,17 +175,17 @@ def mock_ssh(mock_ssh_type, spec=None, exec_result=_LOCAL_OBJECT, run_result=_LO
 class TestQueueFileWrapper(unittest.TestCase):
     def setUp(self):
         self.prompt = "pipeline>"
-        self.q_in = Queue()
-        self.q_out = Queue()
+        self.q_in = multiprocessing.Queue()
+        self.q_out = multiprocessing.Queue()
 
     def test___init__(self):
         queue_file_wrapper = \
-            QueueFileWrapper(self.q_in, self.q_out, self.prompt)
+            base.QueueFileWrapper(self.q_in, self.q_out, self.prompt)
         self.assertEqual(queue_file_wrapper.prompt, self.prompt)
 
     def test_clear(self):
         queue_file_wrapper = \
-            QueueFileWrapper(self.q_in, self.q_out, self.prompt)
+            base.QueueFileWrapper(self.q_in, self.q_out, self.prompt)
         queue_file_wrapper.bufsize = 5
         queue_file_wrapper.write("pipeline>")
         queue_file_wrapper.close()
@@ -89,167 +194,45 @@ class TestQueueFileWrapper(unittest.TestCase):
 
     def test_close(self):
         queue_file_wrapper = \
-            QueueFileWrapper(self.q_in, self.q_out, self.prompt)
+            base.QueueFileWrapper(self.q_in, self.q_out, self.prompt)
         self.assertEqual(None, queue_file_wrapper.close())
 
     def test_read(self):
         queue_file_wrapper = \
-            QueueFileWrapper(self.q_in, self.q_out, self.prompt)
+            base.QueueFileWrapper(self.q_in, self.q_out, self.prompt)
         queue_file_wrapper.q_in.put("pipeline>")
         self.assertEqual("pipeline>", queue_file_wrapper.read(20))
 
     def test_write(self):
         queue_file_wrapper = \
-            QueueFileWrapper(self.q_in, self.q_out, self.prompt)
+            base.QueueFileWrapper(self.q_in, self.q_out, self.prompt)
         queue_file_wrapper.write("pipeline>")
         self.assertIsNotNone(queue_file_wrapper.q_out.empty())
 
 
 class TestGenericVNF(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',
-                            '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_vnf = GenericVNF('vnf1', self.VNFD_0)
-        assert generic_vnf.kpi
-
-    def test_collect_kpi(self):
-        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_vnf = GenericVNF('vnf1', vnfd)
-        kpi = generic_vnf._get_kpi_definition()
-        self.assertEqual(kpi, ['packets_in', 'packets_fwd', 'packets_dropped'])
-
-    def test_instantiate(self):
-        generic_vnf = GenericVNF('vnf1', self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
-        with self.assertRaises(NotImplementedError):
-            generic_vnf.instantiate({}, {})
-
-    def test_scale(self):
-        generic_vnf = GenericVNF('vnf1', self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
-        with self.assertRaises(NotImplementedError):
-            generic_vnf.scale()
-
-    def test_terminate(self):
-        generic_vnf = GenericVNF('vnf1', self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
-        with self.assertRaises(NotImplementedError):
-            generic_vnf.terminate()
+    def test_definition(self):
+        """Make sure that the abstract class cannot be instantiated"""
+        with self.assertRaises(TypeError) as exc:
+            # pylint: disable=abstract-class-instantiated
+            base.GenericVNF('vnf1', VNFD['vnfd:vnfd-catalog']['vnfd'][0])
+        msg = ("Can't instantiate abstract class GenericVNF with abstract "
+               "methods collect_kpi, instantiate, scale, terminate, "
+               "wait_for_instantiate")
+        self.assertEqual(msg, str(exc.exception))
 
 
 class TestGenericTrafficGen(unittest.TestCase):
 
     def test_definition(self):
         """Make sure that the abstract class cannot be instantiated"""
-        vnfd = TestGenericVNF.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        vnfd = VNFD['vnfd:vnfd-catalog']['vnfd'][0]
         name = 'vnf1'
         with self.assertRaises(TypeError) as exc:
-            GenericTrafficGen(name, vnfd)
+            # pylint: disable=abstract-class-instantiated
+            base.GenericTrafficGen(name, vnfd)
         msg = ("Can't instantiate abstract class GenericTrafficGen with "
-               "abstract methods run_traffic, terminate")
+               "abstract methods collect_kpi, instantiate, run_traffic, "
+               "scale, terminate")
         self.assertEqual(msg, str(exc.exception))
index 832509e..f2ce18f 100644 (file)
 # limitations under the License.
 #
 
-from __future__ import absolute_import
-
+from copy import deepcopy
 import os
 import unittest
 import mock
 
-from copy import deepcopy
-
 from tests.unit import STL_MOCKS
 from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
 
@@ -305,14 +302,14 @@ class TestCgnaptApproxVnf(unittest.TestCase):
     def setUp(self):
         self.scenario_cfg = deepcopy(self.SCENARIO_CFG)
 
-    def test___init__(self, mock_process):
+    def test___init__(self, *args):
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
         cgnapt_approx_vnf = CgnaptApproxVnf(name, vnfd)
         self.assertIsNone(cgnapt_approx_vnf._vnf_process)
 
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
     @mock.patch(SSH_HELPER)
-    def test_collect_kpi(self, ssh, mock_time, mock_process):
+    def test_collect_kpi(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -328,7 +325,7 @@ class TestCgnaptApproxVnf(unittest.TestCase):
 
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
     @mock.patch(SSH_HELPER)
-    def test_vnf_execute_command(self, ssh, mock_time, mock_process):
+    def test_vnf_execute_command(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -340,7 +337,7 @@ class TestCgnaptApproxVnf(unittest.TestCase):
         self.assertEqual("", cgnapt_approx_vnf.vnf_execute(cmd))
 
     @mock.patch(SSH_HELPER)
-    def test_get_stats(self, ssh, mock_process):
+    def test_get_stats(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -362,7 +359,7 @@ class TestCgnaptApproxVnf(unittest.TestCase):
     @mock.patch("yardstick.network_services.vnf_generic.vnf.cgnapt_vnf.eval")
     @mock.patch('yardstick.network_services.vnf_generic.vnf.cgnapt_vnf.open')
     @mock.patch(SSH_HELPER)
-    def test_run_vcgnapt(self, ssh, mock_hex, mock_eval, mock_open, mock_process):
+    def test_run_vcgnapt(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -377,7 +374,7 @@ class TestCgnaptApproxVnf(unittest.TestCase):
 
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
     @mock.patch(SSH_HELPER)
-    def test_instantiate(self, ssh, mock_context, mock_process):
+    def test_instantiate(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -393,15 +390,9 @@ class TestCgnaptApproxVnf(unittest.TestCase):
         self.assertIsNone(cgnapt_approx_vnf.instantiate(self.scenario_cfg,
                                                         self.context_cfg))
 
-    def test_scale(self, mock_process):
-        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
-        cgnapt_approx_vnf = CgnaptApproxVnf(name, vnfd)
-        flavor = ""
-        self.assertRaises(NotImplementedError, cgnapt_approx_vnf.scale, flavor)
-
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
     @mock.patch(SSH_HELPER)
-    def test_terminate(self, ssh, mock_time, mock_process):
+    def test_terminate(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -417,7 +408,7 @@ class TestCgnaptApproxVnf(unittest.TestCase):
 
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
     @mock.patch(SSH_HELPER)
-    def test__vnf_up_post(self, ssh, mock_time, mock_process):
+    def test__vnf_up_post(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -433,7 +424,7 @@ class TestCgnaptApproxVnf(unittest.TestCase):
 
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
     @mock.patch(SSH_HELPER)
-    def test__vnf_up_post_short(self, ssh, mock_time, mock_process):
+    def test__vnf_up_post_short(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -444,7 +435,3 @@ class TestCgnaptApproxVnf(unittest.TestCase):
         cgnapt_approx_vnf.scenario_helper.scenario_cfg = self.scenario_cfg
         cgnapt_approx_vnf._resource_collect_stop = mock.Mock()
         cgnapt_approx_vnf._vnf_up_post()
-
-
-if __name__ == '__main__':
-    unittest.main()
index e29e8dd..ee6c67e 100644 (file)
@@ -15,8 +15,6 @@
 # limitations under the License.
 #
 
-from __future__ import absolute_import
-
 import errno
 import os
 import unittest
@@ -316,13 +314,13 @@ class TestProxApproxVnf(unittest.TestCase):
     }
 
     @mock.patch(SSH_HELPER)
-    def test___init__(self, ssh, mock_time):
+    def test___init__(self, ssh, *args):
         mock_ssh(ssh)
         prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
         self.assertIsNone(prox_approx_vnf._vnf_process)
 
     @mock.patch(SSH_HELPER)
-    def test_collect_kpi_no_client(self, ssh, mock_time):
+    def test_collect_kpi_no_client(self, ssh, *args):
         mock_ssh(ssh)
 
         prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
@@ -337,7 +335,7 @@ class TestProxApproxVnf(unittest.TestCase):
         self.assertEqual(result, expected)
 
     @mock.patch(SSH_HELPER)
-    def test_collect_kpi(self, ssh, mock_time):
+    def test_collect_kpi(self, ssh, *args):
         mock_ssh(ssh)
 
         resource_helper = mock.MagicMock()
@@ -357,7 +355,7 @@ class TestProxApproxVnf(unittest.TestCase):
         self.assertEqual(result, expected)
 
     @mock.patch(SSH_HELPER)
-    def test_collect_kpi_error(self, ssh, mock_time):
+    def test_collect_kpi_error(self, ssh, *args):
         mock_ssh(ssh)
 
         resource_helper = mock.MagicMock()
@@ -370,7 +368,7 @@ class TestProxApproxVnf(unittest.TestCase):
         with self.assertRaises(RuntimeError):
             prox_approx_vnf.collect_kpi()
 
-    def _get_file_abspath(self, filename, mock_time):
+    def _get_file_abspath(self, filename, *args):
         curr_path = os.path.dirname(os.path.abspath(__file__))
         file_path = os.path.join(curr_path, filename)
         return file_path
@@ -378,7 +376,7 @@ class TestProxApproxVnf(unittest.TestCase):
     @mock.patch('yardstick.benchmark.scenarios.networking.vnf_generic.open', create=True)
     @mock.patch('yardstick.network_services.helpers.iniparser.open', create=True)
     @mock.patch(SSH_HELPER)
-    def test_run_prox(self, ssh, *_):
+    def test_run_prox(self, ssh, *args):
         mock_ssh(ssh)
 
         prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
@@ -394,7 +392,7 @@ class TestProxApproxVnf(unittest.TestCase):
         self.assertEqual(result, expected)
 
     @mock.patch(SSH_HELPER)
-    def bad_test_instantiate(self, ssh, mock_time):
+    def bad_test_instantiate(self, *args):
         prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
         prox_approx_vnf.scenario_helper = mock.MagicMock()
         prox_approx_vnf.setup_helper = mock.MagicMock()
@@ -403,7 +401,7 @@ class TestProxApproxVnf(unittest.TestCase):
         prox_approx_vnf.setup_helper.build_config.assert_called_once()
 
     @mock.patch(SSH_HELPER)
-    def test_wait_for_instantiate_panic(self, ssh, mock_time):
+    def test_wait_for_instantiate_panic(self, ssh, *args):
         mock_ssh(ssh, exec_result=(1, "", ""))
         prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
         prox_approx_vnf._vnf_process = mock.MagicMock(**{"is_alive.return_value": True})
@@ -413,16 +411,9 @@ class TestProxApproxVnf(unittest.TestCase):
         with self.assertRaises(RuntimeError):
             prox_approx_vnf.wait_for_instantiate()
 
-    @mock.patch(SSH_HELPER)
-    def test_scale(self, ssh, mock_time):
-        mock_ssh(ssh)
-        prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
-        with self.assertRaises(NotImplementedError):
-            prox_approx_vnf.scale()
-
     @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.socket')
     @mock.patch(SSH_HELPER)
-    def test_terminate(self, ssh, mock_socket, mock_time):
+    def test_terminate(self, ssh, *args):
         mock_ssh(ssh)
         prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
         prox_approx_vnf._vnf_process = mock.MagicMock()
@@ -434,7 +425,7 @@ class TestProxApproxVnf(unittest.TestCase):
         self.assertIsNone(prox_approx_vnf.terminate())
 
     @mock.patch(SSH_HELPER)
-    def test__vnf_up_post(self, ssh, mock_time):
+    def test__vnf_up_post(self, ssh, *args):
         mock_ssh(ssh)
         prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
         prox_approx_vnf.resource_helper = resource_helper = mock.Mock()
@@ -443,7 +434,7 @@ class TestProxApproxVnf(unittest.TestCase):
         self.assertEqual(resource_helper.up_post.call_count, 1)
 
     @mock.patch(SSH_HELPER)
-    def test_vnf_execute_oserror(self, ssh, mock_time):
+    def test_vnf_execute_oserror(self, ssh, *args):
         mock_ssh(ssh)
         prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
         prox_approx_vnf.resource_helper = resource_helper = mock.Mock()
@@ -457,6 +448,3 @@ class TestProxApproxVnf(unittest.TestCase):
         resource_helper.execute.side_effect = OSError(errno.EADDRINUSE, "")
         with self.assertRaises(OSError):
             prox_approx_vnf.vnf_execute("", _ignore_errors=True)
-
-if __name__ == '__main__':
-    unittest.main()
index 85b10c5..b4306ce 100644 (file)
 # limitations under the License.
 #
 
-# Unittest for yardstick.network_services.vnf_generic.vnf.sample_vnf
-
-from __future__ import absolute_import
-
 import unittest
 import mock
 from copy import deepcopy
@@ -26,8 +22,8 @@ from copy import deepcopy
 from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
 from tests.unit import STL_MOCKS
 from yardstick.benchmark.contexts.base import Context
+from yardstick.common import exceptions as y_exceptions
 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
 
 
@@ -571,7 +567,7 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
     @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')
-    def test_build_config(self, mock_multi_port_config_class, mock_find, _):
+    def test_build_config(self, mock_multi_port_config_class, mock_find, *args):
         mock_multi_port_config = mock_multi_port_config_class()
         vnfd_helper = VnfdHelper(self.VNFD_0)
         ssh_helper = mock.Mock()
@@ -610,8 +606,8 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
 
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
     @mock.patch('yardstick.ssh.SSH')
-    def test_setup_vnf_environment(self, _, mock_time):
-        def execute(cmd, *args, **kwargs):
+    def test_setup_vnf_environment(self, *args):
+        def execute(cmd):
             if cmd.startswith('which '):
                 return exec_failure
             return exec_success
@@ -643,7 +639,7 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
 
     @mock.patch('yardstick.ssh.SSH')
     def test__setup_dpdk_short(self, _):
-        def execute_side(cmd, *args, **kwargs):
+        def execute_side(cmd):
             if 'joined_path' in cmd:
                 return 0, 'output', ''
             return 1, 'bad output', 'error output'
@@ -691,7 +687,7 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
         self.assertEqual(dpdk_setup_helper.socket, 1)
 
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
-    def test__detect_and_bind_drivers(self, mock_time):
+    def test__detect_and_bind_drivers(self, *args):
         vnfd_helper = VnfdHelper(deepcopy(self.VNFD_0))
         ssh_helper = mock.Mock()
         # ssh_helper.execute = mock.Mock(return_value = (0, 'text', ''))
@@ -1002,7 +998,7 @@ class TestClientResourceHelper(unittest.TestCase):
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.LOG')
     @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):
+    def test_get_stats_not_connected(self, mock_state_error, *args):
         vnfd_helper = VnfdHelper(self.VNFD_0)
         ssh_helper = mock.Mock()
         scenario_helper = mock.Mock()
@@ -1221,7 +1217,7 @@ class TestClientResourceHelper(unittest.TestCase):
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.LOG')
     @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):
+    def test__connect_with_failures(self, mock_error, *args):
         vnfd_helper = VnfdHelper(self.VNFD_0)
         ssh_helper = mock.Mock()
         scenario_helper = mock.Mock()
@@ -1393,7 +1389,7 @@ 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, mock_time):
+    def test_deploy_vnfs_disabled(self, *args):
         vnfd_helper = mock.Mock()
         ssh_helper = mock.Mock()
         ssh_helper.join_bin_path.return_value = 'joined_path'
@@ -1408,7 +1404,7 @@ class TestSampleVNFDeployHelper(unittest.TestCase):
 
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
     @mock.patch('subprocess.check_output')
-    def test_deploy_vnfs(self, mock_check_output, mock_time):
+    def test_deploy_vnfs(self, *args):
         vnfd_helper = mock.Mock()
         ssh_helper = mock.Mock()
         ssh_helper.join_bin_path.return_value = 'joined_path'
@@ -1422,7 +1418,7 @@ class TestSampleVNFDeployHelper(unittest.TestCase):
         self.assertEqual(ssh_helper.put.call_count, 1)
 
     @mock.patch('subprocess.check_output')
-    def test_deploy_vnfs_early_success(self, mock_check_output):
+    def test_deploy_vnfs_early_success(self, *args):
         vnfd_helper = mock.Mock()
         ssh_helper = mock.Mock()
         ssh_helper.join_bin_path.return_value = 'joined_path'
@@ -1700,7 +1696,7 @@ class TestSampleVnf(unittest.TestCase):
         self.assertEqual(result, expected)
 
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.Process')
-    def test__start_vnf(self, mock_process_type):
+    def test__start_vnf(self, *args):
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
         sample_vnf = SampleVNF('vnf1', vnfd)
         sample_vnf._run = mock.Mock()
@@ -1754,7 +1750,7 @@ class TestSampleVnf(unittest.TestCase):
 
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
     @mock.patch("yardstick.ssh.SSH")
-    def test_wait_for_instantiate_empty_queue(self, ssh, mock_time):
+    def test_wait_for_instantiate_empty_queue(self, ssh, *args):
         mock_ssh(ssh, exec_result=(1, "", ""))
 
         queue_size_list = [
@@ -1798,7 +1794,7 @@ class TestSampleVnf(unittest.TestCase):
         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):
+    def test_vnf_execute_with_queue_data(self, *args):
         queue_size_list = [
             1,
             1,
@@ -1843,7 +1839,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.COLLECT_KPI = '\s(\d+)\D*(\d+)\D*(\d+)'
+        sample_vnf.COLLECT_KPI = r'\s(\d+)\D*(\d+)\D*(\d+)'
         sample_vnf.COLLECT_MAP = {
             'k1': 3,
             'k2': 1,
@@ -1866,7 +1862,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.COLLECT_KPI = '\s(\d+)\D*(\d+)\D*(\d+)'
+        sample_vnf.COLLECT_KPI = r'\s(\d+)\D*(\d+)\D*(\d+)'
         sample_vnf.get_stats = mock.Mock(return_value='')
 
         expected = {
@@ -1877,6 +1873,12 @@ class TestSampleVnf(unittest.TestCase):
         result = sample_vnf.collect_kpi()
         self.assertDictEqual(result, expected)
 
+    def test_scale(self):
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        sample_vnf = SampleVNF('vnf1', vnfd)
+        self.assertRaises(y_exceptions.FunctionNotImplemented,
+                          sample_vnf.scale)
+
 
 class TestSampleVNFTrafficGen(unittest.TestCase):
 
@@ -2051,3 +2053,8 @@ class TestSampleVNFTrafficGen(unittest.TestCase):
             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()])
+
+    def test_scale(self):
+        sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
+        self.assertRaises(y_exceptions.FunctionNotImplemented,
+                          sample_vnf_tg.scale)
index ab35707..63b2ac4 100644 (file)
@@ -287,14 +287,6 @@ class TestPingTrafficGen(unittest.TestCase):
         ping_traffic_gen = PingTrafficGen('vnf1', self.VNFD_0)
         self.assertIsNone(ping_traffic_gen.listen_traffic({}))
 
-    @mock.patch("yardstick.ssh.SSH")
-    def test_scale_negative(self, ssh):
-        ssh.from_node.return_value.execute.return_value = 0, "success", ""
-        ssh.from_node.return_value.run.return_value = 0, "success", ""
-
-        ping_traffic_gen = PingTrafficGen('vnf1', self.VNFD_0)
-        ping_traffic_gen.scale()
-
     @mock.patch("yardstick.ssh.SSH")
     def test_terminate(self, ssh):
         ssh.from_node.return_value.execute.return_value = 0, "success", ""
index 23d448c..7b4d79e 100644 (file)
 # limitations under the License.
 #
 
-from __future__ import absolute_import
-
 import unittest
 import mock
 
 from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
 from tests.unit import STL_MOCKS
 
+
 SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
 NAME = 'vnf__1'
 
@@ -319,14 +318,14 @@ class TestProxTrafficGen(unittest.TestCase):
             'upper_bound': 100.0}}
 
     @mock.patch(SSH_HELPER)
-    def test___init__(self, ssh, mock_time):
+    def test___init__(self, ssh, *args):
         mock_ssh(ssh)
         prox_traffic_gen = ProxTrafficGen(NAME, self.VNFD0)
         self.assertIsNone(prox_traffic_gen._tg_process)
         self.assertIsNone(prox_traffic_gen._traffic_process)
 
     @mock.patch(SSH_HELPER)
-    def test_collect_kpi(self, ssh, mock_time):
+    def test_collect_kpi(self, ssh, *args):
         mock_ssh(ssh)
 
         prox_traffic_gen = ProxTrafficGen(NAME, self.VNFD0)
@@ -335,10 +334,12 @@ class TestProxTrafficGen(unittest.TestCase):
         prox_traffic_gen._vnf_wrapper.vnf_execute = mock.Mock(return_value="")
         self.assertEqual({}, prox_traffic_gen.collect_kpi())
 
-    @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.CpuSysCores')
+
     @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.find_relative_file')
+    @mock.patch(
+        'yardstick.network_services.vnf_generic.vnf.sample_vnf.CpuSysCores')
     @mock.patch(SSH_HELPER)
-    def bad_test_instantiate(self, ssh, mock_find, mock_cpu_sys_cores, mock_time):
+    def bad_test_instantiate(self, ssh, mock_cpu_sys_cores, *args):
         mock_ssh(ssh)
 
         mock_cpu_sys_cores.get_core_socket.return_value = {'0': '01234'}
@@ -381,7 +382,7 @@ class TestProxTrafficGen(unittest.TestCase):
         prox_traffic_gen.instantiate(scenario_cfg, {})
 
     @mock.patch(SSH_HELPER)
-    def test__traffic_runner(self, ssh, mock_time):
+    def test__traffic_runner(self, ssh, *args):
         mock_ssh(ssh)
 
         mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
@@ -399,17 +400,9 @@ class TestProxTrafficGen(unittest.TestCase):
         sut._connect_client.get_stats = mock.Mock(return_value="0")
         sut._traffic_runner(mock_traffic_profile)
 
-    @mock.patch(SSH_HELPER)
-    def test_scale(self, ssh, mock_time):
-        mock_ssh(ssh, exec_result=(1, "", ""))
-        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
-        prox_traffic_gen = ProxTrafficGen(NAME, vnfd)
-        with self.assertRaises(NotImplementedError):
-            prox_traffic_gen.scale('')
-
     @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.socket')
     @mock.patch(SSH_HELPER)
-    def test_listen_traffic(self, ssh, mock_socket, mock_time):
+    def test_listen_traffic(self, ssh, *args):
         mock_ssh(ssh)
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
         prox_traffic_gen = ProxTrafficGen(NAME, vnfd)
@@ -417,7 +410,7 @@ class TestProxTrafficGen(unittest.TestCase):
 
     @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.socket')
     @mock.patch(SSH_HELPER)
-    def test_terminate(self, ssh, mock_socket, mock_time):
+    def test_terminate(self, ssh, *args):
         mock_ssh(ssh)
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
         prox_traffic_gen = ProxTrafficGen(NAME, vnfd)
index f62a0fb..e9f718c 100644 (file)
@@ -15,8 +15,6 @@
 # limitations under the License.
 #
 
-from __future__ import absolute_import
-
 import os
 import unittest
 import mock
@@ -40,14 +38,14 @@ NAME = "tg__1"
 
 @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia.IxNextgen")
 class TestIxiaResourceHelper(unittest.TestCase):
-    def test___init___with_custom_rfc_helper(self, mock_ix_nextgen):
+    def test___init___with_custom_rfc_helper(self, *args):
         class MyRfcHelper(IxiaRfc2544Helper):
             pass
 
         ixia_resource_helper = IxiaResourceHelper(mock.Mock(), MyRfcHelper)
         self.assertIsInstance(ixia_resource_helper.rfc_helper, MyRfcHelper)
 
-    def test_stop_collect_with_client(self, mock_ix_nextgen):
+    def test_stop_collect_with_client(self, *args):
         mock_client = mock.Mock()
 
         ixia_resource_helper = IxiaResourceHelper(mock.Mock())
@@ -154,16 +152,17 @@ class TestIXIATrafficGen(unittest.TestCase):
                            'file': '/etc/yardstick/nodes/pod.yaml'},
                'schema': 'yardstick:task:0.1'}
 
-    def test___init__(self, mock_ixnextgen):
+    def test___init__(self, *args):
         with mock.patch("yardstick.ssh.SSH") as ssh:
             ssh_mock = mock.Mock(autospec=ssh.SSH)
             ssh_mock.execute = \
                 mock.Mock(return_value=(0, "", ""))
             ssh.from_node.return_value = ssh_mock
             vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
-            ixnet_traffic_gen = IxiaTrafficGen(NAME, vnfd)
+            # NOTE(ralonsoh): check the object returned.
+            IxiaTrafficGen(NAME, vnfd)
 
-    def test_listen_traffic(self, mock_ixnextgen):
+    def test_listen_traffic(self, *args):
         with mock.patch("yardstick.ssh.SSH") as ssh:
             ssh_mock = mock.Mock(autospec=ssh.SSH)
             ssh_mock.execute = \
@@ -173,7 +172,7 @@ class TestIXIATrafficGen(unittest.TestCase):
             ixnet_traffic_gen = IxiaTrafficGen(NAME, vnfd)
             self.assertEqual(None, ixnet_traffic_gen.listen_traffic({}))
 
-    def test_instantiate(self, mock_ixnextgen):
+    def test_instantiate(self, *args):
         with mock.patch("yardstick.ssh.SSH") as ssh:
             ssh_mock = mock.Mock(autospec=ssh.SSH)
             ssh_mock.execute = \
@@ -203,7 +202,7 @@ class TestIXIATrafficGen(unittest.TestCase):
                 IOError,
                 ixnet_traffic_gen.instantiate(scenario_cfg, {}))
 
-    def test_collect_kpi(self, mock_ixnextgen):
+    def test_collect_kpi(self, *args):
         with mock.patch("yardstick.ssh.SSH") as ssh:
             ssh_mock = mock.Mock(autospec=ssh.SSH)
             ssh_mock.execute = \
@@ -215,7 +214,7 @@ class TestIXIATrafficGen(unittest.TestCase):
             restult = ixnet_traffic_gen.collect_kpi()
             self.assertEqual({}, restult)
 
-    def test_terminate(self, mock_ixnextgen):
+    def test_terminate(self, *args):
         with mock.patch("yardstick.ssh.SSH") as ssh:
             vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
             ssh_mock = mock.Mock(autospec=ssh.SSH)
@@ -236,19 +235,14 @@ class TestIXIATrafficGen(unittest.TestCase):
         file_path = os.path.join(curr_path, filename)
         return file_path
 
-    def test_scale(self, mock_ix_nextgen):
-        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
-        sut = IxiaTrafficGen('vnf1', vnfd)
-        sut.scale()
-
-    def test__check_status(self, mock_ix_nextgen):
+    def test__check_status(self, *args):
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
         sut = IxiaTrafficGen('vnf1', vnfd)
         sut._check_status()
 
     @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia.time")
     @mock.patch("yardstick.ssh.SSH")
-    def test_traffic_runner(self, mock_ixnextgen, mock_ssh, mock_time):
+    def test_traffic_runner(self, mock_ssh, *args):
         mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
         mock_traffic_profile.get_traffic_definition.return_value = "64"
         mock_traffic_profile.params = self.TRAFFIC_PROFILE
index 637706f..7342cfc 100644 (file)
@@ -331,15 +331,6 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
         trex_traffic_gen.resource_helper.ssh_helper = mock.MagicMock()
         self.assertIsNone(trex_traffic_gen.resource_helper.generate_cfg())
 
-    def test_scale(self):
-        with mock.patch(SSH_HELPER) as ssh:
-            ssh_mock = mock.Mock(autospec=ssh.SSH)
-            ssh_mock.execute = mock.Mock(return_value=(0, "", ""))
-            ssh_mock.run = mock.Mock(return_value=(0, "", ""))
-            ssh.from_node.return_value = ssh_mock
-            trex_traffic_gen = TrexTrafficGenRFC('vnf1', self.VNFD_0)
-            trex_traffic_gen.scale('')
-
     def test_terminate(self):
         with mock.patch(SSH_HELPER) as ssh:
             ssh_mock = mock.Mock(autospec=ssh.SSH)
index a2a5058..6180715 100644 (file)
 # limitations under the License.
 #
 
-from __future__ import absolute_import
-
-import unittest
-
 import copy
 import mock
 
-SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
+import unittest
 
 from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
 from tests.unit import STL_MOCKS
 
+
+SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
 NAME = 'vnf_1'
 
 STLClient = mock.MagicMock()
@@ -468,13 +466,6 @@ class TestTrexTrafficGen(unittest.TestCase):
         self.sut._traffic_process.terminate()
         self.assertIsNotNone(result)
 
-    @mock.patch(SSH_HELPER)
-    def test_scale(self, ssh):
-        mock_ssh(ssh, exec_result=(1, "", ""))
-        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
-        trex_traffic_gen = TrexTrafficGen(NAME, vnfd)
-        trex_traffic_gen.scale('')
-
     @mock.patch(SSH_HELPER)
     def test_terminate(self, ssh):
         mock_ssh(ssh)
index d4d3439..635ce27 100644 (file)
 # limitations under the License.
 #
 
-from __future__ import absolute_import
-
 import unittest
 import mock
 import os
 
 from tests.unit import STL_MOCKS
-SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
+from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
 
 
+SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
+
 STLClient = mock.MagicMock()
 stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
 stl_patch.start()
 
 if stl_patch:
     from yardstick.network_services.vnf_generic.vnf.udp_replay import UdpReplayApproxVnf
-    from yardstick.network_services.nfvi.resource import ResourceProfile
     from yardstick.network_services.vnf_generic.vnf.sample_vnf import ScenarioHelper
 
-from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
 
 TEST_FILE_YAML = 'nsb_test_case.yaml'
 
@@ -329,13 +327,13 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
         }
     }
 
-    def test___init__(self, _):
+    def test___init__(self, *args):
         udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
         self.assertIsNone(udp_replay_approx_vnf._vnf_process)
 
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
     @mock.patch(SSH_HELPER)
-    def test_collect_kpi(self, ssh, mock_time, _):
+    def test_collect_kpi(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD_0
@@ -354,7 +352,7 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
         self.assertEqual(result, udp_replay_approx_vnf.collect_kpi())
 
     @mock.patch(SSH_HELPER)
-    def test_get_stats(self, ssh, _):
+    def test_get_stats(self, ssh, *args):
         mock_ssh(ssh)
 
         udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
@@ -376,7 +374,7 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
 
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
     @mock.patch(SSH_HELPER)
-    def test__build_config(self, ssh, mock_context, *_):
+    def test__build_config(self, ssh, mock_context, *args):
         mock_ssh(ssh)
 
         udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
@@ -397,7 +395,7 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
     @mock.patch('yardstick.network_services.vnf_generic.vnf.udp_replay.open')
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
     @mock.patch(SSH_HELPER)
-    def test__build_pipeline_kwargs(self, ssh, mock_context, *_):
+    def test__build_pipeline_kwargs(self, ssh, mock_context, *args):
         mock_ssh(ssh)
         udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
         udp_replay_approx_vnf.nfvi_context = mock_context
@@ -420,7 +418,7 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
         })
 
     @mock.patch(SSH_HELPER)
-    def test_run_udp_replay(self, ssh, _):
+    def test_run_udp_replay(self, ssh, *args):
         mock_ssh(ssh)
 
         udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
@@ -434,11 +432,9 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
 
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
     @mock.patch(SSH_HELPER)
-    def test_instantiate(self, ssh, *_):
+    def test_instantiate(self, ssh, *args):
         mock_ssh(ssh)
 
-        resource = mock.Mock(autospec=ResourceProfile)
-
         udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
         udp_replay_approx_vnf.q_out.put("Replay>")
         udp_replay_approx_vnf.WAIT_TIME = 0
@@ -456,7 +452,7 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
     @mock.patch('yardstick.ssh.SSH')
     @mock.patch(SSH_HELPER)
-    def test_instantiate_panic(self, ssh, resource_ssh, *_):
+    def test_instantiate_panic(self, *args):
         udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
         udp_replay_approx_vnf.WAIT_TIME = 0
         udp_replay_approx_vnf.q_out.put("some text PANIC some text")
@@ -467,15 +463,9 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
         with self.assertRaises(RuntimeError):
             udp_replay_approx_vnf.wait_for_instantiate()
 
-    def test_scale(self, _):
-        udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
-        flavor = ""
-
-        self.assertRaises(NotImplementedError, udp_replay_approx_vnf.scale, flavor)
-
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
     @mock.patch(SSH_HELPER)
-    def test_terminate(self, ssh, mock_time, _):
+    def test_terminate(self, ssh, *args):
         mock_ssh(ssh)
 
         udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
@@ -484,6 +474,3 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
         udp_replay_approx_vnf.used_drivers = {"01:01.0": "i40e", "01:01.1": "i40e"}
         udp_replay_approx_vnf.dpdk_nic_bind = "dpdk_nic_bind.py"
         self.assertEqual(None, udp_replay_approx_vnf.terminate())
-
-if __name__ == '__main__':
-    unittest.main()
index 958099a..d128db0 100644 (file)
@@ -15,8 +15,6 @@
 # limitations under the License.
 #
 
-from __future__ import absolute_import
-
 import unittest
 import mock
 import os
@@ -32,10 +30,10 @@ if stl_patch:
     from yardstick.network_services.vnf_generic.vnf.vfw_vnf import FWApproxVnf
     from yardstick.network_services.nfvi.resource import ResourceProfile
 
+
 TEST_FILE_YAML = 'nsb_test_case.yaml'
 SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
 
-
 name = 'vnf__1'
 
 
@@ -239,7 +237,7 @@ class TestFWApproxVnf(unittest.TestCase):
                               'password': 'r00t',
                               'VNF model': 'vfw_vnf.yaml'}}}
 
-    def test___init__(self, mock_process):
+    def test___init__(self, *args):
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
         vfw_approx_vnf = FWApproxVnf(name, vnfd)
         self.assertIsNone(vfw_approx_vnf._vnf_process)
@@ -260,7 +258,7 @@ pipeline>
 
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
     @mock.patch(SSH_HELPER)
-    def test_collect_kpi(self, ssh, mock_time, mock_process):
+    def test_collect_kpi(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -282,7 +280,7 @@ pipeline>
 
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
     @mock.patch(SSH_HELPER)
-    def test_vnf_execute_command(self, ssh, mock_time, mock_process):
+    def test_vnf_execute_command(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -294,7 +292,7 @@ pipeline>
         self.assertEqual(vfw_approx_vnf.vnf_execute(cmd), "")
 
     @mock.patch(SSH_HELPER)
-    def test_get_stats(self, ssh, mock_process):
+    def test_get_stats(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -314,7 +312,7 @@ pipeline>
     @mock.patch("yardstick.network_services.vnf_generic.vnf.vfw_vnf.eval")
     @mock.patch("yardstick.network_services.vnf_generic.vnf.vfw_vnf.open")
     @mock.patch(SSH_HELPER)
-    def test_run_vfw(self, ssh, mock_open, mock_eval, mock_hex, mock_process):
+    def test_run_vfw(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -337,7 +335,7 @@ pipeline>
     @mock.patch("yardstick.network_services.vnf_generic.vnf.vfw_vnf.YangModel")
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
     @mock.patch(SSH_HELPER)
-    def test_instantiate(self, ssh, mock_context, mock_yang, mock_find, mock_process):
+    def test_instantiate(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -351,16 +349,9 @@ pipeline>
         self.scenario_cfg.update({"nodes": {"vnf__1": ""}})
         self.assertIsNone(vfw_approx_vnf.instantiate(self.scenario_cfg, self.context_cfg))
 
-    def test_scale(self, mock_process):
-        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
-        vfw_approx_vnf = FWApproxVnf(name, vnfd)
-        flavor = ""
-        with self.assertRaises(NotImplementedError):
-            vfw_approx_vnf.scale(flavor)
-
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
     @mock.patch(SSH_HELPER)
-    def test_terminate(self, ssh, mock_time, mock_process):
+    def test_terminate(self, ssh, *args):
         mock_ssh(ssh)
 
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -372,6 +363,3 @@ pipeline>
         vfw_approx_vnf.dpdk_nic_bind = "dpdk_nic_bind.py"
         vfw_approx_vnf._resource_collect_stop = mock.Mock()
         self.assertIsNone(vfw_approx_vnf.terminate())
-
-if __name__ == '__main__':
-    unittest.main()
index 4103d78..55cd4d2 100644 (file)
 # limitations under the License.
 #
 
-from __future__ import absolute_import
-import six.moves.configparser as configparser
-
-import os
-import unittest
 import mock
 from multiprocessing import Process, Queue
+import os
+import six.moves.configparser as configparser
+import time
+import unittest
 
 from tests.unit import STL_MOCKS
+from tests.unit.network_services.vnf_generic.vnf.test_base import FileAbsPath
+from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
 from yardstick.network_services.vnf_generic.vnf.base import QueueFileWrapper
 from yardstick.network_services.vnf_generic.vnf.base import VnfdHelper
 
@@ -40,9 +41,6 @@ if stl_patch:
     from yardstick.network_services.vnf_generic.vnf.vpe_vnf import \
         VpeApproxVnf, VpeApproxSetupEnvHelper
 
-from tests.unit.network_services.vnf_generic.vnf.test_base import FileAbsPath
-from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
-
 
 TEST_FILE_YAML = 'nsb_test_case.yaml'
 
@@ -227,28 +225,6 @@ class TestConfigCreate(unittest.TestCase):
         self.assertNotEqual(result, '')
 
     def test_create_vpe_config(self):
-        uplink_ports = [
-            {
-                'index': 0,
-                'dpdk_port_num': 1,
-                'peer_intf': {
-                    'dpdk_port_num': 2,
-                    'index': 3,
-                },
-            },
-        ]
-
-        downlink_ports = [
-            {
-                'index': 2,
-                'dpdk_port_num': 3,
-                'peer_intf': {
-                    'dpdk_port_num': 0,
-                    'index': 1,
-                },
-            },
-        ]
-
         vnfd_helper = VnfdHelper(self.VNFD_0)
         config_create = ConfigCreate(vnfd_helper, 23)
         config_create.downlink_ports = ['xe1']
@@ -260,7 +236,6 @@ class TestConfigCreate(unittest.TestCase):
         os.system("git checkout -- %s" % vnf_cfg)
 
 
-@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
 class TestVpeApproxVnf(unittest.TestCase):
 
     VNFD_0 = {
@@ -556,12 +531,15 @@ class TestVpeApproxVnf(unittest.TestCase):
         },
     }
 
-    def test___init__(self, _):
+    def setUp(self):
+        self.mock_sleep = mock.patch.object(time, 'sleep').start()
+
+    def test___init__(self):
         vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
         self.assertIsNone(vpe_approx_vnf._vnf_process)
 
     @mock.patch(SSH_HELPER)
-    def test_collect_kpi_sa_not_running(self, ssh, _):
+    def test_collect_kpi_sa_not_running(self, ssh):
         mock_ssh(ssh)
 
         resource = mock.Mock(autospec=ResourceProfile)
@@ -585,7 +563,7 @@ class TestVpeApproxVnf(unittest.TestCase):
         self.assertEqual(vpe_approx_vnf.collect_kpi(), expected)
 
     @mock.patch(SSH_HELPER)
-    def test_collect_kpi_sa_running(self, ssh, _):
+    def test_collect_kpi_sa_running(self, ssh):
         mock_ssh(ssh)
 
         resource = mock.Mock(autospec=ResourceProfile)
@@ -608,7 +586,7 @@ class TestVpeApproxVnf(unittest.TestCase):
         self.assertEqual(vpe_approx_vnf.collect_kpi(), expected)
 
     @mock.patch(SSH_HELPER)
-    def test_vnf_execute(self, ssh, _):
+    def test_vnf_execute(self, ssh):
         mock_ssh(ssh)
         vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
         vpe_approx_vnf.q_in = mock.MagicMock()
@@ -617,7 +595,7 @@ class TestVpeApproxVnf(unittest.TestCase):
         self.assertEqual(vpe_approx_vnf.vnf_execute("quit", 0), '')
 
     @mock.patch(SSH_HELPER)
-    def test_run_vpe(self, ssh, _):
+    def test_run_vpe(self, ssh):
         mock_ssh(ssh)
 
         vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
@@ -651,7 +629,7 @@ class TestVpeApproxVnf(unittest.TestCase):
     @mock.patch("yardstick.network_services.vnf_generic.vnf.vpe_vnf.ConfigCreate")
     @mock.patch("yardstick.network_services.vnf_generic.vnf.vpe_vnf.open")
     @mock.patch(SSH_HELPER)
-    def test_build_config(self, mock_mul, mock_context, mock_config, mock_open, ssh, _):
+    def test_build_config(self, ssh, *args):
         mock_ssh(ssh)
         vpe_approx_vnf = VpeApproxSetupEnvHelper(mock.MagicMock(),
                                                  mock.MagicMock, mock.MagicMock)
@@ -684,7 +662,7 @@ class TestVpeApproxVnf(unittest.TestCase):
         self.assertIsNotNone(vpe_approx_vnf.build_config())
 
     @mock.patch(SSH_HELPER)
-    def test_wait_for_instantiate(self, ssh, _):
+    def test_wait_for_instantiate(self, ssh):
         mock_ssh(ssh)
 
         mock_process = mock.Mock(autospec=Process)
@@ -707,7 +685,7 @@ class TestVpeApproxVnf(unittest.TestCase):
         self.assertEqual(vpe_approx_vnf.wait_for_instantiate(), 432)
 
     @mock.patch(SSH_HELPER)
-    def test_wait_for_instantiate_fragmented(self, ssh, _):
+    def test_wait_for_instantiate_fragmented(self, ssh):
         mock_ssh(ssh)
 
         mock_process = mock.Mock(autospec=Process)
@@ -730,7 +708,7 @@ class TestVpeApproxVnf(unittest.TestCase):
         self.assertEqual(vpe_approx_vnf.wait_for_instantiate(), 432)
 
     @mock.patch(SSH_HELPER)
-    def test_wait_for_instantiate_crash(self, ssh, _):
+    def test_wait_for_instantiate_crash(self, ssh):
         mock_ssh(ssh, exec_result=(1, "", ""))
 
         mock_process = mock.Mock(autospec=Process)
@@ -749,7 +727,7 @@ class TestVpeApproxVnf(unittest.TestCase):
         self.assertIn('VNF process died', str(raised.exception))
 
     @mock.patch(SSH_HELPER)
-    def test_wait_for_instantiate_panic(self, ssh, _):
+    def test_wait_for_instantiate_panic(self, ssh):
         mock_ssh(ssh, exec_result=(1, "", ""))
 
         mock_process = mock.Mock(autospec=Process)
@@ -769,7 +747,7 @@ class TestVpeApproxVnf(unittest.TestCase):
         self.assertIn('Error starting', str(raised.exception))
 
     @mock.patch(SSH_HELPER)
-    def test_wait_for_instantiate_panic_fragmented(self, ssh, _):
+    def test_wait_for_instantiate_panic_fragmented(self, ssh):
         mock_ssh(ssh, exec_result=(1, "", ""))
 
         mock_process = mock.Mock(autospec=Process)
@@ -793,13 +771,8 @@ class TestVpeApproxVnf(unittest.TestCase):
 
         self.assertIn('Error starting', str(raised.exception))
 
-    def test_scale(self, _):
-        vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
-        with self.assertRaises(NotImplementedError):
-            vpe_approx_vnf.scale('')
-
     @mock.patch(SSH_HELPER)
-    def test_terminate(self, ssh, _):
+    def test_terminate(self, ssh):
         mock_ssh(ssh)
 
         vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
@@ -808,7 +781,3 @@ class TestVpeApproxVnf(unittest.TestCase):
         vpe_approx_vnf.resource_helper = mock.MagicMock()
 
         self.assertIsNone(vpe_approx_vnf.terminate())
-
-
-if __name__ == '__main__':
-    unittest.main()
index 9c0ec2c..4780822 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+from oslo_utils import excutils
+
 
 class ProcessExecutionError(RuntimeError):
     def __init__(self, message, returncode):
         super(ProcessExecutionError, self).__init__(message)
         self.returncode = returncode
+
+
+class YardstickException(Exception):
+    """Base Yardstick Exception.
+
+    To correctly use this class, inherit from it and define
+    a 'message' property. That message will get printf'd
+    with the keyword arguments provided to the constructor.
+
+    Based on NeutronException class.
+    """
+    message = "An unknown exception occurred."
+
+    def __init__(self, **kwargs):
+        try:
+            super(YardstickException, self).__init__(self.message % kwargs)
+            self.msg = self.message % kwargs
+        except Exception:  # pylint: disable=broad-except
+            with excutils.save_and_reraise_exception() as ctxt:
+                if not self.use_fatal_exceptions():
+                    ctxt.reraise = False
+                    # at least get the core message out if something happened
+                    super(YardstickException, self).__init__(self.message)
+
+    def __str__(self):
+        return self.msg
+
+    def use_fatal_exceptions(self):
+        """Is the instance using fatal exceptions.
+
+        :returns: Always returns False.
+        """
+        return False
+
+
+class FunctionNotImplemented(YardstickException):
+    message = ('The function "%(function_name)s" is not implemented in '
+               '"%(class_name)" class.')
index 3ba38de..1390dd0 100644 (file)
@@ -61,9 +61,6 @@ class AclApproxVnf(SampleVNF):
         super(AclApproxVnf, self).__init__(name, vnfd, setup_env_helper_type, resource_helper_type)
         self.acl_rules = None
 
-    def scale(self, flavor=""):
-        raise NotImplementedError
-
     def _start_vnf(self):
         yang_model_path = find_relative_file(self.scenario_helper.options['rules'],
                                              self.scenario_helper.task_path)
index 8ed754d..a776b09 100644 (file)
@@ -138,76 +138,62 @@ class VnfdHelper(dict):
             yield port_name, port_num
 
 
-class VNFObject(object):
+@six.add_metaclass(abc.ABCMeta)
+class GenericVNF(object):
+    """Class providing file-like API for generic VNF implementation
+
+    Currently the only class implementing this interface is
+    yardstick/network_services/vnf_generic/vnf/sample_vnf:SampleVNF.
+    """
 
     # centralize network naming convention
     UPLINK = PortPairs.UPLINK
     DOWNLINK = PortPairs.DOWNLINK
 
     def __init__(self, name, vnfd):
-        super(VNFObject, self).__init__()
         self.name = name
-        self.vnfd_helper = VnfdHelper(vnfd)  # fixme: parse this into a structure
-
-
-class GenericVNF(VNFObject):
-
-    """ Class providing file-like API for generic VNF implementation """
-    def __init__(self, name, vnfd):
-        super(GenericVNF, self).__init__(name, vnfd)
+        self.vnfd_helper = VnfdHelper(vnfd)
         # List of statistics we can obtain from this VNF
         # - ETSI MANO 6.3.1.1 monitoring_parameter
-        self.kpi = self._get_kpi_definition()
+        self.kpi = self.vnfd_helper.kpi
         # Standard dictionary containing params like thread no, buffer size etc
         self.config = {}
         self.runs_traffic = False
 
-    def _get_kpi_definition(self):
-        """ Get list of KPIs defined in VNFD
-
-        :param vnfd:
-        :return: list of KPIs, e.g. ['throughput', 'latency']
-        """
-        return self.vnfd_helper.kpi
-
+    @abc.abstractmethod
     def instantiate(self, scenario_cfg, context_cfg):
-        """ Prepare VNF for operation and start the VNF process/VM
+        """Prepare VNF for operation and start the VNF process/VM
 
-        :param scenario_cfg:
-        :param context_cfg:
+        :param scenario_cfg: Scenario config
+        :param context_cfg: Context config
         :return: True/False
         """
-        raise NotImplementedError()
 
+    @abc.abstractmethod
     def wait_for_instantiate(self):
-        """ Wait for VNF to start
+        """Wait for VNF to start
 
         :return: True/False
         """
-        raise NotImplementedError()
 
+    @abc.abstractmethod
     def terminate(self):
-        """ Kill all VNF processes
-
-        :return:
-        """
-        raise NotImplementedError()
+        """Kill all VNF processes"""
 
+    @abc.abstractmethod
     def scale(self, flavor=""):
-        """
+        """rest
 
-        :param flavor:
+        :param flavor: Name of the flavor.
         :return:
         """
-        raise NotImplementedError()
 
+    @abc.abstractmethod
     def collect_kpi(self):
-        """This method should return a dictionary containing the
-        selected KPI at a given point of time.
+        """Return a dict containing the selected KPI at a given point of time
 
         :return: {"kpi": value, "kpi2": value}
         """
-        raise NotImplementedError()
 
 
 @six.add_metaclass(abc.ABCMeta)
index 20e5895..5eeb6c8 100644 (file)
@@ -28,6 +28,7 @@ from six.moves import cStringIO
 
 from yardstick.benchmark.contexts.base import Context
 from yardstick.benchmark.scenarios.networking.vnf_generic import find_relative_file
+from yardstick.common import exceptions as y_exceptions
 from yardstick.common.process import check_if_process_failed
 from yardstick.network_services.helpers.samplevnf_helper import PortPairs
 from yardstick.network_services.helpers.samplevnf_helper import MultiPortConfig
@@ -308,7 +309,7 @@ class DpdkVnfSetupEnvHelper(SetupEnvHelper):
                             if vpci == v['virtual-interface']['vpci'])
                 # force to int
                 intf['virtual-interface']['dpdk_port_num'] = int(dpdk_port_num)
-            except:
+            except:  # pylint: disable=bare-except
                 pass
         time.sleep(2)
 
@@ -472,6 +473,11 @@ class ClientResourceHelper(ResourceHelper):
         self.client.clear_stats(ports=ports)
 
     def start(self, ports=None, *args, **kwargs):
+        # pylint: disable=keyword-arg-before-vararg
+        # NOTE(ralonsoh): defining keyworded arguments before variable
+        # positional arguments is a bug. This function definition doesn't work
+        # in Python 2, although it works in Python 3. Reference:
+        # https://www.python.org/dev/peps/pep-3102/
         if ports is None:
             ports = self.all_ports
         self.client.start(ports=ports, *args, **kwargs)
@@ -480,8 +486,8 @@ class ClientResourceHelper(ResourceHelper):
         if not self._queue.empty():
             kpi = self._queue.get()
             self._result.update(kpi)
-            LOG.debug("Got KPIs from _queue for {0} {1}".format(
-                self.scenario_helper.name, self.RESOURCE_WORD))
+            LOG.debug('Got KPIs from _queue for %s %s',
+                      self.scenario_helper.name, self.RESOURCE_WORD)
         return self._result
 
     def _connect(self, client=None):
@@ -670,7 +676,7 @@ class SampleVNF(GenericVNF):
         self.pipeline_kwargs = {}
         self.uplink_ports = None
         self.downlink_ports = None
-        # TODO(esm): make QueueFileWrapper invert-able so that we
+        # NOTE(esm): make QueueFileWrapper invert-able so that we
         #            never have to manage the queues
         self.q_in = Queue()
         self.q_out = Queue()
@@ -751,7 +757,7 @@ class SampleVNF(GenericVNF):
             if not self._vnf_process.is_alive():
                 raise RuntimeError("%s VNF process died." % self.APP_NAME)
 
-            # TODO(esm): move to QueueFileWrapper
+            # NOTE(esm): move to QueueFileWrapper
             while self.q_out.qsize() > 0:
                 buf.append(self.q_out.get())
                 message = ''.join(buf)
@@ -821,12 +827,12 @@ class SampleVNF(GenericVNF):
             self._vnf_process.terminate()
         # no terminate children here because we share processes with tg
 
-    def get_stats(self, *args, **kwargs):
-        """
-        Method for checking the statistics
+    def get_stats(self, *args, **kwargs):  # pylint: disable=unused-argument
+        """Method for checking the statistics
+
+        This method could be overridden in children classes.
 
-        :return:
-           VNF statistics
+        :return: VNF statistics
         """
         cmd = 'p {0} stats'.format(self.APP_WORD)
         out = self.vnf_execute(cmd)
@@ -849,6 +855,11 @@ class SampleVNF(GenericVNF):
         LOG.debug("%s collect KPIs %s", self.APP_NAME, result)
         return result
 
+    def scale(self, flavor=""):
+        """The SampleVNF base class doesn't provide the 'scale' feature"""
+        raise y_exceptions.FunctionNotImplemented(
+            function_name='scale', class_name='SampleVNFTrafficGen')
+
 
 class SampleVNFTrafficGen(GenericTrafficGen):
     """ Class providing file-like API for generic traffic generator """
@@ -964,3 +975,8 @@ class SampleVNFTrafficGen(GenericTrafficGen):
             self._tg_process.join(PROCESS_JOIN_TIMEOUT)
             self._tg_process.terminate()
         # no terminate children here because we share processes with vnf
+
+    def scale(self, flavor=""):
+        """A traffic generator VFN doesn't provide the 'scale' feature"""
+        raise y_exceptions.FunctionNotImplemented(
+            function_name='scale', class_name='SampleVNFTrafficGen')
index 5238a5f..a989543 100644 (file)
@@ -113,10 +113,6 @@ class PingTrafficGen(SampleVNFTrafficGen):
                                              resource_helper_type)
         self._result = {}
 
-    def scale(self, flavor=""):
-        """ scale vnf-based on flavor input """
-        pass
-
     def _check_status(self):
         return self._tg_process.is_alive()
 
index a8b19cf..630c8b9 100644 (file)
@@ -174,7 +174,7 @@ class IxiaResourceHelper(ClientResourceHelper):
                     break
 
             self.client.ix_stop_traffic()
-        except Exception:
+        except Exception:  # pylint: disable=broad-except
             LOG.exception("Run Traffic terminated")
 
         self._terminated.value = 1
@@ -201,9 +201,6 @@ class IxiaTrafficGen(SampleVNFTrafficGen):
     def _check_status(self):
         pass
 
-    def scale(self, flavor=""):
-        pass
-
     def terminate(self):
         self.resource_helper.stop_collect()
         super(IxiaTrafficGen, self).terminate()
index 4250cb7..0084a12 100644 (file)
@@ -126,6 +126,11 @@ class TrexResourceHelper(ClientResourceHelper):
         self.ssh_helper.execute(self.MAKE_INSTALL.format(ko_src))
 
     def start(self, ports=None, *args, **kwargs):
+        # pylint: disable=keyword-arg-before-vararg
+        # NOTE(ralonsoh): defining keyworded arguments before variable
+        # positional arguments is a bug. This function definition doesn't work
+        # in Python 2, although it works in Python 3. Reference:
+        # https://www.python.org/dev/peps/pep-3102/
         cmd = "sudo fuser -n tcp {0.SYNC_PORT} {0.ASYNC_PORT} -k > /dev/null 2>&1"
         self.ssh_helper.execute(cmd.format(self))
 
@@ -186,9 +191,6 @@ class TrexTrafficGen(SampleVNFTrafficGen):
         super(TrexTrafficGen, self)._start_server()
         self.resource_helper.start()
 
-    def scale(self, flavor=""):
-        pass
-
     def terminate(self):
         self.resource_helper.terminate()