Added TC for vFW in heat context with ixia TG 35/40535/17
authorMaciej Skrocki <maciej.skrocki@intel.com>
Tue, 29 Aug 2017 00:24:05 +0000 (17:24 -0700)
committerMaciej Skrocki <maciej.skrocki@intel.com>
Fri, 1 Sep 2017 00:26:59 +0000 (17:26 -0700)
- added common method to get relative paths
- added 'Ixia' APP_NAME

Change-Id: I7966798bab71af66d3efbeb1e13b07e8fbb41e88
Signed-off-by: Maciej Skrocki <maciej.skrocki@intel.com>
samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml [new file with mode: 0644]
tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py
tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py
yardstick/benchmark/scenarios/networking/vnf_generic.py
yardstick/network_services/vnf_generic/vnf/tg_ixload.py
yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py

diff --git a/samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml b/samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
new file mode 100644 (file)
index 0000000..06b19eb
--- /dev/null
@@ -0,0 +1,82 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# 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.
+
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf
+  traffic_profile: ../../traffic_profiles/ixia_ipv4_latency.yaml
+  topology: vfw_vnf_topology_ixia.yaml
+  nodes:
+    tg__1: trafficgen_1.yardstick1
+    vnf__1: vnf.yardstick
+  options:
+    framesize:
+      private: {64B: 100}
+      public: {64B: 100}
+    flow:
+      src_ip: [{'tg__1': 'xe0'}]
+      dst_ip: [{'tg__1': 'xe1'}]
+      count: 1
+    traffic_type: 4
+    rfc2544:
+      allowed_drop_rate: 0.0001 - 0.0001
+    vnf__1:
+      rules: acl_1rule.yaml
+      vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
+  runner:
+    type: Iteration
+    iterations: 10
+    interval: 35
+  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg
+contexts:
+  # put node context first, so we don't HEAT deploy if node has errors
+  - name: yardstick1
+    type: Node
+    file: ixia.yml
+  - name: yardstick
+    image: yardstick-samplevnfs
+    flavor:
+      vcpus: 10
+      ram: 20480
+      disk: 4
+      extra_specs:
+        hw:cpu_sockets: 1
+        hw:cpu_cores: 10
+        hw:cpu_threads: 1
+    user: ubuntu
+    placement_groups:
+      pgrp1:
+        policy: "availability"
+    servers:
+      vnf:
+        floating_ip: true
+        placement: "pgrp1"
+    networks:
+      mgmt:
+        cidr: '10.0.1.0/24'
+      xe0:
+        cidr: '10.0.2.0/24'
+        vld_id: public_1
+        gateway_ip: 'null'
+        provider: true
+        physical_network: phystenant1
+        port_security_enabled: False
+      xe1:
+        cidr: '10.0.3.0/24'
+        vld_id: private_1
+        gateway_ip: 'null'
+        provider: true
+        physical_network: phystenant2
+        port_security_enabled: False
index 5c81aa8..db128a1 100644 (file)
@@ -161,7 +161,8 @@ class TestIxLoadTrafficGen(unittest.TestCase):
             vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
             ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
             scenario_cfg = {'tc': "nsb_test_case",
-                            'ixia_profile': "ixload.cfg"}
+                            'ixia_profile': "ixload.cfg",
+                            'task_path': "/path/to/task"}
             ixload_traffic_gen.RESULTS_MOUNT = "/tmp/result"
             shutil.copy = mock.Mock()
             scenario_cfg.update({'options': {'packetsize': 64, 'traffic_type': 4,
@@ -173,8 +174,9 @@ class TestIxLoadTrafficGen(unittest.TestCase):
                                                                        '1C/1T',
                                                                        'worker_threads': 1}}
                                              }})
-            self.assertRaises(IOError,
-                              ixload_traffic_gen.instantiate(scenario_cfg, {}))
+            with mock.patch('yardstick.benchmark.scenarios.networking.vnf_generic.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.call")
     @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.shutil")
index ca8150c..661e885 100644 (file)
@@ -343,8 +343,11 @@ class TestIXIATrafficGen(unittest.TestCase):
                     },
                 },
             },
-            'ixia_profile': {}
+            'ixia_profile': '/path/to/profile',
+            'task_path': '/path/to/task'
         }
 
