aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml82
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_vnf_generic.py6
-rw-r--r--tests/unit/network_services/libs/ixia_libs/test_IxNet.py24
-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.py33
-rw-r--r--yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py4
-rw-r--r--yardstick/network_services/nfvi/resource.py6
-rw-r--r--yardstick/network_services/traffic_profile/ixia_rfc2544.py2
-rw-r--r--yardstick/network_services/vnf_generic/vnf/sample_vnf.py3
-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
12 files changed, 154 insertions, 39 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/benchmark/scenarios/networking/test_vnf_generic.py b/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py
index df5047a0d..fe7b6a57f 100644
--- a/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py
+++ b/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py
@@ -362,7 +362,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
def test__get_ip_flow_range(self):
self.scenario_cfg["traffic_options"]["flow"] = \
self._get_file_abspath("ipv4_1flow_Packets_vpe.yaml")
- result = '152.16.100.1-152.16.100.254'
+ result = '152.16.100.2-152.16.100.254'
self.assertEqual(result, self.s._get_ip_flow_range({"tg__1": 'xe0'}))
def test___get_traffic_flow(self):
@@ -384,8 +384,8 @@ class TestNetworkServiceTestCase(unittest.TestCase):
'public_ip': ['1.1.1.1'],
},
}
- result = {'flow': {'dst_ip0': '152.16.40.1-152.16.40.254',
- 'src_ip0': '152.16.100.1-152.16.100.254'}}
+ result = {'flow': {'dst_ip0': '152.16.40.2-152.16.40.254',
+ 'src_ip0': '152.16.100.2-152.16.100.254'}}
self.assertEqual(result, self.s._get_traffic_flow())
diff --git a/tests/unit/network_services/libs/ixia_libs/test_IxNet.py b/tests/unit/network_services/libs/ixia_libs/test_IxNet.py
index ae4c58de1..7fe83406a 100644
--- a/tests/unit/network_services/libs/ixia_libs/test_IxNet.py
+++ b/tests/unit/network_services/libs/ixia_libs/test_IxNet.py
@@ -268,7 +268,7 @@ class TestIxNextgen(unittest.TestCase):
def test_add_ip_header_v4(self):
static_traffic_params = {
- "private": {
+ "private_1": {
"id": 1,
"bidir": "False",
"duration": 60,
@@ -308,7 +308,7 @@ class TestIxNextgen(unittest.TestCase):
},
"traffic_type": "continuous"
},
- "public": {
+ "public_1": {
"id": 2,
"bidir": "False",
"duration": 60,
@@ -366,7 +366,7 @@ class TestIxNextgen(unittest.TestCase):
def test_add_ip_header_v4_nothing_to_do(self):
static_traffic_params = {
- "private": {
+ "private_1": {
"id": 1,
"bidir": "False",
"duration": 60,
@@ -406,7 +406,7 @@ class TestIxNextgen(unittest.TestCase):
},
"traffic_type": "continuous"
},
- "public": {
+ "public_1": {
"id": 2,
"bidir": "False",
"duration": 60,
@@ -464,7 +464,7 @@ class TestIxNextgen(unittest.TestCase):
def test_add_ip_header_v6(self):
static_traffic_profile = {
- "private": {
+ "private_1": {
"id": 1,
"bidir": "False",
"duration": 60,
@@ -497,7 +497,7 @@ class TestIxNextgen(unittest.TestCase):
},
"traffic_type": "continuous"
},
- "public": {
+ "public_1": {
"id": 2,
"bidir": "False",
"duration": 60,
@@ -547,7 +547,7 @@ class TestIxNextgen(unittest.TestCase):
def test_add_ip_header_v6_nothing_to_do(self):
static_traffic_params = {
- "private": {
+ "private_1": {
"id": 1,
"bidir": "False",
"duration": 60,
@@ -579,7 +579,7 @@ class TestIxNextgen(unittest.TestCase):
},
"traffic_type": "continuous"
},
- "public": {
+ "public_1": {
"id": 2,
"bidir": "False",
"duration": 60,
@@ -684,7 +684,7 @@ class TestIxNextgen(unittest.TestCase):
def test_ix_update_ether(self):
static_traffic_params = {
- "private": {
+ "private_1": {
"id": 1,
"bidir": "False",
"duration": 60,
@@ -723,7 +723,7 @@ class TestIxNextgen(unittest.TestCase):
},
"traffic_type": "continuous"
},
- "public": {
+ "public_1": {
"id": 2,
"bidir": "False",
"duration": 60,
@@ -787,7 +787,7 @@ class TestIxNextgen(unittest.TestCase):
def test_ix_update_ether_nothing_to_do(self):
static_traffic_params = {
- "private": {
+ "private_1": {
"id": 1,
"bidir": "False",
"duration": 60,
@@ -820,7 +820,7 @@ class TestIxNextgen(unittest.TestCase):
},
"traffic_type": "continuous"
},
- "public": {
+ "public_1": {
"id": 2,
"bidir": "False",
"duration": 60,
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..aaf850c1d 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):
@@ -150,7 +153,13 @@ class NetworkServiceTestCase(base.Scenario):
ipaddr = ipaddress.ip_network(six.text_type('{}/{}'.format(ip, mask)), strict=False)
hosts = list(ipaddr.hosts())
- ip_addr_range = "{}-{}".format(hosts[0], hosts[-1])
+ if len(hosts) > 2:
+ # skip the first host in case of gateway
+ ip_addr_range = "{}-{}".format(hosts[1], hosts[-1])
+ else:
+ LOG.warning("Only single IP in range %s", ipaddr)
+ # fall back to single IP range
+ ip_addr_range = ip
else:
# we are manually specifying the range
ip_addr_range = range_or_interface
diff --git a/yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py b/yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py
index 2b8905b4f..38831ee86 100644
--- a/yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py
+++ b/yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py
@@ -113,10 +113,10 @@ class IxNextgen(object):
}
MODE_SEEDS_MAP = {
- 0: ('private', ['256', '2048']),
+ 0: ('private_1', ['256', '2048']),
}
- MODE_SEEDS_DEFAULT = 'public', ['2048', '256']
+ MODE_SEEDS_DEFAULT = 'public_1', ['2048', '256']
@staticmethod
def find_view_obj(view_name, views):
diff --git a/yardstick/network_services/nfvi/resource.py b/yardstick/network_services/nfvi/resource.py
index 48bcd3118..2a9a1a1a2 100644
--- a/yardstick/network_services/nfvi/resource.py
+++ b/yardstick/network_services/nfvi/resource.py
@@ -222,6 +222,12 @@ class ResourceProfile(object):
connection.execute("sudo rabbitmqctl start_app")
connection.execute("sudo service rabbitmq-server restart")
+ LOG.debug("Creating amdin user for rabbitmq in order to collect data from collectd")
+ connection.execute("sudo rabbitmqctl delete_user guest")
+ connection.execute("sudo rabbitmqctl add_user admin admin")
+ connection.execute("sudo rabbitmqctl authenticate_user admin admin")
+ connection.execute("sudo rabbitmqctl set_permissions -p / admin \".*\" \".*\" \".*\"")
+
LOG.debug("Start collectd service.....")
connection.execute("sudo %s" % collectd_path)
LOG.debug("Done")
diff --git a/yardstick/network_services/traffic_profile/ixia_rfc2544.py b/yardstick/network_services/traffic_profile/ixia_rfc2544.py
index 5ba00180b..ba532b820 100644
--- a/yardstick/network_services/traffic_profile/ixia_rfc2544.py
+++ b/yardstick/network_services/traffic_profile/ixia_rfc2544.py
@@ -74,7 +74,7 @@ class IXIARFC2544Profile(TrexProfile):
traffic[key]["iload"] = str(self.rate)
ixia_obj.ix_update_frame(traffic)
ixia_obj.ix_update_ether(traffic)
- # ixia_obj.ix_update_ipv4(traffic)
+ ixia_obj.add_ip_header(traffic, 4)
ixia_obj.ix_start_traffic()
self.tmp_drop = 0
self.tmp_throughput = 0
diff --git a/yardstick/network_services/vnf_generic/vnf/sample_vnf.py b/yardstick/network_services/vnf_generic/vnf/sample_vnf.py
index 7a756837e..d7874a1a4 100644
--- a/yardstick/network_services/vnf_generic/vnf/sample_vnf.py
+++ b/yardstick/network_services/vnf_generic/vnf/sample_vnf.py
@@ -966,6 +966,9 @@ class SampleVNFTrafficGen(GenericTrafficGen):
# Wait for traffic process to start
while self.resource_helper.client_started.value == 0:
time.sleep(self.RUN_WAIT)
+ # what if traffic process takes a few seconds to start?
+ if not self._traffic_process.is_alive():
+ break
return self._traffic_process.is_alive()
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