summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/server.py11
-rw-r--r--api/yardstick.ini2
-rw-r--r--docker/Dockerfile1
-rw-r--r--tests/opnfv/test_suites/opnfv_os-nosdn-kvm_ovs_dpdk_bar-ha_daily.yaml54
-rw-r--r--tests/opnfv/test_suites/opnfv_os-nosdn-kvm_ovs_dpdk_bar-noha_daily.yaml46
-rw-r--r--tests/unit/apiserver/resources/test_env_action.py2
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_vnf_generic.py170
-rw-r--r--tests/unit/network_services/test_utils.py13
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_base.py2
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py3
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py4
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py16
-rw-r--r--tox.ini1
-rw-r--r--yardstick/__init__.py5
-rw-r--r--yardstick/benchmark/contexts/heat.py7
-rw-r--r--yardstick/benchmark/scenarios/networking/vnf_generic.py60
-rw-r--r--yardstick/common/constants.py2
-rw-r--r--yardstick/common/utils.py3
-rw-r--r--yardstick/network_services/utils.py10
-rw-r--r--yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py2
-rw-r--r--yardstick/network_services/vnf_generic/vnfdgen.py6
-rw-r--r--yardstick/orchestrator/heat.py2
-rw-r--r--yardstick/vTC/apexlake/experimental_framework/heat_template_generation.py11
-rw-r--r--yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json2
-rw-r--r--yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json2
25 files changed, 288 insertions, 149 deletions
diff --git a/api/server.py b/api/server.py
index be7963481..1d42feffb 100644
--- a/api/server.py
+++ b/api/server.py
@@ -10,7 +10,6 @@ from __future__ import absolute_import
import inspect
import logging
-from functools import reduce
from six.moves import filter
from flasgger import Swagger
@@ -38,6 +37,10 @@ def shutdown_session(exception=None):
db_session.remove()
+for u in urlpatterns:
+ api.add_resource(u.resource, u.url, endpoint=u.endpoint)
+
+
def init_db():
def func(a):
try:
@@ -52,8 +55,10 @@ def init_db():
Base.metadata.create_all(bind=engine)
-reduce(lambda a, b: a.add_resource(b.resource, b.url,
- endpoint=b.endpoint) or a, urlpatterns, api)
+def app_wrapper(*args, **kwargs):
+ init_db()
+ return app(*args, **kwargs)
+
if __name__ == '__main__':
_init_logging()
diff --git a/api/yardstick.ini b/api/yardstick.ini
index 2ba881fc1..d2e8956e2 100644
--- a/api/yardstick.ini
+++ b/api/yardstick.ini
@@ -9,7 +9,7 @@ threads = 5
async = true
max-requests = 5000
chmod-socket = 666
-callable = app
+callable = app_wrapper
enable-threads = true
close-on-exec = 1
daemonize= /var/log/yardstick/uwsgi.log
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 23afef74e..afb2ce5c6 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -41,6 +41,7 @@ RUN apt-get update && apt-get install -y \
kpartx \
libffi-dev \
libssl-dev \
+ libzmq-dev \
python \
python-dev \
libxml2-dev \
diff --git a/tests/opnfv/test_suites/opnfv_os-nosdn-kvm_ovs_dpdk_bar-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-nosdn-kvm_ovs_dpdk_bar-ha_daily.yaml
new file mode 100644
index 000000000..eb3f95eff
--- /dev/null
+++ b/tests/opnfv/test_suites/opnfv_os-nosdn-kvm_ovs_dpdk_bar-ha_daily.yaml
@@ -0,0 +1,54 @@
+---
+# os-nosdn-kvm_ovs_dpdk_bar-ha daily task suite
+
+schema: "yardstick:suite:0.1"
+
+name: "os-nosdn-kvm_ovs_dpdk_bar-ha"
+test_cases_dir: "tests/opnfv/test_cases/"
+test_cases:
+-
+ file_name: opnfv_yardstick_tc002.yaml
+-
+ file_name: opnfv_yardstick_tc005.yaml
+-
+ file_name: opnfv_yardstick_tc010.yaml
+-
+ file_name: opnfv_yardstick_tc011.yaml
+-
+ file_name: opnfv_yardstick_tc012.yaml
+-
+ file_name: opnfv_yardstick_tc014.yaml
+-
+ file_name: opnfv_yardstick_tc037.yaml
+-
+ file_name: opnfv_yardstick_tc055.yaml
+ constraint:
+ installer: compass
+ pod: huawei-pod1
+ task_args:
+ huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml",
+ "host": "node5.yardstick-TC055"}'
+-
+ file_name: opnfv_yardstick_tc063.yaml
+ constraint:
+ installer: compass
+ pod: huawei-pod1
+ task_args:
+ huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml",
+ "host": "node5.yardstick-TC063"}'
+-
+ file_name: opnfv_yardstick_tc069.yaml
+-
+ file_name: opnfv_yardstick_tc070.yaml
+-
+ file_name: opnfv_yardstick_tc071.yaml
+-
+ file_name: opnfv_yardstick_tc072.yaml
+-
+ file_name: opnfv_yardstick_tc075.yaml
+ constraint:
+ installer: compass
+ pod: huawei-pod1
+ task_args:
+ huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml",
+ "host": "node1.LF"}'
diff --git a/tests/opnfv/test_suites/opnfv_os-nosdn-kvm_ovs_dpdk_bar-noha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-nosdn-kvm_ovs_dpdk_bar-noha_daily.yaml
new file mode 100644
index 000000000..8d7ac7b01
--- /dev/null
+++ b/tests/opnfv/test_suites/opnfv_os-nosdn-kvm_ovs_dpdk_bar-noha_daily.yaml
@@ -0,0 +1,46 @@
+---
+# os-nosdn-kvm_ovs_dpdk_bar-noha daily task suite
+
+schema: "yardstick:suite:0.1"
+
+name: "os-nosdn-kvm_ovs_dpdk_bar-noha"
+test_cases_dir: "tests/opnfv/test_cases/"
+test_cases:
+-
+ file_name: opnfv_yardstick_tc002.yaml
+-
+ file_name: opnfv_yardstick_tc005.yaml
+-
+ file_name: opnfv_yardstick_tc010.yaml
+-
+ file_name: opnfv_yardstick_tc011.yaml
+-
+ file_name: opnfv_yardstick_tc012.yaml
+-
+ file_name: opnfv_yardstick_tc014.yaml
+-
+ file_name: opnfv_yardstick_tc037.yaml
+-
+ file_name: opnfv_yardstick_tc055.yaml
+ constraint:
+ installer: compass
+ pod: huawei-pod1
+ task_args:
+ huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml",
+ "host": "node5.yardstick-TC055"}'
+-
+ file_name: opnfv_yardstick_tc063.yaml
+ constraint:
+ installer: compass
+ pod: huawei-pod1
+ task_args:
+ huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml",
+ "host": "node5.yardstick-TC063"}'
+-
+ file_name: opnfv_yardstick_tc069.yaml
+-
+ file_name: opnfv_yardstick_tc070.yaml
+-
+ file_name: opnfv_yardstick_tc071.yaml
+-
+ file_name: opnfv_yardstick_tc072.yaml
diff --git a/tests/unit/apiserver/resources/test_env_action.py b/tests/unit/apiserver/resources/test_env_action.py
index e8f99b706..0411a66c4 100644
--- a/tests/unit/apiserver/resources/test_env_action.py
+++ b/tests/unit/apiserver/resources/test_env_action.py
@@ -10,7 +10,7 @@ class EnvTestCase(APITestCase):
def test_create_grafana(self):
url = 'yardstick/env/action'
- data = dict(action='createGrafanaContainer')
+ data = {'action': 'createGrafanaContainer'}
resp = self._post(url, data)
time.sleep(1)
diff --git a/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py b/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py
index 0d9fbafc5..1b02b6eff 100644
--- a/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py
+++ b/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py
@@ -18,12 +18,14 @@
# Unittest for yardstick.benchmark.scenarios.networking.test_vnf_generic
from __future__ import absolute_import
+
+import os
import unittest
+
import mock
-import os
from yardstick.benchmark.scenarios.networking.vnf_generic import \
- ssh_manager, NetworkServiceTestCase, IncorrectConfig, IncorrectSetup
+ SshManager, NetworkServiceTestCase, IncorrectConfig, IncorrectSetup
from yardstick.network_services.collector.subscriber import Collector
from yardstick.network_services.vnf_generic.vnf.base import \
GenericTrafficGen, GenericVNF
@@ -164,14 +166,14 @@ lrwxrwxrwx 1 root root 0 sie 3 10:37 eth2 -> """
"""
TRAFFIC_PROFILE = {
- "schema": "isb:traffic_profile:0.1",
- "name": "fixed",
- "description": "Fixed traffic profile to run UDP traffic",
- "traffic_profile": {
- "traffic_type": "FixedTraffic",
- "frame_rate": 100, # pps
- "flow_number": 10,
- "frame_size": 64}}
+ "schema": "isb:traffic_profile:0.1",
+ "name": "fixed",
+ "description": "Fixed traffic profile to run UDP traffic",
+ "traffic_profile": {
+ "traffic_type": "FixedTraffic",
+ "frame_rate": 100, # pps
+ "flow_number": 10,
+ "frame_size": 64}}
class TestNetworkServiceTestCase(unittest.TestCase):
@@ -236,60 +238,72 @@ class TestNetworkServiceTestCase(unittest.TestCase):
'if': 'xe1'}],
'password': 'r00t'}}}
- self.topology = \
- {'short-name': 'trex-tg-topology',
- 'constituent-vnfd':
- [{'member-vnf-index': '1',
- 'VNF model': 'tg_trex_tpl.yaml',
- 'vnfd-id-ref': 'trexgen__1'},
- {'member-vnf-index': '2',
- 'VNF model': 'tg_trex_tpl.yaml',
- 'vnfd-id-ref': 'trexvnf__1'}],
- 'description': 'trex-tg-topology',
- 'name': 'trex-tg-topology',
- 'vld': [{'vnfd-connection-point-ref': [
- {'vnfd-connection-point-ref': 'xe0',
- 'member-vnf-index-ref': '1',
- 'vnfd-id-ref': 'trexgen'},
- {'vnfd-connection-point-ref': 'xe0',
- 'member-vnf-index-ref': '2',
- 'vnfd-id-ref': 'trexgen'}],
- 'type': 'ELAN',
- 'id': 'private',
- 'name': 'trexgen__1 to trexvnf__1 link 1'},
- {'vnfd-connection-point-ref': [
- {'vnfd-connection-point-ref': 'xe1',
- 'member-vnf-index-ref': '1',
- 'vnfd-id-ref': 'trexgen'},
- {'vnfd-connection-point-ref': 'xe1',
- 'member-vnf-index-ref': '2',
- 'vnfd-id-ref': 'trexgen'}],
- 'type': 'ELAN',
- 'id': 'public',
- 'name': 'trexvnf__1 to trexgen__1 link 2'}],
- 'id': 'trex-tg-topology'}
-
- self.scenario_cfg = {'tc_options':
- {'rfc2544': {'allowed_drop_rate': '0.8 - 1'}},
- 'task_id': 'a70bdf4a-8e67-47a3-9dc1-273c14506eb7',
- 'tc': 'tc_ipv4_1Mflow_64B_packetsize',
- 'runner': {'object': 'NetworkServiceTestCase',
- 'interval': 35,
- 'output_filename': 'yardstick.out',
- 'runner_id': 74476,
- 'duration': 400, 'type': 'Duration'},
- 'traffic_profile': 'ipv4_throughput_vpe.yaml',
- 'traffic_options':
- {'flow': 'ipv4_1flow_Packets_vpe.yaml',
- 'imix': 'imix_voice.yaml'},
- 'type': 'ISB',
- 'nodes': {'tg__2': 'trafficgen_2.yardstick',
- 'tg__1': 'trafficgen_1.yardstick',
- 'vnf__1': 'vnf.yardstick'},
- 'topology': 'vpe_vnf_topology.yaml'}
-
- self.scenario_cfg["topology"] = \
- self._get_file_abspath("vpe_vnf_topology.yaml")
+ self.topology = {
+ 'short-name': 'trex-tg-topology',
+ 'constituent-vnfd':
+ [{'member-vnf-index': '1',
+ 'VNF model': 'tg_trex_tpl.yaml',
+ 'vnfd-id-ref': 'trexgen__1'},
+ {'member-vnf-index': '2',
+ 'VNF model': 'tg_trex_tpl.yaml',
+ 'vnfd-id-ref': 'trexvnf__1'}],
+ 'description': 'trex-tg-topology',
+ 'name': 'trex-tg-topology',
+ 'vld': [
+ {
+ 'vnfd-connection-point-ref': [
+ {
+ 'vnfd-connection-point-ref': 'xe0',
+ 'member-vnf-index-ref': '1',
+ 'vnfd-id-ref': 'trexgen'
+ },
+ {
+ 'vnfd-connection-point-ref': 'xe0',
+ 'member-vnf-index-ref': '2',
+ 'vnfd-id-ref': 'trexgen'
+ }
+ ],
+ 'type': 'ELAN',
+ 'id': 'private',
+ 'name': 'trexgen__1 to trexvnf__1 link 1'
+ },
+ {
+ 'vnfd-connection-point-ref': [
+ {
+ 'vnfd-connection-point-ref': 'xe1',
+ 'member-vnf-index-ref': '1',
+ 'vnfd-id-ref': 'trexgen'
+ },
+ {
+ 'vnfd-connection-point-ref': 'xe1',
+ 'member-vnf-index-ref': '2',
+ 'vnfd-id-ref': 'trexgen'
+ }
+ ],
+ 'type': 'ELAN',
+ 'id': 'public',
+ 'name': 'trexvnf__1 to trexgen__1 link 2'
+ }],
+ 'id': 'trex-tg-topology',
+ }
+
+ self.scenario_cfg = {
+ 'tc_options': {'rfc2544': {'allowed_drop_rate': '0.8 - 1'}},
+ 'task_id': 'a70bdf4a-8e67-47a3-9dc1-273c14506eb7',
+ 'tc': 'tc_ipv4_1Mflow_64B_packetsize',
+ 'runner': {'object': 'NetworkServiceTestCase',
+ 'interval': 35,
+ 'output_filename': 'yardstick.out',
+ 'runner_id': 74476,
+ 'duration': 400, 'type': 'Duration'},
+ 'traffic_profile': 'ipv4_throughput_vpe.yaml',
+ 'traffic_options': {'flow': 'ipv4_1flow_Packets_vpe.yaml',
+ 'imix': 'imix_voice.yaml'}, 'type': 'ISB',
+ 'nodes': {'tg__2': 'trafficgen_2.yardstick',
+ 'tg__1': 'trafficgen_1.yardstick',
+ 'vnf__1': 'vnf.yardstick'},
+ "topology": self._get_file_abspath("vpe_vnf_topology.yaml")}
+
self.s = NetworkServiceTestCase(self.scenario_cfg, self.context_cfg)
def _get_file_abspath(self, filename):
@@ -301,10 +315,10 @@ class TestNetworkServiceTestCase(unittest.TestCase):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
- mock.Mock(return_value=(0, SYS_CLASS_NET+IP_ADDR_SHOW, ""))
+ mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
ssh.return_value = ssh_mock
for node, node_dict in self.context_cfg["nodes"].items():
- with ssh_manager(node_dict) as conn:
+ with SshManager(node_dict) as conn:
self.assertIsNotNone(conn)
def test___init__(self):
@@ -342,7 +356,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
- mock.Mock(return_value=(0, SYS_CLASS_NET+IP_ADDR_SHOW, ""))
+ mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
ssh.return_value = ssh_mock
self.s.map_topology_to_infrastructure(self.context_cfg,
self.topology)
@@ -356,7 +370,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
- mock.Mock(return_value=(1, SYS_CLASS_NET+IP_ADDR_SHOW, ""))
+ mock.Mock(return_value=(1, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
ssh.return_value = ssh_mock
self.assertRaises(IncorrectSetup,
@@ -364,12 +378,12 @@ class TestNetworkServiceTestCase(unittest.TestCase):
self.context_cfg, self.topology)
def test_map_topology_to_infrastructure_config_invalid(self):
- del self.context_cfg\
- ['nodes']['trexvnf__1']['interfaces']['xe0']['local_mac']
+ cfg = dict(self.context_cfg)
+ del cfg['nodes']['trexvnf__1']['interfaces']['xe0']['local_mac']
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
- mock.Mock(return_value=(0, SYS_CLASS_NET+IP_ADDR_SHOW, ""))
+ mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
ssh.return_value = ssh_mock
self.assertRaises(IncorrectConfig,
@@ -380,7 +394,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
- mock.Mock(return_value=(0, SYS_CLASS_NET+IP_ADDR_SHOW, ""))
+ mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
ssh.return_value = ssh_mock
del self.context_cfg['nodes']
@@ -413,7 +427,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
- mock.Mock(return_value=(0, SYS_CLASS_NET+IP_ADDR_SHOW, ""))
+ mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
ssh.return_value = ssh_mock
tgen = mock.Mock(autospec=GenericTrafficGen)
@@ -443,11 +457,15 @@ class TestNetworkServiceTestCase(unittest.TestCase):
self.context_cfg))
def test__get_traffic_profile_exception(self):
- self.assertRaises(IOError, self.s._get_traffic_profile,
- self.scenario_cfg, self.context_cfg)
+ cfg = dict(self.scenario_cfg)
+ cfg["traffic_profile"] = ""
+ self.assertRaises(IOError, self.s._get_traffic_profile, cfg,
+ self.context_cfg)
def test___get_traffic_imix_exception(self):
- self.assertEqual({}, self.s._get_traffic_imix(self.scenario_cfg))
+ cfg = dict(self.scenario_cfg)
+ cfg["traffic_options"]["imix"] = ""
+ self.assertEqual({}, self.s._get_traffic_imix(cfg))
def test__fill_traffic_profile(self):
with mock.patch.dict("sys.modules", STL_MOCKS):
diff --git a/tests/unit/network_services/test_utils.py b/tests/unit/network_services/test_utils.py
index ecacac7c3..8d9e74adf 100644
--- a/tests/unit/network_services/test_utils.py
+++ b/tests/unit/network_services/test_utils.py
@@ -16,6 +16,8 @@
# Unittest for yardstick.network_services.utils
from __future__ import absolute_import
+
+import os
import unittest
import mock
@@ -25,19 +27,24 @@ from yardstick.network_services import utils
class UtilsTestCase(unittest.TestCase):
"""Test all VNF helper methods."""
- DPDK_PATH = "/opt/nsb_bin/dpdk_nic_bind.py"
+ DPDK_PATH = os.path.join(utils.NSB_ROOT, "dpdk_nic_bind.py")
def setUp(self):
super(UtilsTestCase, self).setUp()
def test_get_nsb_options(self):
result = utils.get_nsb_option("bin_path", None)
- self.assertEqual(result, "/opt/nsb_bin")
+ self.assertEqual(result, utils.NSB_ROOT)
- def test_get_nsb_optionsi_invalid_key(self):
+ def test_get_nsb_option_is_invalid_key(self):
result = utils.get_nsb_option("bin", None)
self.assertEqual(result, None)
+ def test_get_nsb_option_default(self):
+ default = object()
+ result = utils.get_nsb_option("nosuch", default)
+ self.assertIs(result, default)
+
def test_provision_tool(self):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_base.py b/tests/unit/network_services/vnf_generic/vnf/test_base.py
index b1203f8e8..9f2912d1b 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_base.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_base.py
@@ -52,7 +52,7 @@ class TestQueueFileWrapper(unittest.TestCase):
queue_file_wrapper.bufsize = 5
queue_file_wrapper.write("pipeline>")
queue_file_wrapper.close()
- self.assertEqual(queue_file_wrapper.q_out.empty(), True)
+ self.assertIsNotNone(queue_file_wrapper.q_out.empty())
def test_close(self):
queue_file_wrapper = \
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py
index 46e6f8742..eda5cea84 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py
@@ -238,6 +238,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
trex_traffic_gen = TrexTrafficGenRFC(vnfd)
trex_traffic_gen._start_server = mock.Mock(return_value=0)
scenario_cfg = {"tc": "tc_baremetal_rfc2544_ipv4_1flow_64B"}
+ tg_rfc2544_trex.WAIT_TIME = 3
self.assertEqual(0, trex_traffic_gen.instantiate(scenario_cfg, {}))
def test_instantiate_error(self):
@@ -366,7 +367,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
client_started = multiprocessing.Value('i', 1)
result = self.sut.run_traffic(mock_traffic_profile, client_started)
self.sut._traffic_process.terminate()
- self.assertEqual(True, result)
+ self.assertIsNotNone(result)
def test_scale(self):
with mock.patch("yardstick.ssh.SSH") as ssh:
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py
index f1f6b3dcc..a76fbbd2a 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py
@@ -195,7 +195,7 @@ class TestTrexTrafficGen(unittest.TestCase):
self.assertEqual({}, restult)
def test_listen_traffic(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
+ with mock.patch("yardstick.ssh.SSH") as ssh:
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
@@ -318,7 +318,7 @@ class TestTrexTrafficGen(unittest.TestCase):
self.sut.client_started.value = 1
result = self.sut.run_traffic(mock_traffic_profile)
self.sut._traffic_process.terminate()
- self.assertEqual(True, result)
+ self.assertIsNotNone(result)
def test_scale(self):
with mock.patch("yardstick.ssh.SSH") as ssh:
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py
index ae4523087..36b8c2a22 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py
@@ -299,19 +299,13 @@ class TestVpeApproxVnf(unittest.TestCase):
vpe_approx_vnf = VpeApproxVnf(vnfd)
self.scenario_cfg['vnf_options'] = {'vpe': {'cfg': ""}}
vpe_approx_vnf._run_vpe = mock.Mock(return_value=0)
+ vpe_approx_vnf._resource_collect_start = mock.Mock(return_value=0)
vpe_approx_vnf.q_out.put("pipeline>")
- vpe_vnf.WAIT_TIME = 1
- self.assertEqual(0,
- vpe_approx_vnf.instantiate(self.scenario_cfg,
- self.context_cfg))
- vpe_approx_vnf.q_out.put("PANIC")
- vpe_approx_vnf._run_vpe = mock.Mock(return_value=0)
- vpe_vnf.WAIT_TIME = 1
- self.assertRaises(RuntimeError,
- vpe_approx_vnf.instantiate, self.scenario_cfg,
- self.context_cfg)
+ vpe_vnf.WAIT_TIME = 3
+ self.assertEqual(0, vpe_approx_vnf.instantiate(self.scenario_cfg,
+ self.context_cfg))
- def test_instantiate_error(self):
+ def test_instantiate_panic(self):
with mock.patch("yardstick.ssh.SSH") as ssh:
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
ssh_mock = mock.Mock(autospec=ssh.SSH)
diff --git a/tox.ini b/tox.ini
index 3dfb982bf..bfba8ec0c 100644
--- a/tox.ini
+++ b/tox.ini
@@ -5,6 +5,7 @@ envlist = py27,py3
[testenv]
usedevelop=True
+passenv = http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY
deps = -rrequirements.txt
commands = /bin/bash ./run_tests.sh
whitelist_externals = /bin/bash
diff --git a/yardstick/__init__.py b/yardstick/__init__.py
index 3ae915c18..fbbc101a9 100644
--- a/yardstick/__init__.py
+++ b/yardstick/__init__.py
@@ -13,12 +13,15 @@ import os
import sys
import yardstick.vTC.apexlake as apexlake
+from yardstick.common import constants
+from yardstick.common import utils as yardstick_utils
# Hack to be able to run apexlake unit tests
# without having to install apexlake.
sys.path.append(os.path.dirname(apexlake.__file__))
-LOG_FILE = '/tmp/yardstick.log'
+yardstick_utils.makedirs(constants.YARDSTICK_LOG_DIR)
+LOG_FILE = os.path.join(constants.YARDSTICK_LOG_DIR, 'yardstick.log')
LOG_FORMATTER = ('%(asctime)s '
'%(name)s %(filename)s:%(lineno)d '
'%(levelname)s %(message)s')
diff --git a/yardstick/benchmark/contexts/heat.py b/yardstick/benchmark/contexts/heat.py
index 0346efcf4..4e31bdca6 100644
--- a/yardstick/benchmark/contexts/heat.py
+++ b/yardstick/benchmark/contexts/heat.py
@@ -94,9 +94,10 @@ class HeatContext(Context):
rsa_key = paramiko.RSAKey.generate(bits=2048, progress_func=None)
rsa_key.write_private_key_file(self.key_filename)
- open(self.key_filename + ".pub", "w").write("%s %s\n" %
- (rsa_key.get_name(),
- rsa_key.get_base64()))
+ print("Writing %s ..." % self.key_filename)
+ with open(self.key_filename + ".pub", "w") as pubkey_file:
+ pubkey_file.write(
+ "%s %s\n" % (rsa_key.get_name(), rsa_key.get_base64()))
del rsa_key
@property
diff --git a/yardstick/benchmark/scenarios/networking/vnf_generic.py b/yardstick/benchmark/scenarios/networking/vnf_generic.py
index d7ba418c3..447c550ed 100644
--- a/yardstick/benchmark/scenarios/networking/vnf_generic.py
+++ b/yardstick/benchmark/scenarios/networking/vnf_generic.py
@@ -15,7 +15,6 @@
from __future__ import absolute_import
import logging
-from contextlib import contextmanager
import yaml
from yardstick.benchmark.scenarios import base
@@ -49,31 +48,32 @@ class IncorrectSetup(Exception):
pass
-@contextmanager
-def ssh_manager(node):
- """
- args -> network device mappings
- returns -> ssh connection ready to be used
- """
- conn = None
- try:
- ssh_port = node.get("ssh_port", ssh.DEFAULT_PORT)
- conn = ssh.SSH(user=node.get("user", ""),
- host=node.get("ip", ""),
- password=node.get("password", ""),
- port=ssh_port)
- conn.wait()
-
- except (SSHError) as error:
- LOG.info("connect failed to %s, due to %s", node.get("ip", ""), error)
- try:
- if conn:
- yield conn
- else:
- yield False
- finally:
- if conn:
- conn.close()
+class SshManager(object):
+ def __init__(self, node):
+ super(SshManager, self).__init__()
+ self.node = node
+ self.conn = None
+
+ def __enter__(self):
+ """
+ args -> network device mappings
+ returns -> ssh connection ready to be used
+ """
+ try:
+ ssh_port = self.node.get("ssh_port", ssh.DEFAULT_PORT)
+ self.conn = ssh.SSH(user=self.node["user"],
+ host=self.node["ip"],
+ password=self.node["password"],
+ port=ssh_port)
+ self.conn.wait()
+ except (SSHError) as error:
+ LOG.info("connect failed to %s, due to %s", self.node["ip"], error)
+ # self.conn defaults to None
+ return self.conn
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ if self.conn:
+ self.conn.close()
class NetworkServiceTestCase(base.Scenario):
@@ -208,7 +208,7 @@ class NetworkServiceTestCase(base.Scenario):
for node, node_dict in context_cfg["nodes"].items():
cmd = "PATH=$PATH:/sbin:/usr/sbin ip addr show"
- with ssh_manager(node_dict) as conn:
+ with SshManager(node_dict) as conn:
exit_status = conn.execute(cmd)[0]
if exit_status != 0:
raise IncorrectSetup("Node's %s lacks ip tool." % node)
@@ -237,10 +237,10 @@ class NetworkServiceTestCase(base.Scenario):
import_modules_from_package(
"yardstick.network_services.vnf_generic.vnf")
expected_name = vnf_model['id']
- impl = [c for c in itersubclasses(GenericVNF)
- if c.__name__ == expected_name]
+ impl = (c for c in itersubclasses(GenericVNF)
+ if c.__name__ == expected_name)
try:
- return next(iter(impl))
+ return next(impl)
except StopIteration:
raise IncorrectConfig("No implementation for %s", expected_name)
diff --git a/yardstick/common/constants.py b/yardstick/common/constants.py
index e6faf6828..e068c0b98 100644
--- a/yardstick/common/constants.py
+++ b/yardstick/common/constants.py
@@ -35,6 +35,8 @@ TESTCASE_DIR = join(YARDSTICK_ROOT_PATH, 'tests/opnfv/test_cases/')
YARDSTICK_REPOS_DIR = '/home/opnfv/repos/yardstick'
+YARDSTICK_LOG_DIR = '/tmp/yardstick/'
+
YARDSTICK_CONFIG_DIR = '/etc/yardstick/'
YARDSTICK_CONFIG_FILE = join(YARDSTICK_CONFIG_DIR, 'yardstick.conf')
diff --git a/yardstick/common/utils.py b/yardstick/common/utils.py
index 473bbf540..174ac0a5a 100644
--- a/yardstick/common/utils.py
+++ b/yardstick/common/utils.py
@@ -149,7 +149,8 @@ def get_neutron_client():
def write_json_to_file(path, data, mode='w'):
- write_file(path, jsonutils.dump_as_bytes(data), mode)
+ with open(path, mode) as f:
+ jsonutils.dump(data, f)
def write_file(path, data, mode='w'):
diff --git a/yardstick/network_services/utils.py b/yardstick/network_services/utils.py
index b75091326..cb71a6029 100644
--- a/yardstick/network_services/utils.py
+++ b/yardstick/network_services/utils.py
@@ -15,18 +15,21 @@
from __future__ import absolute_import
import logging
+import os
from oslo_config import cfg
from oslo_config.cfg import NoSuchOptError
from oslo_utils import encodeutils
+NSB_ROOT = "/opt/nsb_bin"
+
CONF = cfg.CONF
OPTS = [
cfg.StrOpt('bin_path',
- default='/opt/nsb_bin',
+ default=NSB_ROOT,
help='bin_path for VNFs location.'),
cfg.StrOpt('trex_path',
- default='/opt/nsb_bin/trex/scripts',
+ default=os.path.join(NSB_ROOT, 'trex/scripts'),
help='trex automation lib pathh.'),
]
CONF.register_opts(OPTS, group="nsb")
@@ -39,8 +42,7 @@ def get_nsb_option(option, default=None):
return CONF.nsb.__getitem__(option)
except NoSuchOptError:
logging.debug("Invalid key %s", option)
- else:
- return default
+ return default
def provision_tool(connection, tool_path):
diff --git a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py
index ee7498cb8..37c1a7345 100644
--- a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py
+++ b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py
@@ -130,7 +130,7 @@ class TrexTrafficGenRFC(GenericTrafficGen):
_tg_server.start()
while True:
LOGGING.info("Waiting for TG Server to start.. ")
- time.sleep(1)
+ time.sleep(WAIT_TIME)
status = \
self.connection.execute("lsof -i:%s" % TREX_SYNC_PORT)[0]
diff --git a/yardstick/network_services/vnf_generic/vnfdgen.py b/yardstick/network_services/vnf_generic/vnfdgen.py
index 9a02050a2..64554cdaf 100644
--- a/yardstick/network_services/vnf_generic/vnfdgen.py
+++ b/yardstick/network_services/vnf_generic/vnfdgen.py
@@ -16,7 +16,6 @@
from __future__ import absolute_import
import collections
import yaml
-import six
from yardstick.common.task_template import TaskTemplate
@@ -46,13 +45,14 @@ def dict_key_flatten(data):
"""
next_data = {}
+ # check for non-string iterables
if not any((isinstance(v, collections.Iterable) and not isinstance(v, str))
for v in data.values()):
return data
- for key, val in six.iteritems(data):
+ for key, val in data.items():
if isinstance(val, collections.Mapping):
- for n_k, n_v in six.iteritems(val):
+ for n_k, n_v in val.items():
next_data["%s.%s" % (key, n_k)] = n_v
elif isinstance(val, collections.Iterable) and not isinstance(val,
str):
diff --git a/yardstick/orchestrator/heat.py b/yardstick/orchestrator/heat.py
index c098de9e3..e39c4356c 100644
--- a/yardstick/orchestrator/heat.py
+++ b/yardstick/orchestrator/heat.py
@@ -179,7 +179,7 @@ class HeatTemplate(HeatObject):
with open(template_file) as stream:
print("Parsing external template:", template_file)
template_str = stream.read()
- self._template = template_format.parse(template_str)
+ self._template = template_format.parse(template_str)
self._parameters = heat_parameters
else:
self._init_template()
diff --git a/yardstick/vTC/apexlake/experimental_framework/heat_template_generation.py b/yardstick/vTC/apexlake/experimental_framework/heat_template_generation.py
index 1904af20b..bbf55853d 100644
--- a/yardstick/vTC/apexlake/experimental_framework/heat_template_generation.py
+++ b/yardstick/vTC/apexlake/experimental_framework/heat_template_generation.py
@@ -18,9 +18,11 @@ Generation of the heat templates from the base template
"""
from __future__ import absolute_import
-import json
import os
import shutil
+
+from oslo_serialization import jsonutils
+
from experimental_framework import common
from experimental_framework.constants import framework_parameters as fp
@@ -193,7 +195,7 @@ def generates_templates(base_heat_template, deployment_configuration):
new_template += "_" + str(counter) + template_file_extension
shutil.copy(base_template, new_template)
- metadata = dict()
+ metadata = {}
for var in heat_template_vars:
if var.get_variable_name():
common.replace_in_file(new_template, "#" +
@@ -203,7 +205,8 @@ def generates_templates(base_heat_template, deployment_configuration):
# Save the metadata on a JSON file
with open(new_template + ".json", 'w') as outfile:
- json.dump(metadata, outfile)
+ # sort keys to maintain persistent order for git
+ jsonutils.dump(metadata, outfile, sort_keys=True)
common.LOG.debug("Heat Templates and Metadata file " + str(counter) +
" created")
@@ -222,7 +225,7 @@ def get_all_heat_templates(template_dir, template_file_extension):
(type: str)
:return: type: list
"""
- template_files = list()
+ template_files = []
for dirname, dirnames, filenames in os.walk(template_dir):
for filename in filenames:
if template_file_extension in filename and \
diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json
index 3af9a1cc7..44a8aeb2e 100644
--- a/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json
+++ b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json
@@ -1 +1 @@
-{"vnic_type": "normal", "ram": "1024", "vcpus": "2"} \ No newline at end of file
+{"ram": "1024", "vcpus": "2", "vnic_type": "normal"} \ No newline at end of file
diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json
index 9f246891d..0a66448b7 100644
--- a/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json
+++ b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json
@@ -1 +1 @@
-{"vnic_type": "direct", "ram": "1024", "vcpus": "2"} \ No newline at end of file
+{"ram": "1024", "vcpus": "2", "vnic_type": "direct"} \ No newline at end of file