aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ansible/ubuntu_server_cloudimg_modify.yml2
-rw-r--r--ansible/ubuntu_server_cloudimg_modify_dpdk.yml2
-rw-r--r--api/resources/v1/env.py4
-rw-r--r--api/resources/v2/pods.py3
-rw-r--r--docs/testing/user/userguide/14-nsb_installation.rst3
-rw-r--r--docs/testing/user/userguide/opnfv_yardstick_tc056.rst149
-rw-r--r--docs/testing/user/userguide/opnfv_yardstick_tc057.rst165
-rw-r--r--docs/testing/user/userguide/opnfv_yardstick_tc058.rst148
-rw-r--r--etc/yardstick/yardstick.conf.sample1
-rwxr-xr-xnsb_setup.sh6
-rw-r--r--samples/vnf_samples/nsut/acl/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml8
-rw-r--r--samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml11
-rw-r--r--samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml22
-rw-r--r--samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml11
-rw-r--r--samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml11
-rw-r--r--samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml11
-rw-r--r--samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_worstcaserules_1flow_64B_packetsize.yaml42
-rw-r--r--samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_worstcaserules_1flow_64B_trex.yaml11
-rw-r--r--samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml21
-rw-r--r--samples/vnf_samples/nsut/acl/tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex.yaml (renamed from samples/vnf_samples/nsut/acl/tc_heat_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml)39
-rw-r--r--samples/vnf_samples/nsut/acl/tc_heat_trex_external_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml22
-rw-r--r--samples/vnf_samples/nsut/cgnapt/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml4
-rw-r--r--samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml12
-rw-r--r--samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_trex.yaml12
-rw-r--r--samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_corelated_traffic.yaml11
-rw-r--r--samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_scale_up.yaml12
-rw-r--r--samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_with_latency_ipv4_1flow_64B_trex.yaml12
-rw-r--r--samples/vnf_samples/nsut/cgnapt/tc_heat_rfc2544_ipv4_1flow_64B_trex.yaml84
-rw-r--r--samples/vnf_samples/nsut/udp_replay/tc_baremetal_rfc2544_ipv4_1flow_64B_trex.yaml11
-rw-r--r--samples/vnf_samples/nsut/vfw/acl_1rule.yaml4
-rw-r--r--samples/vnf_samples/nsut/vfw/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml6
-rw-r--r--samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml11
-rw-r--r--samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml11
-rw-r--r--samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml14
-rw-r--r--samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml11
-rw-r--r--samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml11
-rw-r--r--samples/vnf_samples/nsut/vfw/tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex.yaml85
-rw-r--r--samples/vnf_samples/nsut/vpe/tc_baremetal_http_ipv4_ixload.yaml11
-rw-r--r--samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml11
-rw-r--r--samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B.yaml11
-rw-r--r--samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml11
-rw-r--r--samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_corelated_traffic.yaml12
-rw-r--r--samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_IMIX.yaml12
-rw-r--r--samples/vnf_samples/traffic_profiles/imix_storage.yaml41
-rw-r--r--samples/vnf_samples/traffic_profiles/imix_video.yaml43
-rw-r--r--samples/vnf_samples/traffic_profiles/imix_voice.yaml41
-rw-r--r--samples/vnf_samples/traffic_profiles/ipv4_1flow_Packets.yaml18
-rw-r--r--samples/vnf_samples/traffic_profiles/ipv4_1flow_Packets_vpe.yaml20
-rw-r--r--samples/vnf_samples/traffic_profiles/ipv4_throughput.yaml52
-rw-r--r--samples/vnf_samples/traffic_profiles/ipv4_throughput_cgnapt.yaml52
-rw-r--r--samples/vnf_samples/traffic_profiles/ipv4_throughput_vpe.yaml64
-rw-r--r--samples/vnf_samples/traffic_profiles/ixia_ipv4_latency.yaml33
-rw-r--r--samples/vnf_samples/traffic_profiles/ixia_ipv4_latency_vpe.yaml39
-rwxr-xr-xtests/ci/apexlake-verify29
-rw-r--r--tests/opnfv/test_cases/opnfv_yardstick_tc056.yaml81
-rw-r--r--tests/opnfv/test_cases/opnfv_yardstick_tc057.yaml179
-rw-r--r--tests/opnfv/test_cases/opnfv_yardstick_tc058.yaml111
-rw-r--r--tests/unit/__init__.py76
-rw-r--r--tests/unit/benchmark/contexts/standalone/__init__.py0
-rw-r--r--tests/unit/benchmark/contexts/standalone/ovs_sample_password.yaml (renamed from tests/unit/benchmark/contexts/ovs_sample_password.yaml)0
-rw-r--r--tests/unit/benchmark/contexts/standalone/ovs_sample_ssh_key.yaml (renamed from tests/unit/benchmark/contexts/ovs_sample_ssh_key.yaml)0
-rw-r--r--tests/unit/benchmark/contexts/standalone/ovs_sample_write_to_file.txt (renamed from tests/unit/benchmark/contexts/ovs_sample_write_to_file.txt)0
-rw-r--r--tests/unit/benchmark/contexts/standalone/sriov_sample_password.yaml (renamed from tests/unit/benchmark/contexts/sriov_sample_password.yaml)0
-rw-r--r--tests/unit/benchmark/contexts/standalone/sriov_sample_ssh_key.yaml (renamed from tests/unit/benchmark/contexts/sriov_sample_ssh_key.yaml)0
-rw-r--r--tests/unit/benchmark/contexts/standalone/sriov_sample_write_to_file.txt (renamed from tests/unit/benchmark/contexts/sriov_sample_write_to_file.txt)0
-rw-r--r--tests/unit/benchmark/contexts/standalone/test_ovsdpdk.py (renamed from tests/unit/benchmark/contexts/test_ovsdpdk.py)10
-rw-r--r--tests/unit/benchmark/contexts/standalone/test_sriov.py (renamed from tests/unit/benchmark/contexts/test_sriov.py)14
-rw-r--r--tests/unit/benchmark/contexts/test_standalone.py17
-rw-r--r--tests/unit/benchmark/core/test_task.py3
-rw-r--r--tests/unit/benchmark/runner/test_search.py63
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_attach_volume.py33
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_floating_ip.py34
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_keypair.py35
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_network.py39
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_port.py36
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_router.py39
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_sec_group.py39
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_subnet.py41
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_delete_floating_ip.py36
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_delete_keypair.py36
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_delete_volume.py36
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_detach_volume.py35
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_get_numa_info.py6
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_pktgen.py10
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_vnf_generic.py102
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py2
-rw-r--r--tests/unit/common/test_utils.py35
-rw-r--r--tests/unit/common/test_yaml_loader.py32
-rw-r--r--tests/unit/network_services/helpers/test_samplevnf_helper.py2
-rw-r--r--tests/unit/network_services/libs/ixia_libs/test_IxNet.py13
-rw-r--r--tests/unit/network_services/nfvi/test_resource.py4
-rw-r--r--tests/unit/network_services/test_yang_model.py2
-rw-r--r--tests/unit/network_services/traffic_profile/test_fixed.py61
-rw-r--r--tests/unit/network_services/traffic_profile/test_http_ixload.py24
-rw-r--r--tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py60
-rw-r--r--tests/unit/network_services/traffic_profile/test_prox_acl.py62
-rw-r--r--tests/unit/network_services/traffic_profile/test_prox_binsearch.py62
-rw-r--r--tests/unit/network_services/traffic_profile/test_prox_profile.py62
-rw-r--r--tests/unit/network_services/traffic_profile/test_prox_ramp.py62
-rw-r--r--tests/unit/network_services/traffic_profile/test_rfc2544.py70
-rw-r--r--tests/unit/network_services/traffic_profile/test_traffic_profile.py86
-rw-r--r--tests/unit/network_services/vnf_generic/test_vnfdgen.py52
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_acl_vnf.py61
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_cgnapt_vnf.py62
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_iniparser.py63
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py61
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_prox_vnf.py64
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py64
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py62
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py62
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py63
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py63
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py64
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py62
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_udp_replay.py61
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_vfw_vnf.py62
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py65
-rw-r--r--yardstick/benchmark/contexts/node.py4
-rw-r--r--yardstick/benchmark/contexts/standalone/__init__.py (renamed from yardstick/benchmark/contexts/standalone.py)4
-rw-r--r--yardstick/benchmark/contexts/standalone/ovsdpdk.py (renamed from yardstick/benchmark/contexts/ovsdpdk.py)0
-rw-r--r--yardstick/benchmark/contexts/standalone/sriov.py (renamed from yardstick/benchmark/contexts/sriov.py)0
-rw-r--r--yardstick/benchmark/core/plugin.py4
-rw-r--r--yardstick/benchmark/core/task.py8
-rw-r--r--yardstick/benchmark/core/testcase.py4
-rw-r--r--yardstick/benchmark/scenarios/availability/attacker/baseattacker.py4
-rw-r--r--yardstick/benchmark/scenarios/availability/attacker_conf.yaml4
-rw-r--r--yardstick/benchmark/scenarios/availability/ha_tools/node/reboot_node.bash14
-rw-r--r--yardstick/benchmark/scenarios/availability/ha_tools/nova/get_server_floatingip.bash23
-rw-r--r--yardstick/benchmark/scenarios/availability/ha_tools/nova/list_servers.bash22
-rw-r--r--yardstick/benchmark/scenarios/availability/ha_tools/pacemaker/get_resource_status.bash14
-rw-r--r--yardstick/benchmark/scenarios/availability/ha_tools/pacemaker/get_resource_status_host.bash15
-rw-r--r--yardstick/benchmark/scenarios/availability/ha_tools/pacemaker/get_vip_host.bash15
-rw-r--r--yardstick/benchmark/scenarios/availability/monitor/basemonitor.py5
-rw-r--r--yardstick/benchmark/scenarios/availability/operation/baseoperation.py4
-rw-r--r--yardstick/benchmark/scenarios/availability/operation_conf.yaml11
-rw-r--r--yardstick/benchmark/scenarios/availability/result_checker/baseresultchecker.py4
-rw-r--r--yardstick/benchmark/scenarios/availability/result_checker_conf.yaml4
-rw-r--r--yardstick/benchmark/scenarios/availability/util.py2
-rw-r--r--yardstick/benchmark/scenarios/lib/attach_volume.py53
-rw-r--r--yardstick/benchmark/scenarios/lib/create_floating_ip.py60
-rw-r--r--yardstick/benchmark/scenarios/lib/create_keypair.py71
-rw-r--r--yardstick/benchmark/scenarios/lib/create_network.py64
-rw-r--r--yardstick/benchmark/scenarios/lib/create_port.py66
-rw-r--r--yardstick/benchmark/scenarios/lib/create_router.py66
-rw-r--r--yardstick/benchmark/scenarios/lib/create_sec_group.py65
-rw-r--r--yardstick/benchmark/scenarios/lib/create_server.py2
-rw-r--r--yardstick/benchmark/scenarios/lib/create_subnet.py66
-rw-r--r--yardstick/benchmark/scenarios/lib/delete_floating_ip.py54
-rw-r--r--yardstick/benchmark/scenarios/lib/delete_keypair.py56
-rw-r--r--yardstick/benchmark/scenarios/lib/delete_volume.py55
-rw-r--r--yardstick/benchmark/scenarios/lib/detach_volume.py54
-rw-r--r--yardstick/benchmark/scenarios/lib/get_numa_info.py4
-rw-r--r--yardstick/benchmark/scenarios/networking/pktgen.py13
-rw-r--r--yardstick/benchmark/scenarios/networking/vnf_generic.py136
-rw-r--r--yardstick/common/openstack_utils.py225
-rwxr-xr-xyardstick/common/task_template.py18
-rw-r--r--yardstick/common/template_format.py8
-rw-r--r--yardstick/common/utils.py30
-rw-r--r--yardstick/common/yaml_loader.py33
-rw-r--r--yardstick/network_services/helpers/cpu.py8
-rw-r--r--yardstick/network_services/helpers/samplevnf_helper.py117
-rw-r--r--yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py13
-rw-r--r--yardstick/network_services/nfvi/resource.py32
-rw-r--r--yardstick/network_services/traffic_profile/fixed.py8
-rw-r--r--yardstick/network_services/traffic_profile/http_ixload.py34
-rw-r--r--yardstick/network_services/traffic_profile/rfc2544.py6
-rw-r--r--yardstick/network_services/traffic_profile/traffic_profile.py86
-rw-r--r--yardstick/network_services/utils.py5
-rw-r--r--yardstick/network_services/vnf_generic/vnf/sample_vnf.py39
-rw-r--r--yardstick/network_services/vnf_generic/vnf/tg_ixload.py11
-rw-r--r--yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py9
-rw-r--r--yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py7
-rw-r--r--yardstick/network_services/vnf_generic/vnfdgen.py9
-rw-r--r--yardstick/network_services/yang_model.py215
-rw-r--r--yardstick/ssh.py10
175 files changed, 3790 insertions, 2427 deletions
diff --git a/ansible/ubuntu_server_cloudimg_modify.yml b/ansible/ubuntu_server_cloudimg_modify.yml
index 950655ec8..099d5803f 100644
--- a/ansible/ubuntu_server_cloudimg_modify.yml
+++ b/ansible/ubuntu_server_cloudimg_modify.yml
@@ -25,6 +25,8 @@
- reset_resolv_conf
- add_custom_repos
- modify_cloud_config
+ - role: set_package_installer_proxy
+ when: proxy_env is defined and proxy_env
- install_image_dependencies
- download_unixbench
- install_unixbench
diff --git a/ansible/ubuntu_server_cloudimg_modify_dpdk.yml b/ansible/ubuntu_server_cloudimg_modify_dpdk.yml
index 2a087ce91..6bbb383d8 100644
--- a/ansible/ubuntu_server_cloudimg_modify_dpdk.yml
+++ b/ansible/ubuntu_server_cloudimg_modify_dpdk.yml
@@ -25,6 +25,8 @@
- add_custom_repos
- enable_hugepages_on_boot
- modify_cloud_config
+ - role: set_package_installer_proxy
+ when: proxy_env is defined and proxy_env
- install_image_dependencies
- download_unixbench
- install_unixbench
diff --git a/api/resources/v1/env.py b/api/resources/v1/env.py
index 8367fa9eb..98b8ec7e4 100644
--- a/api/resources/v1/env.py
+++ b/api/resources/v1/env.py
@@ -31,7 +31,7 @@ from yardstick.common import utils
from yardstick.common.utils import result_handler
from yardstick.common import openstack_utils
from yardstick.common.httpClient import HttpClient
-
+from yardstick.common.yaml_loader import yaml_load
LOG = logging.getLogger(__name__)
LOG.setLevel(logging.DEBUG)
@@ -393,7 +393,7 @@ class V1Env(ApiResource):
return result_handler(consts.API_ERROR, 'file must be provided')
LOG.info('Checking file')
- data = yaml.safe_load(pod_file.read())
+ data = yaml_load(pod_file.read())
if not isinstance(data, collections.Mapping):
return result_handler(consts.API_ERROR, 'invalid yaml file')
diff --git a/api/resources/v2/pods.py b/api/resources/v2/pods.py
index f2316d353..d98238ca1 100644
--- a/api/resources/v2/pods.py
+++ b/api/resources/v2/pods.py
@@ -18,6 +18,7 @@ from api.database.v2.handlers import V2EnvironmentHandler
from yardstick.common import constants as consts
from yardstick.common.utils import result_handler
from yardstick.common.task_template import TaskTemplate
+from yardstick.common.yaml_loader import yaml_load
LOG = logging.getLogger(__name__)
LOG.setLevel(logging.DEBUG)
@@ -48,7 +49,7 @@ class V2Pods(ApiResource):
upload_file.save(consts.POD_FILE)
with open(consts.POD_FILE) as f:
- data = yaml.safe_load(TaskTemplate.render(f.read()))
+ data = yaml_load(TaskTemplate.render(f.read()))
LOG.debug('pod content is: %s', data)
LOG.info('create pod in database')
diff --git a/docs/testing/user/userguide/14-nsb_installation.rst b/docs/testing/user/userguide/14-nsb_installation.rst
index 3eb17bbca..7c5327964 100644
--- a/docs/testing/user/userguide/14-nsb_installation.rst
+++ b/docs/testing/user/userguide/14-nsb_installation.rst
@@ -103,7 +103,7 @@ Config yardstick conf
cp ./etc/yardstick/yardstick.conf.sample /etc/yardstick/yardstick.conf
vi /etc/yardstick/yardstick.conf
-Add trex_path and bin_path in 'nsb' section.
+Add trex_path, trex_client_lib and bin_path in 'nsb' section.
::
@@ -121,6 +121,7 @@ Add trex_path and bin_path in 'nsb' section.
[nsb]
trex_path=/opt/nsb_bin/trex/scripts
bin_path=/opt/nsb_bin
+ trex_client_lib=/opt/nsb_bin/trex_client/stl
Config pod.yaml describing Topology
diff --git a/docs/testing/user/userguide/opnfv_yardstick_tc056.rst b/docs/testing/user/userguide/opnfv_yardstick_tc056.rst
new file mode 100644
index 000000000..01aa99ac2
--- /dev/null
+++ b/docs/testing/user/userguide/opnfv_yardstick_tc056.rst
@@ -0,0 +1,149 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Yin Kanglin and others.
+.. 14_ykl@tongji.edu.cn
+
+*************************************
+Yardstick Test Case Description TC056
+*************************************
+
++-----------------------------------------------------------------------------+
+|OpenStack Controller Messaging Queue Service High Availability |
++==============+==============================================================+
+|test case id | OPNFV_YARDSTICK_TC056:OpenStack Controller Messaging Queue |
+| | Service High Availability |
++--------------+--------------------------------------------------------------+
+|test purpose | This test case will verify the high availability of the |
+| | messaging queue service(RabbitMQ) that supports OpenStack on |
+| | controller node. When messaging queue service(which is |
+| | active) of a specified controller node is killed, the test |
+| | case will check whether messaging queue services(which are |
+| | standby) on other controller nodes will be switched active, |
+| | and whether the cluster manager on attacked the controller |
+| | node will restart the stopped messaging queue. |
++--------------+--------------------------------------------------------------+
+|test method | This test case kills the processes of messaging queue |
+| | service on a selected controller node, then checks whether |
+| | the request of the related Openstack command is OK and the |
+| | killed processes are recovered. |
++--------------+--------------------------------------------------------------+
+|attackers | In this test case, an attacker called "kill-process" is |
+| | needed. This attacker includes three parameters: |
+| | 1) fault_type: which is used for finding the attacker's |
+| | scripts. It should be always set to "kill-process" in this |
+| | test case. |
+| | 2) process_name: which is the process name of the specified |
+| | OpenStack service. If there are multiple processes use the |
+| | same name on the host, all of them are killed by this |
+| | attacker. |
+| | In this case, this parameter should always set to "rabbitmq".|
+| | 3) host: which is the name of a control node being attacked. |
+| | |
+| | e.g. |
+| | -fault_type: "kill-process" |
+| | -process_name: "rabbitmq-server" |
+| | -host: node1 |
+| | |
++--------------+--------------------------------------------------------------+
+|monitors | In this test case, two kinds of monitor are needed: |
+| | 1. the "openstack-cmd" monitor constantly request a specific |
+| | Openstack command, which needs two parameters: |
+| | 1) monitor_type: which is used for finding the monitor class |
+| | and related scritps. It should be always set to |
+| | "openstack-cmd" for this monitor. |
+| | 2) command_name: which is the command name used for request. |
+| | |
+| | 2. the "process" monitor check whether a process is running |
+| | on a specific node, which needs three parameters: |
+| | 1) monitor_type: which used for finding the monitor class |
+| | and related scripts. It should be always set to "process" |
+| | for this monitor. |
+| | 2) process_name: which is the process name for monitor |
+| | 3) host: which is the name of the node runing the process |
+| | In this case, the command_name of monitor1 should be |
+| | services that will use the messaging queue(current nova, |
+| | neutron, cinder ,heat and ceilometer are using RabbitMQ) |
+| | , and the process-name of monitor2 should be "rabbitmq", |
+| | for example: |
+| | |
+| | e.g. |
+| | monitor1-1: |
+| | -monitor_type: "openstack-cmd" |
+| | -command_name: "openstack image list" |
+| | monitor1-2: |
+| | -monitor_type: "openstack-cmd" |
+| | -command_name: "openstack network list" |
+| | monitor1-3: |
+| | -monitor_type: "openstack-cmd" |
+| | -command_name: "openstack volume list" |
+| | monitor2: |
+| | -monitor_type: "process" |
+| | -process_name: "rabbitmq" |
+| | -host: node1 |
+| | |
++--------------+--------------------------------------------------------------+
+|metrics | In this test case, there are two metrics: |
+| | 1)service_outage_time: which indicates the maximum outage |
+| | time (seconds) of the specified Openstack command request. |
+| | 2)process_recover_time: which indicates the maximum time |
+| | (seconds) from the process being killed to recovered |
+| | |
++--------------+--------------------------------------------------------------+
+|test tool | Developed by the project. Please see folder: |
+| | "yardstick/benchmark/scenarios/availability/ha_tools" |
+| | |
++--------------+--------------------------------------------------------------+
+|references | ETSI NFV REL001 |
+| | |
++--------------+--------------------------------------------------------------+
+|configuration | This test case needs two configuration files: |
+| | 1) test case file:opnfv_yardstick_tc056.yaml |
+| | -Attackers: see above "attackers" description |
+| | -waiting_time: which is the time (seconds) from the process |
+| | being killed to stoping monitors the monitors |
+| | -Monitors: see above "monitors" description |
+| | -SLA: see above "metrics" description |
+| | |
+| | 2)POD file: pod.yaml |
+| | The POD configuration should record on pod.yaml first. |
+| | the "host" item in this test case will use the node name in |
+| | the pod.yaml. |
+| | |
++--------------+--------------------------------------------------------------+
+|test sequence | description and expected result |
+| | |
++--------------+--------------------------------------------------------------+
+|step 1 | start monitors: |
+| | each monitor will run with independently process |
+| | |
+| | Result: The monitor info will be collected. |
+| | |
++--------------+--------------------------------------------------------------+
+|step 2 | do attacker: connect the host through SSH, and then execute |
+| | the kill process script with param value specified by |
+| | "process_name" |
+| | |
+| | Result: Process will be killed. |
+| | |
++--------------+--------------------------------------------------------------+
+|step 3 | stop monitors after a period of time specified by |
+| | "waiting_time" |
+| | |
+| | Result: The monitor info will be aggregated. |
+| | |
++--------------+--------------------------------------------------------------+
+|step 4 | verify the SLA |
+| | |
+| | Result: The test case is passed or not. |
+| | |
++--------------+--------------------------------------------------------------+
+|post-action | It is the action when the test cases exist. It will check |
+| | the status of the specified process on the host, and restart |
+| | the process if it is not running for next test cases. |
+| | |
++--------------+--------------------------------------------------------------+
+|test verdict | Fails only if SLA is not passed, or if there is a test case |
+| | execution problem. |
+| | |
++--------------+--------------------------------------------------------------+
diff --git a/docs/testing/user/userguide/opnfv_yardstick_tc057.rst b/docs/testing/user/userguide/opnfv_yardstick_tc057.rst
new file mode 100644
index 000000000..2a4ce40c0
--- /dev/null
+++ b/docs/testing/user/userguide/opnfv_yardstick_tc057.rst
@@ -0,0 +1,165 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Yin Kanglin and others.
+.. 14_ykl@tongji.edu.cn
+
+*************************************
+Yardstick Test Case Description TC057
+*************************************
+
++-----------------------------------------------------------------------------+
+|OpenStack Controller Cluster Management Service High Availability |
++==============+==============================================================+
+|test case id | |
++--------------+--------------------------------------------------------------+
+|test purpose | This test case will verify the quorum configuration of the |
+| | cluster manager(pacemaker) on controller nodes. When a |
+| | controller node , which holds all active application |
+| | resources, failed to communicate with other cluster nodes |
+| | (via corosync), the test case will check whether the standby |
+| | application resources will take place of those active |
+| | application resources which should be regarded to be down in |
+| | the cluster manager. |
++--------------+--------------------------------------------------------------+
+|test method | This test case kills the processes of cluster messaging |
+| | service(corosync) on a selected controller node(the node |
+| | holds the active application resources), then checks whether |
+| | active application resources are switched to other |
+| | controller nodes and whether the Openstack commands are OK. |
++--------------+--------------------------------------------------------------+
+|attackers | In this test case, an attacker called "kill-process" is |
+| | needed. This attacker includes three parameters: |
+| | 1) fault_type: which is used for finding the attacker's |
+| | scripts. It should be always set to "kill-process" in this |
+| | test case. |
+| | 2) process_name: which is the process name of the load |
+| | balance service. If there are multiple processes use the |
+| | same name on the host, all of them are killed by this |
+| | attacker. |
+| | 3) host: which is the name of a control node being attacked. |
+| | |
+| | In this case, this process name should set to "corosync" , |
+| | for example |
+| | -fault_type: "kill-process" |
+| | -process_name: "corosync" |
+| | -host: node1 |
++--------------+--------------------------------------------------------------+
+|monitors | In this test case, a kind of monitor is needed: |
+| | 1. the "openstack-cmd" monitor constantly request a specific |
+| | Openstack command, which needs two parameters: |
+| | 1) monitor_type: which is used for finding the monitor class |
+| | and related scripts. It should be always set to |
+| | "openstack-cmd" for this monitor. |
+| | 2) command_name: which is the command name used for request |
+| | |
+| | In this case, the command_name of monitor1 should be services|
+| | that are managed by the cluster manager. (Since rabbitmq and |
+| | haproxy are managed by pacemaker, most Openstack Services |
+| | can be used to check high availability in this case) |
+| | |
+| | (e.g.) |
+| | monitor1: |
+| | -monitor_type: "openstack-cmd" |
+| | -command_name: "nova image-list" |
+| | monitor2: |
+| | -monitor_type: "openstack-cmd" |
+| | -command_name: "neutron router-list" |
+| | monitor3: |
+| | -monitor_type: "openstack-cmd" |
+| | -command_name: "heat stack-list" |
+| | monitor4: |
+| | -monitor_type: "openstack-cmd" |
+| | -command_name: "cinder list" |
+| | |
++--------------+--------------------------------------------------------------+
+|checkers | In this test case, a checker is needed, the checker will |
+| | the status of application resources in pacemaker and the |
+| | checker have three parameters: |
+| | 1) checker_type: which is used for finding the result |
+| | checker class and related scripts. In this case the checker |
+| | type will be "pacemaker-check-resource" |
+| | 2) resource_name: the application resource name |
+| | 3) resource_status: the expected status of the resource |
+| | 4) expectedValue: the expected value for the output of the |
+| | checker script, in the case the expected value will be the |
+| | identifier in the cluster manager |
+| | 3) condition: whether the expected value is in the output of |
+| | checker script or is totally same with the output. |
+| | (note: pcs is required to installed on controller node in |
+| | order to run this checker) |
+| | |
+| | (e.g.) |
+| | checker1: |
+| | -checker_type: "pacemaker-check-resource" |
+| | -resource_name: "p_rabbitmq-server" |
+| | -resource_status: "Stopped" |
+| | -expectedValue: "node-1" |
+| | -condition: "in" |
+| | checker2: |
+| | -checker_type: "pacemaker-check-resource" |
+| | -resource_name: "p_rabbitmq-server" |
+| | -resource_status: "Master" |
+| | -expectedValue: "node-2" |
+| | -condition: "in" |
++--------------+--------------------------------------------------------------+
+|metrics | In this test case, there are two metrics: |
+| | 1)service_outage_time: which indicates the maximum outage |
+| | time (seconds) of the specified Openstack command request. |
++--------------+--------------------------------------------------------------+
+|test tool | None. Self-developed. |
++--------------+--------------------------------------------------------------+
+|references | ETSI NFV REL001 |
++--------------+--------------------------------------------------------------+
+|configuration | This test case needs two configuration files: |
+| | 1) test case file: opnfv_yardstick_tc057.yaml |
+| | -Attackers: see above "attackers" description |
+| | -Monitors: see above "monitors" description |
+| | -Checkers: see above "checkers" description |
+| | -Steps: the test case execution step, see "test sequence" |
+| | description below |
+| | |
+| | 2)POD file: pod.yaml |
+| | The POD configuration should record on pod.yaml first. |
+| | the "host" item in this test case will use the node name in |
+| | the pod.yaml. |
++--------------+------+----------------------------------+--------------------+
+|test sequence | description and expected result |
+| | |
++--------------+--------------------------------------------------------------+
+|step 1 | start monitors: |
+| | each monitor will run with independently process |
+| | |
+| | Result: The monitor info will be collected. |
+| | |
++--------------+--------------------------------------------------------------+
+|step 2 | do attacker: connect the host through SSH, and then execute |
+| | the kill process script with param value specified by |
+| | "process_name" |
+| | |
+| | Result: Process will be killed. |
+| | |
++--------------+--------------------------------------------------------------+
+|step 3 | do checker: check whether the status of application |
+| | resources on different nodes are updated |
+| | |
++--------------+--------------------------------------------------------------+
+|step 4 | stop monitors after a period of time specified by |
+| | "waiting_time" |
+| | |
+| | Result: The monitor info will be aggregated. |
+| | |
++--------------+--------------------------------------------------------------+
+|step 5 | verify the SLA |
+| | |
+| | Result: The test case is passed or not. |
+| | |
++--------------+------+----------------------------------+--------------------+
+|post-action | It is the action when the test cases exist. It will check the|
+| | status of the cluster messaging process(corosync) on the |
+| | host, and restart the process if it is not running for next |
+| | test cases |
++--------------+------+----------------------------------+--------------------+
+|test verdict | Fails only if SLA is not passed, or if there is a test case |
+| | execution problem. |
++--------------+--------------------------------------------------------------+
diff --git a/docs/testing/user/userguide/opnfv_yardstick_tc058.rst b/docs/testing/user/userguide/opnfv_yardstick_tc058.rst
new file mode 100644
index 000000000..fb9a4c2d1
--- /dev/null
+++ b/docs/testing/user/userguide/opnfv_yardstick_tc058.rst
@@ -0,0 +1,148 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Yin Kanglin and others.
+.. 14_ykl@tongji.edu.cn
+
+*************************************
+Yardstick Test Case Description TC058
+*************************************
+
++-----------------------------------------------------------------------------+
+|OpenStack Controller Virtual Router Service High Availability |
++==============+==============================================================+
+|test case id | OPNFV_YARDSTICK_TC058:OpenStack Controller Virtual Router |
+| | Service High Availability |
++--------------+--------------------------------------------------------------+
+|test purpose | This test case will verify the high availability of virtual |
+| | routers(L3 agent) on controller node. When a virtual router |
+| | service on a specified controller node is shut down, this |
+| | test case will check whether the network of virtual machines |
+| | will be affected, and whether the attacked virtual router |
+| | service will be recovered. |
++--------------+--------------------------------------------------------------+
+|test method | This test case kills the processes of virtual router service |
+| | (l3-agent) on a selected controller node(the node holds the |
+| | active l3-agent), then checks whether the network routing |
+| | of virtual machines is OK and whether the killed service |
+| | will be recovered. |
++--------------+--------------------------------------------------------------+
+|attackers | In this test case, an attacker called "kill-process" is |
+| | needed. This attacker includes three parameters: |
+| | 1) fault_type: which is used for finding the attacker's |
+| | scripts. It should be always set to "kill-process" in this |
+| | test case. |
+| | 2) process_name: which is the process name of the load |
+| | balance service. If there are multiple processes use the |
+| | same name on the host, all of them are killed by this |
+| | attacker. |
+| | 3) host: which is the name of a control node being attacked. |
+| | |
+| | In this case, this process name should set to "l3agent" , |
+| | for example |
+| | -fault_type: "kill-process" |
+| | -process_name: "l3agent" |
+| | -host: node1 |
++--------------+--------------------------------------------------------------+
+|monitors | In this test case, two kinds of monitor are needed: |
+| | 1. the "ip_status" monitor that pings a specific ip to check |
+| | the connectivity of this ip, which needs two parameters: |
+| | 1) monitor_type: which is used for finding the monitor class |
+| | and related scripts. It should be always set to "ip_status" |
+| | for this monitor. |
+| | 2) ip_address: The ip to be pinged. In this case, ip_address |
+| | will be either an ip address of external network or an ip |
+| | address of a virtual machine. |
+| | 3) host: The node on which ping will be executed, in this |
+| | case the host will be a virtual machine. |
+| | |
+| | 2. the "process" monitor check whether a process is running |
+| | on a specific node, which needs three parameters: |
+| | 1) monitor_type: which used for finding the monitor class |
+| | and related scripts. It should be always set to "process" |
+| | for this monitor. |
+| | 2) process_name: which is the process name for monitor. In |
+| | this case, the process-name of monitor2 should be "l3agent" |
+| | 3) host: which is the name of the node running the process |
+| | |
+| | e.g. |
+| | monitor1-1: |
+| | -monitor_type: "ip_status" |
+| | -host: 172.16.0.11 |
+| | -ip_address: 172.16.1.11 |
+| | monitor1-2: |
+| | -monitor_type: "ip_status" |
+| | -host: 172.16.0.11 |
+| | -ip_address: 8.8.8.8 |
+| | monitor2: |
+| | -monitor_type: "process" |
+| | -process_name: "l3agent" |
+| | -host: node1 |
++--------------+--------------------------------------------------------------+
+|metrics | In this test case, there are two metrics: |
+| | 1)service_outage_time: which indicates the maximum outage |
+| | time (seconds) of the specified Openstack command request. |
+| | 2)process_recover_time: which indicates the maximum time |
+| | (seconds) from the process being killed to recovered |
++--------------+--------------------------------------------------------------+
+|test tool | None. Self-developed. |
++--------------+--------------------------------------------------------------+
+|references | ETSI NFV REL001 |
++--------------+--------------------------------------------------------------+
+|configuration | This test case needs two configuration files: |
+| | 1) test case file: opnfv_yardstick_tc058.yaml |
+| | -Attackers: see above "attackers" description |
+| | -Monitors: see above "monitors" description |
+| | -Steps: the test case execution step, see "test sequence" |
+| | description below |
+| | |
+| | 2)POD file: pod.yaml |
+| | The POD configuration should record on pod.yaml first. |
+| | the "host" item in this test case will use the node name in |
+| | the pod.yaml. |
++--------------+------+----------------------------------+--------------------+
+|test sequence | description and expected result |
+| | |
++--------------+--------------------------------------------------------------+
+|pre-test | The test case image needs to be installed into Glance |
+|conditions | with cachestat included in the image. |
+| | |
++--------------+--------------------------------------------------------------+
+|step 1 | Two host VMs are booted, these two hosts are in two different|
+| | networks, the networks are connected by a virtual router |
+| | |
++--------------+--------------------------------------------------------------+
+|step 1 | start monitors: |
+| | each monitor will run with independently process |
+| | |
+| | Result: The monitor info will be collected. |
+| | |
++--------------+--------------------------------------------------------------+
+|step 2 | do attacker: connect the host through SSH, and then execute |
+| | the kill process script with param value specified by |
+| | "process_name" |
+| | |
+| | Result: Process will be killed. |
+| | |
++--------------+--------------------------------------------------------------+
+|step 4 | stop monitors after a period of time specified by |
+| | "waiting_time" |
+| | |
+| | Result: The monitor info will be aggregated. |
+| | |
++--------------+--------------------------------------------------------------+
+|step 5 | verify the SLA |
+| | |
+| | Result: The test case is passed or not. |
+| | |
++--------------+------+----------------------------------+--------------------+
+|post-action | It is the action when the test cases exist. It will check |
+| | the status of the specified process on the host, and restart |
+| | the process if it is not running for next test cases. |
+| | Virtual machines and network created in the test case will |
+| | be destoryed. |
+| | |
++--------------+------+----------------------------------+--------------------+
+|test verdict | Fails only if SLA is not passed, or if there is a test case |
+| | execution problem. |
++--------------+--------------------------------------------------------------+
diff --git a/etc/yardstick/yardstick.conf.sample b/etc/yardstick/yardstick.conf.sample
index 227aded2d..5675cc3bd 100644
--- a/etc/yardstick/yardstick.conf.sample
+++ b/etc/yardstick/yardstick.conf.sample
@@ -31,3 +31,4 @@ password = root
[nsb]
trex_path=/opt/nsb_bin/trex/scripts
bin_path=/opt/nsb_bin
+trex_client_lib=/opt/nsb_bin/trex_client/stl
diff --git a/nsb_setup.sh b/nsb_setup.sh
index cc2542989..c11dc1038 100755
--- a/nsb_setup.sh
+++ b/nsb_setup.sh
@@ -83,7 +83,7 @@ install_trex()
{
TREX_DIR=$INSTALL_BIN_PATH/trex/scripts
if [ -d "$TREX_DIR" ]; then
- echo "Trex v2.20 already installed. Make sure it contains PYTHONPATH which is required to run TRex"
+ echo "Trex $TREX_VERSION already installed."
else
echo "Build TRex and installing Trex TG in $INSTALL_BIN_PATH/trex"
rm -rf ${TREX_DOWNLOAD##*/}
@@ -99,9 +99,7 @@ install_trex()
cd trex/scripts/ko/src/
make
make install
- # workaround trex module issue
- touch "$REPO_DIR/trex/scripts/automation/trex_control_plane/stl/__init__.py"
- cp "$REPO_DIR/trex/scripts/dpdk_nic_bind.py" "$INSTALL_BIN_PATH"
+ ln -s $TREX_DIR/automation/trex_control_plane $INSTALL_BIN_PATH/trex_client
popd
fi
echo "Done."
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml
index cf2dbfc33..85ed2450f 100644
--- a/samples/vnf_samples/nsut/acl/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml
+++ b/samples/vnf_samples/nsut/acl/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml
@@ -22,7 +22,13 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ framesize:
+ private: {64B: 100}
+ public: {64B: 100}
+ flow:
+ src_ip: [{'tg__1': 'xe0'}]
+ dst_ip: [{'tg__1': 'xe1'}]
+ count: 1
traffic_type: 4
vnf__1:
rules: acl_1rule.yaml
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
index 477bd8fbf..1b3377388 100644
--- a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
+++ b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
@@ -22,7 +22,13 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ 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
@@ -33,9 +39,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: "../../traffic_profiles/ipv4_1flow_Packets.yaml"
- imix: "../../traffic_profiles/imix_voice.yaml"
ixia_profile: ../../traffic_profiles/acl/acl_ipv4_profile_1flows.ixncfg
context:
type: Node
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml
index 695768194..9a16466bf 100644
--- a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml
+++ b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml
@@ -21,20 +21,24 @@ scenarios:
nodes:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
- tc_options:
+ 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_options:
- acl:
+ vnf__1:
rules: acl_1rule.yaml
- cfg: acl_config
+ vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
runner:
- type: Duration
- duration: 400
+ type: Iteration
+ iterations: 10
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
context:
type: Node
name: yardstick
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml
index 8d7fe3cb2..95fad73dc 100644
--- a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml
+++ b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml
@@ -22,7 +22,13 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ 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
@@ -33,9 +39,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
context:
type: Node
name: yardstick
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml
index 6b21ba576..397f352f1 100644
--- a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml
+++ b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml
@@ -23,7 +23,13 @@ scenarios:
vnf__1: vnf.yardstick
tg__2: trafficgen_2.yardstick
options:
- packetsize: 64
+ 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
@@ -35,9 +41,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
context:
type: Node
name: yardstick
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml
index df7a909a1..1fa0b5b3d 100644
--- a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml
+++ b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml
@@ -23,7 +23,13 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ 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
@@ -34,9 +40,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
{% endfor %}
context:
type: Node
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_worstcaserules_1flow_64B_packetsize.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_worstcaserules_1flow_64B_packetsize.yaml
deleted file mode 100644
index 96b3f687c..000000000
--- a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_worstcaserules_1flow_64B_packetsize.yaml
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (c) 2016 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/ipv4_throughput.yaml
- topology: acl-tg-topology.yaml
- nodes:
- tg__1: trafficgen_1.yardstick
- vnf__1: vnf.yardstick
- tc_options:
- rfc2544:
- allowed_drop_rate: 0.0001 - 0.0001
- vnf_options:
- acl:
- rules: acl_worstcaserules.yaml
- cfg: acl_config
- runner:
- type: Duration
- duration: 400
- interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
-context:
- type: Node
- name: yardstick
- nfvi_type: baremetal
- file: /etc/yardstick/nodes/pod.yaml
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_worstcaserules_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_worstcaserules_1flow_64B_trex.yaml
index 8d7fe3cb2..95fad73dc 100644
--- a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_worstcaserules_1flow_64B_trex.yaml
+++ b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_worstcaserules_1flow_64B_trex.yaml
@@ -22,7 +22,13 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ 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
@@ -33,9 +39,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
context:
type: Node
name: yardstick
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml
index ab688a23f..3ba22ff1c 100644
--- a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml
+++ b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml
@@ -21,23 +21,24 @@ scenarios:
nodes:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
- tc_options:
+ 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
- latency: true
- vnf_options:
- acl:
+ vnf__1:
rules: acl_1rule.yaml
- cfg: acl_config
- options:
- packetsize: 64
+ vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
runner:
type: Iteration
iterations: 28
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
context:
type: Node
name: yardstick
diff --git a/samples/vnf_samples/nsut/acl/tc_heat_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml b/samples/vnf_samples/nsut/acl/tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex.yaml
index 10eba4c3c..6fe826642 100644
--- a/samples/vnf_samples/nsut/acl/tc_heat_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml
+++ b/samples/vnf_samples/nsut/acl/tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex.yaml
@@ -22,7 +22,13 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ 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
@@ -33,23 +39,19 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
context:
# put node context first, so we don't HEAT deploy if node has errors
name: yardstick
- flavor: yardstick-dpdk-flavor
-# flavor:
-# name: yardstick-dpdk-flavor
-# vcpus: 10
-# ram: 20480
-# disk: 4
-# extra_specs:
-# hw:cpu_sockets: 1
-# hw:cpu_cores: 10
-# hw:cpu_threads: 1
-# # hw:mem_page_size: large
+ image: yardstick-samplevnfs
+ flavor:
+ name: yardstick-dpdk-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:
@@ -66,17 +68,18 @@ context:
networks:
mgmt:
cidr: '10.0.1.0/24'
- external_network: "yardstick-public"
xe0:
cidr: '10.0.2.0/24'
- vld_id: public
+ vld_id: public_1
+ gateway_ip: 'null'
# port_security_enabled: False
allowed_address_pairs:
- ip_address:
'0.0.0.0/0'
xe1:
cidr: '10.0.3.0/24'
- vld_id: private
+ vld_id: private_1
+ gateway_ip: 'null'
# port_security_enabled: False
allowed_address_pairs:
- ip_address:
diff --git a/samples/vnf_samples/nsut/acl/tc_heat_trex_external_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml b/samples/vnf_samples/nsut/acl/tc_heat_trex_external_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml
index 3344a1de1..5e8b03916 100644
--- a/samples/vnf_samples/nsut/acl/tc_heat_trex_external_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml
+++ b/samples/vnf_samples/nsut/acl/tc_heat_trex_external_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml
@@ -21,20 +21,24 @@ scenarios:
nodes:
tg__1: trafficgen_1.baremetal
vnf__1: vnf.yardstick
- tc_options:
+ 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_options:
- acl:
+ vnf__1:
rules: acl_1rule.yaml
- cfg: acl_config
+ vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
runner:
- type: Duration
- duration: 400
+ type: Iteration
+ iterations: 10
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
contexts:
# put node context first, so we don't HEAT deploy if node has errors
- name: baremetal
diff --git a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml
index 7e9a589ad..fc1c3e9b8 100644
--- a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml
+++ b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml
@@ -22,7 +22,9 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ framesize:
+ private: {64B: 100}
+ public: {64B: 100}
traffic_type: 4
rfc2544:
allowed_drop_rate: 0.0001 - 0.0001
diff --git a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml
index 5203e8d0a..6160ca090 100644
--- a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml
+++ b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml
@@ -22,7 +22,14 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ framesize:
+ private: {64B: 100}
+ public: {64B: 100}
+ flow:
+ src_ip: [{'tg__1': 'xe0'}]
+ dst_ip: [{'tg__1': 'xe1'}]
+ publicip: ["152.16.40.10"]
+ count: 1
traffic_type: 4
rfc2544:
allowed_drop_rate: 0.0001 - 0.0001
@@ -32,9 +39,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: "../../traffic_profiles/ipv4_1flow_Packets.yaml"
- imix: "../../traffic_profiles/imix_voice.yaml"
ixia_profile: ../../traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows.ixncfg
context:
type: Node
diff --git a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_trex.yaml
index feeacf5b0..15365b01a 100644
--- a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_trex.yaml
+++ b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_trex.yaml
@@ -22,7 +22,14 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ framesize:
+ private: {64B: 100}
+ public: {64B: 100}
+ flow:
+ src_ip: [{'tg__1': 'xe0'}]
+ dst_ip: [{'tg__1': 'xe1'}]
+ publicip: ["152.16.40.10"]
+ count: 1
traffic_type: 4
rfc2544:
allowed_drop_rate: 0.0001 - 0.0001
@@ -32,9 +39,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
context:
type: Node
name: yardstick
diff --git a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_corelated_traffic.yaml b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_corelated_traffic.yaml
index b5548d5ba..c1f5f2162 100644
--- a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_corelated_traffic.yaml
+++ b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_corelated_traffic.yaml
@@ -23,7 +23,13 @@ scenarios:
vnf__1: vnf.yardstick
tg__2: trafficgen_2.yardstick
options:
- packetsize: 64
+ framesize:
+ private: {64B: 100}
+ public: {64B: 100}
+ flow:
+ src_ip: [{'tg__1': 'xe0'}]
+ dst_ip: [{'tg__2': 'xe0'}
+ count: 1
traffic_type: 4
rfc2544:
allowed_drop_rate: 0.0001 - 0.0001
@@ -35,9 +41,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
context:
type: Node
name: yardstick
diff --git a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_scale_up.yaml b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_scale_up.yaml
index 7d746f0de..1bf7df875 100644
--- a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_scale_up.yaml
+++ b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_scale_up.yaml
@@ -23,7 +23,14 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ framesize:
+ private: {64B: 100}
+ public: {64B: 100}
+ flow:
+ src_ip: [{'tg__1': 'xe0'}]
+ dst_ip: [{'tg__1': 'xe1'}]
+ publicip: ["152.16.40.10"]
+ count: 1
traffic_type: 4
rfc2544:
allowed_drop_rate: 0.0001 - 0.0001
@@ -33,9 +40,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
{% endfor %}
context:
type: Node
diff --git a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_with_latency_ipv4_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_with_latency_ipv4_1flow_64B_trex.yaml
index 16d0d08cd..e8cac4af9 100644
--- a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_with_latency_ipv4_1flow_64B_trex.yaml
+++ b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_with_latency_ipv4_1flow_64B_trex.yaml
@@ -22,7 +22,14 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ framesize:
+ private: {64B: 100}
+ public: {64B: 100}
+ flow:
+ src_ip: [{'tg__1': 'xe0'}]
+ dst_ip: [{'tg__1': 'xe1'}]
+ publicip: ["152.16.40.10"]
+ count: 1
traffic_type: 4
rfc2544:
allowed_drop_rate: 0.0001 - 0.0001
@@ -33,9 +40,6 @@ scenarios:
type: Iteration
iterations: 28
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
context:
type: Node
name: yardstick
diff --git a/samples/vnf_samples/nsut/cgnapt/tc_heat_rfc2544_ipv4_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/cgnapt/tc_heat_rfc2544_ipv4_1flow_64B_trex.yaml
new file mode 100644
index 000000000..56d26be8b
--- /dev/null
+++ b/samples/vnf_samples/nsut/cgnapt/tc_heat_rfc2544_ipv4_1flow_64B_trex.yaml
@@ -0,0 +1,84 @@
+# Copyright (c) 2016-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/ipv4_throughput_cgnapt.yaml
+ topology: cgnapt-vnf-topology.yaml
+ nodes:
+ tg__1: trafficgen_1.yardstick
+ 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:
+ vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
+ runner:
+ type: Iteration
+ iterations: 10
+ interval: 35
+context:
+ # put node context first, so we don't HEAT deploy if node has errors
+ name: yardstick
+ image: yardstick-samplevnfs
+ flavor:
+ name: yardstick-dpdk-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"
+ trafficgen_1:
+ 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'
+# port_security_enabled: False
+ allowed_address_pairs:
+ - ip_address:
+ '0.0.0.0/0'
+ xe1:
+ cidr: '10.0.3.0/24'
+ vld_id: private_1
+ gateway_ip: 'null'
+# port_security_enabled: False
+ allowed_address_pairs:
+ - ip_address:
+ '0.0.0.0/0'
+
diff --git a/samples/vnf_samples/nsut/udp_replay/tc_baremetal_rfc2544_ipv4_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/udp_replay/tc_baremetal_rfc2544_ipv4_1flow_64B_trex.yaml
index a2b73b6ec..e80e1fb2d 100644
--- a/samples/vnf_samples/nsut/udp_replay/tc_baremetal_rfc2544_ipv4_1flow_64B_trex.yaml
+++ b/samples/vnf_samples/nsut/udp_replay/tc_baremetal_rfc2544_ipv4_1flow_64B_trex.yaml
@@ -22,7 +22,13 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ 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
@@ -30,9 +36,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
context:
type: Node
name: yardstick
diff --git a/samples/vnf_samples/nsut/vfw/acl_1rule.yaml b/samples/vnf_samples/nsut/vfw/acl_1rule.yaml
index b184a29e2..6753645ba 100644
--- a/samples/vnf_samples/nsut/vfw/acl_1rule.yaml
+++ b/samples/vnf_samples/nsut/vfw/acl_1rule.yaml
@@ -20,7 +20,7 @@ access-list1:
match-counter: 0
actions: drop,count
matches:
- destination-ipv4-network: 152.16.40.20/24
+ destination-ipv4-network: 152.16.0.0/24
destination-port-range:
lower-port: 0
upper-port: 65535
@@ -38,7 +38,7 @@ access-list1:
destination-port-range:
lower-port: 0
upper-port: 65535
- source-ipv4-network: 152.16.100.20/24
+ source-ipv4-network: 152.16.0.0/24
source-port-range:
lower-port: 0
upper-port: 65535
diff --git a/samples/vnf_samples/nsut/vfw/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml
index 134722681..e0bd82a30 100644
--- a/samples/vnf_samples/nsut/vfw/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml
+++ b/samples/vnf_samples/nsut/vfw/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml
@@ -22,7 +22,9 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ framesize:
+ private: {64B: 100}
+ public: {64B: 100}
traffic_type: 4
rfc2544:
allowed_drop_rate: 0.0001 - 0.0001
@@ -37,4 +39,4 @@ context:
type: Node
name: yardstick
nfvi_type: baremetal
- file: /etc/yardstick/nodes/pod.yaml
+ file: /etc/yardstick/nodes/pod_ixia.yaml
diff --git a/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
index 71a803d32..e07f5f9e9 100644
--- a/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
+++ b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
@@ -22,7 +22,13 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ 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
@@ -33,9 +39,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: "../../traffic_profiles/ipv4_1flow_Packets.yaml"
- imix: "../../traffic_profiles/imix_voice.yaml"
ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg
context:
type: Node
diff --git a/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml
index 3a17abac4..53d4d3d85 100644
--- a/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml
+++ b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml
@@ -22,7 +22,13 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ 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
@@ -33,9 +39,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
context:
type: Node
name: yardstick
diff --git a/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml
index a92a91e56..562575b3c 100644
--- a/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml
+++ b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml
@@ -21,8 +21,15 @@ scenarios:
nodes:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
+ tg__2: trafficgen_2.yardstick
options:
- packetsize: 64
+ framesize:
+ private: {64B: 100}
+ public: {64B: 100}
+ flow:
+ src_ip: [{'tg__1': 'xe0'}]
+ dst_ip: [{'tg__2': 'xe0'}]
+ count: 1
traffic_type: 4
rfc2544:
allowed_drop_rate: 0.0001 - 0.0001
@@ -34,11 +41,8 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
context:
type: Node
name: yardstick
nfvi_type: baremetal
- file: /etc/yardstick/nodes/pod.yaml
+ file: /etc/yardstick/nodes/pod_3node.yaml
diff --git a/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml
index ab2791c86..db8622122 100644
--- a/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml
+++ b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml
@@ -23,7 +23,13 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ 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
@@ -34,9 +40,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
{% endfor %}
context:
type: Node
diff --git a/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml
index 1e6330038..a1381454e 100644
--- a/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml
+++ b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml
@@ -22,7 +22,13 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ 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
@@ -34,9 +40,6 @@ scenarios:
type: Iteration
iterations: 28
interval: 35
- traffic_options:
- flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
- imix: ../../traffic_profiles/imix_voice.yaml
context:
type: Node
name: yardstick
diff --git a/samples/vnf_samples/nsut/vfw/tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/vfw/tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex.yaml
new file mode 100644
index 000000000..2e7ef3d3f
--- /dev/null
+++ b/samples/vnf_samples/nsut/vfw/tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex.yaml
@@ -0,0 +1,85 @@
+# Copyright (c) 2016-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/ipv4_throughput.yaml
+ topology: vfw-tg-topology.yaml
+ nodes:
+ tg__1: trafficgen_1.yardstick
+ 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
+context:
+ # put node context first, so we don't HEAT deploy if node has errors
+ name: yardstick
+ image: yardstick-samplevnfs
+ flavor:
+ name: yardstick-dpdk-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"
+ trafficgen_1:
+ 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'
+# port_security_enabled: False
+ allowed_address_pairs:
+ - ip_address:
+ '0.0.0.0/0'
+ xe1:
+ cidr: '10.0.3.0/24'
+ vld_id: private_1
+ gateway_ip: 'null'
+# port_security_enabled: False
+ allowed_address_pairs:
+ - ip_address:
+ '0.0.0.0/0'
+
diff --git a/samples/vnf_samples/nsut/vpe/tc_baremetal_http_ipv4_ixload.yaml b/samples/vnf_samples/nsut/vpe/tc_baremetal_http_ipv4_ixload.yaml
index 7b251395b..16996cb5c 100644
--- a/samples/vnf_samples/nsut/vpe/tc_baremetal_http_ipv4_ixload.yaml
+++ b/samples/vnf_samples/nsut/vpe/tc_baremetal_http_ipv4_ixload.yaml
@@ -22,16 +22,19 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ framesize:
+ private: {64B: 100}
+ public: {64B: 100}
+ flow:
+ src_ip: [{'tg__1': 'xe0'}]
+ dst_ip: [{'tg__1': 'xe1'}]
+ count: 1
traffic_type: 4
vnf__1:
cfg: vpe_config
runner:
type: Duration
duration: 4
- traffic_options:
- flow: "../../traffic_profiles/ipv4_1flow_Packets_vpe.yaml"
- imix: "../../traffic_profiles/imix_voice.yaml"
ixia_profile: ../../traffic_profiles/vpe/HTTP-vPE_IPv4_2Ports.rxf # Need vlan update
context:
type: Node
diff --git a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml
index 4652a62d5..02346d238 100644
--- a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml
+++ b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml
@@ -22,7 +22,13 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ framesize:
+ private: {1518B: 100}
+ public: {1518B: 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
@@ -32,9 +38,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: "../../traffic_profiles/ipv4_1flow_Packets_vpe.yaml"
- imix: "../../traffic_profiles/imix_storage.yaml"
context:
type: Node
name: yardstick
diff --git a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B.yaml b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B.yaml
index bd64a45f3..a50ba380f 100644
--- a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B.yaml
+++ b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B.yaml
@@ -22,7 +22,13 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ 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
@@ -32,9 +38,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: "../../traffic_profiles/ipv4_1flow_Packets_vpe.yaml"
- imix: "../../traffic_profiles/imix_voice.yaml"
context:
type: Node
name: yardstick
diff --git a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml
index 0257886fb..e0a749301 100644
--- a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml
+++ b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml
@@ -22,7 +22,13 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ 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
@@ -32,9 +38,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: "../../traffic_profiles/ipv4_1flow_Packets_vpe.yaml"
- imix: "../../traffic_profiles/imix_voice.yaml"
ixia_profile: ../../traffic_profiles/vpe/vpe_ipv4_profile_1flows.ixncfg
context:
type: Node
diff --git a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_corelated_traffic.yaml b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_corelated_traffic.yaml
index 2c48d0ef9..57c512888 100644
--- a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_corelated_traffic.yaml
+++ b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_corelated_traffic.yaml
@@ -21,8 +21,15 @@ scenarios:
nodes:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
+ tg__2: trafficgen_2.yardstick
options:
- packetsize: 64
+ framesize:
+ private: {64B: 100}
+ public: {64B: 100}
+ flow:
+ src_ip: [{'tg__1': 'xe0'}]
+ dst_ip: [{'tg__2': 'xe0'}]
+ count: 1
traffic_type: 4
rfc2544:
allowed_drop_rate: 0.0001 - 0.0001
@@ -33,9 +40,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: "../../traffic_profiles/ipv4_1flow_Packets_vpe.yaml"
- imix: "../../traffic_profiles/imix_voice.yaml"
context:
type: Node
name: yardstick
diff --git a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_IMIX.yaml b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_IMIX.yaml
index 674fa95f4..6b78574eb 100644
--- a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_IMIX.yaml
+++ b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_IMIX.yaml
@@ -22,7 +22,14 @@ scenarios:
tg__1: trafficgen_1.yardstick
vnf__1: vnf.yardstick
options:
- packetsize: 64
+ framesize:
+ private: {64B: 5, 128B: 11, 256B: 16, 373B: 10, 570B: 35, 1400B: 10, 1500B: 13}
+ public: {64B: 5, 128B: 3, 256B: 4, 373B: 6, 570B: 8, 1400B: 36, 1500B: 38}
+
+ flow:
+ src_ip: [{'tg__1': 'xe0'}]
+ dst_ip: [{'tg__1': 'xe1'}]
+ count: 1
traffic_type: 4
rfc2544:
allowed_drop_rate: 0.0001 - 0.0001
@@ -32,9 +39,6 @@ scenarios:
type: Iteration
iterations: 10
interval: 35
- traffic_options:
- flow: "../../traffic_profiles/ipv4_1flow_Packets_vpe.yaml"
- imix: "../../traffic_profiles/imix_video.yaml"
context:
type: Node
name: yardstick
diff --git a/samples/vnf_samples/traffic_profiles/imix_storage.yaml b/samples/vnf_samples/traffic_profiles/imix_storage.yaml
deleted file mode 100644
index 8fd10ecbe..000000000
--- a/samples/vnf_samples/traffic_profiles/imix_storage.yaml
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (c) 2016-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.
-
-#imix definition for storage traffic
-#
-# it is a typical case for testing the synthetic VNF performance.
-#
-#percentage of the packets can be less than 100%
-#the traffic in downstream and upstream direction could be different
-
-schema: "nsb:imix:0.1"
-
-imix:
- private:
- imix_small: 0 #ipv4 case - 72B should be 0 ipv6 case - 84B
- imix_128B: 0
- imix_256B: 0
- imix_373B: 0
- imix_570B: 0
- imix_1400B: 0
- imix_1500B: 100
-
- public:
- imix_small: 0 #ipv4 case - 72B ipv6 - 84B
- imix_128B: 0
- imix_256B: 0
- imix_373B: 0
- imix_570B: 0
- imix_1400B: 0
- imix_1500B: 100
diff --git a/samples/vnf_samples/traffic_profiles/imix_video.yaml b/samples/vnf_samples/traffic_profiles/imix_video.yaml
deleted file mode 100644
index 36324bfa4..000000000
--- a/samples/vnf_samples/traffic_profiles/imix_video.yaml
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (c) 2016-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.
-
-#imix definition for video traffic
-#
-# this is a real traffic profile when video/data traffic only is present
-#
-#percentage of the packets can be less than 100%
-#the traffic in downstream and upstream direction could be different
-#
-#small means ipv4 case - 72B should be 0, ipv6 case - 84B
-
-schema: "nsb:imix:0.1"
-
-imix:
- private:
- imix_small: 5 #ipv4 case - 72B should be 0 ipv6 case - 84B
- imix_128B: 11
- imix_256B: 16
- imix_373B: 10
- imix_570B: 35
- imix_1400B: 10
- imix_1500B: 13
-
- public:
- imix_small: 5 #ipv4 case - 72B ipv6 - 84B
- imix_128B: 3
- imix_256B: 4
- imix_373B: 6
- imix_570B: 8
- imix_1400B: 36
- imix_1500B: 38
diff --git a/samples/vnf_samples/traffic_profiles/imix_voice.yaml b/samples/vnf_samples/traffic_profiles/imix_voice.yaml
deleted file mode 100644
index b8f8e5358..000000000
--- a/samples/vnf_samples/traffic_profiles/imix_voice.yaml
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (c) 2016-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.
-
-#imix definition for voice traffic
-#
-# it is a typical case for testing the synthetic VNF performance.
-#
-#percentage of the packets can be less than 100%
-#the traffic in downstream and upstream direction could be different
-
-schema: "nsb:imix:0.1"
-
-imix:
- private:
- imix_small: 100 #ipv4 case - 72B should be 0 ipv6 case - 84B
- imix_128B: 0
- imix_256B: 0
- imix_373B: 0
- imix_570B: 0
- imix_1400B: 0
- imix_1500B: 0
-
- public:
- imix_small: 100 #ipv4 case - 72B ipv6 - 84B
- imix_128B: 0
- imix_256B: 0
- imix_373B: 0
- imix_570B: 0
- imix_1400B: 0
- imix_1500B: 0
diff --git a/samples/vnf_samples/traffic_profiles/ipv4_1flow_Packets.yaml b/samples/vnf_samples/traffic_profiles/ipv4_1flow_Packets.yaml
deleted file mode 100644
index e713ea858..000000000
--- a/samples/vnf_samples/traffic_profiles/ipv4_1flow_Packets.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2016-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.
-
-flow:
- srcip4_range: '152.16.100.20'
- dstip4_range: '152.40.40.20'
- count: 1
diff --git a/samples/vnf_samples/traffic_profiles/ipv4_1flow_Packets_vpe.yaml b/samples/vnf_samples/traffic_profiles/ipv4_1flow_Packets_vpe.yaml
deleted file mode 100644
index 8bb913ebf..000000000
--- a/samples/vnf_samples/traffic_profiles/ipv4_1flow_Packets_vpe.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2016-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.
-
-flow:
- srcip4_range_1: '152.16.0.20'
- dstip4_range_1: '152.40.0.20'
- srcip4_range_2: '172.16.0.20'
- dstip4_range_2: '172.40.0.20'
- count: 1
diff --git a/samples/vnf_samples/traffic_profiles/ipv4_throughput.yaml b/samples/vnf_samples/traffic_profiles/ipv4_throughput.yaml
index 2854826e6..98624b108 100644
--- a/samples/vnf_samples/traffic_profiles/ipv4_throughput.yaml
+++ b/samples/vnf_samples/traffic_profiles/ipv4_throughput.yaml
@@ -49,41 +49,49 @@ private_1:
ipv4:
outer_l2:
framesize:
- 64B: "{{ get(imix, 'imix.private.imix_small', '0') }}"
- 128B: "{{ get(imix, 'imix.private.imix_128B', '0') }}"
- 256B: "{{ get(imix, 'imix.private.imix_256B', '0') }}"
- 373b: "{{ get(imix, 'imix.private.imix_373B', '0') }}"
- 570B: "{{get(imix, 'imix.private.imix_570B', '0') }}"
- 1400B: "{{get(imix, 'imix.private.imix_1400B', '0') }}"
- 1518B: "{{get(imix, 'imix.private.imix_1500B', '0') }}"
+ 64B: "{{ get(imix, 'imix.private.64B', '0') }}"
+ 128B: "{{ get(imix, 'imix.private.128B', '0') }}"
+ 256B: "{{ get(imix, 'imix.private.256B', '0') }}"
+ 373b: "{{ get(imix, 'imix.private.373B', '0') }}"
+ 512B: "{{ get(imix, 'imix.private.512B', '0') }}"
+ 570B: "{{get(imix, 'imix.private.570B', '0') }}"
+ 1400B: "{{get(imix, 'imix.private.1400B', '0') }}"
+ 1500B: "{{get(imix, 'imix.private.1500B', '0') }}"
+ 1518B: "{{get(imix, 'imix.private.1518B', '0') }}"
outer_l3v4:
proto: "udp"
- srcip4: "{{get(flow, 'flow.srcip4_range', '1.1.1.1-1.1.255.255') }}"
- dstip4: "{{get(flow, 'flow.dstip4_range', '90.90.1.1-90.90.255.255') }}"
+ srcip4: "{{get(flow, 'flow.src_ip0', '1.1.1.1-1.1.255.255') }}"
+ dstip4: "{{get(flow, 'flow.dst_ip0', '90.90.1.1-90.90.255.255') }}"
+ count: "{{get(flow, 'flow.count', '1') }}"
ttl: 32
dscp: 0
outer_l4:
- srcport: "{{get(flow, 'flow.srcport_range', '1234') }}"
- dstport: "{{get(flow, 'flow.dstport_range', '2001') }}"
+ srcport: "{{get(flow, 'flow.src_port0', '1234-4321') }}"
+ dstport: "{{get(flow, 'flow.dst_port0', '2001-4001') }}"
+ count: "{{get(flow, 'flow.count', '1') }}"
public_1:
ipv4:
outer_l2:
framesize:
- 64B: "{{ get(imix, 'imix.private.imix_small', '0') }}"
- 128B: "{{ get(imix, 'imix.private.imix_128B', '0') }}"
- 256B: "{{ get(imix, 'imix.private.imix_256B', '0') }}"
- 373b: "{{ get(imix, 'imix.private.imix_373B', '0') }}"
- 570B: "{{get(imix, 'imix.private.imix_570B', '0') }}"
- 1400B: "{{get(imix, 'imix.private.imix_1400B', '0') }}"
- 1518B: "{{get(imix, 'imix.private.imix_1500B', '0') }}"
+ 64B: "{{ get(imix, 'imix.public.64B', '0') }}"
+ 128B: "{{ get(imix, 'imix.public.128B', '0') }}"
+ 256B: "{{ get(imix, 'imix.public.256B', '0') }}"
+ 373b: "{{ get(imix, 'imix.public.373B', '0') }}"
+ 512B: "{{ get(imix, 'imix.public.512B', '0') }}"
+ 570B: "{{get(imix, 'imix.public.570B', '0') }}"
+ 1400B: "{{get(imix, 'imix.public.1400B', '0') }}"
+ 1500B: "{{get(imix, 'imix.public.1500B', '0') }}"
+ 1518B: "{{get(imix, 'imix.public.1518B', '0') }}"
outer_l3v4:
proto: "udp"
- srcip4: "{{get(flow, 'flow.dstip4_range', '90.90.1.1-90.90.255.255') }}"
- dstip4: "{{get(flow, 'flow.srcip4_range', '1.1.1.1-1.1.255.255') }}"
+ srcip4: "{{get(flow, 'flow.dst_ip0', '90.90.1.1-90.90.255.255') }}"
+ dstip4: "{{get(flow, 'flow.src_ip0', '1.1.1.1-1.1.255.255') }}"
+ count: "{{get(flow, 'flow.count', '1') }}"
ttl: 32
dscp: 0
outer_l4:
- srcport: "{{get(flow, 'flow.dstport_range', '1234') }}"
- dstport: "{{get(flow, 'flow.srcport_range', '2001') }}"
+ srcport: "{{get(flow, 'flow.dst_port0', '1234-4321') }}"
+ dstport: "{{get(flow, 'flow.src_port0', '2001-4001') }}"
+ count: "{{get(flow, 'flow.count', '1') }}"
diff --git a/samples/vnf_samples/traffic_profiles/ipv4_throughput_cgnapt.yaml b/samples/vnf_samples/traffic_profiles/ipv4_throughput_cgnapt.yaml
index 2ea8d3c44..7283b6377 100644
--- a/samples/vnf_samples/traffic_profiles/ipv4_throughput_cgnapt.yaml
+++ b/samples/vnf_samples/traffic_profiles/ipv4_throughput_cgnapt.yaml
@@ -49,41 +49,49 @@ private_1:
ipv4:
outer_l2:
framesize:
- 64B: "{{ get(imix, 'imix.private.imix_small', '0') }}"
- 128B: "{{ get(imix, 'imix.private.imix_128B', '0') }}"
- 256B: "{{ get(imix, 'imix.private.imix_256B', '0') }}"
- 373b: "{{ get(imix, 'imix.private.imix_373B', '0') }}"
- 570B: "{{get(imix, 'imix.private.imix_570B', '0') }}"
- 1400B: "{{get(imix, 'imix.private.imix_1400B', '0') }}"
- 1518B: "{{get(imix, 'imix.private.imix_1500B', '0') }}"
+ 64B: "{{ get(imix, 'imix.private.64B', '0') }}"
+ 128B: "{{ get(imix, 'imix.private.128B', '0') }}"
+ 256B: "{{ get(imix, 'imix.private.256B', '0') }}"
+ 373b: "{{ get(imix, 'imix.private.373B', '0') }}"
+ 512B: "{{ get(imix, 'imix.private.512B', '0') }}"
+ 570B: "{{get(imix, 'imix.private.570B', '0') }}"
+ 1400B: "{{get(imix, 'imix.private.1400B', '0') }}"
+ 1500B: "{{get(imix, 'imix.private.1500B', '0') }}"
+ 1518B: "{{get(imix, 'imix.private.1518B', '0') }}"
outer_l3v4:
proto: "udp"
- srcip4: "{{get(flow, 'flow.srcip4_range', '10.0.2.1-10.0.2.255') }}"
- dstip4: "{{get(flow, 'flow.dstip4_range', '10.0.3.1-10.0.3.255') }}"
+ srcip4: "{{get(flow, 'flow.src_ip0', '10.0.2.1-10.0.2.255') }}"
+ dstip4: "{{get(flow, 'flow.dst_ip0', '10.0.3.1-10.0.3.255') }}"
+ count: "{{get(flow, 'flow.count', '1') }}"
ttl: 32
dscp: 0
outer_l4:
- srcport: "{{get(flow, 'flow.srcport_range', '1234') }}"
- dstport: "{{get(flow, 'flow.dstport_range', '2001') }}"
+ srcport: "{{get(flow, 'flow.src_port0', '1234-4321') }}"
+ dstport: "{{get(flow, 'flow.dst_port0', '2001-4001') }}"
+ count: "{{get(flow, 'flow.count', '1') }}"
public_1:
ipv4:
outer_l2:
framesize:
- 64B: "{{ get(imix, 'imix.private.imix_small', '0') }}"
- 128B: "{{ get(imix, 'imix.private.imix_128B', '0') }}"
- 256B: "{{ get(imix, 'imix.private.imix_256B', '0') }}"
- 373b: "{{ get(imix, 'imix.private.imix_373B', '0') }}"
- 570B: "{{get(imix, 'imix.private.imix_570B', '0') }}"
- 1400B: "{{get(imix, 'imix.private.imix_1400B', '0') }}"
- 1518B: "{{get(imix, 'imix.private.imix_1500B', '0') }}"
+ 64B: "{{ get(imix, 'imix.public.64B', '0') }}"
+ 128B: "{{ get(imix, 'imix.public.128B', '0') }}"
+ 256B: "{{ get(imix, 'imix.public.256B', '0') }}"
+ 373b: "{{ get(imix, 'imix.public.373B', '0') }}"
+ 512B: "{{ get(imix, 'imix.public.512B', '0') }}"
+ 570B: "{{get(imix, 'imix.public.570B', '0') }}"
+ 1400B: "{{get(imix, 'imix.public.1400B', '0') }}"
+ 1500B: "{{get(imix, 'imix.public.1500B', '0') }}"
+ 1518B: "{{get(imix, 'imix.public.1518B', '0') }}"
outer_l3v4:
proto: "udp"
- srcip4: "{{get(flow, 'flow.dstip4_range', '10.0.3.1-10.0.3.255') }}"
- dstip4: "{{get(flow, 'flow.srcip4_range', '10.0.2.1-10.0.2.255') }}"
+ srcip4: "{{get(flow, 'flow.dst_ip0', '10.0.3.1-10.0.3.255') }}"
+ dstip4: "{{get(flow, 'flow.public_ip0', '10.0.2.1-10.0.2.255') }}"
+ count: "{{get(flow, 'flow.count', '1') }}"
ttl: 32
dscp: 0
outer_l4:
- srcport: "{{get(flow, 'flow.dstport_range', '1234') }}"
- dstport: "{{get(flow, 'flow.srcport_range', '2001') }}"
+ srcport: "{{get(flow, 'flow.dst_port0', '1234-4321') }}"
+ dstport: "{{get(flow, 'flow.src_port0', '2001-4001') }}"
+ count: "{{get(flow, 'flow.count', '1') }}"
diff --git a/samples/vnf_samples/traffic_profiles/ipv4_throughput_vpe.yaml b/samples/vnf_samples/traffic_profiles/ipv4_throughput_vpe.yaml
index e935bdbd0..233457eba 100644
--- a/samples/vnf_samples/traffic_profiles/ipv4_throughput_vpe.yaml
+++ b/samples/vnf_samples/traffic_profiles/ipv4_throughput_vpe.yaml
@@ -49,13 +49,15 @@ private_1:
ipv4:
outer_l2:
framesize:
- 64B: "{{ get(imix, 'imix.private.imix_small', '0') }}"
- 128B: "{{ get(imix, 'imix.private.imix_128B', '0') }}"
- 256B: "{{ get(imix, 'imix.private.imix_256B', '0') }}"
- 373b: "{{ get(imix, 'imix.private.imix_373B', '0') }}"
- 570B: "{{get(imix, 'imix.private.imix_570B', '0') }}"
- 1400B: "{{get(imix, 'imix.private.imix_1400B', '0') }}"
- 1518B: "{{get(imix, 'imix.private.imix_1500B', '0') }}"
+ 64B: "{{ get(imix, 'imix.private.64B', '0') }}"
+ 128B: "{{ get(imix, 'imix.private.128B', '0') }}"
+ 256B: "{{ get(imix, 'imix.private.256B', '0') }}"
+ 373b: "{{ get(imix, 'imix.private.373B', '0') }}"
+ 512B: "{{ get(imix, 'imix.private.512B', '0') }}"
+ 570B: "{{get(imix, 'imix.private.570B', '0') }}"
+ 1400B: "{{get(imix, 'imix.private.1400B', '0') }}"
+ 1500B: "{{get(imix, 'imix.private.1500B', '0') }}"
+ 1518B: "{{get(imix, 'imix.private.1518B', '0') }}"
QinQ:
S-VLAN:
@@ -69,14 +71,14 @@ private_1:
outer_l3v4:
proto: "tcp"
- srcip4: "{{get(flow, 'flow.srcip4_range_1', '192.168.0.0-192.168.255.255') }}"
- dstip4: "{{get(flow, 'flow.dstip4_range_1', '192.16.0.0-192.16.0.31') }}"
+ srcip4: "{{get(flow, 'flow.src_ip0', '192.168.0.0-192.168.255.255') }}"
+ dstip4: "{{get(flow, 'flow.dst_ip0', '192.16.0.0-192.16.0.31') }}"
ttl: 32
dscp: 32
outer_l4:
- srcport: "{{get(flow, 'flow.srcport_range', '0') }}"
- dstport: "{{get(flow, 'flow.dstport_range', '0') }}"
+ srcport: "{{get(flow, 'flow.src_port0', '0') }}"
+ dstport: "{{get(flow, 'flow.dst_port0', '0') }}"
public_1:
ipv4:
outer_l2:
@@ -91,25 +93,27 @@ public_1:
outer_l3v4:
proto: "tcp"
- srcip4: "{{get(flow, 'flow.dstip4_range_1', '192.16.0.0-192.16.0.31') }}"
- dstip4: "{{get(flow, 'flow.srcip4_range_1', '192.168.0.0-192.168.255.255') }}"
+ srcip4: "{{get(flow, 'flow.dst_ip0', '192.16.0.0-192.16.0.31') }}"
+ dstip4: "{{get(flow, 'flow.src_ip0', '192.168.0.0-192.168.255.255') }}"
ttl: 32
dscp: 32
outer_l4:
- srcport: "{{get(flow, 'flow.dstport_range', '0') }}"
- dstport: "{{get(flow, 'flow.srcport_range', '0') }}"
+ srcport: "{{get(flow, 'flow.dst_port0', '0') }}"
+ dstport: "{{get(flow, 'flow.src_port0', '0') }}"
private_2:
ipv4:
outer_l2:
framesize:
- 64B: "{{ get(imix, 'imix.private.imix_small', '0') }}"
- 128B: "{{ get(imix, 'imix.private.imix_128B', '0') }}"
- 256B: "{{ get(imix, 'imix.private.imix_256B', '0') }}"
- 373b: "{{ get(imix, 'imix.private.imix_373B', '0') }}"
- 570B: "{{get(imix, 'imix.private.imix_570B', '0') }}"
- 1400B: "{{get(imix, 'imix.private.imix_1400B', '0') }}"
- 1518B: "{{get(imix, 'imix.private.imix_1500B', '0') }}"
+ 64B: "{{ get(imix, 'imix.public.64B', '0') }}"
+ 128B: "{{ get(imix, 'imix.public.128B', '0') }}"
+ 256B: "{{ get(imix, 'imix.public.256B', '0') }}"
+ 373b: "{{ get(imix, 'imix.public.373B', '0') }}"
+ 512B: "{{ get(imix, 'imix.public.512B', '0') }}"
+ 570B: "{{get(imix, 'imix.public.570B', '0') }}"
+ 1400B: "{{get(imix, 'imix.public.1400B', '0') }}"
+ 1500B: "{{get(imix, 'imix.public.1500B', '0') }}"
+ 1518B: "{{get(imix, 'imix.public.1518B', '0') }}"
QinQ:
S-VLAN:
@@ -123,14 +127,14 @@ private_2:
outer_l3v4:
proto: "tcp"
- srcip4: "{{get(flow, 'flow.srcip4_range_2', '192.168.0.0-192.168.255.255') }}"
- dstip4: "{{get(flow, 'flow.dstip4_range_2', '192.16.0.0-192.16.0.31') }}"
+ srcip4: "{{get(flow, 'flow.src_ip1', '192.168.0.0-192.168.255.255') }}"
+ dstip4: "{{get(flow, 'flow.dst_ip1', '192.16.0.0-192.16.0.31') }}"
ttl: 32
dscp: 32
outer_l4:
- srcport: "{{get(flow, 'flow.srcport_range', '0') }}"
- dstport: "{{get(flow, 'flow.dstport_range', '0') }}"
+ srcport: "{{get(flow, 'flow.src_port1', '0') }}"
+ dstport: "{{get(flow, 'flow.dst_port1', '0') }}"
public_2:
ipv4:
outer_l2:
@@ -145,11 +149,11 @@ public_2:
outer_l3v4:
proto: "tcp"
- srcip4: "{{get(flow, 'flow.dstip4_range_2', '192.16.0.0-192.16.0.31') }}"
- dstip4: "{{get(flow, 'flow.srcip4_range_2', '192.168.0.0-192.168.255.255') }}"
+ srcip4: "{{get(flow, 'flow.dst_ip1', '192.16.0.0-192.16.0.31') }}"
+ dstip4: "{{get(flow, 'flow.src_ip1', '192.168.0.0-192.168.255.255') }}"
ttl: 32
dscp: 32
outer_l4:
- srcport: "{{get(flow, 'flow.dstport_range', '0') }}"
- dstport: "{{get(flow, 'flow.srcport_range', '0') }}"
+ srcport: "{{get(flow, 'flow.dst_port1', '0') }}"
+ dstport: "{{get(flow, 'flow.src_port1', '0') }}"
diff --git a/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency.yaml b/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency.yaml
index 6b213a54a..d7531fcdb 100644
--- a/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency.yaml
+++ b/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency.yaml
@@ -45,16 +45,15 @@ private_1:
outer_l3v4:
proto: "udp"
- srcip4: "{{get(flow, 'flow.srcip4_range', '1.1.1.1-1.15.255.255') }}"
- dstip4: "{{get(flow, 'flow.dstip4_range', '90.90.1.1-90.105.255.255') }}"
+ srcip4: "{{get(flow, 'flow.src_ip0', '1.1.1.1-1.15.255.255') }}"
+ dstip4: "{{get(flow, 'flow.dst_ip0', '90.90.1.1-90.105.255.255') }}"
count: "{{get(flow, 'flow.count', '1') }}"
ttl: 32
dscp: 0
outer_l4:
- srcport: "{{get(flow, 'flow.srcport_range', '1234') }}"
- dstport: "{{get(flow, 'flow.dstport_range', '2001') }}"
+ srcport: "{{get(flow, 'flow.src_port0', '1234') }}"
+ dstport: "{{get(flow, 'flow.dst_port0', '2001') }}"
count: "{{get(flow, 'flow.count', '1') }}"
-
public_1:
ipv4:
outer_l2:
@@ -69,14 +68,14 @@ public_1:
outer_l3v4:
proto: "udp"
- srcip4: "{{get(flow, 'flow.dstip4_range', '1.1.1.1-1.15.255.255') }}"
- dstip4: "{{get(flow, 'flow.srcip4_range', '90.90.1.1-90.105.255.255') }}"
+ srcip4: "{{get(flow, 'flow.dst_ip0', '1.1.1.1-1.15.255.255') }}"
+ dstip4: "{{get(flow, 'flow.src_ip0', '90.90.1.1-90.105.255.255') }}"
count: "{{get(flow, 'flow.count', '1') }}"
ttl: 32
dscp: 0
outer_l4:
- srcport: "{{get(flow, 'flow.srcport_range', '1234') }}"
- dstport: "{{get(flow, 'flow.dstport_range', '2001') }}"
+ srcport: "{{get(flow, 'flow.src_port0', '1234') }}"
+ dstport: "{{get(flow, 'flow.dst_port0', '2001') }}"
count: "{{get(flow, 'flow.count', '1') }}"
private_2:
ipv4:
@@ -92,14 +91,14 @@ private_2:
outer_l3v4:
proto: "udp"
- srcip4: "{{get(flow, 'flow.srcip4_range', '1.1.1.1-1.15.255.255') }}"
- dstip4: "{{get(flow, 'flow.dstip4_range', '90.90.1.1-90.105.255.255') }}"
+ srcip4: "{{get(flow, 'flow.src_ip1', '1.1.1.1-1.15.255.255') }}"
+ dstip4: "{{get(flow, 'flow.dst_ip1', '90.90.1.1-90.105.255.255') }}"
count: "{{get(flow, 'flow.count', '1') }}"
ttl: 32
dscp: 0
outer_l4:
- srcport: "{{get(flow, 'flow.srcport_range', '1234') }}"
- dstport: "{{get(flow, 'flow.dstport_range', '2001') }}"
+ srcport: "{{get(flow, 'flow.src_port1', '1234') }}"
+ dstport: "{{get(flow, 'flow.dst_port1', '2001') }}"
count: "{{get(flow, 'flow.count', '1') }}"
public_2:
ipv4:
@@ -115,12 +114,12 @@ public_2:
outer_l3v4:
proto: "udp"
- srcip4: "{{get(flow, 'flow.dstip4_range', '1.1.1.1-1.15.255.255') }}"
- dstip4: "{{get(flow, 'flow.srcip4_range', '90.90.1.1-90.105.255.255') }}"
+ srcip4: "{{get(flow, 'flow.dst_ip1', '1.1.1.1-1.15.255.255') }}"
+ dstip4: "{{get(flow, 'flow.src_ip1', '90.90.1.1-90.105.255.255') }}"
count: "{{get(flow, 'flow.count', '1') }}"
ttl: 32
dscp: 0
outer_l4:
- srcport: "{{get(flow, 'flow.srcport_range', '1234') }}"
- dstport: "{{get(flow, 'flow.dstport_range', '2001') }}"
+ srcport: "{{get(flow, 'flow.dst_port1', '1234') }}"
+ dstport: "{{get(flow, 'flow.src_port1', '2001') }}"
count: "{{get(flow, 'flow.count', '1') }}"
diff --git a/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency_vpe.yaml b/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency_vpe.yaml
index 4a21a4274..7468dbdb1 100644
--- a/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency_vpe.yaml
+++ b/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency_vpe.yaml
@@ -68,14 +68,16 @@ private_1:
outer_l3v4:
proto: "tcp"
- srcip4: "{{get(flow, 'flow.srcip4_range_1', '192.168.0.0-192.168.255.255') }}"
- dstip4: "{{get(flow, 'flow.dstip4_range_1', '192.16.0.0-192.16.0.31') }}"
+ srcip4: "{{get(flow, 'flow.src_ip0', '192.168.0.0-192.168.255.255') }}"
+ dstip4: "{{get(flow, 'flow.dst_ip0', '192.16.0.0-192.16.0.31') }}"
+ count: "{{get(flow, 'flow.count', '1') }}"
ttl: 32
dscp: 32
outer_l4:
- srcport: "{{get(flow, 'flow.srcport_range', '0') }}"
- dstport: "{{get(flow, 'flow.dstport_range', '0') }}"
+ srcport: "{{get(flow, 'flow.src_port0', '0') }}"
+ dstport: "{{get(flow, 'flow.dst_port0', '0') }}"
+ count: "{{get(flow, 'flow.count', '1') }}"
public_1:
ipv4:
outer_l2:
@@ -90,14 +92,16 @@ public_1:
outer_l3v4:
proto: "tcp"
- srcip4: "{{get(flow, 'flow.dstip4_range_1', '192.16.0.0-192.16.0.31') }}"
- dstip4: "{{get(flow, 'flow.srcip4_range_1', '192.168.0.0-192.168.255.255') }}"
+ srcip4: "{{get(flow, 'flow.dst_ip0', '192.16.0.0-192.16.0.31') }}"
+ dstip4: "{{get(flow, 'flow.src_ip0', '192.168.0.0-192.168.255.255') }}"
+ count: "{{get(flow, 'flow.count', '1') }}"
ttl: 32
dscp: 32
outer_l4:
- srcport: "{{get(flow, 'flow.dstport_range', '0') }}"
- dstport: "{{get(flow, 'flow.srcport_range', '0') }}"
+ srcport: "{{get(flow, 'flow.dst_port0', '0') }}"
+ dstport: "{{get(flow, 'flow.src_port0', '0') }}"
+ count: "{{get(flow, 'flow.count', '1') }}"
private_2:
ipv4:
outer_l2:
@@ -122,14 +126,15 @@ private_2:
outer_l3v4:
proto: "tcp"
- srcip4: "{{get(flow, 'flow.srcip4_range_2', '192.168.0.0-192.168.255.255') }}"
- dstip4: "{{get(flow, 'flow.dstip4_range_2', '192.16.0.0-192.16.0.31') }}"
+ srcip4: "{{get(flow, 'flow.srcip1', '192.168.0.0-192.168.255.255') }}"
+ dstip4: "{{get(flow, 'flow.dstip1', '192.16.0.0-192.16.0.31') }}"
ttl: 32
dscp: 32
outer_l4:
- srcport: "{{get(flow, 'flow.srcport_range', '0') }}"
- dstport: "{{get(flow, 'flow.dstport_range', '0') }}"
+ srcport: "{{get(flow, 'flow.src_port1', '0') }}"
+ dstport: "{{get(flow, 'flow.dst_port1', '0') }}"
+ count: "{{get(flow, 'flow.count', '1') }}"
public_2:
ipv4:
outer_l2:
@@ -144,11 +149,13 @@ public_2:
outer_l3v4:
proto: "tcp"
- srcip4: "{{get(flow, 'flow.dstip4_range_2', '192.16.0.0-192.16.0.31') }}"
- dstip4: "{{get(flow, 'flow.srcip4_range_2', '192.168.0.0-192.168.255.255') }}"
+ srcip4: "{{get(flow, 'flow.dst_ip1', '192.16.0.0-192.16.0.31') }}"
+ dstip4: "{{get(flow, 'flow.src_ip1', '192.168.0.0-192.168.255.255') }}"
+ count: "{{get(flow, 'flow.count', '1') }}"
ttl: 32
dscp: 32
outer_l4:
- srcport: "{{get(flow, 'flow.dstport_range', '0') }}"
- dstport: "{{get(flow, 'flow.srcport_range', '0') }}"
+ srcport: "{{get(flow, 'flow.dst_port1', '0') }}"
+ dstport: "{{get(flow, 'flow.src_port1', '0') }}"
+ count: "{{get(flow, 'flow.count', '1') }}"
diff --git a/tests/ci/apexlake-verify b/tests/ci/apexlake-verify
deleted file mode 100755
index 6a691063f..000000000
--- a/tests/ci/apexlake-verify
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/bash
-##############################################################################
-# Copyright (c) 2015 Ericsson AB and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-DPDK_HOST=10.118.36.130
-
-YARDSTICK=/home/user/yardstick
-TESTSUITE=$YARDSTICK/tests/opnfv/test_suites/opnfv_vTC_daily.yaml
-
-: ${INSTALLER_TYPE:='unknown'}
-: ${NODE_NAME:='unknown'}
-: ${DEPLOY_SCENARIO:='unknown'}
-
-commands="
-cd $YARDSTICK
-source /home/user/openrc.dasm
-export INSTALLER_TYPE=$INSTALLER_TYPE
-export NODE_NAME=$NODE_NAME
-export DEPLOY_SCENARIO=$DEPLOY_SCENARIO
-sudo -E yardstick task start --suite $TESTSUITE"
-
-echo "$commands" | ssh -l user $DPDK_HOST 'bash -s'
-exit $?
diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc056.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc056.yaml
new file mode 100644
index 000000000..7f1dc1010
--- /dev/null
+++ b/tests/opnfv/test_cases/opnfv_yardstick_tc056.yaml
@@ -0,0 +1,81 @@
+##############################################################################
+# Copyright (c) 2017 14_ykl@tongji.edu.cn and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+
+schema: "yardstick:task:0.1"
+description: >
+ Test case for TC056 :OpenStack Controller Messaging Queue Service High
+ Availability.
+
+{% set file = file or '/etc/yardstick/pod.yaml' %}
+{% set attack_host = attack_host or 'node1' %}
+{% set monitor_time = monitor_time or 10 %}
+{% set monitor_number = monitor_number or 3 %}
+
+scenarios:
+-
+ type: ServiceHA
+ options:
+ attackers:
+ - fault_type: "kill-process"
+ process_name: "rabbitmq-server"
+ host: {{attack_host}}
+
+ monitors:
+ - monitor_type: "openstack-cmd"
+ command_name: "openstack image list"
+ monitor_time: {{monitor_time}}
+ monitor_number: {{monitor_number}}
+ sla:
+ max_outage_time: 5
+
+ - monitor_type: "openstack-cmd"
+ command_name: "openstack network list"
+ monitor_time: {{monitor_time}}
+ monitor_number: {{monitor_number}}
+ sla:
+ max_outage_time: 5
+
+ - monitor_type: "openstack-cmd"
+ command_name: "openstack volume list"
+ monitor_time: {{monitor_time}}
+ monitor_number: {{monitor_number}}
+ sla:
+ max_outage_time: 5
+
+ - monitor_type: "openstack-cmd"
+ command_name: "openstack stack list"
+ monitor_time: {{monitor_time}}
+ monitor_number: {{monitor_number}}
+ sla:
+ max_outage_time: 5
+
+ - monitor_type: "process"
+ process_name: "rabbitmq-server"
+ host: {{attack_host}}
+ monitor_time: 20
+ sla:
+ max_recover_time: 20
+
+ nodes:
+ {{attack_host}}: {{attack_host}}.LF
+
+ runner:
+ type: Duration
+ duration: 1
+ sla:
+ outage_time: 5
+ action: monitor
+
+
+context:
+ type: Node
+ name: LF
+ file: {{file}}
+
diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc057.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc057.yaml
new file mode 100644
index 000000000..322e2bd76
--- /dev/null
+++ b/tests/opnfv/test_cases/opnfv_yardstick_tc057.yaml
@@ -0,0 +1,179 @@
+##############################################################################
+# Copyright (c) 2017 14_ykl@tongji.edu.cn and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+
+schema: "yardstick:task:0.1"
+description: >
+ Test case for TC057 :OpenStack Controller Cluster Management Service High
+ Availability;
+ This test case is written by scenario-based HA testing framework.
+
+{% set file = file or '/etc/yardstick/pod.yaml' %}
+{% set vip_mgmt = vip_mgmt or 'vip__management' %}
+{% set vip_vrouter = vip_vrouter or 'vip__vrouter' %}
+{% set attack_host = attack_host or 'node1' %}
+{% set check_host = check_host or 'node2' %}
+{% set monitor_time = monitor_time or 10 %}
+{% set monitor_number = monitor_number or 3 %}
+
+scenarios:
+ -
+ type: "GeneralHA"
+ options:
+ attackers:
+ -
+ fault_type: "general-attacker"
+ host: {{attack_host}}
+ key: "kill-process"
+ attack_key: "kill-corosync"
+ action_parameter:
+ process_name: "corosync"
+
+ monitors:
+ -
+ monitor_type: "openstack-cmd"
+ key: "check-nova-service"
+ command_name: "openstack image list"
+ monitor_time: {{monitor_time}}
+ monitor_number: {{monitor_number}}
+ sla:
+ max_outage_time: 5
+
+ -
+ monitor_type: "openstack-cmd"
+ key: "check-neutron-service"
+ command_name: "openstack network list"
+ monitor_time: {{monitor_time}}
+ monitor_number: {{monitor_number}}
+ sla:
+ max_outage_time: 5
+
+ -
+ monitor_type: "openstack-cmd"
+ key: "check-keystone-service"
+ command_name: "openstack user list"
+ monitor_time: {{monitor_time}}
+ monitor_number: {{monitor_number}}
+ sla:
+ max_outage_time: 5
+
+ -
+ monitor_type: "openstack-cmd"
+ key: "check-heat-service"
+ command_name: "openstack stack list"
+ monitor_time: {{monitor_time}}
+ monitor_number: {{monitor_number}}
+ sla:
+ max_outage_time: 5
+
+ operations:
+ -
+ operation_type: "general-operation"
+ key: "get-mgmt-vip-host"
+ operation_key: "get-vip-host"
+ host: {{check_host}}
+ action_parameter:
+ vip_name: {{vip_mgmt}}
+ return_parameter:
+ all: "$vip_mgmt_host"
+
+ -
+ operation_type: "general-operation"
+ key: "get-router-vip-host"
+ operation_key: "get-vip-host"
+ host: {{check_host}}
+ action_parameter:
+ vip_name: {{vip_vrouter}}
+ return_parameter:
+ all: "$vip_router_host"
+
+ resultCheckers:
+ -
+ checker_type: "general-result-checker"
+ key: "check-rabbitmq-master"
+ checker_key: "pacemaker-resource-checker"
+ host: {{check_host}}
+ parameter:
+ resource_name: "p_rabbitmq-server"
+ resource_host: "$vip_mgmt_host"
+ expectedValue: "Masters"
+ condition: "in"
+
+ -
+ checker_type: "general-result-checker"
+ key: "check-conntrackd-master"
+ checker_key: "pacemaker-resource-checker"
+ host: {{check_host}}
+ parameter:
+ resource_name: "p_conntrackd"
+ resource_host: "$vip_router_host"
+ expectedValue: "Masters"
+ condition: "in"
+
+ steps:
+ -
+ actionKey: "kill-process"
+ actionType: "attacker"
+ index: 1
+
+ -
+ actionKey: "check-nova-service"
+ actionType: "monitor"
+ index: 2
+
+ -
+ actionKey: "check-neutron-service"
+ actionType: "monitor"
+ index: 3
+
+ -
+ actionKey: "check-keystone-service"
+ actionType: "monitor"
+ index: 4
+
+ -
+ actionKey: "check-heat-service"
+ actionType: "monitor"
+ index: 5
+
+ -
+ actionKey: "get-mgmt-vip-host"
+ actionType: "operation"
+ index: 6
+
+ -
+ actionKey: "check-rabbitmq-master"
+ actionType: "resultchecker"
+ index: 7
+
+ -
+ actionKey: "get-router-vip-host"
+ actionType: "operation"
+ index: 8
+
+ -
+ actionKey: "check-conntrackd-master"
+ actionType: "resultchecker"
+ index: 9
+
+
+ nodes:
+ {{attack_host}}: {{attack_host}}.LF
+ {{check_host}}: {{check_host}}.LF
+ runner:
+ type: Duration
+ duration: 1
+ sla:
+ outage_time: 5
+ action: monitor
+
+context:
+ type: Node
+ name: LF
+ file: {{file}}
diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc058.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc058.yaml
new file mode 100644
index 000000000..e9feb97f5
--- /dev/null
+++ b/tests/opnfv/test_cases/opnfv_yardstick_tc058.yaml
@@ -0,0 +1,111 @@
+##############################################################################
+# Copyright (c) 2017 14_ykl@tongji.edu.cn and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+
+schema: "yardstick:task:0.1"
+description: >
+ Test case for TC058 :OpenStack Controller Virtual Router Service High
+ Availability;
+ This test case is written by scenario-based HA testing framework.
+
+{% set file = file or '/etc/yardstick/pod.yaml' %}
+{% set image = image or 'yardstick-image' %}
+{% set flavor = flavor or 'yardstick-flavor' %}
+{% set attack_host = attack_host or 'node1' %}
+
+scenarios:
+ -
+ type: "GeneralHA"
+ options:
+ attackers:
+ -
+ fault_type: "kill-process"
+ host: {{attack_host}}
+ key: "kill-process"
+ process_name: "neutron-l3-agent"
+
+ monitors:
+ -
+ monitor_type: "process"
+ process_name: "neutron-l3-agent"
+ host: {{attack_host}}
+ key: "monitor-recovery"
+ monitor_time: 20
+ sla:
+ max_recover_time: 20
+
+ -
+ monitor_type: "general-monitor"
+ monitor_key: "ip-status"
+ key: "server-status"
+ monitor_time: 10
+ sla:
+ max_outage_time: 5
+ parameter:
+ ip_address: "$floating_ip"
+
+ operations:
+ -
+ operation_type: "general-operation"
+ key: "get-floatingip"
+ operation_key: "get-floatingip"
+ action_parameter:
+ server_name: "tc058"
+ return_parameter:
+ all: "$floating_ip"
+
+
+ steps:
+ -
+ actionKey: "get-floatingip"
+ actionType: "operation"
+ index: 1
+ -
+ actionKey: "kill-process"
+ actionType: "attacker"
+ index: 2
+
+ -
+ actionKey: "monitor-recovery"
+ actionType: "monitor"
+ index: 3
+
+ -
+ actionKey: "server-status"
+ actionType: "monitor"
+ index: 4
+
+ nodes:
+ {{attack_host}}: {{attack_host}}.LF
+ runner:
+ type: Duration
+ duration: 1
+ sla:
+ outage_time: 5
+ action: monitor
+
+contexts:
+-
+ type: Node
+ name: LF
+ file: {{file}}
+
+-
+ name: demo
+ image: {{image}}
+ flavor: {{flavor}}
+ user: cirros
+
+ servers:
+ tc058:
+ floating_ip: true
+
+ networks:
+ test:
+ cidr: '10.0.1.0/24'
diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py
index e69de29bb..a468b272b 100644
--- a/tests/unit/__init__.py
+++ b/tests/unit/__init__.py
@@ -0,0 +1,76 @@
+# 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.
+
+from __future__ import absolute_import
+import mock
+
+
+STL_MOCKS = {
+ 'trex_stl_lib': mock.MagicMock(),
+ 'trex_stl_lib.base64': mock.MagicMock(),
+ 'trex_stl_lib.binascii': mock.MagicMock(),
+ 'trex_stl_lib.collections': mock.MagicMock(),
+ 'trex_stl_lib.copy': mock.MagicMock(),
+ 'trex_stl_lib.datetime': mock.MagicMock(),
+ 'trex_stl_lib.functools': mock.MagicMock(),
+ 'trex_stl_lib.imp': mock.MagicMock(),
+ 'trex_stl_lib.inspect': mock.MagicMock(),
+ 'trex_stl_lib.json': mock.MagicMock(),
+ 'trex_stl_lib.linecache': mock.MagicMock(),
+ 'trex_stl_lib.math': mock.MagicMock(),
+ 'trex_stl_lib.os': mock.MagicMock(),
+ 'trex_stl_lib.platform': mock.MagicMock(),
+ 'trex_stl_lib.pprint': mock.MagicMock(),
+ 'trex_stl_lib.random': mock.MagicMock(),
+ 'trex_stl_lib.re': mock.MagicMock(),
+ 'trex_stl_lib.scapy': mock.MagicMock(),
+ 'trex_stl_lib.socket': mock.MagicMock(),
+ 'trex_stl_lib.string': mock.MagicMock(),
+ 'trex_stl_lib.struct': mock.MagicMock(),
+ 'trex_stl_lib.sys': mock.MagicMock(),
+ 'trex_stl_lib.threading': mock.MagicMock(),
+ 'trex_stl_lib.time': mock.MagicMock(),
+ 'trex_stl_lib.traceback': mock.MagicMock(),
+ 'trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
+ 'trex_stl_lib.trex_stl_client': mock.MagicMock(),
+ 'trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
+ 'trex_stl_lib.trex_stl_ext': mock.MagicMock(),
+ 'trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
+ 'trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
+ 'trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
+ 'trex_stl_lib.trex_stl_port': mock.MagicMock(),
+ 'trex_stl_lib.trex_stl_stats': mock.MagicMock(),
+ 'trex_stl_lib.trex_stl_streams': mock.MagicMock(),
+ 'trex_stl_lib.trex_stl_types': mock.MagicMock(),
+ 'trex_stl_lib.types': mock.MagicMock(),
+ 'trex_stl_lib.utils': mock.MagicMock(),
+ 'trex_stl_lib.utils.argparse': mock.MagicMock(),
+ 'trex_stl_lib.utils.collections': mock.MagicMock(),
+ 'trex_stl_lib.utils.common': mock.MagicMock(),
+ 'trex_stl_lib.utils.json': mock.MagicMock(),
+ 'trex_stl_lib.utils.os': mock.MagicMock(),
+ 'trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
+ 'trex_stl_lib.utils.pwd': mock.MagicMock(),
+ 'trex_stl_lib.utils.random': mock.MagicMock(),
+ 'trex_stl_lib.utils.re': mock.MagicMock(),
+ 'trex_stl_lib.utils.string': mock.MagicMock(),
+ 'trex_stl_lib.utils.sys': mock.MagicMock(),
+ 'trex_stl_lib.utils.text_opts': mock.MagicMock(),
+ 'trex_stl_lib.utils.text_tables': mock.MagicMock(),
+ 'trex_stl_lib.utils.texttable': mock.MagicMock(),
+ 'trex_stl_lib.warnings': mock.MagicMock(),
+ 'trex_stl_lib.yaml': mock.MagicMock(),
+ 'trex_stl_lib.zlib': mock.MagicMock(),
+ 'trex_stl_lib.zmq': mock.MagicMock(),
+}
diff --git a/tests/unit/benchmark/contexts/standalone/__init__.py b/tests/unit/benchmark/contexts/standalone/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/unit/benchmark/contexts/standalone/__init__.py
diff --git a/tests/unit/benchmark/contexts/ovs_sample_password.yaml b/tests/unit/benchmark/contexts/standalone/ovs_sample_password.yaml
index b1da1ea9f..b1da1ea9f 100644
--- a/tests/unit/benchmark/contexts/ovs_sample_password.yaml
+++ b/tests/unit/benchmark/contexts/standalone/ovs_sample_password.yaml
diff --git a/tests/unit/benchmark/contexts/ovs_sample_ssh_key.yaml b/tests/unit/benchmark/contexts/standalone/ovs_sample_ssh_key.yaml
index 896ec33bb..896ec33bb 100644
--- a/tests/unit/benchmark/contexts/ovs_sample_ssh_key.yaml
+++ b/tests/unit/benchmark/contexts/standalone/ovs_sample_ssh_key.yaml
diff --git a/tests/unit/benchmark/contexts/ovs_sample_write_to_file.txt b/tests/unit/benchmark/contexts/standalone/ovs_sample_write_to_file.txt
index f0eec86f6..f0eec86f6 100644
--- a/tests/unit/benchmark/contexts/ovs_sample_write_to_file.txt
+++ b/tests/unit/benchmark/contexts/standalone/ovs_sample_write_to_file.txt
diff --git a/tests/unit/benchmark/contexts/sriov_sample_password.yaml b/tests/unit/benchmark/contexts/standalone/sriov_sample_password.yaml
index 4f60e46d5..4f60e46d5 100644
--- a/tests/unit/benchmark/contexts/sriov_sample_password.yaml
+++ b/tests/unit/benchmark/contexts/standalone/sriov_sample_password.yaml
diff --git a/tests/unit/benchmark/contexts/sriov_sample_ssh_key.yaml b/tests/unit/benchmark/contexts/standalone/sriov_sample_ssh_key.yaml
index faa496771..faa496771 100644
--- a/tests/unit/benchmark/contexts/sriov_sample_ssh_key.yaml
+++ b/tests/unit/benchmark/contexts/standalone/sriov_sample_ssh_key.yaml
diff --git a/tests/unit/benchmark/contexts/sriov_sample_write_to_file.txt b/tests/unit/benchmark/contexts/standalone/sriov_sample_write_to_file.txt
index f0eec86f6..f0eec86f6 100644
--- a/tests/unit/benchmark/contexts/sriov_sample_write_to_file.txt
+++ b/tests/unit/benchmark/contexts/standalone/sriov_sample_write_to_file.txt
diff --git a/tests/unit/benchmark/contexts/test_ovsdpdk.py b/tests/unit/benchmark/contexts/standalone/test_ovsdpdk.py
index ac25ec877..1d68384c9 100644
--- a/tests/unit/benchmark/contexts/test_ovsdpdk.py
+++ b/tests/unit/benchmark/contexts/standalone/test_ovsdpdk.py
@@ -13,11 +13,13 @@
# limitations under the License.
from __future__ import absolute_import
+
import os
-import mock
import unittest
-from yardstick.benchmark.contexts import ovsdpdk
+import mock
+
+from yardstick.benchmark.contexts.standalone import ovsdpdk
NIC_INPUT = {
'interface': {},
@@ -226,11 +228,11 @@ class OvsdpdkTestCase(unittest.TestCase):
mock_ovs = mock.Mock()
ssh_mock.put = mock.Mock()
ovs_obj.check_output = mock.Mock(return_value=(0, "vm1"))
- with mock.patch("yardstick.benchmark.contexts.ovsdpdk.time"):
+ with mock.patch("yardstick.benchmark.contexts.standalone.ovsdpdk.time"):
self.assertIsNone(ovs_obj.setup_ovs_context(PCIS, NIC_DETAILS, DRIVER))
@mock.patch(
- 'yardstick.benchmark.contexts.ovsdpdk',
+ 'yardstick.benchmark.contexts.standalone.ovsdpdk',
return_value="Domain vm1 created from /tmp/vm_ovs.xml")
def test_is_vm_created(self, NIC_INPUT):
with mock.patch("yardstick.ssh.SSH") as ssh:
diff --git a/tests/unit/benchmark/contexts/test_sriov.py b/tests/unit/benchmark/contexts/standalone/test_sriov.py
index a8641a2eb..ea72e1bab 100644
--- a/tests/unit/benchmark/contexts/test_sriov.py
+++ b/tests/unit/benchmark/contexts/standalone/test_sriov.py
@@ -13,11 +13,13 @@
# limitations under the License.
from __future__ import absolute_import
+
import os
-import mock
import unittest
-from yardstick.benchmark.contexts import sriov
+import mock
+
+from yardstick.benchmark.contexts.standalone import sriov
NIC_INPUT = {
'interface': {},
@@ -185,7 +187,7 @@ class SriovTestCase(unittest.TestCase):
nic_details['vf_pci'][i] = sriov_obj.get_vf_datas.return_value
vf_pci = [[], []]
vf_pci[i] = sriov_obj.get_vf_datas.return_value
- with mock.patch("yardstick.benchmark.contexts.sriov.time"):
+ with mock.patch("yardstick.benchmark.contexts.standalone.sriov.time"):
self.assertIsNotNone(sriov_obj.configure_nics_for_sriov(DRIVER, NIC_DETAILS))
def test_setup_sriov_context(self):
@@ -224,7 +226,7 @@ class SriovTestCase(unittest.TestCase):
mock.Mock(return_value=(0, {}, ""))
ssh_mock.put = mock.Mock()
sriov_obj.check_output = mock.Mock(return_value=(1, {}))
- with mock.patch("yardstick.benchmark.contexts.sriov.time"):
+ with mock.patch("yardstick.benchmark.contexts.standalone.sriov.time"):
self.assertIsNone(sriov_obj.setup_sriov_context(PCIS, nic_details, DRIVER))
def test_setup_sriov_context_vm_already_present(self):
@@ -263,11 +265,11 @@ class SriovTestCase(unittest.TestCase):
mock.Mock(return_value=(0, {}, ""))
ssh_mock.put = mock.Mock()
sriov_obj.check_output = mock.Mock(return_value=(0, "vm1"))
- with mock.patch("yardstick.benchmark.contexts.sriov.time"):
+ with mock.patch("yardstick.benchmark.contexts.standalone.sriov.time"):
self.assertIsNone(sriov_obj.setup_sriov_context(PCIS, nic_details, DRIVER))
@mock.patch(
- 'yardstick.benchmark.contexts.sriov',
+ 'yardstick.benchmark.contexts.standalone.sriov',
return_value="Domain vm1 created from /tmp/vm_sriov.xml")
def test_is_vm_created(self, NIC_INPUT):
with mock.patch("yardstick.ssh.SSH") as ssh:
diff --git a/tests/unit/benchmark/contexts/test_standalone.py b/tests/unit/benchmark/contexts/test_standalone.py
index d13e28470..b1402a1c9 100644
--- a/tests/unit/benchmark/contexts/test_standalone.py
+++ b/tests/unit/benchmark/contexts/test_standalone.py
@@ -18,25 +18,26 @@
# Unittest for yardstick.benchmark.contexts.standalone
from __future__ import absolute_import
+
import os
import unittest
+
import mock
from yardstick.benchmark.contexts import standalone
-from yardstick.benchmark.contexts import sriov
-from yardstick.benchmark.contexts import ovsdpdk
+from yardstick.benchmark.contexts.standalone import ovsdpdk, sriov
MOCKS = {
'yardstick.benchmark.contexts': mock.MagicMock(),
- 'yardstick.benchmark.contexts.sriov': mock.MagicMock(),
- 'yardstick.benchmark.contexts.ovsdpdk': mock.MagicMock(),
+ 'yardstick.benchmark.contexts.standalone.sriov': mock.MagicMock(),
+ 'yardstick.benchmark.contexts.standalone.ovsdpdk': mock.MagicMock(),
'yardstick.benchmark.contexts.standalone': mock.MagicMock(),
}
-@mock.patch('yardstick.benchmark.contexts.ovsdpdk.time')
+@mock.patch('yardstick.benchmark.contexts.standalone.ovsdpdk.time')
@mock.patch('yardstick.benchmark.contexts.standalone.time')
-@mock.patch('yardstick.benchmark.contexts.sriov.time')
+@mock.patch('yardstick.benchmark.contexts.standalone.sriov.time')
class StandaloneContextTestCase(unittest.TestCase):
NODES_SAMPLE = "nodes_sample_new.yaml"
NODES_SAMPLE_SRIOV = "nodes_sample_new_sriov.yaml"
@@ -564,7 +565,7 @@ class StandaloneContextTestCase(unittest.TestCase):
self.assertIsNone(self.test_context.undeploy())
def test_get_nfvi_obj_sriov(self, mock_sriov_time, mock_standlalone_time, mock_ovsdpdk_time):
- with mock.patch('yardstick.benchmark.contexts.sriov'):
+ with mock.patch('yardstick.benchmark.contexts.standalone.sriov'):
attrs = {
'name': 'sriov',
'file': self._get_file_abspath(self.NODES_SAMPLE)
@@ -589,7 +590,7 @@ class StandaloneContextTestCase(unittest.TestCase):
self.assertIsNotNone(self.test_context.get_nfvi_obj())
def test_get_nfvi_obj_ovs(self, mock_sriov_time, mock_standlalone_time, mock_ovsdpdk_time):
- with mock.patch('yardstick.benchmark.contexts.ovsdpdk'):
+ with mock.patch('yardstick.benchmark.contexts.standalone.ovsdpdk'):
attrs = {
'name': 'ovs',
'file': self._get_file_abspath(self.NODES_SAMPLE_OVSDPDK)
diff --git a/tests/unit/benchmark/core/test_task.py b/tests/unit/benchmark/core/test_task.py
index 25688bf48..14027e43c 100644
--- a/tests/unit/benchmark/core/test_task.py
+++ b/tests/unit/benchmark/core/test_task.py
@@ -290,8 +290,9 @@ class TaskTestCase(unittest.TestCase):
task.change_server_name(scenario, suffix)
self.assertTrue(scenario['target']['name'], 'demo-8')
+ @mock.patch('yardstick.benchmark.core.task.utils')
@mock.patch('yardstick.benchmark.core.task.logging')
- def test_set_log(self, mock_logging):
+ def test_set_log(self, mock_logging, mock_utils):
task_obj = task.Task()
task_obj.task_id = 'task_id'
task_obj._set_log()
diff --git a/tests/unit/benchmark/runner/test_search.py b/tests/unit/benchmark/runner/test_search.py
index 9cfe6e154..8fab5a71f 100644
--- a/tests/unit/benchmark/runner/test_search.py
+++ b/tests/unit/benchmark/runner/test_search.py
@@ -14,70 +14,11 @@
#
from __future__ import absolute_import
-import unittest
-from contextlib import contextmanager
+import unittest
import mock
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+from tests.unit import STL_MOCKS
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
diff --git a/tests/unit/benchmark/scenarios/lib/test_attach_volume.py b/tests/unit/benchmark/scenarios/lib/test_attach_volume.py
new file mode 100644
index 000000000..e69924072
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/lib/test_attach_volume.py
@@ -0,0 +1,33 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import unittest
+import mock
+
+from yardstick.benchmark.scenarios.lib.attach_volume import AttachVolume
+
+
+class AttachVolumeTestCase(unittest.TestCase):
+
+ @mock.patch('yardstick.common.openstack_utils.attach_server_volume')
+ def test_attach_volume(self, mock_attach_server_volume):
+ options = {
+ 'volume_id': '123-456-000',
+ 'server_id': '000-123-456'
+ }
+ args = {"options": options}
+ obj = AttachVolume(args, {})
+ obj.run({})
+ self.assertTrue(mock_attach_server_volume.called)
+
+def main():
+ unittest.main()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_floating_ip.py b/tests/unit/benchmark/scenarios/lib/test_create_floating_ip.py
new file mode 100644
index 000000000..72dbcd7cd
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/lib/test_create_floating_ip.py
@@ -0,0 +1,34 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import unittest
+import mock
+
+from yardstick.benchmark.scenarios.lib.create_floating_ip import CreateFloatingIp
+
+
+class CreateFloatingIpTestCase(unittest.TestCase):
+
+ @mock.patch('yardstick.common.openstack_utils.create_floating_ip')
+ @mock.patch('yardstick.common.openstack_utils.get_network_id')
+ @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
+ def test_create_floating_ip(self, mock_create_floating_ip, mock_get_network_id, mock_get_neutron_client):
+ options = {}
+ args = {"options": options}
+ obj = CreateFloatingIp(args, {})
+ obj.run({})
+ self.assertTrue(mock_create_floating_ip.called)
+ self.assertTrue(mock_get_network_id.called)
+ self.assertTrue(mock_get_neutron_client.called)
+
+def main():
+ unittest.main()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_keypair.py b/tests/unit/benchmark/scenarios/lib/test_create_keypair.py
new file mode 100644
index 000000000..99e6b9afa
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/lib/test_create_keypair.py
@@ -0,0 +1,35 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import unittest
+import mock
+import paramiko
+
+from yardstick.benchmark.scenarios.lib.create_keypair import CreateKeypair
+
+
+class CreateKeypairTestCase(unittest.TestCase):
+
+ @mock.patch('yardstick.common.openstack_utils.create_keypair')
+ def test_create_keypair(self, mock_create_keypair):
+ options = {
+ 'key_name': 'yardstick_key',
+ 'key_path': '/tmp/yardstick_key'
+ }
+ args = {"options": options}
+ obj = CreateKeypair(args, {})
+ obj.run({})
+ self.assertTrue(mock_create_keypair.called)
+
+
+def main():
+ unittest.main()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_network.py b/tests/unit/benchmark/scenarios/lib/test_create_network.py
new file mode 100644
index 000000000..8e7d8b5a1
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/lib/test_create_network.py
@@ -0,0 +1,39 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import unittest
+import mock
+import paramiko
+
+from yardstick.benchmark.scenarios.lib.create_network import CreateNetwork
+
+
+class CreateNetworkTestCase(unittest.TestCase):
+
+ @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
+ @mock.patch('yardstick.common.openstack_utils.create_neutron_net')
+ def test_create_network(self, mock_get_neutron_client, mock_create_neutron_net):
+ options = {
+ 'openstack_paras': {
+ 'name': 'yardstick_net',
+ 'admin_state_up': 'True'
+ }
+ }
+ args = {"options": options}
+ obj = CreateNetwork(args, {})
+ obj.run({})
+ self.assertTrue(mock_get_neutron_client.called)
+ self.assertTrue(mock_create_neutron_net.called)
+
+
+def main():
+ unittest.main()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_port.py b/tests/unit/benchmark/scenarios/lib/test_create_port.py
new file mode 100644
index 000000000..3b2aa2247
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/lib/test_create_port.py
@@ -0,0 +1,36 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import unittest
+import mock
+import paramiko
+
+from yardstick.benchmark.scenarios.lib.create_port import CreatePort
+
+
+class CreatePortTestCase(unittest.TestCase):
+
+ @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
+ def test_create_port(self, mock_get_neutron_client):
+ options = {
+ 'openstack_paras': {
+ 'name': 'yardstick_port'
+ }
+ }
+ args = {"options": options}
+ obj = CreatePort(args, {})
+ obj.run({})
+ self.assertTrue(mock_get_neutron_client.called)
+
+
+def main():
+ unittest.main()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_router.py b/tests/unit/benchmark/scenarios/lib/test_create_router.py
new file mode 100644
index 000000000..b956a3634
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/lib/test_create_router.py
@@ -0,0 +1,39 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import unittest
+import mock
+import paramiko
+
+from yardstick.benchmark.scenarios.lib.create_router import CreateRouter
+
+
+class CreateRouterTestCase(unittest.TestCase):
+
+ @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
+ @mock.patch('yardstick.common.openstack_utils.create_neutron_router')
+ def test_create_router(self, mock_get_neutron_client, mock_create_neutron_router):
+ options = {
+ 'openstack_paras': {
+ 'admin_state_up': 'True',
+ 'name': 'yardstick_router'
+ }
+ }
+ args = {"options": options}
+ obj = CreateRouter(args, {})
+ obj.run({})
+ self.assertTrue(mock_get_neutron_client.called)
+ self.assertTrue(mock_create_neutron_router.called)
+
+
+def main():
+ unittest.main()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_sec_group.py b/tests/unit/benchmark/scenarios/lib/test_create_sec_group.py
new file mode 100644
index 000000000..b962f7f0e
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/lib/test_create_sec_group.py
@@ -0,0 +1,39 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import unittest
+import mock
+import paramiko
+
+from yardstick.benchmark.scenarios.lib.create_sec_group import CreateSecgroup
+
+
+class CreateSecGroupTestCase(unittest.TestCase):
+
+ @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
+ @mock.patch('yardstick.common.openstack_utils.create_security_group_full')
+ def test_create_sec_group(self, mock_get_neutron_client, mock_create_security_group_full):
+ options = {
+ 'openstack_paras': {
+ 'sg_name': 'yardstick_sec_group',
+ 'description': 'security group for yardstick manual VM'
+ }
+ }
+ args = {"options": options}
+ obj = CreateSecgroup(args, {})
+ obj.run({})
+ self.assertTrue(mock_get_neutron_client.called)
+ self.assertTrue(mock_create_security_group_full.called)
+
+
+def main():
+ unittest.main()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_subnet.py b/tests/unit/benchmark/scenarios/lib/test_create_subnet.py
new file mode 100644
index 000000000..0154755c4
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/lib/test_create_subnet.py
@@ -0,0 +1,41 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import unittest
+import mock
+import paramiko
+
+from yardstick.benchmark.scenarios.lib.create_subnet import CreateSubnet
+
+
+class CreateSubnetTestCase(unittest.TestCase):
+
+ @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
+ @mock.patch('yardstick.common.openstack_utils.create_neutron_subnet')
+ def test_create_subnet(self, mock_get_neutron_client, mock_create_neutron_subnet):
+ options = {
+ 'openstack_paras': {
+ 'network_id': '123-123-123',
+ 'name': 'yardstick_subnet',
+ 'cidr': '10.10.10.0/24',
+ 'ip_version': '4'
+ }
+ }
+ args = {"options": options}
+ obj = CreateSubnet(args, {})
+ obj.run({})
+ self.assertTrue(mock_get_neutron_client.called)
+ self.assertTrue(mock_create_neutron_subnet.called)
+
+
+def main():
+ unittest.main()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_floating_ip.py b/tests/unit/benchmark/scenarios/lib/test_delete_floating_ip.py
new file mode 100644
index 000000000..7592c8070
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/lib/test_delete_floating_ip.py
@@ -0,0 +1,36 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import unittest
+import mock
+import paramiko
+
+from yardstick.benchmark.scenarios.lib.delete_floating_ip import DeleteFloatingIp
+
+
+class DeleteFloatingIpTestCase(unittest.TestCase):
+
+ @mock.patch('yardstick.common.openstack_utils.get_nova_client')
+ @mock.patch('yardstick.common.openstack_utils.delete_floating_ip')
+ def test_delete_floating_ip(self, mock_get_nova_client, mock_delete_floating_ip):
+ options = {
+ 'floating_ip_id': '123-123-123'
+ }
+ args = {"options": options}
+ obj = DeleteFloatingIp(args, {})
+ obj.run({})
+ self.assertTrue(mock_get_nova_client.called)
+ self.assertTrue(mock_delete_floating_ip.called)
+
+
+def main():
+ unittest.main()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_keypair.py b/tests/unit/benchmark/scenarios/lib/test_delete_keypair.py
new file mode 100644
index 000000000..9663fe9fb
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/lib/test_delete_keypair.py
@@ -0,0 +1,36 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import unittest
+import mock
+import paramiko
+
+from yardstick.benchmark.scenarios.lib.delete_keypair import DeleteKeypair
+
+
+class DeleteKeypairTestCase(unittest.TestCase):
+
+ @mock.patch('yardstick.common.openstack_utils.get_nova_client')
+ @mock.patch('yardstick.common.openstack_utils.delete_keypair')
+ def test_detach_volume(self, mock_get_nova_client, mock_delete_keypair):
+ options = {
+ 'key_name': 'yardstick_key'
+ }
+ args = {"options": options}
+ obj = DeleteKeypair(args, {})
+ obj.run({})
+ self.assertTrue(mock_get_nova_client.called)
+ self.assertTrue(mock_delete_keypair.called)
+
+
+def main():
+ unittest.main()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_volume.py b/tests/unit/benchmark/scenarios/lib/test_delete_volume.py
new file mode 100644
index 000000000..a11d0121b
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/lib/test_delete_volume.py
@@ -0,0 +1,36 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import unittest
+import mock
+import paramiko
+
+from yardstick.benchmark.scenarios.lib.delete_volume import DeleteVolume
+
+
+class DeleteVolumeTestCase(unittest.TestCase):
+
+ @mock.patch('yardstick.common.openstack_utils.get_cinder_client')
+ @mock.patch('yardstick.common.openstack_utils.delete_volume')
+ def test_delete_volume(self, mock_get_cinder_client, mock_delete_volume):
+ options = {
+ 'volume_id': '123-123-123'
+ }
+ args = {"options": options}
+ obj = DeleteVolume(args, {})
+ obj.run({})
+ self.assertTrue(mock_get_cinder_client.called)
+ self.assertTrue(mock_delete_volume.called)
+
+
+def main():
+ unittest.main()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_detach_volume.py b/tests/unit/benchmark/scenarios/lib/test_detach_volume.py
new file mode 100644
index 000000000..0cffcba15
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/lib/test_detach_volume.py
@@ -0,0 +1,35 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import unittest
+import mock
+import paramiko
+
+from yardstick.benchmark.scenarios.lib.detach_volume import DetachVolume
+
+
+class DetachVolumeTestCase(unittest.TestCase):
+
+ @mock.patch('yardstick.common.openstack_utils.detach_volume')
+ def test_detach_volume(self, mock_detach_volume):
+ options = {
+ 'server_id': '321-321-321',
+ 'volume_id': '123-123-123'
+ }
+ args = {"options": options}
+ obj = DetachVolume(args, {})
+ obj.run({})
+ self.assertTrue(mock_detach_volume.called)
+
+
+def main():
+ unittest.main()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_get_numa_info.py b/tests/unit/benchmark/scenarios/lib/test_get_numa_info.py
index e7ba3ca73..680692fdc 100644
--- a/tests/unit/benchmark/scenarios/lib/test_get_numa_info.py
+++ b/tests/unit/benchmark/scenarios/lib/test_get_numa_info.py
@@ -18,7 +18,7 @@ class GetNumaInfoTestCase(unittest.TestCase):
@mock.patch('{}.GetNumaInfo._check_numa_node'.format(BASE))
@mock.patch('{}.GetNumaInfo._get_current_host_name'.format(BASE))
- @mock.patch('yaml.safe_load')
+ @mock.patch('yardstick.benchmark.scenarios.lib.get_numa_info.yaml_load')
@mock.patch('yardstick.common.task_template.TaskTemplate.render')
def test_get_numa_info(self,
mock_render,
@@ -44,7 +44,7 @@ class GetNumaInfoTestCase(unittest.TestCase):
@mock.patch('yardstick.ssh.SSH.from_node')
@mock.patch('{}.GetNumaInfo._get_current_host_name'.format(BASE))
- @mock.patch('yaml.safe_load')
+ @mock.patch('yardstick.benchmark.scenarios.lib.get_numa_info.yaml_load')
@mock.patch('yardstick.common.task_template.TaskTemplate.render')
def test_check_numa_node(self,
mock_render,
@@ -74,7 +74,7 @@ class GetNumaInfoTestCase(unittest.TestCase):
@mock.patch('{}.change_obj_to_dict'.format(BASE))
@mock.patch('{}.get_nova_client'.format(BASE))
- @mock.patch('yaml.safe_load')
+ @mock.patch('yardstick.benchmark.scenarios.lib.get_numa_info.yaml_load')
@mock.patch('yardstick.common.task_template.TaskTemplate.render')
def test_get_current_host_name(self,
mock_render,
diff --git a/tests/unit/benchmark/scenarios/networking/test_pktgen.py b/tests/unit/benchmark/scenarios/networking/test_pktgen.py
index 32ba255b2..0ca31d484 100644
--- a/tests/unit/benchmark/scenarios/networking/test_pktgen.py
+++ b/tests/unit/benchmark/scenarios/networking/test_pktgen.py
@@ -132,7 +132,7 @@ class PktgenTestCase(unittest.TestCase):
p._iptables_get_result = mock_iptables_result
sample_output = '{"packets_per_second": 9753, "errors": 0, \
- "packets_sent": 149776, "packetsize": 60, "flows": 110}'
+ "packets_sent": 149776, "packetsize": 60, "flows": 110, "ppm": 3179}'
mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
p.run(result)
@@ -159,7 +159,7 @@ class PktgenTestCase(unittest.TestCase):
p._iptables_get_result = mock_iptables_result
sample_output = '{"packets_per_second": 9753, "errors": 0, \
- "packets_sent": 149776, "packetsize": 60, "flows": 110}'
+ "packets_sent": 149776, "packetsize": 60, "flows": 110, "ppm": 3179}'
mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
p.run(result)
@@ -648,7 +648,7 @@ class PktgenTestCase(unittest.TestCase):
p._iptables_get_result = mock_iptables_result
sample_output = '{"packets_per_second": 9753, "errors": 0, \
- "packets_sent": 149300, "flows": 110}'
+ "packets_sent": 149300, "flows": 110, "ppm": 0}'
mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
p.run(result)
@@ -693,7 +693,7 @@ class PktgenTestCase(unittest.TestCase):
p._iptables_get_result = mock_iptables_result
sample_output = '{"packets_per_second": 9753, "errors": 0, \
- "packets_sent": 149300, "flows": 110}'
+ "packets_sent": 149300, "flows": 110, "ppm": 0}'
mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
p.run(result)
@@ -730,7 +730,7 @@ class PktgenTestCase(unittest.TestCase):
p._iptables_get_result = mock_iptables_result
sample_output = '{"packets_per_second": 9753, "errors": 0, \
- "packets_sent": 149300, "flows": 110}'
+ "packets_sent": 149300, "flows": 110, "ppm": 0}'
mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
p.run(result)
diff --git a/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py b/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py
index 84b42c832..df5047a0d 100644
--- a/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py
+++ b/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py
@@ -24,72 +24,14 @@ import errno
import unittest
import mock
+from tests.unit import STL_MOCKS
from yardstick.benchmark.scenarios.networking.vnf_generic import \
SshManager, NetworkServiceTestCase, IncorrectConfig, \
- IncorrectSetup, open_relative_file
+ open_relative_file
from yardstick.network_services.collector.subscriber import Collector
from yardstick.network_services.vnf_generic.vnf.base import \
GenericTrafficGen, GenericVNF
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
COMPLETE_TREX_VNFD = {
'vnfd:vnfd-catalog': {
@@ -375,6 +317,9 @@ class TestNetworkServiceTestCase(unittest.TestCase):
'allowed_drop_rate': '0.8 - 1',
},
},
+ 'options': {
+ 'framesize': {'64B': 100}
+ },
'runner': {
'object': 'NetworkServiceTestCase',
'interval': 35,
@@ -414,17 +359,40 @@ class TestNetworkServiceTestCase(unittest.TestCase):
def test___init__(self):
assert self.topology
+ 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'
+ self.assertEqual(result, self.s._get_ip_flow_range({"tg__1": 'xe0'}))
+
def test___get_traffic_flow(self):
self.scenario_cfg["traffic_options"]["flow"] = \
self._get_file_abspath("ipv4_1flow_Packets_vpe.yaml")
- result = {'flow': {'dstip4_range': '152.40.0.20',
- 'srcip4_range': '152.16.0.20', 'count': 1}}
+ self.scenario_cfg["options"] = {}
+ self.scenario_cfg['options'] = {
+ 'flow': {
+ 'src_ip': [
+ {
+ 'tg__1': 'xe0',
+ },
+ ],
+ 'dst_ip': [
+ {
+ 'tg__1': 'xe1',
+ },
+ ],
+ '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'}}
+
self.assertEqual(result, self.s._get_traffic_flow())
def test___get_traffic_flow_error(self):
self.scenario_cfg["traffic_options"]["flow"] = \
"ipv4_1flow_Packets_vpe.yaml1"
- self.assertEqual({}, self.s._get_traffic_flow())
+ self.assertEqual({'flow': {}}, self.s._get_traffic_flow())
def test_get_vnf_imp(self):
vnfd = COMPLETE_TREX_VNFD['vnfd:vnfd-catalog']['vnfd'][0]['class-name']
@@ -471,7 +439,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
mock.Mock(return_value=(1, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
ssh.from_node.return_value = ssh_mock
- with self.assertRaises(IncorrectSetup):
+ with self.assertRaises(IncorrectConfig):
self.s.map_topology_to_infrastructure()
def test_map_topology_to_infrastructure_config_invalid(self):
@@ -586,7 +554,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
def test___get_traffic_imix_exception(self):
with mock.patch.dict(self.scenario_cfg["traffic_options"], {'imix': ''}):
- self.assertEqual({}, self.s._get_traffic_imix())
+ self.assertEqual({'imix': {'64B': 100}}, self.s._get_traffic_imix())
def test__fill_traffic_profile(self):
with mock.patch.dict("sys.modules", STL_MOCKS):
@@ -694,11 +662,11 @@ class TestNetworkServiceTestCase(unittest.TestCase):
def test_probe_missing_values(self):
netdevs = self.SAMPLE_NETDEVS.copy()
network = {'local_mac': '0a:de:ad:be:ef:f5'}
- NetworkServiceTestCase._probe_missing_values(netdevs, network, set())
+ NetworkServiceTestCase._probe_missing_values(netdevs, network)
assert network['vpci'] == '0000:0b:00.0'
network = {'local_mac': '0a:de:ad:be:ef:f4'}
- NetworkServiceTestCase._probe_missing_values(netdevs, network, set())
+ NetworkServiceTestCase._probe_missing_values(netdevs, network)
assert network['vpci'] == '0000:00:19.0'
def test_open_relative_path(self):
diff --git a/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py b/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py
index 3b9f99b08..de5bae2f3 100644
--- a/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py
+++ b/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py
@@ -28,8 +28,6 @@ from yardstick.benchmark.scenarios.networking import vsperf_dpdk
@mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.subprocess')
@mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.ssh')
-@mock.patch("yardstick.benchmark.scenarios.networking.vsperf_dpdk.open",
- mock.mock_open())
class VsperfDPDKTestCase(unittest.TestCase):
def setUp(self):
diff --git a/tests/unit/common/test_utils.py b/tests/unit/common/test_utils.py
index 663226242..923ec4aaa 100644
--- a/tests/unit/common/test_utils.py
+++ b/tests/unit/common/test_utils.py
@@ -20,6 +20,7 @@ from itertools import product, chain
import mock
from six.moves import configparser
+import yardstick
from yardstick.common import utils
from yardstick.common import constants
@@ -45,47 +46,25 @@ class IterSubclassesTestCase(unittest.TestCase):
self.assertEqual([B, C, D], list(utils.itersubclasses(A)))
-class TryAppendModuleTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.utils.importutils')
- def test_try_append_module_not_in_modules(self, mock_importutils):
-
- modules = {}
- name = 'foo'
- utils.try_append_module(name, modules)
- mock_importutils.import_module.assert_called_with(name)
-
- @mock.patch('yardstick.common.utils.importutils')
- def test_try_append_module_already_in_modules(self, mock_importutils):
-
- modules = {'foo'}
- name = 'foo'
- utils.try_append_module(name, modules)
- self.assertFalse(mock_importutils.import_module.called)
-
-
class ImportModulesFromPackageTestCase(unittest.TestCase):
@mock.patch('yardstick.common.utils.os.walk')
- @mock.patch('yardstick.common.utils.try_append_module')
- def test_import_modules_from_package_no_mod(self, mock_append, mock_walk):
-
- sep = os.sep
+ def test_import_modules_from_package_no_mod(self, mock_walk):
+ yardstick_root = os.path.dirname(os.path.dirname(yardstick.__file__))
mock_walk.return_value = ([
- ('..' + sep + 'foo', ['bar'], ['__init__.py']),
- ('..' + sep + 'foo' + sep + 'bar', [], ['baz.txt', 'qux.rst'])
+ (os.path.join(yardstick_root, 'foo'), ['bar'], ['__init__.py']),
+ (os.path.join(yardstick_root, 'foo', 'bar'), [], ['baz.txt', 'qux.rst'])
])
utils.import_modules_from_package('foo.bar')
- self.assertFalse(mock_append.called)
@mock.patch('yardstick.common.utils.os.walk')
@mock.patch('yardstick.common.utils.importutils')
def test_import_modules_from_package(self, mock_importutils, mock_walk):
- sep = os.sep
+ yardstick_root = os.path.dirname(os.path.dirname(yardstick.__file__))
mock_walk.return_value = ([
- ('foo' + sep + '..' + sep + 'bar', [], ['baz.py'])
+ (os.path.join(yardstick_root, 'foo', os.pardir, 'bar'), [], ['baz.py'])
])
utils.import_modules_from_package('foo.bar')
diff --git a/tests/unit/common/test_yaml_loader.py b/tests/unit/common/test_yaml_loader.py
new file mode 100644
index 000000000..90cbb8157
--- /dev/null
+++ b/tests/unit/common/test_yaml_loader.py
@@ -0,0 +1,32 @@
+# 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.
+
+# yardstick: this file is copied from python-heatclient and slightly modified
+
+from __future__ import absolute_import
+import unittest
+
+from yardstick.common import yaml_loader
+
+
+class TemplateFormatTestCase(unittest.TestCase):
+
+ def test_parse_to_value_exception(self):
+
+ self.assertEquals(yaml_loader.yaml_load("string"), u"string")
+
+
+def main():
+ unittest.main()
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/unit/network_services/helpers/test_samplevnf_helper.py b/tests/unit/network_services/helpers/test_samplevnf_helper.py
index b89668577..608f31747 100644
--- a/tests/unit/network_services/helpers/test_samplevnf_helper.py
+++ b/tests/unit/network_services/helpers/test_samplevnf_helper.py
@@ -198,6 +198,8 @@ class TestMultiPortConfig(unittest.TestCase):
opnfv_vnf.get_ports_gateway6 = mock.Mock(return_value=u'1.1.1.1')
opnfv_vnf.get_netmask_gateway6 = mock.Mock(return_value=u'255.255.255.0')
opnfv_vnf.txrx_pipeline = ''
+ opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+ opnfv_vnf.interfaces = opnfv_vnf.vnfd['vdu'][0]['external-interface']
opnfv_vnf.rules = ''
self.assertIsNotNone(opnfv_vnf.generate_rule_config())
opnfv_vnf.rules = 'new'
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 87d76f829..ae4c58de1 100644
--- a/tests/unit/network_services/libs/ixia_libs/test_IxNet.py
+++ b/tests/unit/network_services/libs/ixia_libs/test_IxNet.py
@@ -32,19 +32,14 @@ class TestIxNextgen(unittest.TestCase):
ixnet_gen = IxNextgen()
self.assertIsNone(ixnet_gen._bidir)
- @mock.patch("yardstick.network_services.libs.ixia_libs.IxNet.IxNet.IxNetwork")
@mock.patch("yardstick.network_services.libs.ixia_libs.IxNet.IxNet.sys")
- def test_connect(self, mock_sys, mock_ix_network):
- mock_ix_network.IxNet.return_value = mock_ixnet = mock.Mock()
+ def test_connect(self, mock_sys):
ixnet_gen = IxNextgen()
ixnet_gen.get_config = mock.MagicMock()
ixnet_gen.get_ixnet = mock.MagicMock()
- result = ixnet_gen._connect({"py_lib_path": "/tmp"})
- self.assertIsNotNone(result)
- self.assertEqual(mock_ix_network.IxNet.call_count, 1)
- self.assertEqual(mock_ixnet.connect.call_count, 1)
+ self.assertRaises(ImportError, ixnet_gen._connect, {"py_lib_path": "/tmp"})
def test_clear_ixia_config(self):
ixnet = mock.MagicMock()
@@ -455,7 +450,7 @@ class TestIxNextgen(unittest.TestCase):
}
ixnet = mock.MagicMock()
- ixnet.remapIds.return_value=["0"]
+ ixnet.remapIds.return_value = ["0"]
ixnet.setMultiAttribute.return_value = [1]
ixnet.commit.return_value = [1]
ixnet.getList.side_effect = [[1], [0, 1], [0], ["srcIp", "dstIp"]]
@@ -865,7 +860,7 @@ class TestIxNextgen(unittest.TestCase):
ixnet = mock.MagicMock()
ixnet.setMultiAttribute.return_value = [1]
ixnet.commit.return_value = [1]
- ixnet.getList.side_effect=[
+ ixnet.getList.side_effect = [
[1],
[1],
[1],
diff --git a/tests/unit/network_services/nfvi/test_resource.py b/tests/unit/network_services/nfvi/test_resource.py
index cb26fd085..072f06edf 100644
--- a/tests/unit/network_services/nfvi/test_resource.py
+++ b/tests/unit/network_services/nfvi/test_resource.py
@@ -108,13 +108,13 @@ class TestResourceProfile(unittest.TestCase):
def test_get_cpu_data(self):
reskey = ["", "cpufreq", "cpufreq-0"]
value = "metric:10"
- val = self.resource_profile.get_cpu_data(reskey, value)
+ val = self.resource_profile.get_cpu_data(reskey[1], reskey[2], value)
self.assertIsNotNone(val)
def test_get_cpu_data_error(self):
reskey = ["", "", ""]
value = "metric:10"
- val = self.resource_profile.get_cpu_data(reskey, value)
+ val = self.resource_profile.get_cpu_data(reskey[0], reskey[1], value)
self.assertEqual(val, ('error', 'Invalid', '', ''))
def test__start_collectd(self):
diff --git a/tests/unit/network_services/test_yang_model.py b/tests/unit/network_services/test_yang_model.py
index 28367f316..0b29da701 100644
--- a/tests/unit/network_services/test_yang_model.py
+++ b/tests/unit/network_services/test_yang_model.py
@@ -95,7 +95,7 @@ class YangModelTestCase(unittest.TestCase):
y._get_entries()
self.assertEqual(y._rules, '')
- @mock.patch('yaml.safe_load')
+ @mock.patch('yardstick.network_services.yang_model.yaml_load')
@mock.patch('yardstick.network_services.yang_model.open')
def test__read_config(self, mock_open, mock_safe_load):
cfg = "yang.yaml"
diff --git a/tests/unit/network_services/traffic_profile/test_fixed.py b/tests/unit/network_services/traffic_profile/test_fixed.py
index 8b44719a1..84843178e 100644
--- a/tests/unit/network_services/traffic_profile/test_fixed.py
+++ b/tests/unit/network_services/traffic_profile/test_fixed.py
@@ -16,68 +16,11 @@
#
from __future__ import absolute_import
+
import unittest
import mock
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+from tests.unit import STL_MOCKS
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
diff --git a/tests/unit/network_services/traffic_profile/test_http_ixload.py b/tests/unit/network_services/traffic_profile/test_http_ixload.py
index 2e1b6f4ff..5110439fd 100644
--- a/tests/unit/network_services/traffic_profile/test_http_ixload.py
+++ b/tests/unit/network_services/traffic_profile/test_http_ixload.py
@@ -16,11 +16,33 @@
from __future__ import absolute_import
import unittest
import mock
-import runpy
from oslo_serialization import jsonutils
from yardstick.network_services.traffic_profile import http_ixload
+from yardstick.network_services.traffic_profile.http_ixload import \
+ join_non_strings, validate_non_string_sequence
+
+
+class TestJoinNonStrings(unittest.TestCase):
+
+ def test_validate_non_string_sequence(self):
+ self.assertEqual(validate_non_string_sequence([1, 2, 3]), [1, 2, 3])
+ self.assertIsNone(validate_non_string_sequence('123'))
+ self.assertIsNone(validate_non_string_sequence(1))
+
+ self.assertEqual(validate_non_string_sequence(1, 2), 2)
+ self.assertEqual(validate_non_string_sequence(1, default=2), 2)
+
+ with self.assertRaises(RuntimeError):
+ validate_non_string_sequence(1, raise_exc=RuntimeError)
+
+ def test_join_non_strings(self):
+ self.assertEqual(join_non_strings(':'), '')
+ self.assertEqual(join_non_strings(':', 'a'), 'a')
+ self.assertEqual(join_non_strings(':', 'a', 2, 'c'), 'a:2:c')
+ self.assertEqual(join_non_strings(':', ['a', 2, 'c']), 'a:2:c')
+ self.assertEqual(join_non_strings(':', 'abc'), 'abc')
class TestIxLoadTrafficGen(unittest.TestCase):
diff --git a/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py b/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py
index 6dba64af9..b2cb9dfea 100644
--- a/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py
+++ b/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py
@@ -20,65 +20,7 @@ from __future__ import division
import unittest
import mock
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+from tests.unit import STL_MOCKS
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
diff --git a/tests/unit/network_services/traffic_profile/test_prox_acl.py b/tests/unit/network_services/traffic_profile/test_prox_acl.py
index 252c655da..be172f26b 100644
--- a/tests/unit/network_services/traffic_profile/test_prox_acl.py
+++ b/tests/unit/network_services/traffic_profile/test_prox_acl.py
@@ -14,69 +14,11 @@
#
from __future__ import absolute_import
-import unittest
+import unittest
import mock
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+from tests.unit import STL_MOCKS
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
diff --git a/tests/unit/network_services/traffic_profile/test_prox_binsearch.py b/tests/unit/network_services/traffic_profile/test_prox_binsearch.py
index 74e6121a7..72b86709c 100644
--- a/tests/unit/network_services/traffic_profile/test_prox_binsearch.py
+++ b/tests/unit/network_services/traffic_profile/test_prox_binsearch.py
@@ -14,69 +14,11 @@
#
from __future__ import absolute_import
-import unittest
+import unittest
import mock
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+from tests.unit import STL_MOCKS
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
diff --git a/tests/unit/network_services/traffic_profile/test_prox_profile.py b/tests/unit/network_services/traffic_profile/test_prox_profile.py
index a2ad0333f..14223da0f 100644
--- a/tests/unit/network_services/traffic_profile/test_prox_profile.py
+++ b/tests/unit/network_services/traffic_profile/test_prox_profile.py
@@ -14,69 +14,11 @@
#
from __future__ import absolute_import
-import unittest
+import unittest
import mock
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+from tests.unit import STL_MOCKS
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
diff --git a/tests/unit/network_services/traffic_profile/test_prox_ramp.py b/tests/unit/network_services/traffic_profile/test_prox_ramp.py
index 19e6ff8cb..357298759 100644
--- a/tests/unit/network_services/traffic_profile/test_prox_ramp.py
+++ b/tests/unit/network_services/traffic_profile/test_prox_ramp.py
@@ -14,69 +14,11 @@
#
from __future__ import absolute_import
-import unittest
+import unittest
import mock
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+from tests.unit import STL_MOCKS
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
diff --git a/tests/unit/network_services/traffic_profile/test_rfc2544.py b/tests/unit/network_services/traffic_profile/test_rfc2544.py
index dcaf43dc5..aef0b93de 100644
--- a/tests/unit/network_services/traffic_profile/test_rfc2544.py
+++ b/tests/unit/network_services/traffic_profile/test_rfc2544.py
@@ -17,68 +17,12 @@
from __future__ import absolute_import
from __future__ import division
+
import unittest
import mock
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+from tests.unit import STL_MOCKS
+
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
@@ -115,9 +59,9 @@ class TestRFC2544Profile(unittest.TestCase):
'outer_l3v4': {'dstip4': '1.1.1.1-1.15.255.255',
'proto': 'udp',
'srcip4': '90.90.1.1-90.105.255.255',
- 'dscp': 0, 'ttl': 32},
+ 'dscp': 0, 'ttl': 32, 'count': 1},
'outer_l4': {'srcport': '2001',
- 'dsrport': '1234'}}},
+ 'dsrport': '1234', 'count': 1}}},
'private_1': {'ipv4':
{'outer_l2': {'framesize':
{'64B': '100', '1518B': '0',
@@ -127,9 +71,9 @@ class TestRFC2544Profile(unittest.TestCase):
'outer_l3v4': {'dstip4': '9.9.1.1-90.105.255.255',
'proto': 'udp',
'srcip4': '1.1.1.1-1.15.255.255',
- 'dscp': 0, 'ttl': 32},
+ 'dscp': 0, 'ttl': 32, 'count': 1},
'outer_l4': {'dstport': '2001',
- 'srcport': '1234'}}},
+ 'srcport': '1234', 'count': 1}}},
'schema': 'isb:traffic_profile:0.1'}
def test___init__(self):
diff --git a/tests/unit/network_services/traffic_profile/test_traffic_profile.py b/tests/unit/network_services/traffic_profile/test_traffic_profile.py
index fd769e6e0..9a78c36a3 100644
--- a/tests/unit/network_services/traffic_profile/test_traffic_profile.py
+++ b/tests/unit/network_services/traffic_profile/test_traffic_profile.py
@@ -16,69 +16,12 @@
#
from __future__ import absolute_import
-import unittest
+import unittest
import mock
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+from tests.unit import STL_MOCKS
+
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
@@ -117,9 +60,11 @@ class TestTrexProfile(unittest.TestCase):
'outer_l3v4': {'dstip4': '1.1.1.1-1.1.2.2',
'proto': 'udp',
'srcip4': '9.9.1.1-90.1.2.2',
- 'dscp': 0, 'ttl': 32},
+ 'dscp': 0, 'ttl': 32,
+ 'count': 1},
'outer_l4': {'srcport': '2001',
- 'dsrport': '1234'}}},
+ 'dsrport': '1234',
+ 'count': 1}}},
'private': {'ipv4':
{'outer_l2': {'framesize':
{'64B': '100', '1518B': '0',
@@ -131,9 +76,10 @@ class TestTrexProfile(unittest.TestCase):
'outer_l3v4': {'dstip4': '9.9.1.1-90.105.255.255',
'proto': 'udp',
'srcip4': '1.1.1.1-1.15.255.255',
- 'dscp': 0, 'ttl': 32},
+ 'dscp': 0, 'ttl': 32, 'count': 1},
'outer_l4': {'dstport': '2001',
- 'srcport': '1234'}}},
+ 'srcport': '1234',
+ 'count': 1}}},
'schema': 'isb:traffic_profile:0.1'}
PROFILE_v6 = {'description': 'Traffic profile to run RFC2544 latency',
'name': 'rfc2544',
@@ -149,9 +95,11 @@ class TestTrexProfile(unittest.TestCase):
'outer_l3v4': {'dstip6': '0064:ff9b:0:0:0:0:9810:6414-0064:ff9b:0:0:0:0:9810:6420',
'proto': 'udp',
'srcip6': '0064:ff9b:0:0:0:0:9810:2814-0064:ff9b:0:0:0:0:9810:2820',
- 'dscp': 0, 'ttl': 32},
+ 'dscp': 0, 'ttl': 32,
+ 'count': 1},
'outer_l4': {'srcport': '2001',
- 'dsrport': '1234'}}},
+ 'dsrport': '1234',
+ 'count': 1}}},
'private':
{'ipv6': {'outer_l2': {'framesize':
{'64B': '100', '1518B': '0',
@@ -163,9 +111,11 @@ class TestTrexProfile(unittest.TestCase):
'outer_l3v4': {'dstip6': '0064:ff9b:0:0:0:0:9810:2814-0064:ff9b:0:0:0:0:9810:2820',
'proto': 'udp',
'srcip6': '0064:ff9b:0:0:0:0:9810:6414-0064:ff9b:0:0:0:0:9810:6420',
- 'dscp': 0, 'ttl': 32},
+ 'dscp': 0, 'ttl': 32,
+ 'count': 1},
'outer_l4': {'dstport': '2001',
- 'srcport': '1234'}}},
+ 'srcport': '1234',
+ 'count': 1}}},
'schema': 'isb:traffic_profile:0.1'}
def test___init__(self):
diff --git a/tests/unit/network_services/vnf_generic/test_vnfdgen.py b/tests/unit/network_services/vnf_generic/test_vnfdgen.py
index 44d9058dc..c2b923568 100644
--- a/tests/unit/network_services/vnf_generic/test_vnfdgen.py
+++ b/tests/unit/network_services/vnf_generic/test_vnfdgen.py
@@ -21,6 +21,7 @@ from __future__ import absolute_import
import unittest
from six.moves import range
+from yardstick.common.yaml_loader import yaml_load
from yardstick.network_services.vnf_generic import vnfdgen
TREX_VNFD_TEMPLATE = """
@@ -65,6 +66,8 @@ vnfd:vnfd-catalog:
dst_mac: '{{ interfaces.xe1.dst_mac }}'
bandwidth: 10 Gbps
vnfd-connection-point-ref: xe1
+ routing_table: {{ routing_table }}
+ nd_route_tbl: {{ nd_route_tbl }}
benchmark:
kpi:
@@ -126,6 +129,22 @@ COMPLETE_TREX_VNFD = \
'vpci': '0000:00:10.1'},
'vnfd-connection-point-ref': 'xe1'}],
'id': 'trexgen-baremetal',
+ 'nd_route_tbl': [{'gateway': '0064:ff9b:0:0:0:0:9810:6414',
+ 'if': 'xe0',
+ 'netmask': '112',
+ 'network': '0064:ff9b:0:0:0:0:9810:6414'},
+ {'gateway': '0064:ff9b:0:0:0:0:9810:2814',
+ 'if': 'xe1',
+ 'netmask': '112',
+ 'network': '0064:ff9b:0:0:0:0:9810:2814'}],
+ 'routing_table': [{'gateway': '152.16.100.20',
+ 'if': 'xe0',
+ 'netmask': '255.255.255.0',
+ 'network': '152.16.100.20'},
+ {'gateway': '152.16.40.20',
+ 'if': 'xe1',
+ 'netmask': '255.255.255.0',
+ 'network': '152.16.40.20'}],
'name': 'trexgen-baremetal'}]}]}}
NODE_CFG = {'ip': '1.1.1.1',
@@ -144,7 +163,24 @@ NODE_CFG = {'ip': '1.1.1.1',
'dst_mac': '00:01:02:03:04:06',
'local_ip': '2.1.1.2',
'local_mac': '00:01:02:03:05:06',
- 'vpci': '0000:00:10.1'}}}
+ 'vpci': '0000:00:10.1'}},
+ 'nd_route_tbl': [{u'gateway': u'0064:ff9b:0:0:0:0:9810:6414',
+ u'if': u'xe0',
+ u'netmask': u'112',
+ u'network': u'0064:ff9b:0:0:0:0:9810:6414'},
+ {u'gateway': u'0064:ff9b:0:0:0:0:9810:2814',
+ u'if': u'xe1',
+ u'netmask': u'112',
+ u'network': u'0064:ff9b:0:0:0:0:9810:2814'}],
+ 'routing_table': [{u'gateway': u'152.16.100.20',
+ u'if': u'xe0',
+ u'netmask': u'255.255.255.0',
+ u'network': u'152.16.100.20'},
+ {u'gateway': u'152.16.40.20',
+ u'if': u'xe1',
+ u'netmask': u'255.255.255.0',
+ u'network': u'152.16.40.20'}],
+ }
TRAFFIC_PROFILE_TPL = """
@@ -169,6 +205,20 @@ TRAFFIC_PROFILE = {
"1518B": '40'}}}}]}
+class TestRender(unittest.TestCase):
+
+ def test_render_none(self):
+
+ tmpl = "{{ routing_table }}"
+ self.assertEqual(vnfdgen.render(tmpl, routing_table=None), u'~')
+ self.assertEqual(yaml_load(vnfdgen.render(tmpl, routing_table=None)), None)
+
+ def test_render_unicode_dict(self):
+
+ tmpl = "{{ routing_table }}"
+ self.assertEqual(yaml_load(vnfdgen.render(tmpl, **NODE_CFG)), NODE_CFG["routing_table"])
+
+
class TestVnfdGen(unittest.TestCase):
""" Class to verify VNFS testcases """
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_acl_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_acl_vnf.py
index a63a59d48..7570067b9 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_acl_vnf.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_acl_vnf.py
@@ -16,70 +16,13 @@
#
from __future__ import absolute_import
+
import unittest
import mock
import os
+from tests.unit import STL_MOCKS
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_cgnapt_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_cgnapt_vnf.py
index bf226d2c8..f214d66f6 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_cgnapt_vnf.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_cgnapt_vnf.py
@@ -19,68 +19,10 @@ from __future__ import absolute_import
import os
import unittest
-
import mock
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+from tests.unit import STL_MOCKS
+
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_iniparser.py b/tests/unit/network_services/vnf_generic/vnf/test_iniparser.py
index 53481ddd0..b74e5d9fd 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_iniparser.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_iniparser.py
@@ -14,70 +14,13 @@
#
from __future__ import absolute_import
+
import unittest
from contextlib import contextmanager
-
import mock
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+from tests.unit import STL_MOCKS
+
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py b/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py
index 90ec3f374..98eccae4f 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py
@@ -23,69 +23,10 @@ import unittest
from collections import OrderedDict
from itertools import repeat, chain
from contextlib import contextmanager
-
import mock
+from tests.unit import STL_MOCKS
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_prox_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_prox_vnf.py
index 453100b90..c727cb7fb 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_prox_vnf.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_prox_vnf.py
@@ -19,71 +19,13 @@ from __future__ import absolute_import
import os
import unittest
-
import mock
from copy import deepcopy
-SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
+from tests.unit import STL_MOCKS
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+
+SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py
index af0d2ddde..455e44ec9 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py
@@ -18,11 +18,13 @@
# Unittest for yardstick.network_services.vnf_generic.vnf.sample_vnf
from __future__ import absolute_import
+
import unittest
import mock
from copy import deepcopy
from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
+from tests.unit import STL_MOCKS
from yardstick.benchmark.contexts.base import Context
from yardstick.network_services.nfvi.resource import ResourceProfile
from yardstick.network_services.traffic_profile.base import TrafficProfile
@@ -34,66 +36,6 @@ class MockError(BaseException):
pass
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
-
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
stl_patch.start()
@@ -1142,7 +1084,7 @@ class TestClientResourceHelper(unittest.TestCase):
}
@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.LOG')
- @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.STLStateError',
+ @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.STLError',
new_callable=lambda: MockError)
def test_get_stats_not_connected(self, mock_state_error, mock_logger):
vnfd_helper = VnfdHelper({})
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 cda44127e..5c81aa886 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
@@ -16,69 +16,13 @@
#
from __future__ import absolute_import
+
import unittest
import mock
import subprocess
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+from tests.unit import STL_MOCKS
+
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py
index 949bfb3d4..45bbfaea3 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py
@@ -16,74 +16,16 @@
#
from __future__ import absolute_import
+
import unittest
import mock
from multiprocessing import Queue
from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
+from tests.unit import STL_MOCKS
SSH_HELPER = "yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper"
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
-
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
stl_patch.start()
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py
index 1a01b9e15..12abadf98 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py
@@ -14,76 +14,17 @@
#
from __future__ import absolute_import
+
import unittest
import mock
from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
+from tests.unit import STL_MOCKS
SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
NAME = 'vnf__1'
-
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
-
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
stl_patch.start()
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 8f7f05772..ca8150cb2 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
@@ -16,68 +16,13 @@
#
from __future__ import absolute_import
+
import os
import unittest
import mock
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+
+from tests.unit import STL_MOCKS
+
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
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 7dc303852..3dcb02f02 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
@@ -16,70 +16,14 @@
#
from __future__ import absolute_import
+
import unittest
import mock
-SSH_HELPER = "yardstick.ssh.SSH"
+from tests.unit import STL_MOCKS
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+
+SSH_HELPER = "yardstick.ssh.SSH"
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
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 6fb5d080f..65370dfa5 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
@@ -16,74 +16,16 @@
#
from __future__ import absolute_import
+
import unittest
import mock
from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
+from tests.unit import STL_MOCKS
NAME = 'vnf_1'
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
-
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
stl_patch.start()
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_udp_replay.py b/tests/unit/network_services/vnf_generic/vnf/test_udp_replay.py
index 08bf06b74..f0d75d57b 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_udp_replay.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_udp_replay.py
@@ -16,70 +16,13 @@
#
from __future__ import absolute_import
+
import unittest
import mock
import os
+from tests.unit import STL_MOCKS
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_vfw_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_vfw_vnf.py
index d817b164c..7dae89f40 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_vfw_vnf.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_vfw_vnf.py
@@ -16,69 +16,13 @@
#
from __future__ import absolute_import
+
import unittest
import mock
import os
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+from tests.unit import STL_MOCKS
+
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
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 80b4a5108..5e66390e3 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
@@ -16,77 +16,18 @@
#
from __future__ import absolute_import
+import six.moves.configparser as configparser
import os
import unittest
-
-import six.moves.configparser as configparser
import mock
from multiprocessing import Process, Queue
+from tests.unit import STL_MOCKS
from yardstick.network_services.vnf_generic.vnf.base import QueueFileWrapper
-SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
-STL_MOCKS = {
- 'stl': mock.MagicMock(),
- 'stl.trex_stl_lib': mock.MagicMock(),
- 'stl.trex_stl_lib.base64': mock.MagicMock(),
- 'stl.trex_stl_lib.binascii': mock.MagicMock(),
- 'stl.trex_stl_lib.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.copy': mock.MagicMock(),
- 'stl.trex_stl_lib.datetime': mock.MagicMock(),
- 'stl.trex_stl_lib.functools': mock.MagicMock(),
- 'stl.trex_stl_lib.imp': mock.MagicMock(),
- 'stl.trex_stl_lib.inspect': mock.MagicMock(),
- 'stl.trex_stl_lib.json': mock.MagicMock(),
- 'stl.trex_stl_lib.linecache': mock.MagicMock(),
- 'stl.trex_stl_lib.math': mock.MagicMock(),
- 'stl.trex_stl_lib.os': mock.MagicMock(),
- 'stl.trex_stl_lib.platform': mock.MagicMock(),
- 'stl.trex_stl_lib.pprint': mock.MagicMock(),
- 'stl.trex_stl_lib.random': mock.MagicMock(),
- 'stl.trex_stl_lib.re': mock.MagicMock(),
- 'stl.trex_stl_lib.scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.socket': mock.MagicMock(),
- 'stl.trex_stl_lib.string': mock.MagicMock(),
- 'stl.trex_stl_lib.struct': mock.MagicMock(),
- 'stl.trex_stl_lib.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.threading': mock.MagicMock(),
- 'stl.trex_stl_lib.time': mock.MagicMock(),
- 'stl.trex_stl_lib.traceback': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'stl.trex_stl_lib.types': mock.MagicMock(),
- 'stl.trex_stl_lib.utils': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.common': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.json': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.os': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.random': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.re': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.string': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'stl.trex_stl_lib.warnings': mock.MagicMock(),
- 'stl.trex_stl_lib.yaml': mock.MagicMock(),
- 'stl.trex_stl_lib.zlib': mock.MagicMock(),
- 'stl.trex_stl_lib.zmq': mock.MagicMock(),
-}
+SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
diff --git a/yardstick/benchmark/contexts/node.py b/yardstick/benchmark/contexts/node.py
index 35c64335d..250032efc 100644
--- a/yardstick/benchmark/contexts/node.py
+++ b/yardstick/benchmark/contexts/node.py
@@ -17,12 +17,12 @@ import tempfile
import six
import pkg_resources
-import yaml
from yardstick import ssh
from yardstick.benchmark.contexts.base import Context
from yardstick.common.constants import ANSIBLE_DIR, YARDSTICK_ROOT_PATH
from yardstick.common.ansible_common import AnsibleCommon
+from yardstick.common.yaml_loader import yaml_load
LOG = logging.getLogger(__name__)
@@ -55,7 +55,7 @@ class NodeContext(Context):
with open(self.file_path) as stream:
LOG.info("Parsing pod file: %s", self.file_path)
- cfg = yaml.safe_load(stream)
+ cfg = yaml_load(stream)
return cfg
def init(self, attrs):
diff --git a/yardstick/benchmark/contexts/standalone.py b/yardstick/benchmark/contexts/standalone/__init__.py
index ae1046974..f0ef1d560 100644
--- a/yardstick/benchmark/contexts/standalone.py
+++ b/yardstick/benchmark/contexts/standalone/__init__.py
@@ -18,12 +18,12 @@ import logging
import os
import errno
import collections
-import yaml
import time
from yardstick.benchmark.contexts.base import Context
from yardstick.common.constants import YARDSTICK_ROOT_PATH
from yardstick.common.utils import import_modules_from_package, itersubclasses
+from yardstick.common.yaml_loader import yaml_load
LOG = logging.getLogger(__name__)
@@ -50,7 +50,7 @@ class StandaloneContext(Context):
with open(self.file_path) as stream:
LOG.info("Parsing pod file: %s", self.file_path)
- cfg = yaml.safe_load(stream)
+ cfg = yaml_load(stream)
return cfg
def get_nfvi_obj(self):
diff --git a/yardstick/benchmark/contexts/ovsdpdk.py b/yardstick/benchmark/contexts/standalone/ovsdpdk.py
index cf5529d89..cf5529d89 100644
--- a/yardstick/benchmark/contexts/ovsdpdk.py
+++ b/yardstick/benchmark/contexts/standalone/ovsdpdk.py
diff --git a/yardstick/benchmark/contexts/sriov.py b/yardstick/benchmark/contexts/standalone/sriov.py
index fe27d2579..fe27d2579 100644
--- a/yardstick/benchmark/contexts/sriov.py
+++ b/yardstick/benchmark/contexts/standalone/sriov.py
diff --git a/yardstick/benchmark/core/plugin.py b/yardstick/benchmark/core/plugin.py
index a741d5e74..24f1b6b25 100644
--- a/yardstick/benchmark/core/plugin.py
+++ b/yardstick/benchmark/core/plugin.py
@@ -13,13 +13,13 @@ from __future__ import print_function
from __future__ import absolute_import
import os
import sys
-import yaml
import time
import logging
import pkg_resources
import yardstick.ssh as ssh
from yardstick.common.task_template import TaskTemplate
+from yardstick.common.yaml_loader import yaml_load
LOG = logging.getLogger(__name__)
@@ -153,7 +153,7 @@ class PluginParser(object):
raise e
print("Input plugin is:\n%s\n" % rendered_plugin)
- cfg = yaml.safe_load(rendered_plugin)
+ cfg = yaml_load(rendered_plugin)
except IOError as ioerror:
sys.exit(ioerror)
diff --git a/yardstick/benchmark/core/task.py b/yardstick/benchmark/core/task.py
index ea3239edf..2c67e736c 100644
--- a/yardstick/benchmark/core/task.py
+++ b/yardstick/benchmark/core/task.py
@@ -29,6 +29,7 @@ from jinja2 import Environment
from yardstick.benchmark.contexts.base import Context
from yardstick.benchmark.runners import base as base_runner
+from yardstick.common.yaml_loader import yaml_load
from yardstick.dispatcher.base import Base as DispatcherBase
from yardstick.common.task_template import TaskTemplate
from yardstick.common.utils import source_env
@@ -172,6 +173,7 @@ class Task(object): # pragma: no cover
log_format = '%(asctime)s %(name)s %(filename)s:%(lineno)d %(levelname)s %(message)s'
log_formatter = logging.Formatter(log_format)
+ utils.makedirs(constants.TASK_LOG_DIR)
log_path = os.path.join(constants.TASK_LOG_DIR, '{}.log'.format(self.task_id))
log_handler = logging.FileHandler(log_path)
log_handler.setFormatter(log_formatter)
@@ -437,7 +439,7 @@ class TaskParser(object): # pragma: no cover
try:
with open(self.path) as stream:
- cfg = yaml.load(stream)
+ cfg = yaml_load(stream)
except IOError as ioerror:
sys.exit(ioerror)
@@ -501,7 +503,7 @@ class TaskParser(object): # pragma: no cover
raise e
print("Input task is:\n%s\n" % rendered_task)
- cfg = yaml.load(rendered_task)
+ cfg = yaml_load(rendered_task)
except IOError as ioerror:
sys.exit(ioerror)
@@ -657,7 +659,7 @@ def parse_task_args(src_name, args):
return args
try:
- kw = args and yaml.safe_load(args)
+ kw = args and yaml_load(args)
kw = {} if kw is None else kw
except yaml.parser.ParserError as e:
print_invalid_header(src_name, args)
diff --git a/yardstick/benchmark/core/testcase.py b/yardstick/benchmark/core/testcase.py
index 7ab1b08cf..501356726 100644
--- a/yardstick/benchmark/core/testcase.py
+++ b/yardstick/benchmark/core/testcase.py
@@ -12,11 +12,11 @@ from __future__ import absolute_import
from __future__ import print_function
import os
-import yaml
import logging
from yardstick.common.task_template import TaskTemplate
from yardstick.common import constants as consts
+from yardstick.common.yaml_loader import yaml_load
LOG = logging.getLogger(__name__)
@@ -69,7 +69,7 @@ class Testcase(object):
def _parse_testcase(self, testcase_info):
rendered_testcase = TaskTemplate.render(testcase_info)
- testcase_cfg = yaml.safe_load(rendered_testcase)
+ testcase_cfg = yaml_load(rendered_testcase)
test_precondition = testcase_cfg.get('precondition', {})
installer_type = test_precondition.get('installer_type', 'all')
diff --git a/yardstick/benchmark/scenarios/availability/attacker/baseattacker.py b/yardstick/benchmark/scenarios/availability/attacker/baseattacker.py
index a20b26396..61698da43 100644
--- a/yardstick/benchmark/scenarios/availability/attacker/baseattacker.py
+++ b/yardstick/benchmark/scenarios/availability/attacker/baseattacker.py
@@ -8,11 +8,11 @@
##############################################################################
from __future__ import absolute_import
import pkg_resources
-import yaml
import logging
import os
import yardstick.common.utils as utils
+from yardstick.common.yaml_loader import yaml_load
LOG = logging.getLogger(__name__)
@@ -56,7 +56,7 @@ class BaseAttacker(object):
def __init__(self, config, context):
if not BaseAttacker.attacker_cfgs:
with open(attacker_conf_path) as stream:
- BaseAttacker.attacker_cfgs = yaml.safe_load(stream)
+ BaseAttacker.attacker_cfgs = yaml_load(stream)
self._config = config
self._context = context
diff --git a/yardstick/benchmark/scenarios/availability/attacker_conf.yaml b/yardstick/benchmark/scenarios/availability/attacker_conf.yaml
index aa144ab50..ee7ea7d83 100644
--- a/yardstick/benchmark/scenarios/availability/attacker_conf.yaml
+++ b/yardstick/benchmark/scenarios/availability/attacker_conf.yaml
@@ -40,3 +40,7 @@ stress-cpu:
block-io:
inject_script: ha_tools/disk/block_io.bash
recovery_script: ha_tools/disk/recovery_disk_io.bash
+
+kill-corosync:
+ inject_script: ha_tools/fault_process_kill.bash
+ recovery_script: ha_tools/node/reboot_node.bash \ No newline at end of file
diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/node/reboot_node.bash b/yardstick/benchmark/scenarios/availability/ha_tools/node/reboot_node.bash
new file mode 100644
index 000000000..1ee8c9c2f
--- /dev/null
+++ b/yardstick/benchmark/scenarios/availability/ha_tools/node/reboot_node.bash
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+##############################################################################
+# (c) OPNFV, Yin Kanglin and others.
+# 14_ykl@tongji.edu.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# reboot node
+
+reboot \ No newline at end of file
diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/nova/get_server_floatingip.bash b/yardstick/benchmark/scenarios/availability/ha_tools/nova/get_server_floatingip.bash
new file mode 100644
index 000000000..78dd27628
--- /dev/null
+++ b/yardstick/benchmark/scenarios/availability/ha_tools/nova/get_server_floatingip.bash
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+##############################################################################
+# (c) OPNFV, Yin Kanglin and others.
+# 14_ykl@tongji.edu.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# get floating ip of a serer
+# parameter: $1 - server name
+
+set -e
+
+if [ $OS_INSECURE ] && [ "$(echo $OS_INSECURE | tr '[:upper:]' '[:lower:]')" = "true" ]; then
+ SECURE="--insecure"
+else
+ SECURE=""
+fi
+
+openstack ${SECURE} server list -f value | grep $1 | awk '{print $5}' \ No newline at end of file
diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/nova/list_servers.bash b/yardstick/benchmark/scenarios/availability/ha_tools/nova/list_servers.bash
new file mode 100644
index 000000000..0f67c021e
--- /dev/null
+++ b/yardstick/benchmark/scenarios/availability/ha_tools/nova/list_servers.bash
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+##############################################################################
+# (c) OPNFV, Yin Kanglin and others.
+# 14_ykl@tongji.edu.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# list servers
+
+set -e
+
+if [ $OS_INSECURE ] && [ "$(echo $OS_INSECURE | tr '[:upper:]' '[:lower:]')" = "true" ]; then
+ SECURE="--insecure"
+else
+ SECURE=""
+fi
+
+openstack ${SECURE} server list \ No newline at end of file
diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/pacemaker/get_resource_status.bash b/yardstick/benchmark/scenarios/availability/ha_tools/pacemaker/get_resource_status.bash
new file mode 100644
index 000000000..68707cf4f
--- /dev/null
+++ b/yardstick/benchmark/scenarios/availability/ha_tools/pacemaker/get_resource_status.bash
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+##############################################################################
+# (c) OPNFV, Yin Kanglin and others.
+# 14_ykl@tongji.edu.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# get pacemaker resource status
+
+pcs resource show \ No newline at end of file
diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/pacemaker/get_resource_status_host.bash b/yardstick/benchmark/scenarios/availability/ha_tools/pacemaker/get_resource_status_host.bash
new file mode 100644
index 000000000..7a02ccf29
--- /dev/null
+++ b/yardstick/benchmark/scenarios/availability/ha_tools/pacemaker/get_resource_status_host.bash
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+##############################################################################
+# (c) OPNFV, Yin Kanglin and others.
+# 14_ykl@tongji.edu.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# get pacemaker resource status of hosts
+# parameter: $1 - resource name $2 status
+
+pcs resource show | grep $1 -A 3 | grep $2 \ No newline at end of file
diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/pacemaker/get_vip_host.bash b/yardstick/benchmark/scenarios/availability/ha_tools/pacemaker/get_vip_host.bash
new file mode 100644
index 000000000..f4870fdae
--- /dev/null
+++ b/yardstick/benchmark/scenarios/availability/ha_tools/pacemaker/get_vip_host.bash
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+##############################################################################
+# (c) OPNFV, Yin Kanglin and others.
+# 14_ykl@tongji.edu.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# get vip host in pacemaker
+# parameter: $1 - virtual ip name
+
+pcs resource show| grep -w $1 | awk '{print $4}' \ No newline at end of file
diff --git a/yardstick/benchmark/scenarios/availability/monitor/basemonitor.py b/yardstick/benchmark/scenarios/availability/monitor/basemonitor.py
index 6165aba74..0027925d6 100644
--- a/yardstick/benchmark/scenarios/availability/monitor/basemonitor.py
+++ b/yardstick/benchmark/scenarios/availability/monitor/basemonitor.py
@@ -13,7 +13,8 @@ import multiprocessing
import time
import os
import yardstick.common.utils as utils
-import yaml
+
+from yardstick.common.yaml_loader import yaml_load
LOG = logging.getLogger(__name__)
@@ -74,7 +75,7 @@ class BaseMonitor(multiprocessing.Process):
def __init__(self, config, context, data):
if not BaseMonitor.monitor_cfgs:
with open(monitor_conf_path) as stream:
- BaseMonitor.monitor_cfgs = yaml.safe_load(stream)
+ BaseMonitor.monitor_cfgs = yaml_load(stream)
multiprocessing.Process.__init__(self)
self._config = config
self._context = context
diff --git a/yardstick/benchmark/scenarios/availability/operation/baseoperation.py b/yardstick/benchmark/scenarios/availability/operation/baseoperation.py
index 4c2ce82d9..d21b857b5 100644
--- a/yardstick/benchmark/scenarios/availability/operation/baseoperation.py
+++ b/yardstick/benchmark/scenarios/availability/operation/baseoperation.py
@@ -8,11 +8,11 @@
##############################################################################
from __future__ import absolute_import
import pkg_resources
-import yaml
import logging
import os
import yardstick.common.utils as utils
+from yardstick.common.yaml_loader import yaml_load
LOG = logging.getLogger(__name__)
@@ -54,7 +54,7 @@ class BaseOperation(object):
def __init__(self, config, context):
if not BaseOperation.operation_cfgs:
with open(operation_conf_path) as stream:
- BaseOperation.operation_cfgs = yaml.safe_load(stream)
+ BaseOperation.operation_cfgs = yaml_load(stream)
self.key = ''
self._config = config
self._context = context
diff --git a/yardstick/benchmark/scenarios/availability/operation_conf.yaml b/yardstick/benchmark/scenarios/availability/operation_conf.yaml
index 1c39385a9..dc5169196 100644
--- a/yardstick/benchmark/scenarios/availability/operation_conf.yaml
+++ b/yardstick/benchmark/scenarios/availability/operation_conf.yaml
@@ -25,4 +25,13 @@ swift-download-file:
nova-create-flavor:
action_script: ha_tools/nova/create_flavor.bash
- rollback_script: ha_tools/nova/delete_flavor.bash \ No newline at end of file
+ rollback_script: ha_tools/nova/delete_flavor.bash
+
+get-floatingip:
+ action_script: ha_tools/nova/get_server_floatingip.bash
+ rollback_script: ha_tools/nova/list_servers.bash
+
+get-vip-host:
+ action_script: ha_tools/pacemaker/get_vip_host.bash
+ rollback_script: ha_tools/pacemaker/get_resource_status.bash
+
diff --git a/yardstick/benchmark/scenarios/availability/result_checker/baseresultchecker.py b/yardstick/benchmark/scenarios/availability/result_checker/baseresultchecker.py
index ce34d8be0..05b660105 100644
--- a/yardstick/benchmark/scenarios/availability/result_checker/baseresultchecker.py
+++ b/yardstick/benchmark/scenarios/availability/result_checker/baseresultchecker.py
@@ -8,11 +8,11 @@
##############################################################################
from __future__ import absolute_import
import pkg_resources
-import yaml
import logging
import os
import yardstick.common.utils as utils
+from yardstick.common.yaml_loader import yaml_load
LOG = logging.getLogger(__name__)
@@ -58,7 +58,7 @@ class BaseResultChecker(object):
def __init__(self, config, context):
if not BaseResultChecker.resultchecker_cfgs:
with open(resultchecker_conf_path) as stream:
- BaseResultChecker.resultchecker_cfgs = yaml.safe_load(stream)
+ BaseResultChecker.resultchecker_cfgs = yaml_load(stream)
self.actualResult = object()
self.expectedResult = object()
self.success = False
diff --git a/yardstick/benchmark/scenarios/availability/result_checker_conf.yaml b/yardstick/benchmark/scenarios/availability/result_checker_conf.yaml
index 0494a71a7..451cc0f11 100644
--- a/yardstick/benchmark/scenarios/availability/result_checker_conf.yaml
+++ b/yardstick/benchmark/scenarios/availability/result_checker_conf.yaml
@@ -18,4 +18,6 @@ service-checker:
nova-instance-checker:
verify_script: ha_tools/nova/show_instances.bash
nova-flavor-checker:
- verify_script: ha_tools/nova/show_flavors.bash \ No newline at end of file
+ verify_script: ha_tools/nova/show_flavors.bash
+pacemaker-resource-checker:
+ verify_script: ha_tools/pacemaker/get_resource_status_host.bash \ No newline at end of file
diff --git a/yardstick/benchmark/scenarios/availability/util.py b/yardstick/benchmark/scenarios/availability/util.py
index 6fef622bd..d288fcbc1 100644
--- a/yardstick/benchmark/scenarios/availability/util.py
+++ b/yardstick/benchmark/scenarios/availability/util.py
@@ -51,6 +51,8 @@ def build_shell_command(param_config, remote=True, intermediate_variables=None):
def read_stdout_item(stdout, key):
+ if key == "all":
+ return stdout
for item in stdout.splitlines():
if key in item:
attributes = item.split("|")
diff --git a/yardstick/benchmark/scenarios/lib/attach_volume.py b/yardstick/benchmark/scenarios/lib/attach_volume.py
new file mode 100644
index 000000000..88124964b
--- /dev/null
+++ b/yardstick/benchmark/scenarios/lib/attach_volume.py
@@ -0,0 +1,53 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from __future__ import print_function
+from __future__ import absolute_import
+
+import logging
+
+from yardstick.benchmark.scenarios import base
+import yardstick.common.openstack_utils as op_utils
+
+LOG = logging.getLogger(__name__)
+
+
+class AttachVolume(base.Scenario):
+ """Attach a volmeu to an instance"""
+
+ __scenario_type__ = "AttachVolume"
+
+ def __init__(self, scenario_cfg, context_cfg):
+ self.scenario_cfg = scenario_cfg
+ self.context_cfg = context_cfg
+ self.options = self.scenario_cfg['options']
+
+ self.server_id = self.options.get("server_id", "TestServer")
+ self.volume_id = self.options.get("volume_id", None)
+
+ self.setup_done = False
+
+ def setup(self):
+ """scenario setup"""
+
+ self.setup_done = True
+
+ def run(self, result):
+ """execute the test"""
+
+ if not self.setup_done:
+ self.setup()
+
+ status = op_utils.attach_server_volume(self.server_id,
+ self.volume_id)
+
+ if status:
+ LOG.info("Attach volume to server successful!")
+ else:
+ LOG.info("Attach volume to server failed!")
diff --git a/yardstick/benchmark/scenarios/lib/create_floating_ip.py b/yardstick/benchmark/scenarios/lib/create_floating_ip.py
new file mode 100644
index 000000000..328566d48
--- /dev/null
+++ b/yardstick/benchmark/scenarios/lib/create_floating_ip.py
@@ -0,0 +1,60 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from __future__ import print_function
+from __future__ import absolute_import
+
+import logging
+import os
+
+from yardstick.benchmark.scenarios import base
+import yardstick.common.openstack_utils as op_utils
+
+LOG = logging.getLogger(__name__)
+
+
+class CreateFloatingIp(base.Scenario):
+ """Create an OpenStack floating ip"""
+
+ __scenario_type__ = "CreateFloatingIp"
+
+ def __init__(self, scenario_cfg, context_cfg):
+ self.scenario_cfg = scenario_cfg
+ self.context_cfg = context_cfg
+ self.ext_net_id = os.getenv("EXTERNAL_NETWORK", "external")
+
+ self.neutron_client = op_utils.get_neutron_client()
+ self.setup_done = False
+
+ def setup(self):
+ """scenario setup"""
+
+ self.setup_done = True
+
+ def run(self, result):
+ """execute the test"""
+
+ if not self.setup_done:
+ self.setup()
+
+ net_id = op_utils.get_network_id(self.neutron_client, self.ext_net_id)
+ floating_info = op_utils.create_floating_ip(self.neutron_client,
+ extnet_id=net_id)
+ if floating_info:
+ LOG.info("Creating floating ip successful!")
+ else:
+ LOG.error("Creating floating ip failed!")
+
+ try:
+ keys = self.scenario_cfg.get('output', '').split()
+ except KeyError:
+ pass
+ else:
+ values = [floating_info["fip_id"], floating_info["fip_addr"]]
+ return self._push_to_outputs(keys, values)
diff --git a/yardstick/benchmark/scenarios/lib/create_keypair.py b/yardstick/benchmark/scenarios/lib/create_keypair.py
new file mode 100644
index 000000000..2185bfa5d
--- /dev/null
+++ b/yardstick/benchmark/scenarios/lib/create_keypair.py
@@ -0,0 +1,71 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from __future__ import print_function
+from __future__ import absolute_import
+
+import logging
+import paramiko
+
+from yardstick.benchmark.scenarios import base
+import yardstick.common.openstack_utils as op_utils
+
+LOG = logging.getLogger(__name__)
+
+
+class CreateKeypair(base.Scenario):
+ """Create an OpenStack keypair"""
+
+ __scenario_type__ = "CreateKeypair"
+
+ def __init__(self, scenario_cfg, context_cfg):
+ self.scenario_cfg = scenario_cfg
+ self.context_cfg = context_cfg
+ self.options = self.scenario_cfg['options']
+
+ self.key_name = self.options.get("key_name", "yardstick_key")
+ self.key_filename = self.options.get("key_path", "/tmp/yardstick_key")
+
+ self.setup_done = False
+
+ def setup(self):
+ """scenario setup"""
+
+ self.setup_done = True
+
+ def run(self, result):
+ """execute the test"""
+
+ if not self.setup_done:
+ self.setup()
+
+ rsa_key = paramiko.RSAKey.generate(bits=2048, progress_func=None)
+ rsa_key.write_private_key_file(self.key_filename)
+ 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
+
+ keypair = op_utils.create_keypair(self.key_name,
+ self.key_filename + ".pub")
+
+ if keypair:
+ result.update({"keypair_create": 1})
+ LOG.info("Create keypair successful!")
+ else:
+ result.update({"keypair_create": 0})
+ LOG.info("Create keypair failed!")
+ try:
+ keys = self.scenario_cfg.get('output', '').split()
+ except KeyError:
+ pass
+ else:
+ values = [keypair.id]
+ return self._push_to_outputs(keys, values)
diff --git a/yardstick/benchmark/scenarios/lib/create_network.py b/yardstick/benchmark/scenarios/lib/create_network.py
new file mode 100644
index 000000000..cffff132a
--- /dev/null
+++ b/yardstick/benchmark/scenarios/lib/create_network.py
@@ -0,0 +1,64 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from __future__ import print_function
+from __future__ import absolute_import
+
+import logging
+
+from yardstick.benchmark.scenarios import base
+import yardstick.common.openstack_utils as op_utils
+
+LOG = logging.getLogger(__name__)
+
+
+class CreateNetwork(base.Scenario):
+ """Create an OpenStack network"""
+
+ __scenario_type__ = "CreateNetwork"
+
+ def __init__(self, scenario_cfg, context_cfg):
+ self.scenario_cfg = scenario_cfg
+ self.context_cfg = context_cfg
+ self.options = self.scenario_cfg['options']
+
+ self.openstack = self.options.get("openstack_paras", None)
+
+ self.neutron_client = op_utils.get_neutron_client()
+
+ self.setup_done = False
+
+ def setup(self):
+ """scenario setup"""
+
+ self.setup_done = True
+
+ def run(self, result):
+ """execute the test"""
+
+ if not self.setup_done:
+ self.setup()
+
+ openstack_paras = {'network': self.openstack}
+ network_id = op_utils.create_neutron_net(self.neutron_client,
+ openstack_paras)
+ if network_id:
+ result.update({"network_create": 1})
+ LOG.info("Create network successful!")
+ else:
+ result.update({"network_create": 0})
+ LOG.error("Create network failed!")
+
+ try:
+ keys = self.scenario_cfg.get('output', '').split()
+ except KeyError:
+ pass
+ else:
+ values = [network_id]
+ return self._push_to_outputs(keys, values)
diff --git a/yardstick/benchmark/scenarios/lib/create_port.py b/yardstick/benchmark/scenarios/lib/create_port.py
new file mode 100644
index 000000000..6a3a23a10
--- /dev/null
+++ b/yardstick/benchmark/scenarios/lib/create_port.py
@@ -0,0 +1,66 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from __future__ import print_function
+from __future__ import absolute_import
+
+import logging
+
+from yardstick.benchmark.scenarios import base
+import yardstick.common.openstack_utils as op_utils
+
+LOG = logging.getLogger(__name__)
+
+
+class CreatePort(base.Scenario):
+ """Create an OpenStack flavor"""
+
+ __scenario_type__ = "CreatePort"
+
+ def __init__(self, scenario_cfg, context_cfg):
+ self.scenario_cfg = scenario_cfg
+ self.context_cfg = context_cfg
+ self.options = self.scenario_cfg['options']
+
+ self.openstack = self.options.get("openstack_paras", None)
+
+ self.neutron_client = op_utils.get_neutron_client()
+
+ self.setup_done = False
+
+ def setup(self):
+ """scenario setup"""
+
+ self.setup_done = True
+
+ def run(self, result):
+ """execute the test"""
+
+ if not self.setup_done:
+ self.setup()
+
+ openstack_paras = {'port': self.openstack}
+ port = self.neutron_client.create_port(openstack_paras)
+
+ if port:
+ result.update({"Port_Create": 1})
+ LOG.info("Create Port successful!")
+ else:
+ result.update({"Port_Create": 0})
+ LOG.error("Create Port failed!")
+
+ check_result = port['port']['id']
+
+ try:
+ keys = self.scenario_cfg.get('output', '').split()
+ except KeyError:
+ pass
+ else:
+ values = [check_result]
+ return self._push_to_outputs(keys, values)
diff --git a/yardstick/benchmark/scenarios/lib/create_router.py b/yardstick/benchmark/scenarios/lib/create_router.py
new file mode 100644
index 000000000..9aa57ebb2
--- /dev/null
+++ b/yardstick/benchmark/scenarios/lib/create_router.py
@@ -0,0 +1,66 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from __future__ import print_function
+from __future__ import absolute_import
+
+import logging
+
+from yardstick.benchmark.scenarios import base
+import yardstick.common.openstack_utils as op_utils
+
+LOG = logging.getLogger(__name__)
+
+
+class CreateRouter(base.Scenario):
+ """Create an OpenStack router"""
+
+ __scenario_type__ = "CreateRouter"
+
+ def __init__(self, scenario_cfg, context_cfg):
+ self.scenario_cfg = scenario_cfg
+ self.context_cfg = context_cfg
+ self.options = self.scenario_cfg['options']
+
+ self.openstack = self.options.get("openstack_paras", None)
+
+ self.neutron_client = op_utils.get_neutron_client()
+
+ self.setup_done = False
+
+ def setup(self):
+ """scenario setup"""
+
+ self.setup_done = True
+
+ def run(self, result):
+ """execute the test"""
+
+ if not self.setup_done:
+ self.setup()
+
+ openstack_paras = {'router': self.openstack}
+ router_id = op_utils.create_neutron_router(self.neutron_client,
+ openstack_paras)
+ if router_id:
+ result.update({"network_create": 1})
+ LOG.info("Create router successful!")
+ else:
+ result.update({"network_create": 0})
+ LOG.error("Create router failed!")
+
+ check_result = router_id
+
+ try:
+ keys = self.scenario_cfg.get('output', '').split()
+ except KeyError:
+ pass
+ else:
+ values = [check_result]
+ return self._push_to_outputs(keys, values)
diff --git a/yardstick/benchmark/scenarios/lib/create_sec_group.py b/yardstick/benchmark/scenarios/lib/create_sec_group.py
new file mode 100644
index 000000000..3d1aec9e8
--- /dev/null
+++ b/yardstick/benchmark/scenarios/lib/create_sec_group.py
@@ -0,0 +1,65 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from __future__ import print_function
+from __future__ import absolute_import
+
+import logging
+
+from yardstick.benchmark.scenarios import base
+import yardstick.common.openstack_utils as op_utils
+
+LOG = logging.getLogger(__name__)
+
+
+class CreateSecgroup(base.Scenario):
+ """Create an OpenStack security group"""
+
+ __scenario_type__ = "CreateSecgroup"
+
+ def __init__(self, scenario_cfg, context_cfg):
+ self.scenario_cfg = scenario_cfg
+ self.context_cfg = context_cfg
+ self.options = self.scenario_cfg['options']
+
+ self.sg_name = self.options.get("sg_name", "yardstick_sec_group")
+ self.description = self.options.get("description", None)
+ self.neutron_client = op_utils.get_neutron_client()
+
+ self.setup_done = False
+
+ def setup(self):
+ """scenario setup"""
+
+ self.setup_done = True
+
+ def run(self, result):
+ """execute the test"""
+
+ if not self.setup_done:
+ self.setup()
+
+ sg_id = op_utils.create_security_group_full(self.neutron_client,
+ sg_name=self.sg_name,
+ sg_description=self.description)
+
+ if sg_id:
+ result.update({"sg_create": 1})
+ LOG.info("Create security group successful!")
+ else:
+ result.update({"sg_create": 0})
+ LOG.error("Create security group failed!")
+
+ try:
+ keys = self.scenario_cfg.get('output', '').split()
+ except KeyError:
+ pass
+ else:
+ values = [sg_id]
+ return self._push_to_outputs(keys, values)
diff --git a/yardstick/benchmark/scenarios/lib/create_server.py b/yardstick/benchmark/scenarios/lib/create_server.py
index 45c0bfde9..273b0045a 100644
--- a/yardstick/benchmark/scenarios/lib/create_server.py
+++ b/yardstick/benchmark/scenarios/lib/create_server.py
@@ -59,8 +59,10 @@ class CreateServer(base.Scenario):
vm = op_utils.create_instance_and_wait_for_active(self.openstack)
if vm:
+ result.update({"instance_create": 1})
LOG.info("Create server successful!")
else:
+ result.update({"instance_create": 0})
LOG.error("Create server failed!")
try:
diff --git a/yardstick/benchmark/scenarios/lib/create_subnet.py b/yardstick/benchmark/scenarios/lib/create_subnet.py
new file mode 100644
index 000000000..c34af8a9e
--- /dev/null
+++ b/yardstick/benchmark/scenarios/lib/create_subnet.py
@@ -0,0 +1,66 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from __future__ import print_function
+from __future__ import absolute_import
+
+import logging
+
+from yardstick.benchmark.scenarios import base
+import yardstick.common.openstack_utils as op_utils
+
+LOG = logging.getLogger(__name__)
+
+
+class CreateSubnet(base.Scenario):
+ """Create an OpenStack flavor"""
+
+ __scenario_type__ = "CreateSubnet"
+
+ def __init__(self, scenario_cfg, context_cfg):
+ self.scenario_cfg = scenario_cfg
+ self.context_cfg = context_cfg
+ self.options = self.scenario_cfg['options']
+
+ self.openstack = self.options.get("openstack_paras", None)
+
+ self.neutron_client = op_utils.get_neutron_client()
+
+ self.setup_done = False
+
+ def setup(self):
+ """scenario setup"""
+
+ self.setup_done = True
+
+ def run(self, result):
+ """execute the test"""
+
+ if not self.setup_done:
+ self.setup()
+
+ openstack_paras = {'subnets': [self.openstack]}
+ subnet_id = op_utils.create_neutron_subnet(self.neutron_client,
+ openstack_paras)
+ if subnet_id:
+ result.update({"subnet_create": 1})
+ LOG.info("Create subnet successful!")
+ else:
+ result.update({"subnet_create": 0})
+ LOG.error("Create subnet failed!")
+
+ check_result = subnet_id
+
+ try:
+ keys = self.scenario_cfg.get('output', '').split()
+ except KeyError:
+ pass
+ else:
+ values = [check_result]
+ return self._push_to_outputs(keys, values)
diff --git a/yardstick/benchmark/scenarios/lib/delete_floating_ip.py b/yardstick/benchmark/scenarios/lib/delete_floating_ip.py
new file mode 100644
index 000000000..4314952fb
--- /dev/null
+++ b/yardstick/benchmark/scenarios/lib/delete_floating_ip.py
@@ -0,0 +1,54 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from __future__ import print_function
+from __future__ import absolute_import
+
+import logging
+
+from yardstick.benchmark.scenarios import base
+import yardstick.common.openstack_utils as op_utils
+
+LOG = logging.getLogger(__name__)
+
+
+class DeleteFloatingIp(base.Scenario):
+ """Delete an OpenStack floating ip """
+
+ __scenario_type__ = "DeleteFloatingIp"
+
+ def __init__(self, scenario_cfg, context_cfg):
+ self.scenario_cfg = scenario_cfg
+ self.context_cfg = context_cfg
+ self.options = self.scenario_cfg['options']
+
+ self.floating_ip_id = self.options.get("floating_ip_id", None)
+
+ self.nova_client = op_utils.get_nova_client()
+ self.setup_done = False
+
+ def setup(self):
+ """scenario setup"""
+
+ self.setup_done = True
+
+ def run(self, result):
+ """execute the test"""
+
+ if not self.setup_done:
+ self.setup()
+
+ status = op_utils.delete_floating_ip(nova_client=self.nova_client,
+ floatingip_id=self.floating_ip_id)
+ if status:
+ result.update({"delete_floating_ip": 1})
+ LOG.info("Delete floating ip successful!")
+ else:
+ result.update({"delete_floating_ip": 0})
+ LOG.error("Delete floating ip failed!")
diff --git a/yardstick/benchmark/scenarios/lib/delete_keypair.py b/yardstick/benchmark/scenarios/lib/delete_keypair.py
new file mode 100644
index 000000000..135139959
--- /dev/null
+++ b/yardstick/benchmark/scenarios/lib/delete_keypair.py
@@ -0,0 +1,56 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from __future__ import print_function
+from __future__ import absolute_import
+
+import logging
+
+from yardstick.benchmark.scenarios import base
+import yardstick.common.openstack_utils as op_utils
+
+LOG = logging.getLogger(__name__)
+
+
+class DeleteKeypair(base.Scenario):
+ """Delete an OpenStack keypair"""
+
+ __scenario_type__ = "DeleteKeypair"
+
+ def __init__(self, scenario_cfg, context_cfg):
+ self.scenario_cfg = scenario_cfg
+ self.context_cfg = context_cfg
+ self.options = self.scenario_cfg['options']
+
+ self.key_name = self.options.get("key_name", "yardstick_key")
+
+ self.nova_client = op_utils.get_nova_client()
+
+ self.setup_done = False
+
+ def setup(self):
+ """scenario setup"""
+
+ self.setup_done = True
+
+ def run(self, result):
+ """execute the test"""
+
+ if not self.setup_done:
+ self.setup()
+
+ status = op_utils.delete_keypair(self.nova_client,
+ self.key_name)
+
+ if status:
+ result.update({"delete_keypair": 1})
+ LOG.info("Delete keypair successful!")
+ else:
+ result.update({"delete_keypair": 0})
+ LOG.info("Delete keypair failed!")
diff --git a/yardstick/benchmark/scenarios/lib/delete_volume.py b/yardstick/benchmark/scenarios/lib/delete_volume.py
new file mode 100644
index 000000000..ea2b85812
--- /dev/null
+++ b/yardstick/benchmark/scenarios/lib/delete_volume.py
@@ -0,0 +1,55 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from __future__ import print_function
+from __future__ import absolute_import
+
+import logging
+
+from yardstick.benchmark.scenarios import base
+import yardstick.common.openstack_utils as op_utils
+
+LOG = logging.getLogger(__name__)
+
+
+class DeleteVolume(base.Scenario):
+ """Delete an OpenStack volume"""
+
+ __scenario_type__ = "DeleteVolume"
+
+ def __init__(self, scenario_cfg, context_cfg):
+ self.scenario_cfg = scenario_cfg
+ self.context_cfg = context_cfg
+ self.options = self.scenario_cfg['options']
+
+ self.volume_id = self.options.get("volume_id", None)
+
+ self.cinder_client = op_utils.get_cinder_client()
+
+ self.setup_done = False
+
+ def setup(self):
+ """scenario setup"""
+
+ self.setup_done = True
+
+ def run(self, result):
+ """execute the test"""
+
+ if not self.setup_done:
+ self.setup()
+
+ status = op_utils.delete_volume(self.cinder_client, self.volume_id)
+
+ if status:
+ result.update({"delete_volume": 1})
+ LOG.info("Delete volume successful!")
+ else:
+ result.update({"delete_volume": 0})
+ LOG.info("Delete volume failed!")
diff --git a/yardstick/benchmark/scenarios/lib/detach_volume.py b/yardstick/benchmark/scenarios/lib/detach_volume.py
new file mode 100644
index 000000000..0b02a3a81
--- /dev/null
+++ b/yardstick/benchmark/scenarios/lib/detach_volume.py
@@ -0,0 +1,54 @@
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from __future__ import print_function
+from __future__ import absolute_import
+
+import logging
+
+from yardstick.benchmark.scenarios import base
+import yardstick.common.openstack_utils as op_utils
+
+LOG = logging.getLogger(__name__)
+
+
+class DetachVolume(base.Scenario):
+ """Detach a volume from an instance"""
+
+ __scenario_type__ = "DetachVolume"
+
+ def __init__(self, scenario_cfg, context_cfg):
+ self.scenario_cfg = scenario_cfg
+ self.context_cfg = context_cfg
+ self.options = self.scenario_cfg['options']
+
+ self.server_id = self.options.get("server_id", "TestServer")
+ self.volume_id = self.options.get("volume_id", None)
+
+ self.setup_done = False
+
+ def setup(self):
+ """scenario setup"""
+
+ self.setup_done = True
+
+ def run(self, result):
+ """execute the test"""
+
+ if not self.setup_done:
+ self.setup()
+
+ status = op_utils.detach_volume(self.server_id, self.volume_id)
+
+ if status:
+ result.update({"detach_volume": 1})
+ LOG.info("Detach volume from server successful!")
+ else:
+ result.update({"detach_volume": 0})
+ LOG.info("Detach volume from server failed!")
diff --git a/yardstick/benchmark/scenarios/lib/get_numa_info.py b/yardstick/benchmark/scenarios/lib/get_numa_info.py
index 4e4a44d95..75a9e3506 100644
--- a/yardstick/benchmark/scenarios/lib/get_numa_info.py
+++ b/yardstick/benchmark/scenarios/lib/get_numa_info.py
@@ -13,7 +13,6 @@ from __future__ import absolute_import
import logging
import os
-import yaml
from xml.etree import ElementTree as ET
from yardstick import ssh
@@ -22,6 +21,7 @@ from yardstick.common import constants as consts
from yardstick.common.utils import change_obj_to_dict
from yardstick.common.openstack_utils import get_nova_client
from yardstick.common.task_template import TaskTemplate
+from yardstick.common.yaml_loader import yaml_load
LOG = logging.getLogger(__name__)
@@ -47,7 +47,7 @@ class GetNumaInfo(base.Scenario):
self.options.get('file'))
with open(node_file) as f:
- nodes = yaml.safe_load(TaskTemplate.render(f.read()))
+ nodes = yaml_load(TaskTemplate.render(f.read()))
self.nodes = {a['host_name']: a for a in nodes['nodes']}
def run(self, result):
diff --git a/yardstick/benchmark/scenarios/networking/pktgen.py b/yardstick/benchmark/scenarios/networking/pktgen.py
index 1e0a5fcbb..a9e7aa6a3 100644
--- a/yardstick/benchmark/scenarios/networking/pktgen.py
+++ b/yardstick/benchmark/scenarios/networking/pktgen.py
@@ -11,6 +11,7 @@ from __future__ import print_function
import os
import logging
+import math
import pkg_resources
from oslo_serialization import jsonutils
@@ -357,15 +358,15 @@ class Pktgen(base.Scenario):
result.update(jsonutils.loads(stdout))
- result['packets_received'] = self._iptables_get_result()
+ received = result['packets_received'] = self._iptables_get_result()
+ sent = result['packets_sent']
result['packetsize'] = packetsize
+ # compatible with python3 /
+ ppm = math.ceil(1000000.0 * (sent - received) / sent)
+
+ result['ppm'] = ppm
if "sla" in self.scenario_cfg:
- sent = result['packets_sent']
- received = result['packets_received']
- ppm = 1000000 * (sent - received) / sent
- # if ppm is 1, then 11 out of 10 million is no pass
- ppm += (sent - received) % sent > 0
LOG.debug("Lost packets %d - Lost ppm %d", (sent - received), ppm)
sla_max_ppm = int(self.scenario_cfg["sla"]["max_ppm"])
assert ppm <= sla_max_ppm, "ppm %d > sla_max_ppm %d; " \
diff --git a/yardstick/benchmark/scenarios/networking/vnf_generic.py b/yardstick/benchmark/scenarios/networking/vnf_generic.py
index e0dd36684..aecc228bc 100644
--- a/yardstick/benchmark/scenarios/networking/vnf_generic.py
+++ b/yardstick/benchmark/scenarios/networking/vnf_generic.py
@@ -14,25 +14,31 @@
""" NSPerf specific scenario definition """
from __future__ import absolute_import
-import logging
+import logging
import errno
-import os
+import ipaddress
+import os
+import sys
import re
from itertools import chain
-import yaml
+
+import six
from operator import itemgetter
from collections import defaultdict
from yardstick.benchmark.scenarios import base
from yardstick.common.utils import import_modules_from_package, itersubclasses
+from yardstick.common.yaml_loader import yaml_load
from yardstick.network_services.collector.subscriber import Collector
from yardstick.network_services.vnf_generic import vnfdgen
from yardstick.network_services.vnf_generic.vnf.base import GenericVNF
from yardstick.network_services.traffic_profile.base import TrafficProfile
+from yardstick.network_services.utils import get_nsb_option
from yardstick import ssh
+
LOG = logging.getLogger(__name__)
@@ -119,26 +125,57 @@ class NetworkServiceTestCase(base.Scenario):
# fixme: create schema to validate all fields have been provided
with open_relative_file(scenario_cfg["topology"],
scenario_cfg['task_path']) as stream:
- topology_yaml = yaml.safe_load(stream)
+ topology_yaml = yaml_load(stream)
self.topology = topology_yaml["nsd:nsd-catalog"]["nsd"][0]
self.vnfs = []
self.collector = None
self.traffic_profile = None
+ def _get_ip_flow_range(self, ip_start_range):
+
+ node_name, range_or_interface = next(iter(ip_start_range.items()), (None, '0.0.0.0'))
+ if node_name is not None:
+ node = self.context_cfg["nodes"].get(node_name, {})
+ try:
+ # the ip_range is the interface name
+ interface = node.get("interfaces", {})[range_or_interface]
+ except KeyError:
+ ip = "0.0.0.0"
+ mask = "255.255.255.0"
+ else:
+ ip = interface["local_ip"]
+ # we can't default these values, they must both exist to be valid
+ mask = interface["netmask"]
+
+ ipaddr = ipaddress.ip_network(six.text_type('{}/{}'.format(ip, mask)), strict=False)
+ hosts = list(ipaddr.hosts())
+ ip_addr_range = "{}-{}".format(hosts[0], hosts[-1])
+ else:
+ # we are manually specifying the range
+ ip_addr_range = range_or_interface
+ return ip_addr_range
+
def _get_traffic_flow(self):
+ flow = {}
try:
- with open(self.scenario_cfg["traffic_options"]["flow"]) as fflow:
- flow = yaml.safe_load(fflow)
- except (KeyError, IOError, OSError):
+ fflow = self.scenario_cfg["options"]["flow"]
+ for index, src in enumerate(fflow.get("src_ip", [])):
+ flow["src_ip{}".format(index)] = self._get_ip_flow_range(src)
+
+ for index, dst in enumerate(fflow.get("dst_ip", [])):
+ flow["dst_ip{}".format(index)] = self._get_ip_flow_range(dst)
+
+ for index, publicip in enumerate(fflow.get("publicip", [])):
+ flow["public_ip{}".format(index)] = publicip
+ except KeyError:
flow = {}
- return flow
+ return {"flow": flow}
def _get_traffic_imix(self):
try:
- with open(self.scenario_cfg["traffic_options"]["imix"]) as fimix:
- imix = yaml.safe_load(fimix)
- except (KeyError, IOError, OSError):
+ imix = {"imix": self.scenario_cfg['options']['framesize']}
+ except KeyError:
imix = {}
return imix
@@ -265,8 +302,25 @@ class NetworkServiceTestCase(base.Scenario):
for dpdk_port_num, netdev in enumerate(s):
netdev['dpdk_port_num'] = dpdk_port_num
+ def _probe_netdevs(self, node, node_dict):
+ cmd = "PATH=$PATH:/sbin:/usr/sbin ip addr show"
+ netdevs = {}
+ with SshManager(node_dict) as conn:
+ if conn:
+ exit_status = conn.execute(cmd)[0]
+ if exit_status != 0:
+ raise IncorrectSetup("Node's %s lacks ip tool." % node)
+ exit_status, stdout, _ = conn.execute(
+ self.FIND_NETDEVICE_STRING)
+ if exit_status != 0:
+ raise IncorrectSetup(
+ "Cannot find netdev info in sysfs" % node)
+ netdevs = node_dict['netdevs'] = self.parse_netdev_info(stdout)
+ return netdevs
+
@classmethod
- def _probe_missing_values(cls, netdevs, network, missing):
+ def _probe_missing_values(cls, netdevs, network):
+
mac_lower = network['local_mac'].lower()
for netdev in netdevs.values():
if netdev['address'].lower() != mac_lower:
@@ -288,36 +342,30 @@ class NetworkServiceTestCase(base.Scenario):
"""
for node, node_dict in self.context_cfg["nodes"].items():
- cmd = "PATH=$PATH:/sbin:/usr/sbin ip addr show"
- 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)
- exit_status, stdout, _ = conn.execute(
- self.FIND_NETDEVICE_STRING)
- if exit_status != 0:
- raise IncorrectSetup(
- "Cannot find netdev info in sysfs" % node)
- netdevs = node_dict['netdevs'] = self.parse_netdev_info(
- stdout)
-
- for network in node_dict["interfaces"].values():
- missing = self.TOPOLOGY_REQUIRED_KEYS.difference(network)
- if not missing:
- continue
-
- try:
- self._probe_missing_values(netdevs, network,
- missing)
- except KeyError:
- pass
- else:
- missing = self.TOPOLOGY_REQUIRED_KEYS.difference(
- network)
- if missing:
- raise IncorrectConfig(
- "Require interface fields '%s' not found, topology file "
- "corrupted" % ', '.join(missing))
+ for network in node_dict["interfaces"].values():
+ missing = self.TOPOLOGY_REQUIRED_KEYS.difference(network)
+ if not missing:
+ continue
+
+ # only ssh probe if there are missing values
+ # ssh probe won't work on Ixia, so we had better define all our values
+ try:
+ netdevs = self._probe_netdevs(node, node_dict)
+ except (SSHError, SSHTimeout):
+ raise IncorrectConfig(
+ "Unable to probe missing interface fields '%s', on node %s "
+ "SSH Error" % (', '.join(missing), node))
+ try:
+ self._probe_missing_values(netdevs, network)
+ except KeyError:
+ pass
+ else:
+ missing = self.TOPOLOGY_REQUIRED_KEYS.difference(
+ network)
+ if missing:
+ raise IncorrectConfig(
+ "Require interface fields '%s' not found, topology file "
+ "corrupted" % ', '.join(missing))
# 3. Use topology file to find connections & resolve dest address
self._resolve_topology()
@@ -393,6 +441,9 @@ printf "%s/driver:" $1 ; basename $(readlink -s $1/device/driver); } \
:param context_cfg:
:return:
"""
+ trex_lib_path = get_nsb_option('trex_client_lib')
+ sys.path[:] = list(chain([trex_lib_path], (x for x in sys.path if x != trex_lib_path)))
+
if scenario_cfg is None:
scenario_cfg = self.scenario_cfg
@@ -440,7 +491,6 @@ printf "%s/driver:" $1 ; basename $(readlink -s $1/device/driver); } \
for vnf in chain(traffic_runners, non_traffic_runners):
LOG.info("Instantiating %s", vnf.name)
vnf.instantiate(self.scenario_cfg, self.context_cfg)
- for vnf in chain(traffic_runners, non_traffic_runners):
LOG.info("Waiting for %s to instantiate", vnf.name)
vnf.wait_for_instantiate()
except RuntimeError:
diff --git a/yardstick/common/openstack_utils.py b/yardstick/common/openstack_utils.py
index d86aee1cd..c862a6ba2 100644
--- a/yardstick/common/openstack_utils.py
+++ b/yardstick/common/openstack_utils.py
@@ -11,6 +11,7 @@ from __future__ import absolute_import
import os
import time
+import sys
import logging
from keystoneauth1 import loading
@@ -264,6 +265,15 @@ def create_aggregate_with_host(nova_client, aggregate_name, av_zone,
return True
+def create_keypair(nova_client, name, key_path=None): # pragma: no cover
+ try:
+ with open(key_path) as fpubkey:
+ keypair = get_nova_client().keypairs.create(name=name, public_key=fpubkey.read())
+ return keypair
+ except Exception:
+ log.exception("Error [create_keypair(nova_client)]")
+
+
def create_instance(json_body): # pragma: no cover
try:
return get_nova_client().servers.create(**json_body)
@@ -290,6 +300,17 @@ def create_instance_and_wait_for_active(json_body): # pragma: no cover
return None
+def attach_server_volume(server_id, volume_id, device=None): # pragma: no cover
+ try:
+ get_nova_client().volumes.create_server_volume(server_id, volume_id, device)
+ except Exception:
+ log.exception("Error [attach_server_volume(nova_client, '%s', '%s')]",
+ server_id, volume_id)
+ return False
+ else:
+ return True
+
+
def delete_instance(nova_client, instance_id): # pragma: no cover
try:
nova_client.servers.force_delete(instance_id)
@@ -403,6 +424,15 @@ def delete_flavor(flavor_id): # pragma: no cover
return True
+def delete_keypair(nova_client, key): # pragma: no cover
+ try:
+ nova_client.keypairs.delete(key=key)
+ return True
+ except Exception:
+ log.exception("Error [delete_keypair(nova_client)]")
+ return False
+
+
# *********************************************
# NEUTRON
# *********************************************
@@ -417,6 +447,171 @@ def get_port_id_by_ip(neutron_client, ip_address): # pragma: no cover
'fixed_ips') if j['ip_address'] == ip_address), None)
+def create_neutron_net(neutron_client, json_body): # pragma: no cover
+ try:
+ network = neutron_client.create_network(body=json_body)
+ return network['network']['id']
+ except Exception:
+ log.error("Error [create_neutron_net(neutron_client)]")
+ raise Exception("operation error")
+ return None
+
+
+def create_neutron_subnet(neutron_client, json_body): # pragma: no cover
+ try:
+ subnet = neutron_client.create_subnet(body=json_body)
+ return subnet['subnets'][0]['id']
+ except Exception:
+ log.error("Error [create_neutron_subnet")
+ raise Exception("operation error")
+ return None
+
+
+def create_neutron_router(neutron_client, json_body): # pragma: no cover
+ try:
+ router = neutron_client.create_router(json_body)
+ return router['router']['id']
+ except Exception:
+ log.error("Error [create_neutron_router(neutron_client)]")
+ raise Exception("operation error")
+ return None
+
+
+def create_floating_ip(neutron_client, extnet_id): # pragma: no cover
+ props = {'floating_network_id': extnet_id}
+ try:
+ ip_json = neutron_client.create_floatingip({'floatingip': props})
+ fip_addr = ip_json['floatingip']['floating_ip_address']
+ fip_id = ip_json['floatingip']['id']
+ except Exception:
+ log.error("Error [create_floating_ip(neutron_client)]")
+ return None
+ return {'fip_addr': fip_addr, 'fip_id': fip_id}
+
+
+def delete_floating_ip(nova_client, floatingip_id): # pragma: no cover
+ try:
+ nova_client.floating_ips.delete(floatingip_id)
+ return True
+ except Exception:
+ log.error("Error [delete_floating_ip(nova_client, '%s')]" % floatingip_id)
+ return False
+
+
+def get_security_groups(neutron_client): # pragma: no cover
+ try:
+ security_groups = neutron_client.list_security_groups()[
+ 'security_groups']
+ return security_groups
+ except Exception:
+ log.error("Error [get_security_groups(neutron_client)]")
+ return None
+
+
+def get_security_group_id(neutron_client, sg_name): # pragma: no cover
+ security_groups = get_security_groups(neutron_client)
+ id = ''
+ for sg in security_groups:
+ if sg['name'] == sg_name:
+ id = sg['id']
+ break
+ return id
+
+
+def create_security_group(neutron_client, sg_name, sg_description): # pragma: no cover
+ json_body = {'security_group': {'name': sg_name,
+ 'description': sg_description}}
+ try:
+ secgroup = neutron_client.create_security_group(json_body)
+ return secgroup['security_group']
+ except Exception:
+ log.error("Error [create_security_group(neutron_client, '%s', "
+ "'%s')]" % (sg_name, sg_description))
+ return None
+
+
+def create_secgroup_rule(neutron_client, sg_id, direction, protocol,
+ port_range_min=None, port_range_max=None,
+ **json_body): # pragma: no cover
+ # We create a security group in 2 steps
+ # 1 - we check the format and set the json body accordingly
+ # 2 - we call neturon client to create the security group
+
+ # Format check
+ json_body.update({'security_group_rule': {'direction': direction,
+ 'security_group_id': sg_id, 'protocol': protocol}})
+ # parameters may be
+ # - both None => we do nothing
+ # - both Not None => we add them to the json description
+ # but one cannot be None is the other is not None
+ if (port_range_min is not None and port_range_max is not None):
+ # add port_range in json description
+ json_body['security_group_rule']['port_range_min'] = port_range_min
+ json_body['security_group_rule']['port_range_max'] = port_range_max
+ log.debug("Security_group format set (port range included)")
+ else:
+ # either both port range are set to None => do nothing
+ # or one is set but not the other => log it and return False
+ if port_range_min is None and port_range_max is None:
+ log.debug("Security_group format set (no port range mentioned)")
+ else:
+ log.error("Bad security group format."
+ "One of the port range is not properly set:"
+ "range min: {},"
+ "range max: {}".format(port_range_min,
+ port_range_max))
+ return False
+
+ # Create security group using neutron client
+ try:
+ neutron_client.create_security_group_rule(json_body)
+ return True
+ except Exception:
+ log.exception("Impossible to create_security_group_rule,"
+ "security group rule probably already exists")
+ return False
+
+
+def create_security_group_full(neutron_client,
+ sg_name, sg_description): # pragma: no cover
+ sg_id = get_security_group_id(neutron_client, sg_name)
+ if sg_id != '':
+ log.info("Using existing security group '%s'..." % sg_name)
+ else:
+ log.info("Creating security group '%s'..." % sg_name)
+ SECGROUP = create_security_group(neutron_client,
+ sg_name,
+ sg_description)
+ if not SECGROUP:
+ log.error("Failed to create the security group...")
+ return None
+
+ sg_id = SECGROUP['id']
+
+ log.debug("Security group '%s' with ID=%s created successfully."
+ % (SECGROUP['name'], sg_id))
+
+ log.debug("Adding ICMP rules in security group '%s'..."
+ % sg_name)
+ if not create_secgroup_rule(neutron_client, sg_id,
+ 'ingress', 'icmp'):
+ log.error("Failed to create the security group rule...")
+ return None
+
+ log.debug("Adding SSH rules in security group '%s'..."
+ % sg_name)
+ if not create_secgroup_rule(
+ neutron_client, sg_id, 'ingress', 'tcp', '22', '22'):
+ log.error("Failed to create the security group rule...")
+ return None
+
+ if not create_secgroup_rule(
+ neutron_client, sg_id, 'egress', 'tcp', '22', '22'):
+ log.error("Failed to create the security group rule...")
+ return None
+ return sg_id
+
+
# *********************************************
# GLANCE
# *********************************************
@@ -491,3 +686,33 @@ def create_volume(cinder_client, volume_name, volume_size,
log.exception("Error [create_volume(cinder_client, %s)]",
(volume_name, volume_size))
return None
+
+
+def delete_volume(cinder_client, volume_id, forced=False): # pragma: no cover
+ try:
+ if forced:
+ try:
+ cinder_client.volumes.detach(volume_id)
+ except:
+ log.error(sys.exc_info()[0])
+ cinder_client.volumes.force_delete(volume_id)
+ else:
+ while True:
+ volume = get_cinder_client().volumes.get(volume_id)
+ if volume.status.lower() == 'available':
+ break
+ cinder_client.volumes.delete(volume_id)
+ return True
+ except Exception:
+ log.exception("Error [delete_volume(cinder_client, '%s')]" % volume_id)
+ return False
+
+
+def detach_volume(server_id, volume_id): # pragma: no cover
+ try:
+ get_nova_client().volumes.delete_server_volume(server_id, volume_id)
+ return True
+ except Exception:
+ log.exception("Error [detach_server_volume(nova_client, '%s', '%s')]",
+ server_id, volume_id)
+ return False
diff --git a/yardstick/common/task_template.py b/yardstick/common/task_template.py
index 9acc21336..f6c128609 100755
--- a/yardstick/common/task_template.py
+++ b/yardstick/common/task_template.py
@@ -11,6 +11,22 @@ from __future__ import absolute_import
import re
import jinja2
import jinja2.meta
+import yaml
+
+
+def finalize_for_yaml(elem):
+ """Render Jinja2 output specifically for YAML files"""
+ # Jinaj2 by default converts None to 'None', we can't allow this
+ # we could convert to empty string '', or we can convert to null, aka ~
+ if elem is None:
+ return '~'
+ # convert data structures to inline YAML
+ # match builtin types because we shouldn't be trying to render complex types
+ if isinstance(elem, (dict, list)):
+ # remove newlines because we are injecting back into YAML
+ # use block style for single line
+ return yaml.safe_dump(elem, default_flow_style=True).replace('\n', '')
+ return elem
class TaskTemplate(object):
@@ -38,7 +54,7 @@ class TaskTemplate(object):
single_msg = ("Please specify template task argument:%s")
raise TypeError((len(real_missing) > 1 and multi_msg or single_msg)
% ", ".join(real_missing))
- return jinja2.Template(task_template).render(**kwargs)
+ return jinja2.Template(task_template, finalize=finalize_for_yaml).render(**kwargs)
def is_really_missing(mis, task_template):
diff --git a/yardstick/common/template_format.py b/yardstick/common/template_format.py
index 98c0a0b3c..bd5d8376f 100644
--- a/yardstick/common/template_format.py
+++ b/yardstick/common/template_format.py
@@ -18,9 +18,10 @@ import yaml
from oslo_serialization import jsonutils
if hasattr(yaml, 'CSafeLoader'):
- yaml_loader = yaml.CSafeLoader
+ # make a dynamic subclass so we don't override global yaml Loader
+ yaml_loader = type('HeatYamlLoader', (yaml.CSafeLoader,), {})
else:
- yaml_loader = yaml.SafeLoader
+ yaml_loader = type('HeatYamlLoader', (yaml.SafeLoader,), {})
if hasattr(yaml, 'CSafeDumper'):
yaml_dumper = yaml.CSafeDumper
@@ -28,10 +29,13 @@ else:
yaml_dumper = yaml.SafeDumper
+# This breaks NetworkServiceTestCase yaml loading, because we need to conversion to
+# native Python str() objects because we use use Trex and Trex is has broken unicode handling
def _construct_yaml_str(self, node):
# Override the default string handling function
# to always return unicode objects
return self.construct_scalar(node)
+
yaml_loader.add_constructor(u'tag:yaml.org,2002:str', _construct_yaml_str)
# Unquoted dates like 2013-05-23 in yaml files get loaded as objects of type
# datetime.data which causes problems in API layer when being processed by
diff --git a/yardstick/common/utils.py b/yardstick/common/utils.py
index f2455be3a..1d7ea071c 100644
--- a/yardstick/common/utils.py
+++ b/yardstick/common/utils.py
@@ -30,7 +30,6 @@ import random
import ipaddress
from contextlib import closing
-import yaml
import six
from flask import jsonify
from six.moves import configparser
@@ -38,6 +37,7 @@ from oslo_utils import importutils
from oslo_serialization import jsonutils
import yardstick
+from yardstick.common.yaml_loader import yaml_load
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
@@ -70,26 +70,26 @@ def itersubclasses(cls, _seen=None):
yield sub
-def try_append_module(name, modules):
- if name not in modules:
- modules[name] = importutils.import_module(name)
-
-
def import_modules_from_package(package):
"""Import modules from package and append into sys.modules
:param: package - Full package name. For example: rally.deploy.engines
"""
- path = [os.path.dirname(yardstick.__file__), ".."] + package.split(".")
- path = os.path.join(*path)
+ yardstick_root = os.path.dirname(os.path.dirname(yardstick.__file__))
+ path = os.path.join(yardstick_root, *package.split("."))
for root, dirs, files in os.walk(path):
- for filename in files:
- if filename.startswith("__") or not filename.endswith(".py"):
- continue
- new_package = ".".join(root.split(os.sep)).split("....")[1]
- module_name = "%s.%s" % (new_package, filename[:-3])
+ matches = (filename for filename in files if filename.endswith(".py") and
+ not filename.startswith("__"))
+ new_package = os.path.relpath(root, yardstick_root).replace(os.sep, ".")
+ module_names = set(
+ ("{}.{}".format(new_package, filename.rsplit(".py", 1)[0]) for filename in matches))
+ # find modules which haven't already been imported
+ missing_modules = module_names.difference(sys.modules)
+ logger.debug("importing %s", missing_modules)
+ # we have already checked for already imported modules, so we don't need to check again
+ for module_name in missing_modules:
try:
- try_append_module(module_name, sys.modules)
+ sys.modules[module_name] = importutils.import_module(module_name)
except ImportError:
logger.exception("unable to import %s", module_name)
@@ -97,7 +97,7 @@ def import_modules_from_package(package):
def parse_yaml(file_path):
try:
with open(file_path) as f:
- value = yaml.safe_load(f)
+ value = yaml_load(f)
except IOError:
return {}
except OSError as e:
diff --git a/yardstick/common/yaml_loader.py b/yardstick/common/yaml_loader.py
new file mode 100644
index 000000000..0572bd582
--- /dev/null
+++ b/yardstick/common/yaml_loader.py
@@ -0,0 +1,33 @@
+# 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.
+
+# yardstick: this file is copied from python-heatclient and slightly modified
+
+from __future__ import absolute_import
+
+import yaml
+
+
+if hasattr(yaml, 'CSafeLoader'):
+ # make a dynamic subclass so we don't override global yaml Loader
+ yaml_loader = type('CustomLoader', (yaml.CSafeLoader,), {})
+else:
+ yaml_loader = type('CustomLoader', (yaml.SafeLoader,), {})
+
+if hasattr(yaml, 'CSafeDumper'):
+ yaml_dumper = yaml.CSafeDumper
+else:
+ yaml_dumper = yaml.SafeDumper
+
+
+def yaml_load(tmpl_str):
+ return yaml.load(tmpl_str, Loader=yaml_loader)
diff --git a/yardstick/network_services/helpers/cpu.py b/yardstick/network_services/helpers/cpu.py
index a5ba6c31e..8c21754ff 100644
--- a/yardstick/network_services/helpers/cpu.py
+++ b/yardstick/network_services/helpers/cpu.py
@@ -13,6 +13,9 @@
# limitations under the License.
+import io
+
+
class CpuSysCores(object):
def __init__(self, connection=""):
@@ -20,8 +23,9 @@ class CpuSysCores(object):
self.connection = connection
def _open_cpuinfo(self):
- lines = []
- lines = self.connection.execute("cat /proc/cpuinfo")[1].split(u'\n')
+ cpuinfo = io.BytesIO()
+ self.connection.get_file_obj("/proc/cpuinfo", cpuinfo)
+ lines = cpuinfo.getvalue().decode('utf-8').splitlines()
return lines
def _get_core_details(self, lines):
diff --git a/yardstick/network_services/helpers/samplevnf_helper.py b/yardstick/network_services/helpers/samplevnf_helper.py
index 1eefc5ffa..870409e31 100644
--- a/yardstick/network_services/helpers/samplevnf_helper.py
+++ b/yardstick/network_services/helpers/samplevnf_helper.py
@@ -87,10 +87,19 @@ class MultiPortConfig(object):
return default
@staticmethod
- def make_ip_addr(ip, mask_len):
+ def make_ip_addr(ip, mask):
+ """
+ :param ip: ip adddress
+ :type ip: str
+ :param mask: /24 prefix of 255.255.255.0 netmask
+ :type mask: str
+ :return: interface
+ :rtype: IPv4Interface
+ """
+
try:
- return ipaddress.ip_interface(six.text_type('/'.join([ip, mask_len])))
- except ValueError:
+ return ipaddress.ip_interface(six.text_type('/'.join([ip, mask])))
+ except (TypeError, ValueError):
# None so we can skip later
return None
@@ -213,7 +222,7 @@ class MultiPortConfig(object):
return
try:
- self.start_core = 'h{}'.format(int(self.start_core))
+ self.start_core = '{}h'.format(int(self.start_core))
except ValueError:
self.start_core = int(self.start_core[:-1]) + 1
@@ -279,18 +288,19 @@ class MultiPortConfig(object):
for port in port_pair:
port_num = int(port[-1])
interface = self.interfaces[port_num]
- # port0_ip = ipaddress.ip_interface(six.text_type(
- # "%s/%s" % (interface["virtual-interface"]["local_ip"],
- # interface["virtual-interface"]["netmask"])))
+ # We must use the dst because we are on the VNF and we need to
+ # reach the TG.
dst_port0_ip = \
ipaddress.ip_interface(six.text_type(
"%s/%s" % (interface["virtual-interface"]["dst_ip"],
interface["virtual-interface"]["netmask"])))
arp_vars = {
- "port0_dst_ip_hex": ip_to_hex(dst_port0_ip.ip.exploded),
+ "port0_dst_ip_hex": ip_to_hex(dst_port0_ip.network.network_address.exploded),
"port0_netmask_hex": ip_to_hex(dst_port0_ip.network.netmask.exploded),
+ # this is the port num that contains port0 subnet and next_hop_ip_hex
"port_num": port_num,
# next hop is dst in this case
+ # must be within subnet
"next_hop_ip_hex": ip_to_hex(dst_port0_ip.ip.exploded),
}
arp_config.append(arp_route_tbl_tmpl.format(**arp_vars))
@@ -302,20 +312,25 @@ class MultiPortConfig(object):
self.swq += self.lb_count
swq_out_str = self.make_range_str('SWQ{}', self.swq, offset=self.lb_count)
self.swq += self.lb_count
- mac_iter = (self.interfaces[int(x[-1])]['virtual-interface']['local_mac']
- for port_pair in self.port_pair_list for x in port_pair)
+ # ports_mac_list is disabled for some reason
+ # mac_iter = (self.interfaces[int(x[-1])]['virtual-interface']['local_mac']
+ # for port_pair in self.port_pair_list for x in port_pair)
pktq_in_iter = ('RXQ{}'.format(float(x[0][-1])) for x in self.port_pair_list)
arpicmp_data = {
'core': self.gen_core(self.start_core),
'pktq_in': swq_in_str,
'pktq_out': swq_out_str,
- 'ports_mac_list': ' '.join(mac_iter),
+ # we need to disable ports_mac_list?
+ # it looks like ports_mac_list is no longer required
+ # 'ports_mac_list': ' '.join(mac_iter),
'pktq_in_prv': ' '.join(pktq_in_iter),
'prv_to_pub_map': self.set_priv_to_pub_mapping(),
'arp_route_tbl': self.generate_arp_route_tbl(),
- # can't use empty string, defaul to ()
- 'nd_route_tbl': "()",
+ # nd_route_tbl must be set or we get segault on random OpenStack IPv6 traffic
+ # 'nd_route_tbl': "(0064:ff9b:0:0:0:0:9810:6414,120,0,0064:ff9b:0:0:0:0:9810:6414)"
+ # safe default? route discard prefix to localhost
+ 'nd_route_tbl': "(0100::,64,0,::1)"
}
self.pktq_out_os = swq_out_str.split(' ')
# why?
@@ -499,7 +514,10 @@ class MultiPortConfig(object):
def get_route_data(self, src_key, data_key, port):
route_list = self.vnfd['vdu'][0].get(src_key, [])
- return next((route[data_key] for route in route_list if route['if'] == port), None)
+ try:
+ return next((route[data_key] for route in route_list if route['if'] == port), None)
+ except (TypeError, StopIteration, KeyError):
+ return None
def get_ports_gateway(self, port):
return self.get_route_data('routing_table', 'gateway', port)
@@ -517,12 +535,13 @@ class MultiPortConfig(object):
arp_config = []
for port_pair in self.port_pair_list:
for port in port_pair:
- gateway = self.get_ports_gateway(port)
- # omit entries with no gateway
- if not gateway:
- continue
+ # ignore gateway, always use TG IP
+ # gateway = self.get_ports_gateway(port)
dst_mac = self.interfaces[int(port[-1])]["virtual-interface"]["dst_mac"]
- arp_config.append((port[-1], gateway, dst_mac, self.txrx_pipeline))
+ dst_ip = self.interfaces[int(port[-1])]["virtual-interface"]["dst_ip"]
+ # arp_config.append((port[-1], gateway, dst_mac, self.txrx_pipeline))
+ # so dst_mac is the TG dest mac, so we need TG dest IP.
+ arp_config.append((port[-1], dst_ip, dst_mac, self.txrx_pipeline))
return '\n'.join(('p {3} arpadd {0} {1} {2}'.format(*values) for values in arp_config))
@@ -530,12 +549,12 @@ class MultiPortConfig(object):
arp_config6 = []
for port_pair in self.port_pair_list:
for port in port_pair:
- gateway6 = self.get_ports_gateway6(port)
- # omit entries with no gateway
- if not gateway6:
- continue
+ # ignore gateway, always use TG IP
+ # gateway6 = self.get_ports_gateway6(port)
dst_mac6 = self.interfaces[int(port[-1])]["virtual-interface"]["dst_mac"]
- arp_config6.append((port[-1], gateway6, dst_mac6, self.txrx_pipeline))
+ dst_ip6 = self.interfaces[int(port[-1])]["virtual-interface"]["dst_ip"]
+ # arp_config6.append((port[-1], gateway6, dst_mac6, self.txrx_pipeline))
+ arp_config6.append((port[-1], dst_ip6, dst_mac6, self.txrx_pipeline))
return '\n'.join(('p {3} arpadd {0} {1} {2}'.format(*values) for values in arp_config6))
@@ -553,13 +572,17 @@ class MultiPortConfig(object):
return ''.join((template.format(port) for port in port_list))
def get_ip_from_port(self, port):
- return self.make_ip_addr(self.get_ports_gateway(port), self.get_netmask_gateway(port))
+ # we can't use gateway because in OpenStack gateways interfer with floating ip routing
+ # return self.make_ip_addr(self.get_ports_gateway(port), self.get_netmask_gateway(port))
+ ip = self.interfaces[port]["virtual-interface"]["local_ip"]
+ netmask = self.interfaces[port]["virtual-interface"]["netmask"]
+ return self.make_ip_addr(ip, netmask)
- def get_ip_and_prefixlen_from_ip_of_port(self, port):
+ def get_network_and_prefixlen_from_ip_of_port(self, port):
ip_addr = self.get_ip_from_port(port)
# handle cases with no gateway
if ip_addr:
- return ip_addr.ip.exploded, ip_addr.network.prefixlen
+ return ip_addr.network.network_address.exploded, ip_addr.network.prefixlen
else:
return None, None
@@ -573,25 +596,25 @@ class MultiPortConfig(object):
src_port = int(port_pair[0][-1])
dst_port = int(port_pair[1][-1])
- src_ip, src_prefix_len = self.get_ip_and_prefixlen_from_ip_of_port(port_pair[0])
- dst_ip, dst_prefix_len = self.get_ip_and_prefixlen_from_ip_of_port(port_pair[1])
- # ignore entires with empty values
- if all((src_ip, src_prefix_len, dst_ip, dst_prefix_len)):
- new_rules.append((cmd, self.txrx_pipeline, src_ip, src_prefix_len,
- dst_ip, dst_prefix_len, dst_port))
- new_rules.append((cmd, self.txrx_pipeline, dst_ip, dst_prefix_len,
- src_ip, src_prefix_len, src_port))
-
- src_ip = self.get_ports_gateway6(port_pair[0])
- src_prefix_len = self.get_netmask_gateway6(port_pair[0])
- dst_ip = self.get_ports_gateway6(port_pair[1])
- dst_prefix_len = self.get_netmask_gateway6(port_pair[0])
+ src_net, src_prefix_len = self.get_network_and_prefixlen_from_ip_of_port(src_port)
+ dst_net, dst_prefix_len = self.get_network_and_prefixlen_from_ip_of_port(dst_port)
# ignore entires with empty values
- if all((src_ip, src_prefix_len, dst_ip, dst_prefix_len)):
- new_ipv6_rules.append((cmd, self.txrx_pipeline, src_ip, src_prefix_len,
- dst_ip, dst_prefix_len, dst_port))
- new_ipv6_rules.append((cmd, self.txrx_pipeline, dst_ip, dst_prefix_len,
- src_ip, src_prefix_len, src_port))
+ if all((src_net, src_prefix_len, dst_net, dst_prefix_len)):
+ new_rules.append((cmd, self.txrx_pipeline, src_net, src_prefix_len,
+ dst_net, dst_prefix_len, dst_port))
+ new_rules.append((cmd, self.txrx_pipeline, dst_net, dst_prefix_len,
+ src_net, src_prefix_len, src_port))
+
+ # src_net = self.get_ports_gateway6(port_pair[0])
+ # src_prefix_len = self.get_netmask_gateway6(port_pair[0])
+ # dst_net = self.get_ports_gateway6(port_pair[1])
+ # dst_prefix_len = self.get_netmask_gateway6(port_pair[0])
+ # # ignore entires with empty values
+ # if all((src_net, src_prefix_len, dst_net, dst_prefix_len)):
+ # new_ipv6_rules.append((cmd, self.txrx_pipeline, src_net, src_prefix_len,
+ # dst_net, dst_prefix_len, dst_port))
+ # new_ipv6_rules.append((cmd, self.txrx_pipeline, dst_net, dst_prefix_len,
+ # src_net, src_prefix_len, src_port))
acl_apply = "\np %s applyruleset" % cmd
new_rules_config = '\n'.join(pattern.format(*values) for values
@@ -604,7 +627,9 @@ class MultiPortConfig(object):
script_data = {
'link_config': self.generate_link_config(),
'arp_config': self.generate_arp_config(),
- 'arp_config6': self.generate_arp_config6(),
+ # disable IPv6 for now
+ # 'arp_config6': self.generate_arp_config6(),
+ 'arp_config6': "",
'actions': '',
'rules': '',
}
diff --git a/yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py b/yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py
index d36ec2edd..2b8905b4f 100644
--- a/yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py
+++ b/yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py
@@ -20,13 +20,6 @@ import logging
import re
from itertools import product
-from yardstick.common.utils import ErrorClass
-
-try:
- import IxNetwork
-except ImportError:
- IxNetwork = ErrorClass
-
log = logging.getLogger(__name__)
IP_VERSION_4 = 4
@@ -203,6 +196,12 @@ class IxNextgen(object):
self._cfg = self.get_config(tg_cfg)
sys.path.append(self._cfg["py_lib_path"])
+ # Import IxNetwork after getting ixia lib path
+ try:
+ import IxNetwork
+ except ImportError:
+ raise
+
self.ixnet = IxNetwork.IxNet()
machine = self._cfg['machine']
diff --git a/yardstick/network_services/nfvi/resource.py b/yardstick/network_services/nfvi/resource.py
index ce09b6597..2fb4a8e8e 100644
--- a/yardstick/network_services/nfvi/resource.py
+++ b/yardstick/network_services/nfvi/resource.py
@@ -73,18 +73,18 @@ class ResourceProfile(object):
@classmethod
def parse_simple_resource(cls, key, value):
- return {'/'.join(key): value.split(":")[1]}
+ reskey = "/".join(rkey for rkey in key if "nsb_stats" not in rkey)
+ return {reskey: value.split(":")[1]}
@classmethod
- def get_cpu_data(cls, key_split, value):
+ def get_cpu_data(cls, res_key0, res_key1, value):
""" Get cpu topology of the host """
pattern = r"-(\d+)"
- if "cpufreq" in key_split[0]:
- metric = key_split[0]
- source = key_split[1]
+
+ if 'cpufreq' in res_key0:
+ metric, source = res_key0, res_key1
else:
- metric = key_split[1]
- source = key_split[0]
+ metric, source = res_key1, res_key0
match = re.search(pattern, source, re.MULTILINE)
if not match:
@@ -128,7 +128,8 @@ class ResourceProfile(object):
res_key1 = next(res_key_iter)
if "cpu" in res_key0 or "intel_rdt" in res_key0:
- cpu_key, name, metric, testcase = self.get_cpu_data(key_split, value)
+ cpu_key, name, metric, testcase = \
+ self.get_cpu_data(res_key0, res_key1, value)
if cpu_key in core_list:
result["cpu"].setdefault(cpu_key, {}).update({name: metric})
@@ -136,16 +137,16 @@ class ResourceProfile(object):
result["memory"].update({res_key1: value.split(":")[0]})
elif "hugepages" in res_key0:
- result["hugepages"].update(self.parse_hugepages(key, value))
+ result["hugepages"].update(self.parse_hugepages(key_split, value))
elif "dpdkstat" in res_key0:
- result["dpdkstat"].update(self.parse_dpdkstat(key, value))
+ result["dpdkstat"].update(self.parse_dpdkstat(key_split, value))
elif "virt" in res_key1:
- result["virt"].update(self.parse_virt(key, value))
+ result["virt"].update(self.parse_virt(key_split, value))
elif "ovs_stats" in res_key0:
- result["ovs_stats"].update(self.parse_ovs_stats(key, value))
+ result["ovs_stats"].update(self.parse_ovs_stats(key_split, value))
result["timestamp"] = testcase
@@ -153,13 +154,16 @@ class ResourceProfile(object):
def amqp_process_for_nfvi_kpi(self):
""" amqp collect and return nfvi kpis """
- if self.amqp_client is None:
+ if self.amqp_client is None and self.enable:
self.amqp_client = \
multiprocessing.Process(target=self.run_collectd_amqp)
self.amqp_client.start()
def amqp_collect_nfvi_kpi(self):
""" amqp collect and return nfvi kpis """
+ if not self.enable:
+ return {}
+
metric = {}
while not self._queue.empty():
metric.update(self._queue.get())
@@ -193,8 +197,6 @@ class ResourceProfile(object):
def _start_collectd(self, connection, bin_path):
LOG.debug("Starting collectd to collect NFVi stats")
- # temp disable
- return
connection.execute('sudo pkill -9 collectd')
collectd = os.path.join(bin_path, "collectd.sh")
provision_tool(connection, collectd)
diff --git a/yardstick/network_services/traffic_profile/fixed.py b/yardstick/network_services/traffic_profile/fixed.py
index ebc1e61f2..b7cd03773 100644
--- a/yardstick/network_services/traffic_profile/fixed.py
+++ b/yardstick/network_services/traffic_profile/fixed.py
@@ -16,10 +16,10 @@
from __future__ import absolute_import
from yardstick.network_services.traffic_profile.base import TrafficProfile
-from stl.trex_stl_lib.trex_stl_streams import STLTXCont
-from stl.trex_stl_lib.trex_stl_client import STLStream
-from stl.trex_stl_lib.trex_stl_packet_builder_scapy import STLPktBuilder
-from stl.trex_stl_lib import api as Pkt
+from trex_stl_lib.trex_stl_streams import STLTXCont
+from trex_stl_lib.trex_stl_client import STLStream
+from trex_stl_lib.trex_stl_packet_builder_scapy import STLPktBuilder
+from trex_stl_lib import api as Pkt
class FixedProfile(TrafficProfile):
diff --git a/yardstick/network_services/traffic_profile/http_ixload.py b/yardstick/network_services/traffic_profile/http_ixload.py
index 8a4f97f04..348056551 100644
--- a/yardstick/network_services/traffic_profile/http_ixload.py
+++ b/yardstick/network_services/traffic_profile/http_ixload.py
@@ -18,6 +18,7 @@ from __future__ import print_function
import sys
import os
import logging
+import collections
# ixload uses its own py2. So importing jsonutils fails. So adding below
# workaround to support call from yardstick
@@ -26,8 +27,16 @@ try:
except ImportError:
import json as jsonutils
-from yardstick.common.utils import join_non_strings
-from yardstick.common.utils import ErrorClass
+
+class ErrorClass(object):
+
+ def __init__(self, *args, **kwargs):
+ if 'test' not in kwargs:
+ raise RuntimeError
+
+ def __getattr__(self, item):
+ raise AttributeError
+
try:
from IxLoad import IxLoad, StatCollectorUtils
@@ -80,11 +89,25 @@ Incoming stats: Time interval: %s
"""
+def validate_non_string_sequence(value, default=None, raise_exc=None):
+ if isinstance(value, collections.Sequence) and not isinstance(value, str):
+ return value
+ if raise_exc:
+ raise raise_exc
+ return default
+
+
+def join_non_strings(separator, *non_strings):
+ try:
+ non_strings = validate_non_string_sequence(non_strings[0], raise_exc=RuntimeError)
+ except (IndexError, RuntimeError):
+ pass
+ return str(separator).join(str(non_string) for non_string in non_strings)
+
+
class IXLOADHttpTest(object):
def __init__(self, test_input):
- self.test_input = jsonutils.loads(test_input)
- self.parse_run_test()
self.ix_load = None
self.stat_utils = None
self.remote_server = None
@@ -94,6 +117,8 @@ class IXLOADHttpTest(object):
self.chassis = None
self.card = None
self.ports_to_reassign = None
+ self.test_input = jsonutils.loads(test_input)
+ self.parse_run_test()
@staticmethod
def format_ports_for_reassignment(ports):
@@ -291,4 +316,5 @@ def main(args):
ixload_obj.start_http_test()
if __name__ == '__main__':
+ LOG.info("Start http_ixload test")
main(sys.argv)
diff --git a/yardstick/network_services/traffic_profile/rfc2544.py b/yardstick/network_services/traffic_profile/rfc2544.py
index b07bc9d5a..a3b803673 100644
--- a/yardstick/network_services/traffic_profile/rfc2544.py
+++ b/yardstick/network_services/traffic_profile/rfc2544.py
@@ -17,9 +17,9 @@ from __future__ import absolute_import
from __future__ import division
import logging
-from stl.trex_stl_lib.trex_stl_client import STLStream
-from stl.trex_stl_lib.trex_stl_streams import STLFlowLatencyStats
-from stl.trex_stl_lib.trex_stl_streams import STLTXCont
+from trex_stl_lib.trex_stl_client import STLStream
+from trex_stl_lib.trex_stl_streams import STLFlowLatencyStats
+from trex_stl_lib.trex_stl_streams import STLTXCont
from yardstick.network_services.traffic_profile.traffic_profile \
import TrexProfile
diff --git a/yardstick/network_services/traffic_profile/traffic_profile.py b/yardstick/network_services/traffic_profile/traffic_profile.py
index 3e1f8d89f..7bbe89268 100644
--- a/yardstick/network_services/traffic_profile/traffic_profile.py
+++ b/yardstick/network_services/traffic_profile/traffic_profile.py
@@ -21,16 +21,17 @@ from random import SystemRandom
import six
from yardstick.network_services.traffic_profile.base import TrafficProfile
-from stl.trex_stl_lib.trex_stl_client import STLStream
-from stl.trex_stl_lib.trex_stl_streams import STLFlowLatencyStats
-from stl.trex_stl_lib.trex_stl_streams import STLTXCont
-from stl.trex_stl_lib.trex_stl_streams import STLProfile
-from stl.trex_stl_lib.trex_stl_packet_builder_scapy import STLVmWrFlowVar
-from stl.trex_stl_lib.trex_stl_packet_builder_scapy import STLVmFlowVar
-from stl.trex_stl_lib.trex_stl_packet_builder_scapy import STLPktBuilder
-from stl.trex_stl_lib.trex_stl_packet_builder_scapy import STLScVmRaw
-from stl.trex_stl_lib.trex_stl_packet_builder_scapy import STLVmFixIpv4
-from stl.trex_stl_lib import api as Pkt
+from trex_stl_lib.trex_stl_client import STLStream
+from trex_stl_lib.trex_stl_streams import STLFlowLatencyStats
+from trex_stl_lib.trex_stl_streams import STLTXCont
+from trex_stl_lib.trex_stl_streams import STLProfile
+from trex_stl_lib.trex_stl_packet_builder_scapy import STLVmWrFlowVar
+from trex_stl_lib.trex_stl_packet_builder_scapy import STLVmFlowVarRepeatableRandom
+from trex_stl_lib.trex_stl_packet_builder_scapy import STLVmFlowVar
+from trex_stl_lib.trex_stl_packet_builder_scapy import STLPktBuilder
+from trex_stl_lib.trex_stl_packet_builder_scapy import STLScVmRaw
+from trex_stl_lib.trex_stl_packet_builder_scapy import STLVmFixIpv4
+from trex_stl_lib import api as Pkt
class TrexProfile(TrafficProfile):
@@ -132,7 +133,7 @@ class TrexProfile(TrafficProfile):
pkt_offset='Ether.dst')
self.vm_flow_vars.append(stl_vm_wr_flow_var)
- def set_src_ip4(self, src_ip4):
+ def set_src_ip4(self, src_ip4, count=1):
""" set source ipv4 address fields """
src_ips = src_ip4.split('-')
min_value = src_ips[0]
@@ -141,12 +142,12 @@ class TrexProfile(TrafficProfile):
src_ip4 = min_value
self._set_ip_fields(src=src_ip4)
else:
- stl_vm_flow_var = STLVmFlowVar(name="ip4_src",
- min_value=min_value,
- max_value=max_value,
- size=4,
- op='random',
- step=1)
+ stl_vm_flow_var = STLVmFlowVarRepeatableRandom(name="ip4_src",
+ min_value=min_value,
+ max_value=max_value,
+ size=4,
+ limit=int(count),
+ seed=0x1235)
self.vm_flow_vars.append(stl_vm_flow_var)
stl_vm_wr_flow_var = STLVmWrFlowVar(fv_name='ip4_src',
pkt_offset='IP.src')
@@ -154,7 +155,7 @@ class TrexProfile(TrafficProfile):
stl_vm_fix_ipv4 = STLVmFixIpv4(offset="IP")
self.vm_flow_vars.append(stl_vm_fix_ipv4)
- def set_dst_ip4(self, dst_ip4):
+ def set_dst_ip4(self, dst_ip4, count=1):
""" set destination ipv4 address fields """
dst_ips = dst_ip4.split('-')
min_value = dst_ips[0]
@@ -163,12 +164,12 @@ class TrexProfile(TrafficProfile):
dst_ip4 = min_value
self._set_ip_fields(dst=dst_ip4)
else:
- stl_vm_flow_var = STLVmFlowVar(name="dst_ip4",
- min_value=min_value,
- max_value=max_value,
- size=4,
- op='random',
- step=1)
+ stl_vm_flow_var = STLVmFlowVarRepeatableRandom(name="dst_ip4",
+ min_value=min_value,
+ max_value=max_value,
+ size=4,
+ limit=int(count),
+ seed=0x1235)
self.vm_flow_vars.append(stl_vm_flow_var)
stl_vm_wr_flow_var = STLVmWrFlowVar(fv_name='dst_ip4',
pkt_offset='IP.dst')
@@ -240,7 +241,7 @@ class TrexProfile(TrafficProfile):
pkt_offset='IP.tos')
self.vm_flow_vars.append(stl_vm_wr_flow_var)
- def set_src_port(self, src_port):
+ def set_src_port(self, src_port, count=1):
""" set packet source port """
src_ports = str(src_port).split('-')
min_value = int(src_ports[0])
@@ -250,18 +251,18 @@ class TrexProfile(TrafficProfile):
self._set_udp_fields(sport=src_port)
else:
max_value = int(src_ports[1])
- stl_vm_flow_var = STLVmFlowVar(name="port_src",
- min_value=min_value,
- max_value=max_value,
- size=2,
- op='random',
- step=1)
+ stl_vm_flow_var = STLVmFlowVarRepeatableRandom(name="port_src",
+ min_value=min_value,
+ max_value=max_value,
+ size=2,
+ limit=int(count),
+ seed=0x1235)
self.vm_flow_vars.append(stl_vm_flow_var)
stl_vm_wr_flow_var = STLVmWrFlowVar(fv_name='port_src',
pkt_offset=self.udp_sport)
self.vm_flow_vars.append(stl_vm_wr_flow_var)
- def set_dst_port(self, dst_port):
+ def set_dst_port(self, dst_port, count=1):
""" set packet destnation port """
dst_ports = str(dst_port).split('-')
min_value = int(dst_ports[0])
@@ -271,12 +272,13 @@ class TrexProfile(TrafficProfile):
self._set_udp_fields(dport=dst_port)
else:
max_value = int(dst_ports[1])
- stl_vm_flow_var = STLVmFlowVar(name="port_dst",
- min_value=min_value,
- max_value=max_value,
- size=2,
- op='random',
- step=1)
+ stl_vm_flow_var = \
+ STLVmFlowVarRepeatableRandom(name="port_dst",
+ min_value=min_value,
+ max_value=max_value,
+ size=2,
+ limit=int(count),
+ seed=0x1235)
self.vm_flow_vars.append(stl_vm_flow_var)
stl_vm_wr_flow_var = STLVmWrFlowVar(fv_name='port_dst',
pkt_offset=self.udp_dport)
@@ -335,9 +337,9 @@ class TrexProfile(TrafficProfile):
if 'dscp' in outer_l3v4:
self.set_dscp(outer_l3v4['dscp'])
if 'srcip4' in outer_l3v4:
- self.set_src_ip4(outer_l3v4['srcip4'])
+ self.set_src_ip4(outer_l3v4['srcip4'], outer_l3v4['count'])
if 'dstip4' in outer_l3v4:
- self.set_dst_ip4(outer_l3v4['dstip4'])
+ self.set_dst_ip4(outer_l3v4['dstip4'], outer_l3v4['count'])
def set_outer_l3v6_fields(self, outer_l3v6):
""" setup outer l3v6 fields from traffic profile """
@@ -367,9 +369,9 @@ class TrexProfile(TrafficProfile):
def set_outer_l4_fields(self, outer_l4):
""" setup outer l4 fields from traffic profile """
if 'srcport' in outer_l4:
- self.set_src_port(outer_l4['srcport'])
+ self.set_src_port(outer_l4['srcport'], outer_l4['count'])
if 'dstport' in outer_l4:
- self.set_dst_port(outer_l4['dstport'])
+ self.set_dst_port(outer_l4['dstport'], outer_l4['count'])
def generate_imix_data(self, packet_definition):
""" generate packet size for a given traffic profile """
diff --git a/yardstick/network_services/utils.py b/yardstick/network_services/utils.py
index 0264bbc1c..d52e27c15 100644
--- a/yardstick/network_services/utils.py
+++ b/yardstick/network_services/utils.py
@@ -30,7 +30,10 @@ OPTS = [
help='bin_path for VNFs location.'),
cfg.StrOpt('trex_path',
default=os.path.join(NSB_ROOT, 'trex/scripts'),
- help='trex automation lib pathh.'),
+ help='trex automation lib path.'),
+ cfg.StrOpt('trex_client_lib',
+ default=os.path.join(NSB_ROOT, 'trex_client/stl'),
+ help='trex python library path.'),
]
CONF.register_opts(OPTS, group="nsb")
diff --git a/yardstick/network_services/vnf_generic/vnf/sample_vnf.py b/yardstick/network_services/vnf_generic/vnf/sample_vnf.py
index 60979ebd2..7a756837e 100644
--- a/yardstick/network_services/vnf_generic/vnf/sample_vnf.py
+++ b/yardstick/network_services/vnf_generic/vnf/sample_vnf.py
@@ -37,9 +37,9 @@ from yardstick.network_services.vnf_generic.vnf.base import QueueFileWrapper
from yardstick.network_services.vnf_generic.vnf.base import GenericTrafficGen
from yardstick.network_services.utils import get_nsb_option
-from stl.trex_stl_lib.trex_stl_client import STLClient
-from stl.trex_stl_lib.trex_stl_client import LoggerApi
-from stl.trex_stl_lib.trex_stl_exceptions import STLError, STLStateError
+from trex_stl_lib.trex_stl_client import STLClient
+from trex_stl_lib.trex_stl_client import LoggerApi
+from trex_stl_lib.trex_stl_exceptions import STLError
from yardstick.ssh import AutoConnectSSH
@@ -457,7 +457,7 @@ class ClientResourceHelper(ResourceHelper):
def get_stats(self, *args, **kwargs):
try:
return self.client.get_stats(*args, **kwargs)
- except STLStateError:
+ except STLError:
LOG.exception("TRex client not connected")
return {}
@@ -497,18 +497,24 @@ class ClientResourceHelper(ResourceHelper):
def run_traffic(self, traffic_profile):
# fixme: fix passing correct trex config file,
# instead of searching the default path
- self._build_ports()
- self.client = self._connect()
- self.client.reset(ports=self.my_ports)
- self.client.remove_all_streams(self.my_ports) # remove all streams
- traffic_profile.register_generator(self)
-
- while self._terminated.value == 0:
- self._run_traffic_once(traffic_profile)
-
- self.client.stop(self.my_ports)
- self.client.disconnect()
- self._terminated.value = 0
+ try:
+ self._build_ports()
+ self.client = self._connect()
+ self.client.reset(ports=self.my_ports)
+ self.client.remove_all_streams(self.my_ports) # remove all streams
+ traffic_profile.register_generator(self)
+
+ while self._terminated.value == 0:
+ self._run_traffic_once(traffic_profile)
+
+ self.client.stop(self.my_ports)
+ self.client.disconnect()
+ self._terminated.value = 0
+ except STLError:
+ if self._terminated.value:
+ LOG.debug("traffic generator is stopped")
+ return # return if trex/tg server is stopped.
+ raise
def terminate(self):
self._terminated.value = 1 # stop client
@@ -925,6 +931,7 @@ class SampleVNFTrafficGen(GenericTrafficGen):
self._tg_process.start()
def wait_for_instantiate(self):
+ # overridden by subclasses
return self._wait_for_process()
def _check_status(self):
diff --git a/yardstick/network_services/vnf_generic/vnf/tg_ixload.py b/yardstick/network_services/vnf_generic/vnf/tg_ixload.py
index c15f7b954..353d31fc6 100644
--- a/yardstick/network_services/vnf_generic/vnf/tg_ixload.py
+++ b/yardstick/network_services/vnf_generic/vnf/tg_ixload.py
@@ -46,7 +46,7 @@ IXLOAD_CONFIG_TEMPLATE = '''\
},
"remote_server": "%s",
"result_dir": "%s",
- "ixload_cfg": '"C:/Results/%s"
+ "ixload_cfg": "C:/Results/%s"
}'''
IXLOAD_CMD = "{ixloadpy} {http_ixload} {args}"
@@ -122,7 +122,6 @@ class IxLoadTrafficGen(SampleVNFTrafficGen):
super(IxLoadTrafficGen, self).__init__(name, vnfd, setup_env_helper_type,
resource_helper_type)
self._result = {}
- self.done = False
self.data = None
def run_traffic(self, traffic_profile):
@@ -131,7 +130,7 @@ class IxLoadTrafficGen(SampleVNFTrafficGen):
for interface in self.vnfd_helper.interfaces:
vpci_list = interface['virtual-interface']["vpci"].split(":")
card = vpci_list[0]
- ports.append(vpci_list[1])
+ ports.append(str(vpci_list[1]))
for csv_file in glob.iglob(self.ssh_helper.join_bin_path('*.csv')):
os.unlink(csv_file)
@@ -143,6 +142,7 @@ class IxLoadTrafficGen(SampleVNFTrafficGen):
os.path.basename(self.resource_helper.resource_file_name))
http_ixload_path = os.path.join(VNF_PATH, "../../traffic_profile")
+
cmd = IXLOAD_CMD.format(
ixloadpy=os.path.join(ixia_config["py_bin_path"], "ixloadpython"),
http_ixload=os.path.join(http_ixload_path, "http_ixload.py"),
@@ -169,7 +169,10 @@ class IxLoadTrafficGen(SampleVNFTrafficGen):
def instantiate(self, scenario_cfg, context_cfg):
super(IxLoadTrafficGen, self).instantiate(scenario_cfg, context_cfg)
- self.done = False
+
+ def wait_for_instantiate(self):
+ # not needed for Ixload
+ pass
def terminate(self):
call(["pkill", "-9", "http_ixload.py"])
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 3d3fe73ea..78d2bd8ba 100644
--- a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py
+++ b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py
@@ -63,8 +63,8 @@ class IxiaResourceHelper(ClientResourceHelper):
def _build_ports(self):
# self.generate_port_pairs(self.topology)
- self.priv_ports = [int(x[0][-1]) for x in self.tg_port_pairs]
- self.pub_ports = [int(x[1][-1]) for x in self.tg_port_pairs]
+ self.priv_ports = [int(x[0][2:]) for x in self.tg_port_pairs]
+ self.pub_ports = [int(x[1][2:]) for x in self.tg_port_pairs]
self.my_ports = list(set(self.priv_ports).union(set(self.pub_ports)))
def get_stats(self, *args, **kwargs):
@@ -146,7 +146,6 @@ class IxiaTrafficGen(SampleVNFTrafficGen):
super(IxiaTrafficGen, self).__init__(name, vnfd, setup_env_helper_type,
resource_helper_type)
- self.done = True
self._ixia_traffic_gen = None
self.ixia_file_name = ''
self.tg_port_pairs = []
@@ -164,3 +163,7 @@ class IxiaTrafficGen(SampleVNFTrafficGen):
def terminate(self):
self.resource_helper.stop_collect()
super(IxiaTrafficGen, self).terminate()
+
+ def wait_for_instantiate(self):
+ # not needed for IxNet
+ pass
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 79e42e0a8..d94a9a6e6 100644
--- a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py
+++ b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py
@@ -52,11 +52,14 @@ class TrexRfcResourceHelper(TrexResourceHelper):
def _build_ports(self):
self.tg_port_pairs, self.networks = MultiPortConfig.get_port_pairs(
self.vnfd_helper.interfaces)
- self.priv_ports = [int(x[0][-1]) for x in self.tg_port_pairs]
- self.pub_ports = [int(x[1][-1]) for x in self.tg_port_pairs]
+ self.priv_ports = [int(x[0][2:]) for x in self.tg_port_pairs]
+ self.pub_ports = [int(x[1][2:]) for x in self.tg_port_pairs]
self.my_ports = list(set(chain(self.priv_ports, self.pub_ports)))
def _run_traffic_once(self, traffic_profile):
+ if self._terminated.value:
+ return
+
traffic_profile.execute(self)
self.client_started.value = 1
time.sleep(self.RUN_DURATION)
diff --git a/yardstick/network_services/vnf_generic/vnfdgen.py b/yardstick/network_services/vnf_generic/vnfdgen.py
index 474403dee..f42635006 100644
--- a/yardstick/network_services/vnf_generic/vnfdgen.py
+++ b/yardstick/network_services/vnf_generic/vnfdgen.py
@@ -14,26 +14,29 @@
""" Generic file to map and build vnf discriptor """
from __future__ import absolute_import
+
from functools import reduce
import jinja2
import logging
-import yaml
+from yardstick.common.task_template import finalize_for_yaml
from yardstick.common.utils import try_int
+from yardstick.common.yaml_loader import yaml_load
LOG = logging.getLogger(__name__)
def render(vnf_model, **kwargs):
"""Render jinja2 VNF template
+ Do not check for missing arguments
:param vnf_model: string that contains template
:param kwargs: Dict with template arguments
:returns:rendered template str
"""
- return jinja2.Template(vnf_model).render(**kwargs)
+ return jinja2.Template(vnf_model, finalize=finalize_for_yaml).render(**kwargs)
def generate_vnfd(vnf_model, node):
@@ -54,7 +57,7 @@ def generate_vnfd(vnf_model, node):
rendered_vnfd = render(vnf_model, **node)
# This is done to get rid of issues with serializing node
del node["get"]
- filled_vnfd = yaml.safe_load(rendered_vnfd)
+ filled_vnfd = yaml_load(rendered_vnfd)
return filled_vnfd
diff --git a/yardstick/network_services/yang_model.py b/yardstick/network_services/yang_model.py
index fbf224bd8..ec00c4513 100644
--- a/yardstick/network_services/yang_model.py
+++ b/yardstick/network_services/yang_model.py
@@ -1,107 +1,108 @@
-# 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.
-
-from __future__ import absolute_import
-from __future__ import print_function
-import logging
-import ipaddress
-import yaml
-import six
-
-LOG = logging.getLogger(__name__)
-
-
-class YangModel(object):
-
- RULE_TEMPLATE = "p acl add 1 {0} {1} {2} {3} {4} {5} {6} {7} 0 0 {8}"
-
- def __init__(self, config_file):
- super(YangModel, self).__init__()
- self._config_file = config_file
- self._options = {}
- self._rules = ''
-
- @property
- def config_file(self):
- return self._config_file
-
- @config_file.setter
- def config_file(self, value):
- self._config_file = value
- self._options = {}
- self._rules = ''
-
- def _read_config(self):
- # TODO: add some error handling in case of empty or non-existing file
- try:
- with open(self._config_file) as f:
- self._options = yaml.safe_load(f)
- except Exception as e:
- LOG.exception("Failed to load the yaml %s", e)
- raise
-
- def _get_entries(self):
- if not self._options:
- return ''
-
- rule_list = []
- for ace in self._options['access-list1']['acl']['access-list-entries']:
- # TODO: resolve ports using topology file and nodes'
- # ids: public or private.
- matches = ace['ace']['matches']
- dst_ipv4_net = matches['destination-ipv4-network']
- dst_ipv4_net_ip = ipaddress.ip_interface(six.text_type(dst_ipv4_net))
- port0_local_network = dst_ipv4_net_ip.network.network_address.exploded
- port0_prefix = dst_ipv4_net_ip.network.prefixlen
-
- src_ipv4_net = matches['source-ipv4-network']
- src_ipv4_net_ip = ipaddress.ip_interface(six.text_type(src_ipv4_net))
- port1_local_network = src_ipv4_net_ip.network.network_address.exploded
- port1_prefix = src_ipv4_net_ip.network.prefixlen
-
- lower_dport = matches['destination-port-range']['lower-port']
- upper_dport = matches['destination-port-range']['upper-port']
-
- lower_sport = matches['source-port-range']['lower-port']
- upper_sport = matches['source-port-range']['upper-port']
-
- # TODO: proto should be read from file also.
- # Now all rules in sample ACL file are TCP.
- rule_list.append('') # get an extra new line
- rule_list.append(self.RULE_TEMPLATE.format(port0_local_network,
- port0_prefix,
- port1_local_network,
- port1_prefix,
- lower_dport,
- upper_dport,
- lower_sport,
- upper_sport,
- 0))
- rule_list.append(self.RULE_TEMPLATE.format(port1_local_network,
- port1_prefix,
- port0_local_network,
- port0_prefix,
- lower_sport,
- upper_sport,
- lower_dport,
- upper_dport,
- 1))
-
- self._rules = '\n'.join(rule_list)
-
- def get_rules(self):
- if not self._rules:
- self._read_config()
- self._get_entries()
- return self._rules
+# 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.
+
+from __future__ import absolute_import
+from __future__ import print_function
+import logging
+import ipaddress
+import six
+
+from yardstick.common.yaml_loader import yaml_load
+
+LOG = logging.getLogger(__name__)
+
+
+class YangModel(object):
+
+ RULE_TEMPLATE = "p acl add 1 {0} {1} {2} {3} {4} {5} {6} {7} 0 0 {8}"
+
+ def __init__(self, config_file):
+ super(YangModel, self).__init__()
+ self._config_file = config_file
+ self._options = {}
+ self._rules = ''
+
+ @property
+ def config_file(self):
+ return self._config_file
+
+ @config_file.setter
+ def config_file(self, value):
+ self._config_file = value
+ self._options = {}
+ self._rules = ''
+
+ def _read_config(self):
+ # TODO: add some error handling in case of empty or non-existing file
+ try:
+ with open(self._config_file) as f:
+ self._options = yaml_load(f)
+ except Exception as e:
+ LOG.exception("Failed to load the yaml %s", e)
+ raise
+
+ def _get_entries(self):
+ if not self._options:
+ return ''
+
+ rule_list = []
+ for ace in self._options['access-list1']['acl']['access-list-entries']:
+ # TODO: resolve ports using topology file and nodes'
+ # ids: public or private.
+ matches = ace['ace']['matches']
+ dst_ipv4_net = matches['destination-ipv4-network']
+ dst_ipv4_net_ip = ipaddress.ip_interface(six.text_type(dst_ipv4_net))
+ port0_local_network = dst_ipv4_net_ip.network.network_address.exploded
+ port0_prefix = dst_ipv4_net_ip.network.prefixlen
+
+ src_ipv4_net = matches['source-ipv4-network']
+ src_ipv4_net_ip = ipaddress.ip_interface(six.text_type(src_ipv4_net))
+ port1_local_network = src_ipv4_net_ip.network.network_address.exploded
+ port1_prefix = src_ipv4_net_ip.network.prefixlen
+
+ lower_dport = matches['destination-port-range']['lower-port']
+ upper_dport = matches['destination-port-range']['upper-port']
+
+ lower_sport = matches['source-port-range']['lower-port']
+ upper_sport = matches['source-port-range']['upper-port']
+
+ # TODO: proto should be read from file also.
+ # Now all rules in sample ACL file are TCP.
+ rule_list.append('') # get an extra new line
+ rule_list.append(self.RULE_TEMPLATE.format(port0_local_network,
+ port0_prefix,
+ port1_local_network,
+ port1_prefix,
+ lower_dport,
+ upper_dport,
+ lower_sport,
+ upper_sport,
+ 0))
+ rule_list.append(self.RULE_TEMPLATE.format(port1_local_network,
+ port1_prefix,
+ port0_local_network,
+ port0_prefix,
+ lower_sport,
+ upper_sport,
+ lower_dport,
+ upper_dport,
+ 1))
+
+ self._rules = '\n'.join(rule_list)
+
+ def get_rules(self):
+ if not self._rules:
+ self._read_config()
+ self._get_entries()
+ return self._rules
diff --git a/yardstick/ssh.py b/yardstick/ssh.py
index 8ac3eaa3a..a024cf64a 100644
--- a/yardstick/ssh.py
+++ b/yardstick/ssh.py
@@ -423,6 +423,12 @@ class SSH(object):
if mode is not None:
sftp.chmod(remotepath, mode)
+ def get_file_obj(self, remotepath, file_obj):
+ client = self._get_client()
+
+ with client.open_sftp() as sftp:
+ sftp.getfo(remotepath, file_obj)
+
class AutoConnectSSH(SSH):
@@ -471,6 +477,10 @@ class AutoConnectSSH(SSH):
self._connect()
return super(AutoConnectSSH, self).put_file_obj(file_obj, remote_path, mode)
+ def get_file_obj(self, remote_path, file_obj):
+ self._connect()
+ return super(AutoConnectSSH, self).get_file_obj(remote_path, file_obj)
+
def provision_tool(self, tool_path, tool_file=None):
self._connect()
return super(AutoConnectSSH, self).provision_tool(tool_path, tool_file)