Add "TrafficGeneratorProducer" for "GenericTrafficGen" instances
[yardstick.git] / yardstick / tests / unit / network_services / vnf_generic / vnf / test_tg_ixload.py
index 5bebbbf..66f9e93 100644 (file)
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-#
 
 import subprocess
 
 import mock
-import unittest
 import six
+import unittest
 
-from yardstick.tests import STL_MOCKS
 from yardstick import ssh
+from yardstick.benchmark.contexts import base as ctx_base
 from yardstick.common import utils
-
-
-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.tg_ixload import IxLoadTrafficGen
-    from yardstick.network_services.vnf_generic.vnf.tg_ixload import IxLoadResourceHelper
-    from yardstick.network_services.traffic_profile.base import TrafficProfile
+from yardstick.network_services.vnf_generic.vnf import tg_ixload
+from yardstick.network_services.traffic_profile.base import TrafficProfile
 
 
 NAME = "tg__1"
@@ -118,146 +109,127 @@ class TestIxLoadTrafficGen(unittest.TestCase):
     def setUp(self):
         self._mock_call = mock.patch.object(subprocess, "call")
         self.mock_call = self._mock_call.start()
-        self._mock_open = mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.open")
+        self._mock_open = mock.patch.object(tg_ixload, 'open')
         self.mock_open = self._mock_open.start()
-
         self.addCleanup(self._stop_mock)
 
     def _stop_mock(self):
         self._mock_call.stop()
         self._mock_open.stop()
 
-    def test___init__(self):
-        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]
-            ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
-            self.assertIsNone(ixload_traffic_gen.resource_helper.data)
+    @mock.patch.object(ssh, 'SSH')
+    def test___init__(self, *args):
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        ixload_traffic_gen = tg_ixload.IxLoadTrafficGen(NAME, vnfd)
+        self.assertIsNone(ixload_traffic_gen.resource_helper.data)
 
-    def test_collect_kpi(self):
-        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]
-            ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
-            ixload_traffic_gen.data = {}
-            restult = ixload_traffic_gen.collect_kpi()
-            self.assertEqual({}, restult)
+    @mock.patch.object(ctx_base.Context, 'get_physical_node_from_server',
+                       return_value='mock_node')
+    @mock.patch.object(ssh, 'SSH')
+    def test_collect_kpi(self, *args):
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        ixload_traffic_gen = tg_ixload.IxLoadTrafficGen(NAME, vnfd)
+        ixload_traffic_gen.scenario_helper.scenario_cfg = {
+            'nodes': {ixload_traffic_gen.name: "mock"}
+        }
+        ixload_traffic_gen.data = {}
+        result = ixload_traffic_gen.collect_kpi()
 
-    def test_listen_traffic(self):
-        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]
-            ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
-            self.assertIsNone(ixload_traffic_gen.listen_traffic({}))
+        expected = {
+            'physical_node': 'mock_node',
+            'collect_stats': {}}
+        self.assertEqual(expected, result)
+
+    @mock.patch.object(ssh, 'SSH')
+    def test_listen_traffic(self, *args):
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        ixload_traffic_gen = tg_ixload.IxLoadTrafficGen(NAME, vnfd)
+        self.assertIsNone(ixload_traffic_gen.listen_traffic({}))
 
     @mock.patch.object(utils, 'find_relative_file')
     @mock.patch.object(utils, 'makedirs')
+    @mock.patch.object(ctx_base.Context, 'get_context_from_server')
     @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.shutil")