-        result = sut._traffic_runner(mock_traffic_profile)
-        self.assertIsNone(result)
+        with mock.patch('yardstick.benchmark.scenarios.networking.vnf_generic.open', create=True) as mock_open:
+            mock_open.return_value = mock.MagicMock()
+            result = sut._traffic_runner(mock_traffic_profile)
+            self.assertIsNone(result)
index 4510bcf..5453c22 100644 (file)
@@ -87,19 +87,22 @@ class SshManager(object):
 
 
 def find_relative_file(path, task_path):
+    """
+    Find file in one of places: in abs of path or
+    relative to TC scenario file. In this order.
+
+    :param path:
+    :param task_path:
+    :return str: full path to file
+    """
     # fixme: create schema to validate all fields have been provided
-    try:
-        with open(path):
+    for lookup in [os.path.abspath(path), os.path.join(task_path, path)]:
+        try:
+            with open(lookup):
+                return lookup
+        except IOError:
             pass
-        return path
-    except IOError as e:
-        if e.errno != errno.ENOENT:
-            raise
-        else:
-            rel_path = os.path.join(task_path, path)
-            with open(rel_path):
-                pass
-            return rel_path
+    raise IOError(errno.ENOENT, 'Unable to find {} file'.format(path))
 
 
 def open_relative_file(path, task_path):
index 353d31f..6be2b58 100644 (file)
@@ -27,6 +27,7 @@ import six
 from yardstick.common.utils import makedirs
 from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNFTrafficGen
 from yardstick.network_services.vnf_generic.vnf.sample_vnf import ClientResourceHelper
+from yardstick.benchmark.scenarios.networking.vnf_generic import find_relative_file
 
 LOG = logging.getLogger(__name__)
 
@@ -92,7 +93,9 @@ class IxLoadResourceHelper(ClientResourceHelper):
 
     def setup(self):
         # TODO: fixupt scenario_helper to hanlde ixia
-        self.resource_file_name = str(self.scenario_helper.scenario_cfg['ixia_profile'])
+        self.resource_file_name = \
+            find_relative_file(self.scenario_helper.scenario_cfg['ixia_profile'],
+                               self.scenario_helper.scenario_cfg["task_path"])
         makedirs(self.RESULTS_MOUNT)
         cmd = MOUNT_CMD.format(self.vnfd_helper.mgmt_interface, self)
         LOG.debug(cmd)
index 78d2bd8..c758baa 100644 (file)
@@ -22,6 +22,7 @@ from yardstick.common.utils import ErrorClass
 from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNFTrafficGen
 from yardstick.network_services.vnf_generic.vnf.sample_vnf import ClientResourceHelper
 from yardstick.network_services.vnf_generic.vnf.sample_vnf import Rfc2544ResourceHelper
+from yardstick.benchmark.scenarios.networking.vnf_generic import find_relative_file
 
 LOG = logging.getLogger(__name__)
 
@@ -102,7 +103,9 @@ class IxiaResourceHelper(ClientResourceHelper):
         self._connect()
 
         # we don't know client_file_name until runtime as instantiate
-        client_file_name = self.scenario_helper.scenario_cfg['ixia_profile']
+        client_file_name = \
+            find_relative_file(self.scenario_helper.scenario_cfg['ixia_profile'],
+                               self.scenario_helper.scenario_cfg["task_path"])
         self.client.ix_load_config(client_file_name)
         time.sleep(WAIT_AFTER_CFG_LOAD)
 
@@ -117,7 +120,9 @@ class IxiaResourceHelper(ClientResourceHelper):
             })
 
         samples = {}
-        ixia_file = os.path.join(os.getcwd(), "ixia_traffic.cfg")
+
+        ixia_file = find_relative_file("ixia_traffic.cfg",
+                                       self.scenario_helper.scenario_cfg["task_path"])
         # Generate ixia traffic config...
         while not self._terminated.value:
             traffic_profile.execute(self, self.client, mac, ixia_file)
@@ -140,6 +145,8 @@ class IxiaResourceHelper(ClientResourceHelper):
 
 class IxiaTrafficGen(SampleVNFTrafficGen):
 
+    APP_NAME = 'Ixia'
+
     def __init__(self, name, vnfd, setup_env_helper_type=None, resource_helper_type=None):
         if resource_helper_type is None:
             resource_helper_type = IxiaResourceHelper