aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaciej Skrocki <maciej.skrocki@intel.com>2017-08-28 17:24:05 -0700
committerMaciej Skrocki <maciej.skrocki@intel.com>2017-08-31 17:26:59 -0700
commit378171687bda92d031437b0d8cc90968c1655b9d (patch)
treea7d1c948d5514e94ef66aa1dd6068c960fcfbd31
parent57b17a2223d8751f2c5eae660b706e2fc736a47c (diff)
Added TC for vFW in heat context with ixia TG
- added common method to get relative paths - added 'Ixia' APP_NAME Change-Id: I7966798bab71af66d3efbeb1e13b07e8fbb41e88 Signed-off-by: Maciej Skrocki <maciej.skrocki@intel.com>
-rw-r--r--samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml82
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py8
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py9
-rw-r--r--yardstick/benchmark/scenarios/networking/vnf_generic.py25
-rw-r--r--yardstick/network_services/vnf_generic/vnf/tg_ixload.py5
-rw-r--r--yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py11
6 files changed, 120 insertions, 20 deletions
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
index 000000000..06b19ebad
--- /dev/null
+++ b/samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
@@ -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
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py
index 5c81aa886..db128a15c 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py
@@ -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")
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py
index ca8150cb2..661e885ca 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py
@@ -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)
diff --git a/yardstick/benchmark/scenarios/networking/vnf_generic.py b/yardstick/benchmark/scenarios/networking/vnf_generic.py
index 4510bcfba..5453c22d6 100644
--- a/yardstick/benchmark/scenarios/networking/vnf_generic.py
+++ b/yardstick/benchmark/scenarios/networking/vnf_generic.py
@@ -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):
diff --git a/yardstick/network_services/vnf_generic/vnf/tg_ixload.py b/yardstick/network_services/vnf_generic/vnf/tg_ixload.py
index 353d31fc6..6be2b58e1 100644
--- a/yardstick/network_services/vnf_generic/vnf/tg_ixload.py
+++ b/yardstick/network_services/vnf_generic/vnf/tg_ixload.py
@@ -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)
diff --git a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py
index 78d2bd8ba..c758baa4c 100644
--- a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py
+++ b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py
@@ -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