-    def test_instantiate(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_mock.run = \
-                mock.Mock(return_value=(0, "", ""))
-            ssh.from_node.return_value = ssh_mock
-            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
-            ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
-            scenario_cfg = {'tc': "nsb_test_case",
-                            'ixia_profile': "ixload.cfg",
-                            'task_path': "/path/to/task"}
-            ixload_traffic_gen.RESULTS_MOUNT = "/tmp/result"
-            scenario_cfg.update({'options': {'packetsize': 64, 'traffic_type': 4,
-                                             'rfc2544': {'allowed_drop_rate': '0.8 - 1'},
-                                             'vnf__1': {'rules': 'acl_1rule.yaml',
-                                                        'vnf_config': {'lb_config': 'SW',
-                                                                       'lb_count': 1,
-                                                                       'worker_config':
-                                                                       '1C/1T',
-                                                                       'worker_threads': 1}}
-                                             }})
-            with mock.patch.object(six.moves.builtins, 'open',
-                                   create=True) as mock_open:
-                mock_open.return_value = mock.MagicMock()
-                ixload_traffic_gen.instantiate(scenario_cfg, {})
+    @mock.patch.object(ssh, 'SSH')
+    def test_instantiate(self, mock_shutil, *args):
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        ixload_traffic_gen = tg_ixload.IxLoadTrafficGen(NAME, vnfd)
+        scenario_cfg = {'tc': "nsb_test_case",
+                        'ixia_profile': "ixload.cfg",
+                        'task_path': "/path/to/task"}
+        ixload_traffic_gen.RESULTS_MOUNT = "/tmp/result"
+        mock_shutil.copy = mock.Mock()
+        scenario_cfg.update({'options': {'packetsize': 64, 'traffic_type': 4,
+                                         'rfc2544': {'allowed_drop_rate': '0.8 - 1'},
+                                         'vnf__1': {'rules': 'acl_1rule.yaml',
+                                                    'vnf_config': {'lb_config': 'SW',
+                                                                   'lb_count': 1,
+                                                                   'worker_config':
+                                                                   '1C/1T',
+                                                                   'worker_threads': 1}}
+                                         }})
+        scenario_cfg.update({
+            'nodes': {ixload_traffic_gen.name: "mock"}
+        })
+        with mock.patch.object(six.moves.builtins, 'open',
+                               create=True) as mock_open:
+            mock_open.return_value = mock.MagicMock()
+            ixload_traffic_gen.instantiate(scenario_cfg, {})
 
     @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.open")
     @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.min")
     @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.max")
     @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.len")
     @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.shutil")
+    @mock.patch.object(ssh, 'SSH')
     def test_run_traffic(self, *args):
         mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
         mock_traffic_profile.get_traffic_definition.return_value = "64"
         mock_traffic_profile.params = self.TRAFFIC_PROFILE
-        with mock.patch("yardstick.ssh.SSH") 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
-            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
-            vnfd["mgmt-interface"].update({"tg-config": {}})
-            vnfd["mgmt-interface"]["tg-config"].update({"ixchassis":
-                                                        "1.1.1.1"})
-            vnfd["mgmt-interface"]["tg-config"].update({"py_bin_path":
-                                                        "/root"})
-            sut = IxLoadTrafficGen(NAME, vnfd)
-            sut.connection = mock.Mock()
-            sut.connection.run = mock.Mock()
-            sut._traffic_runner = mock.Mock(return_value=0)
-            result = sut.run_traffic(mock_traffic_profile)
-            self.assertIsNone(result)
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        vnfd["mgmt-interface"].update({"tg-config": {}})
+        vnfd["mgmt-interface"]["tg-config"].update({"ixchassis":
+                                                    "1.1.1.1"})
+        vnfd["mgmt-interface"]["tg-config"].update({"py_bin_path":
+                                                    "/root"})
+        sut = tg_ixload.IxLoadTrafficGen(NAME, vnfd)
+        sut.connection = mock.Mock()
+        sut.connection.run = mock.Mock()
+        sut._traffic_runner = mock.Mock(return_value=0)
+        result = sut.run_traffic(mock_traffic_profile)
+        self.assertIsNone(result)
 
     @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.open")
     @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.min")
     @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.max")
     @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.len")
     @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.shutil")
+    @mock.patch.object(ssh, 'SSH')
     def test_run_traffic_csv(self, *args):
         mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
         mock_traffic_profile.get_traffic_definition.return_value = "64"
         mock_traffic_profile.params = self.TRAFFIC_PROFILE
-        with mock.patch("yardstick.ssh.SSH") 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
-            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
-            vnfd["mgmt-interface"].update({"tg-config": {}})
-            vnfd["mgmt-interface"]["tg-config"].update({"ixchassis":
-                                                        "1.1.1.1"})
-            vnfd["mgmt-interface"]["tg-config"].update({"py_bin_path":
-                                                        "/root"})
-            sut = IxLoadTrafficGen(NAME, vnfd)
-            sut.connection = mock.Mock()
-            sut.connection.run = mock.Mock()
-            sut._traffic_runner = mock.Mock(return_value=0)
-            subprocess.call(["touch", "/tmp/1.csv"])
-            sut.rel_bin_path = mock.Mock(return_value="/tmp/*.csv")
-            result = sut.run_traffic(mock_traffic_profile)
-            self.assertIsNone(result)
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        vnfd["mgmt-interface"].update({"tg-config": {}})
+        vnfd["mgmt-interface"]["tg-config"].update({"ixchassis":
+                                                    "1.1.1.1"})
+        vnfd["mgmt-interface"]["tg-config"].update({"py_bin_path":
+                                                    "/root"})
+        sut = tg_ixload.IxLoadTrafficGen(NAME, vnfd)
+        sut.connection = mock.Mock()
+        sut.connection.run = mock.Mock()
+        sut._traffic_runner = mock.Mock(return_value=0)
+        sut.rel_bin_path = mock.Mock(return_value="/tmp/*.csv")
+        result = sut.run_traffic(mock_traffic_profile)
+        self.assertIsNone(result)
 
-    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call")
     @mock.patch.object(ssh, 'SSH')
     def test_terminate(self, *args):
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
-        ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
+        ixload_traffic_gen = tg_ixload.IxLoadTrafficGen(NAME, vnfd)
         self.assertIsNone(ixload_traffic_gen.terminate())
 
-    @mock.patch("yardstick.ssh.SSH")
+    @mock.patch.object(ssh, 'SSH')
     def test_parse_csv_read(self, mock_ssh):
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
         kpi_data = {
@@ -273,15 +245,16 @@ class TestIxLoadTrafficGen(unittest.TestCase):
         mock_ssh_type.execute.return_value = 0, "", ""
         mock_ssh.from_node.return_value = mock_ssh_type
 
-        ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
+        ixload_traffic_gen = tg_ixload.IxLoadTrafficGen(NAME, vnfd)
         result = ixload_traffic_gen.resource_helper.result
 
         ixload_traffic_gen.resource_helper.parse_csv_read(http_reader)
-        for key_left, key_right in IxLoadResourceHelper.KPI_LIST.items():
+        for key_left, key_right in (
+                tg_ixload.IxLoadResourceHelper.KPI_LIST.items()):
             self.assertEqual(result[key_left][-1], int(kpi_data[key_right]))
 
-    @mock.patch("yardstick.ssh.SSH")
-    def test_parse_csv_read_value_error(self, mock_ssh):
+    @mock.patch.object(ssh, 'SSH')
+    def test_parse_csv_read_value_error(self, mock_ssh, *args):
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
         http_reader = [{
             'HTTP Total Throughput (Kbps)': 1,
@@ -295,14 +268,14 @@ class TestIxLoadTrafficGen(unittest.TestCase):
         mock_ssh_type.execute.return_value = 0, "", ""
         mock_ssh.from_node.return_value = mock_ssh_type
 
-        ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
+        ixload_traffic_gen = tg_ixload.IxLoadTrafficGen(NAME, vnfd)
         init_value = ixload_traffic_gen.resource_helper.result
 
         ixload_traffic_gen.resource_helper.parse_csv_read(http_reader)
         self.assertDictEqual(ixload_traffic_gen.resource_helper.result, init_value)
 
     @mock.patch.object(ssh, 'SSH')
-    def test_parse_csv_read_error(self, mock_ssh):
+    def test_parse_csv_read_error(self, mock_ssh, *args):
         vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
         http_reader = [{
             'HTTP Total Throughput (Kbps)': 1,
@@ -315,7 +288,7 @@ class TestIxLoadTrafficGen(unittest.TestCase):
         mock_ssh_type.execute.return_value = 0, "", ""
         mock_ssh.from_node.return_value = mock_ssh_type
 
-        ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
+        ixload_traffic_gen = tg_ixload.IxLoadTrafficGen(NAME, vnfd)
 
         with self.assertRaises(KeyError):
             ixload_traffic_gen.resource_helper.parse_csv_read(http_reader)