Merge "Install barometer collectd container on all hosts"
authorVolodymyr Mytnyk <volodymyrx.mytnyk@intel.com>
Wed, 21 Nov 2018 09:06:51 +0000 (09:06 +0000)
committerGerrit Code Review <gerrit@opnfv.org>
Wed, 21 Nov 2018 09:06:51 +0000 (09:06 +0000)
129 files changed:
ansible/roles/install_dpdk/tasks/main.yml
docker/Dockerfile
docker/Dockerfile.aarch64.patch
docs/release/release-notes/release-notes.rst
docs/release/results/index.rst
docs/testing/developer/devguide/devguide.rst
docs/testing/developer/devguide/devguide_nsb_prox.rst
docs/testing/developer/devguide/index.rst
docs/testing/user/userguide/01-introduction.rst
docs/testing/user/userguide/03-architecture.rst
docs/testing/user/userguide/04-installation.rst
docs/testing/user/userguide/13-nsb-installation.rst
docs/testing/user/userguide/14-nsb-operation.rst
docs/testing/user/userguide/15-list-of-tcs.rst
docs/testing/user/userguide/index.rst
docs/testing/user/userguide/nsb/nsb-list-of-tcs.rst
samples/vnf_samples/nsut/acl/tc_baremetal_acl_rfc2544_ixia_template.yaml
samples/vnf_samples/nsut/acl/tc_baremetal_acl_udp_ixia_correlated_multi_port_template.yaml
samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
samples/vnf_samples/nsut/acl/tc_ovs_acl_udp_ixia_correlated_scale_out_template.yaml
samples/vnf_samples/nsut/acl/tc_ovs_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
samples/vnf_samples/nsut/acl/tc_sriov_acl_udp_ixia_correlated_scale_out_template.yaml
samples/vnf_samples/nsut/acl/tc_sriov_acl_udp_ixia_scale_out_template.yaml
samples/vnf_samples/nsut/acl/tc_sriov_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
samples/vnf_samples/nsut/agnostic/HTTP_requests_concurrency.yaml [new file with mode: 0755]
samples/vnf_samples/nsut/agnostic/agnostic_vnf_topology_ixia_8ports.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/agnostic/agnostic_vnf_topology_ixload_2ports.yaml [new file with mode: 0755]
samples/vnf_samples/nsut/agnostic/tc_baremetal_http_ixload__Requests_Concurrency_suite.yaml [new file with mode: 0755]
samples/vnf_samples/nsut/agnostic/tc_baremetal_http_ixload__Requests_Concurrency_template.yaml [new file with mode: 0755]
samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_rfc2544_ixia_template.yaml
samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_udp_ixia_correlated_multi_port_template.yaml
samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml
samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia_scale_up.yaml
samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_with_latency_ipv4_1flow_dynamic_cgnapt_ixia.yaml
samples/vnf_samples/nsut/cgnapt/tc_ovs_cgnapt_udp_ixia_correlated_scale_out_template.yaml
samples/vnf_samples/nsut/cgnapt/tc_ovs_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
samples/vnf_samples/nsut/cgnapt/tc_sriov_cgnapt_udp_ixia_correlated_scale_out_template.yaml
samples/vnf_samples/nsut/cgnapt/tc_sriov_cgnapt_udp_ixia_scale_out_template.yaml
samples/vnf_samples/nsut/cgnapt/tc_sriov_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
samples/vnf_samples/nsut/firewall/tc_baremetal_rfc2544_ipv4_1rule_1flow_1518B_ixia.yaml
samples/vnf_samples/nsut/firewall/tc_baremetal_rfc2544_ipv4_1rule_1flow_1518B_ixia_4port.yaml
samples/vnf_samples/nsut/firewall/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
samples/vnf_samples/nsut/firewall/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia_4port.yaml
samples/vnf_samples/nsut/firewall/tc_heat_external_rfc2544_ipv4_1rule_1flow_1024B_ixia.yaml
samples/vnf_samples/nsut/firewall/tc_heat_external_rfc2544_ipv4_1rule_1flow_1280B_ixia.yaml
samples/vnf_samples/nsut/firewall/tc_heat_external_rfc2544_ipv4_1rule_1flow_128B_ixia.yaml
samples/vnf_samples/nsut/firewall/tc_heat_external_rfc2544_ipv4_1rule_1flow_1518B_ixia.yaml
samples/vnf_samples/nsut/firewall/tc_heat_external_rfc2544_ipv4_1rule_1flow_256B_ixia.yaml
samples/vnf_samples/nsut/firewall/tc_heat_external_rfc2544_ipv4_1rule_1flow_512B_ixia.yaml
samples/vnf_samples/nsut/firewall/tc_heat_external_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
samples/vnf_samples/nsut/prox/tc_prox_ovs-dpdk_l2fwd-2.yaml
samples/vnf_samples/nsut/prox/tc_prox_ovs-dpdk_l2fwd-4.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/prox/tc_prox_ovs-dpdk_l2fwd_pktTouch-2.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/prox/tc_prox_ovs-dpdk_l2fwd_pktTouch-4.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/prox/tc_prox_sriov_l2fwd-2.yaml
samples/vnf_samples/nsut/prox/tc_prox_sriov_l2fwd-4.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/prox/tc_prox_sriov_l2fwd_pktTouch-2.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/prox/tc_prox_sriov_l2fwd_pktTouch-4.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/prox/tc_prox_sriov_l3fwd-2.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/prox/tc_prox_sriov_l3fwd-4.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/vfw/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml
samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia_4port.yaml
samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia_scale_up.yaml
samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_ixia.yaml
samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_rfc2544_ixia_template.yaml
samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_udp_ixia_correlated_multi_port_template.yaml
samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_1024B_ixia.yaml
samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_1280B_ixia.yaml
samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_128B_ixia.yaml
samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_1518B_ixia.yaml
samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_256B_ixia.yaml
samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_512B_ixia.yaml
samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
samples/vnf_samples/nsut/vfw/tc_heat_external_rfc2544_ipv4_1rule_1flow_64B_trex_4port.yaml
samples/vnf_samples/nsut/vfw/tc_ovs_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
samples/vnf_samples/nsut/vfw/tc_ovs_vfw_udp_ixia_correlated_scale_out_template.yaml
samples/vnf_samples/nsut/vfw/tc_ovs_vfw_udp_ixia_scale_out_template.yaml
samples/vnf_samples/nsut/vfw/tc_sriov_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
samples/vnf_samples/nsut/vfw/tc_sriov_vfw_udp_ixia_correlated_scale_out_template.yaml
samples/vnf_samples/nsut/vfw/tc_sriov_vfw_udp_ixia_scale_out_template.yaml
samples/vnf_samples/nsut/vpe/tc_baremetal_http_ipv4_ixload.yaml
samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml
samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B.yaml
samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml
samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_corelated_traffic.yaml
samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_IMIX.yaml
samples/vnf_samples/nsut/vpe/tc_ovs_rfc2544_ipv4_1rule_64B_ixia.yaml
samples/vnf_samples/nsut/vpe/tc_ovs_rfc2544_ipv4_1rule_64B_trex.yaml
samples/vnf_samples/nsut/vpe/vpe_config/vpe_config_2_ports [new file with mode: 0644]
samples/vnf_samples/traffic_profiles/acl/acl_ipv4_profile_1flows.ixncfg [deleted file]
samples/vnf_samples/traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows.ixncfg [deleted file]
samples/vnf_samples/traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows_3node_latency.ixncfg [deleted file]
samples/vnf_samples/traffic_profiles/http_tests/HTTP_1b-requests_65000_concurrency.yaml
samples/vnf_samples/traffic_profiles/ixia/ixia_ipv4_profile_2_port.ixncfg [deleted file]
samples/vnf_samples/traffic_profiles/ixia/ixia_ipv4_profile_4_port.ixncfg [deleted file]
samples/vnf_samples/traffic_profiles/ixia_ipv4_latency_vpe.yaml
samples/vnf_samples/traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg [deleted file]
samples/vnf_samples/traffic_profiles/vfw/vfw_ipv4_profile_muttiport.ixncfg [deleted file]
samples/vnf_samples/traffic_profiles/vpe/vpe_ipv4_profile_1flows.ixncfg [deleted file]
samples/vnf_samples/traffic_profiles/vpe/vpe_ipv4_profile_256Kflows.ixncfg [deleted file]
yardstick/benchmark/contexts/standalone/model.py
yardstick/benchmark/contexts/standalone/ovs_dpdk.py
yardstick/benchmark/contexts/standalone/sriov.py
yardstick/benchmark/scenarios/networking/vnf_generic.py
yardstick/benchmark/scenarios/storage/storperf.py
yardstick/common/utils.py
yardstick/network_services/constants.py
yardstick/network_services/libs/ixia_libs/ixnet/ixnet_api.py
yardstick/network_services/pipeline.py
yardstick/network_services/traffic_profile/http_ixload.py
yardstick/network_services/traffic_profile/ixia_rfc2544.py
yardstick/network_services/traffic_profile/prox_profile.py
yardstick/network_services/vnf_generic/vnf/prox_helpers.py
yardstick/network_services/vnf_generic/vnf/prox_vnf.py
yardstick/network_services/vnf_generic/vnf/sample_vnf.py
yardstick/network_services/vnf_generic/vnf/vpe_vnf.py
yardstick/tests/unit/benchmark/contexts/standalone/test_model.py
yardstick/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py
yardstick/tests/unit/benchmark/contexts/standalone/test_sriov.py
yardstick/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py
yardstick/tests/unit/common/test_utils.py
yardstick/tests/unit/network_services/libs/ixia_libs/test_ixnet_api.py
yardstick/tests/unit/network_services/traffic_profile/test_http_ixload.py
yardstick/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py
yardstick/tests/unit/network_services/vnf_generic/vnf/test_prox_vnf.py
yardstick/tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py
yardstick/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py
yardstick/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py

index f89a43c..d1dc290 100644 (file)
     remote_src: yes
     force: yes
     mode: 0755
+
+- name: make vPE binary
+  command: make -j {{ ansible_processor_vcpus }}
+  args:
+    chdir: "{{ dpdk_path }}/examples/ip_pipeline"
+  environment:
+    RTE_SDK: "{{ dpdk_path }}"
+
+- name: Copy vPE to correct location
+  copy:
+    src: "{{ dpdk_path }}/examples/ip_pipeline/build/app/ip_pipeline"
+    dest: "{{ INSTALL_BIN_PATH }}/vPE_vnf"
+    remote_src: yes
+    force: yes
+    mode: 0755
index d594b46..29319e0 100644 (file)
@@ -26,7 +26,7 @@ ENV YARDSTICK_REPO_DIR="${REPOS_DIR}/yardstick/" \
 
 RUN apt-get update && apt-get install -y git python python-setuptools python-pip iputils-ping && apt-get -y autoremove && apt-get clean
 RUN easy_install -U setuptools==30.0.0
-RUN pip install appdirs==1.4.0 pyopenssl==17.5.0 openstacksdk==0.9.17 python-openstackclient==3.12.1 python-heatclient==1.11.1 ansible==2.5.5
+RUN pip install appdirs==1.4.0 pyopenssl==17.5.0 openstacksdk==0.11.3 python-openstackclient==3.14.2 python-heatclient==1.14.0 ansible==2.5.5
 
 RUN mkdir -p ${REPOS_DIR}
 
index 6c32404..cae9dbb 100644 (file)
@@ -31,7 +31,7 @@ index 71ce6b58..fce7c116 100644
 +RUN apt-get update && apt-get install -y git python python-setuptools python-pip iputils-ping && apt-get -y autoremove && \
 +    apt-get install -y libssl-dev && apt-get -y install libffi-dev && apt-get clean
  RUN easy_install -U setuptools==30.0.0
- RUN pip install appdirs==1.4.0 pyopenssl==17.5.0 openstacksdk==0.9.17 python-openstackclient==3.12.1 python-heatclient==1.11.1 ansible==2.5.5
+ RUN pip install appdirs==1.4.0 pyopenssl==17.5.0 openstacksdk==0.11.3 python-openstackclient==3.14.2 python-heatclient==1.14.0 ansible==2.5.5
 
 @@ -40,7 +41,8 @@ RUN git clone --depth 1 -b $BRANCH https://gerrit.opnfv.org/gerrit/yardstick ${Y
  RUN git clone --depth 1 https://gerrit.opnfv.org/gerrit/releng ${RELENG_REPO_DIR}
index 457b308..4b3f12b 100644 (file)
@@ -1,18 +1,12 @@
-=======
-License
-=======
-
-OPNFV Fraser release note for Yardstick Docs
-are licensed under a Creative Commons Attribution 4.0 International License.
-You should have received a copy of the license along with this.
-If not, see <https://creativecommons.org/licenses/by/4.0/>.
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
 
 The *Yardstick framework*, the *Yardstick test cases* are open-source software,
  licensed under the terms of the Apache License, Version 2.0.
 
-=======================================
-OPNFV Fraser Release Note for Yardstick
-=======================================
+=======================
+Yardstick Release Notes
+=======================
 
 .. toctree::
    :maxdepth: 2
@@ -27,7 +21,7 @@ OPNFV Fraser Release Note for Yardstick
 Abstract
 ========
 
-This document describes the release note of Yardstick project.
+This document compiles the release notes for the Gambia release of OPNFV Yardstick.
 
 
 Version History
@@ -36,16 +30,7 @@ Version History
 | *Date*            | *Version* | *Comment*                       |
 |                   |           |                                 |
 +-------------------+-----------+---------------------------------+
-| Jul 2, 2018       | 6.2.1     | Yardstick for Fraser release    |
-|                   |           |                                 |
-+-------------------+-----------+---------------------------------+
-| Jun 29, 2018      | 6.2.0     | Yardstick for Fraser release    |
-|                   |           |                                 |
-+-------------------+-----------+---------------------------------+
-| May 25, 2018      | 6.1.0     | Yardstick for Fraser release    |
-|                   |           |                                 |
-+-------------------+-----------+---------------------------------+
-| April 27, 2018    | 6.0.0     | Yardstick for Fraser release    |
+| November 9, 2018  | 7.0.0     | Yardstick for Gambia release    |
 |                   |           |                                 |
 +-------------------+-----------+---------------------------------+
 
@@ -60,10 +45,10 @@ the methodology in ETSI-ISG NFV-TST001_.
 The *Yardstick* framework is *installer*, *infrastructure* and *application*
 independent.
 
-OPNFV Fraser Release
+OPNFV Gambia Release
 ====================
 
-This Fraser release provides *Yardstick* as a framework for NFVI testing
+This Gambia release provides *Yardstick* as a framework for NFVI testing
 and OPNFV feature testing, automated in the OPNFV CI pipeline, including:
 
 * Documentation generated with Sphinx
@@ -88,7 +73,7 @@ and OPNFV feature testing, automated in the OPNFV CI pipeline, including:
 
 * Yardstick plug-in configuration yaml files, plug-in install/remove scripts
 
-For Fraser release, the *Yardstick framework* is used for the following
+For Gambia release, the *Yardstick framework* is used for the following
 testing:
 
 * OPNFV platform testing - generic test cases to measure the categories:
@@ -126,19 +111,19 @@ Release Data
 | **Project**                    | Yardstick             |
 |                                |                       |
 +--------------------------------+-----------------------+
-| **Repo/tag**                   | yardstick/opnfv-6.2.0 |
+| **Repo/tag**                   | yardstick/opnfv-7.0.0 |
 |                                |                       |
 +--------------------------------+-----------------------+
-| **Yardstick Docker image tag** | opnfv-6.2.0           |
+| **Yardstick Docker image tag** | opnfv-7.0.0           |
 |                                |                       |
 +--------------------------------+-----------------------+
-| **Release designation**        | Fraser                |
+| **Release designation**        | Gambia 7.0            |
 |                                |                       |
 +--------------------------------+-----------------------+
-| **Release date**               | Jun 29, 2018          |
+| **Release date**               | November 9, 2018      |
 |                                |                       |
 +--------------------------------+-----------------------+
-| **Purpose of the delivery**    | OPNFV Fraser 6.2.0    |
+| **Purpose of the delivery**    | OPNFV Gambia 7.0.0    |
 |                                |                       |
 +--------------------------------+-----------------------+
 
@@ -157,7 +142,7 @@ Documents
 Software Deliverables
 ---------------------
 
- - The Yardstick Docker image: https://hub.docker.com/r/opnfv/yardstick (tag: opnfv-6.2.0)
+ - The Yardstick Docker image: https://hub.docker.com/r/opnfv/yardstick (tag: opnfv-7.0.0)
 
 List of Contexts
 ^^^^^^^^^^^^^^^^
@@ -183,33 +168,37 @@ List of Contexts
 List of Runners
 ^^^^^^^^^^^^^^^
 
-.. note:: Yardstick Fraser 6.0.0 add two new Runners, "Dynamictp" and "Search".
-
-+---------------+-------------------------------------------------------+
-| **Runner**    | **Description**                                       |
-|               |                                                       |
-+---------------+-------------------------------------------------------+
-| *Arithmetic*  | Steps every run arithmetically according to specified |
-|               | input value                                           |
-|               |                                                       |
-+---------------+-------------------------------------------------------+
-| *Duration*    | Runs for a specified period of time                   |
-|               |                                                       |
-+---------------+-------------------------------------------------------+
-| *Iteration*   | Runs for a specified number of iterations             |
-|               |                                                       |
-+---------------+-------------------------------------------------------+
-| *Sequence*    | Selects input value to a scenario from an input file  |
-|               | and runs all entries sequentially                     |
-|               |                                                       |
-+---------------+-------------------------------------------------------+
-| **Dynamictp** | A runner that searches for the max throughput with    |
-|               | binary search                                         |
-|               |                                                       |
-+---------------+-------------------------------------------------------+
-| **Search**    | A runner that runs a specific time before it returns  |
-|               |                                                       |
-+---------------+-------------------------------------------------------+
+.. note:: Yardstick Gambia 7.0.0 adds 1 new Runner, "IterationIPC".
+
++----------------+-------------------------------------------------------+
+| **Runner**     | **Description**                                       |
+|                |                                                       |
++----------------+-------------------------------------------------------+
+| *Arithmetic*   | Steps every run arithmetically according to specified |
+|                | input value                                           |
+|                |                                                       |
++----------------+-------------------------------------------------------+
+| *Duration*     | Runs for a specified period of time                   |
+|                |                                                       |
++----------------+-------------------------------------------------------+
+| *Iteration*    | Runs for a specified number of iterations             |
+|                |                                                       |
++----------------+-------------------------------------------------------+
+| *IterationIPC* | Runs a configurable number of times before it         |
+|                | returns. Each iteration has a configurable timeout.   |
+|                |                                                       |
++----------------+-------------------------------------------------------+
+| *Sequence*     | Selects input value to a scenario from an input file  |
+|                | and runs all entries sequentially                     |
+|                |                                                       |
++----------------+-------------------------------------------------------+
+| *Dynamictp*    | A runner that searches for the max throughput with    |
+|                | binary search                                         |
+|                |                                                       |
++----------------+-------------------------------------------------------+
+| *Search*       | A runner that runs a specific time before it returns  |
+|                |                                                       |
++----------------+-------------------------------------------------------+
 
 
 List of Scenarios
@@ -280,19 +269,15 @@ List of Scenarios
 New Test cases
 --------------
 
-.. note:: Yardstick Fraser 6.1.0 added two new test cases, "TC092" and "TC093".
+.. note:: Yardstick Gambia 7.0.0 adds no new test cases.
 
 * Generic NFVI test cases
 
- * OPNFV_YARDSTICK_TCO84 - SPEC CPU 2006 for VM
+ * (e.g.) OPNFV_YARDSTICK_TCO84 - SPEC CPU 2006 for VM
 
 * HA Test cases
 
- * OPNFV_YARDSTICK_TC087 - SDN Controller resilience in non-HA configuration
- * OPNFV_YARDSTICK_TC090 - Control node Openstack service down - database instance
- * OPNFV_YARDSTICK_TC091 - Control node Openstack service down - heat-api
- * OPNFV_YARDSTICK_TC092 - SDN Controller resilience in HA configuration
- * OPNFV_YARDSTICK_TC093 - SDN Vswitch resilience in non-HA or HA configuration
+ * (e.g.) OPNFV_YARDSTICK_TC093 - SDN Vswitch resilience in non-HA or HA configuration
 
 
 Version Change
@@ -301,22 +286,23 @@ Version Change
 Module Version Changes
 ----------------------
 
-This is the sixth tracked release of Yardstick. It is based on following
+This is the seventh tracked release of Yardstick. It is based on following
 upstream versions:
 
-- OpenStack Pike
+- OpenStack Queens
 - OpenDayLight Oxygen
 
 
 Document Version Changes
 ------------------------
 
-This is the sixth tracked version of the Yardstick framework in OPNFV.
+This is the seventh tracked version of the Yardstick framework in OPNFV.
 It includes the following documentation updates:
 
-- Yardstick User Guide: add "network service benchmarking(NSB)" chapter;
-  add "Yardstick - NSB Testing -Installation" chapter; add "Yardstick API" chapter;
-  add "Yardstick user interface" chapter; Update Yardstick installation chapter;
+- Yardstick User Guide:
+
+  - Remove vTC chapter;
+
 - Yardstick Developer Guide
 - Yardstick Release Notes for Yardstick: this document
 
@@ -324,49 +310,49 @@ It includes the following documentation updates:
 Feature additions
 -----------------
 
-- Plugin-based test cases support Heat context
-- SR-IOV support for the Heat context
-- Support using existing network in Heat context
-- Support running test cases with existing VNFs/without destroying VNF in Heat context
-- Add vFW scale-up template
-- Improvements of unit tests and gating
-- GUI improvement about passing parameters
+- Simplify Yardstick installation to use a single ansible playbook (nsb_setup.yaml)....
+- Spirent support.
+- vEPC testcases.
+- Agnostic VNF tests cases for reuse of standard RFC-2544 test case.
+- PROX enhancements and the addition of Standalone test case using SRIOV and
+  OVS-DPDK.
+- Ixia enhancements for vBNG and PPPoE traffic.
+- Improvements of unit tests and gating.
+- Add DPDK pktgen traffic generator.
+- Kubernetes context enhancements.
+- Kubernetes sample test cases of fio and lmbench added.
 
 
 Scenario Matrix
 ===============
 
-For Fraser 6.0.0, Yardstick was tested on the following scenarios:
-
-+-------------------------+------+---------+----------+------+------+-------+
-|        Scenario         | Apex | Compass | Fuel-arm | Fuel | Joid | Daisy |
-+=========================+======+=========+==========+======+======+=======+
-| os-nosdn-nofeature-noha |  X   |    X    |          |      |  X   |       |
-+-------------------------+------+---------+----------+------+------+-------+
-| os-nosdn-nofeature-ha   |  X   |    X    |    X     |  X   |  X   |   X   |
-+-------------------------+------+---------+----------+------+------+-------+
-| os-nosdn-bar-noha       |  X   |    X    |          |      |      |       |
-+-------------------------+------+---------+----------+------+------+-------+
-| os-nosdn-bar-ha         |  X   |         |          |      |      |       |
-+-------------------------+------+---------+----------+------+------+-------+
-| os-odl-bgpvpn-ha        |  X   |         |          |      |      |       |
-+-------------------------+------+---------+----------+------+------+-------+
-| os-nosdn-calipso-noha   |  X   |         |          |      |      |       |
-+-------------------------+------+---------+----------+------+------+-------+
-| os-nosdn-kvm-ha         |      |    X    |          |      |      |       |
-+-------------------------+------+---------+----------+------+------+-------+
-| os-odl_l3-nofeature-ha  |      |    X    |          |      |      |       |
-+-------------------------+------+---------+----------+------+------+-------+
-| os-odl-sfc-ha           |      |    X    |          |      |      |       |
-+-------------------------+------+---------+----------+------+------+-------+
-| os-odl-nofeature-ha     |      |         |          |  X   |      |   X   |
-+-------------------------+------+---------+----------+------+------+-------+
-| os-nosdn-ovs-ha         |      |         |          |  X   |      |       |
-+-------------------------+------+---------+----------+------+------+-------+
-| k8-nosdn-nofeature-ha   |      |    X    |          |      |      |       |
-+-------------------------+------+---------+----------+------+------+-------+
-| k8-nosdn-stor4nfv-noha  |      |    X    |          |      |      |       |
-+-------------------------+------+---------+----------+------+------+-------+
+For Gambia 7.0.0, Yardstick was tested on the following scenarios:
+
++-------------------------+------+---------+----------+------+
+|        Scenario         | Apex | Compass | Fuel-arm | Fuel |
++=========================+======+=========+==========+======+
+| os-nosdn-nofeature-noha |   X  |         |          |      |
++-------------------------+------+---------+----------+------+
+| os-nosdn-nofeature-ha   |   X  |         |          |      |
++-------------------------+------+---------+----------+------+
+| os-odl-bgpvpn-noha      |   X  |         |          |      |
++-------------------------+------+---------+----------+------+
+| os-nosdn-calipso-noha   |   X  |         |          |      |
++-------------------------+------+---------+----------+------+
+| os-nosdn-kvm-ha         |      |    X    |          |      |
++-------------------------+------+---------+----------+------+
+| os-odl-nofeature-ha     |      |         |     X    |   X  |
++-------------------------+------+---------+----------+------+
+| os-odl-sfc-noha         |   X  |         |          |      |
++-------------------------+------+---------+----------+------+
+| os-nosdn-ovs-ha         |      |         |          |   X  |
++-------------------------+------+---------+----------+------+
+| k8-nosdn-nofeature-ha   |      |    X    |          |      |
++-------------------------+------+---------+----------+------+
+| k8-nosdn-stor4nfv-noha  |      |    X    |          |      |
++-------------------------+------+---------+----------+------+
+| k8-nosdn-stor4nfv-ha    |      |    X    |          |      |
++-------------------------+------+---------+----------+------+
 
 
 Test results
@@ -376,19 +362,6 @@ Test results are available in:
 
  - jenkins logs on CI: https://build.opnfv.org/ci/view/yardstick/
 
-The reporting pages can be found at:
-
-+---------------+----------------------------------------------------------------------------------+
-| apex          | http://testresults.opnfv.org/reporting/fraser/yardstick/status-apex.html         |
-+---------------+----------------------------------------------------------------------------------+
-| compass       | http://testresults.opnfv.org/reporting/fraser/yardstick/status-compass.html      |
-+---------------+----------------------------------------------------------------------------------+
-| fuel\@x86     | http://testresults.opnfv.org/reporting/fraser/yardstick/status-fuel@x86.html     |
-+---------------+----------------------------------------------------------------------------------+
-| fuel\@aarch64 | http://testresults.opnfv.org/reporting/fraser/yardstick/status-fuel@aarch64.html |
-+---------------+----------------------------------------------------------------------------------+
-| joid          | http://testresults.opnfv.org/reporting/fraser/yardstick/status-joid.html         |
-+---------------+----------------------------------------------------------------------------------+
 
 Known Issues/Faults
 -------------------
@@ -397,214 +370,65 @@ Known Issues/Faults
 Corrected Faults
 ----------------
 
-Fraser 6.2.1:
+Gambia 7.0.0:
 
 +--------------------+--------------------------------------------------------------------------+
 | **JIRA REFERENCE** |                             **DESCRIPTION**                              |
 +====================+==========================================================================+
-|   YARDSTICK-1147   | Fix ansible scripts for running in container                             |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1157   | Bug Fix: correct the file path to build docker file                      |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1276   | Bugfix: docker build failed                                              |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1280   | Bugfix: uwsgi config file yardstick.ini output error                     |
-+--------------------+--------------------------------------------------------------------------+
-
-Fraser 6.2.0:
-
-+--------------------+--------------------------------------------------------------------------+
-| **JIRA REFERENCE** |                             **DESCRIPTION**                              |
-+====================+==========================================================================+
-|   YARDSTICK-1246   | Update pmd/lcore mask for OVS-DPDK context                               |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-837    | Move tests: unit/network_services/{lib/,collector/,*.py}                 |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1144   | Correctly set PYTHONPATH in Dockerfile                                   |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1205   | Set "cmd2" library to version 0.8.6                                      |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1204   | Bump oslo.messaging version to 5.36.0                                    |
+| YARDSTICK-1137     | Fix CLI argument handling in nsb_setup.sh                                |
 +--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1210   | Remove __init__ method overriding in HeatContextTestCase                 |
+| YARDSTICK-1220     | Get stats for multiple port simultaneously                               |
 +--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1189   | Error when adding SR-IOV interfaces in SR-IOV context                    |
+| YARDSTICK-1260     | Added missing functionality to start VM and access it using SSH keys     |
+|                    | in Standalone contexts.                                                  |
 +--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1214   | Remove AnsibleCommon class method mock                                   |
+| YARDSTICK-1298     | Allows for in-line overriding/modification of traffic profile variables  |
+|                    | from the testcase file.                                                  |
 +--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1159   | Add --hwlb options as a command line argument for SampleVNF              |
+| YARDSTICK-1368     | Updated existing test cases in Yardstick to minimize changes done        |
+|                    | manually to run standalone tests for Trex.                               |
 +--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1203   | Add scale out TCs with availability zone support                         |
+| YARDSTICK-1389     | Add status filed for RFC2544 TC iterations                               |
 +--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1167   | Do not start collectd twice when SampleVNF is running on Baremetal       |
+| YARDSTICK-1395     | Update 'configure_uwsgi' role to work in baremetal/container modes.      |
 +--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1188   | Add "host_name_separator" variable to Context class                      |
+| YARDSTICK-1402     | Change IP assignment for VM to static for standalone context             |
 +--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1112   | MQ startup process refactor                                              |
+| YARDSTICK-1404     | CPU Utilization for VNF and traffic generator are now graphed on Grafana |
 +--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1229   | Cleanup BaseMonitor unit tests                                           |
+| YARDSTICK-1411     | Fix Yardstick Docker image ARM build                                     |
 +--------------------+--------------------------------------------------------------------------+
-|         -          | Configure ACL via static file                                            |
+| YARDSTICK-1414     | Update the pinned sampleVNF version to use a commit instead of a branch  |
 +--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1191   | Use TRex release v2.41 to support both x86 and aarch64                   |
+| YARDSTICK-1418     | NSB PROX NFVi test now stops after reaching expected precision           |
 +--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1106   | Add IxNetwork API Python Binding package                                 |
+| YARDSTICK-1457     | Fix influxdb "field type conflict" error                                 |
 +--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1224   | Cleanup TestYardstickNSCli class                                         |
+| YARDSTICK-1458     | Update Grafana to display "real-time" data instead of historical data.   |
 +--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1225   | Remove print out of logger exception in TestUtils                        |
+| YARDSTICK-1462     | NSB: Add OvS 2.8.1 support in SA context                                 |
 +--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1194   | Add "duration" parameter to test case definition                         |
+| YARDSTICK-1492     | Make OvS server to listen on TCP                                         |
 +--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1209   | Remove instantiated contexts in "test_task"                              |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1192   | Standalone XML machine type is not longer valid                          |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1197   | Refactor RFC2455 TRex traffic profile injection                          |
-+--------------------+--------------------------------------------------------------------------+
-|         -          | Fix "os.path" mock problems during tests                                 |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1218   | Refactor "utils.parse_ini_file" testing                                  |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1179   | Start nginx and uwsgi servicies only in not container mode               |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1177   | Install dependencies: bare-metal, standalone                             |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1126   | Migrate install.sh script to ansible                                     |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1146   | Fix nsb_setup.sh script                                                  |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1247   | NSB setup inventory name changed                                         |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1116   | Changed IxNextgen library load in IXIA RFC2544 traffic generator call.   |
-+--------------------+--------------------------------------------------------------------------+
-|         -          | Corrected scale-up command line arguments                                |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-878    | OpenStack client replacement                                             |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1222   | Bugfix: HA kill process recovery has a conflict                          |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1139   | Add "os_cloud_config" as a new context flag parameter                    |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1255   | Extended Context class with get_physical_nodes functionality             |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1244   | NSB NFVi BNG test fails to run - stops after one step                    |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1219   | Decrease Sampling interval                                               |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1101   | NSB NFVi PROX BNG losing many packets                                    |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1217   | Fix NSB NfVi support for 25 and 40Gbps                                   |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1185   | NSB Topology fix for Prox 4 port test case                               |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-966    | Convert SLA asserts to raises                                            |
+| YARDSTICK-1493     | The RX queues number is hard-codded and cannot be changed                |
 +--------------------+--------------------------------------------------------------------------+
 
-Fraser 6.1.0:
-
-+--------------------+--------------------------------------------------------------------------+
-| **JIRA REFERENCE** |                             **DESCRIPTION**                              |
-+====================+==========================================================================+
-|   YARDSTICK-995    | Test case spec for SDN Virtual Switch resilience                         |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1097   | Add pod.yaml file for APEX installer                                     |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1122   | Remove unused code in SampleVNF                                          |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1125   | Update samples/test_suite.yaml                                           |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1132   | Document for Euphrates test case results                                 |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1138   | Support Restart Operation                                                |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1142   | start_service script fails to start openvswitch service in centos distro |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1165   | Bugfix: openrc api dump should be safe_dump                              |
-+--------------------+--------------------------------------------------------------------------+
-
-Fraser 6.0.0:
-
-+--------------------+--------------------------------------------------------------------------+
-| **JIRA REFERENCE** |                             **DESCRIPTION**                              |
-+====================+==========================================================================+
-|   YARDSTICK-831    | tc053 kill haproxy wrong                                                 |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-842    | load image fails when there's cirros image exist                         |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-857    | tc006 failed due to volume attached to different location "/dev/vdc"     |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-874    | Specify supported architecture for Ubuntu backports repository           |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-875    | Check if multiverse repository is available in Ubuntu                    |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-893    | Fix proxy env handling and ansible multinode support                     |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-899    | Variable local_iface_name is read before it is set                       |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-900    | Section in "upload_yardstick_image.yml" invalid                          |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-911    | Remove 'inconsistent-return-statements' from Pylint checks               |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-989    | Yardstick real-time influxdb KPI reporting regressions                   |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-994    | NSB set-up build script for baremetal broken                             |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-996    | Error in address input format in "_ip_range_action_partial"              |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1003   | Prox vnf descriptor cleanup for tg and vnf                               |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1006   | Ansible destroy script will fail if vm has already been undefined        |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1012   | constants: fix pylint warnings for OSError                               |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1014   | Remove unused args in                                                    |
-|                    | network_services.traffic_profile.ixia_rfc2544.IXIARFC2544Profile         |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1016   | Allow vm to access outside world through default gateway                 |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1019   | For 'qemu-img version 2.10.1' unit 'MB' is not acceptable ansible script |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1021   | NSB: All Sample VNF test cases timeout after 1 hour of execution         |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1036   | Prox: Addition of storage of extra counters for Grafana                  |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1038   | Missing file which is described in the operation_conf.yaml               |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1047   | Error in string format in HeatTemplateError message                      |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1056   | yardstick report command print error when run test case                  |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1059   | Reduce the log level if TRex client is no connected                      |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1073   | Error when retrieving "options" section in "scenario"                    |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1080   | Running Test Case in Latest Yardstick Docker Image shows Error           |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1082   | tc043,tc055, tc063, tc075,  pass wrong node name in the ci scenario yaml |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1102   | Don't hide exception traceback from Task.start()                         |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1107   | bad exception traceback print due to atexit_handler                      |
-+--------------------+--------------------------------------------------------------------------+
-|   YARDSTICK-1120   | HA test case tc050 should start monitor before attack                    |
-+--------------------+--------------------------------------------------------------------------+
 
-Fraser 6.0.0 known restrictions/issues
+Gambia 7.0.0 known restrictions/issues
 ======================================
 
-+-----------+-----------+----------------------------------------------+
-| Installer | Scenario  | Issue                                        |
-+===========+===========+==============================================+
-|           |           |                                              |
-+-----------+-----------+----------------------------------------------+
++-----------+-----------------------+------------------+
+| Installer |       Scenario        |      Issue       |
++===========+=======================+==================+
+|   apex    |  os-ovn-nofeature-ha  |  YARDSTICK-1517  |
++-----------+-----------------------+------------------+
 
 Useful links
 ============
 
  - wiki project page: https://wiki.opnfv.org/display/yardstick/Yardstick
 
- - wiki Yardstick Fraser release planing page: https://wiki.opnfv.org/display/yardstick/Release+Fraser
+ - wiki Yardstick Gambia release planning page: https://wiki.opnfv.org/display/yardstick/Release+Gambia
 
  - Yardstick repo: https://git.opnfv.org/yardstick
 
@@ -612,4 +436,4 @@ Useful links
 
  - Yardstick grafana dashboard: http://testresults.opnfv.org/grafana/
 
- - Yardstick IRC chanel: #opnfv-yardstick
+ - Yardstick IRC channel: #opnfv-yardstick
index 63445fd..30cf622 100644 (file)
@@ -15,3 +15,8 @@ Yardstick test results
 .. include:: ./overview.rst
 .. include:: ./results.rst
 .. include:: ./euphrates_fraser_comparison.rst
+
+.. include:: ./yardstick-opnfv-ha.rst
+.. include:: ./yardstick-opnfv-kvm.rst
+.. include:: ./yardstick-opnfv-parser.rst
+
index 76ed7c6..2065f6e 100755 (executable)
@@ -52,9 +52,9 @@ Where can I find some help to start?
 
 This guide is made for you. You can have a look at the `user guide`_.
 There are also references on documentation, video tutorials, tips in the
-project `wiki page`_. You can also directly contact us by mail with [Yardstick]
-prefix in the subject at opnfv-tech-discuss@lists.opnfv.org or on the IRC chan
-#opnfv-yardstick.
+project `wiki page`_. You can also directly contact us by mail with
+``#yardstick`` or ``[yardstick]`` prefix in the subject at
+``opnfv-tech-discuss@lists.opnfv.org`` or on the IRC channel ``#opnfv-yardstick``.
 
 
 Yardstick developer areas
index 582668b..be2b5be 100755 (executable)
@@ -13,7 +13,8 @@ optimal system architectures and configurations.
 Prerequisites
 =============
 
-In order to integrate PROX tests into NSB, the following prerequisites are required.
+In order to integrate PROX tests into NSB, the following prerequisites are
+required.
 
 .. _`dpdk wiki page`: https://www.dpdk.org/
 .. _`yardstick wiki page`: https://wiki.opnfv.org/display/yardstick/
@@ -159,11 +160,13 @@ A NSB Prox test is composed of the following components :-
   ``tc_prox_heat_context_vpe-4.yaml``. This file describes the components
   of the test, in the case of openstack the network description and
   server descriptions, in the case of baremetal the hardware
-  description location. It also contains the name of the Traffic Generator, the SUT config file
-  and the traffic profile description, all described below. See nsb-test-description-label_
+  description location. It also contains the name of the Traffic Generator,
+  the SUT config file and the traffic profile description, all described below.
+  See nsb-test-description-label_
 
-* Traffic Profile file. Example ``prox_binsearch.yaml``. This describes the packet size, tolerated
-  loss, initial line rate to start traffic at, test interval etc See nsb-traffic-profile-label_
+* Traffic Profile file. Example ``prox_binsearch.yaml``. This describes the
+  packet size, tolerated loss, initial line rate to start traffic at, test
+  interval etc See nsb-traffic-profile-label_
 
 * Traffic Generator Config file. Usually called ``gen_<test>-<ports>.cfg``.
 
@@ -235,7 +238,8 @@ show you how to understand the test description file.
 Now let's examine the components of the file in detail
 
 1. ``traffic_profile`` - This specifies the traffic profile for the
-   test. In this case ``prox_binsearch.yaml`` is used. See nsb-traffic-profile-label_
+   test. In this case ``prox_binsearch.yaml`` is used. See
+   nsb-traffic-profile-label_
 
 2. ``topology`` - This is either ``prox-tg-topology-1.yaml`` or
     ``prox-tg-topology-2.yaml`` or ``prox-tg-topology-4.yaml``
@@ -330,11 +334,11 @@ This describes the details of the traffic flow. In this case
    :alt: NSB PROX Traffic Profile
 
 
-1. ``name`` - The name of the traffic profile. This name should match the name specified in the
-   ``traffic_profile`` field in the Test Description File.
+1. ``name`` - The name of the traffic profile. This name should match the name
+   specified in the ``traffic_profile`` field in the Test Description File.
 
-2. ``traffic_type`` - This specifies the type of traffic pattern generated, This name matches
-   class name of the traffic generator See::
+2. ``traffic_type`` - This specifies the type of traffic pattern generated,
+   This name matches class name of the traffic generator. See::
 
       network_services/traffic_profile/prox_binsearch.py class ProxBinSearchProfile(ProxProfile)
 
@@ -704,15 +708,22 @@ Now let's examine the components of the file in detail
       physical core improves performance, however sometimes it
       is optimal to move task to a separate core. This is
       best decided by checking performance.
-   c. ``mode=lat`` - Specifies the action carried out by this task on this core. Supported modes are: acl,
-      classify, drop, gredecap, greencap, ipv6_decap, ipv6_encap, l2fwd, lbnetwork, lbpos, lbqinq, nop,
-      police, qinqdecapv4, qinqencapv4, qos, routing, impair, lb5tuple, mirror, unmpls, tagmpls,
-      nat, decapnsh, encapnsh, gen, genl4 and lat. This task(0) per core(3) receives packets on port.
-   d. ``rx port=p0`` - The port to receive packets on ``Port 0``. Core 4 will receive packets on ``Port 1``.
-   e. ``lat pos=42`` - Describes where to put a 4-byte timestamp in the packet. Note that the packet length should
-      be longer than ``lat pos`` + 4 bytes to avoid truncation of the timestamp. It defines where the timestamp is
-      to be read from. Note that the SUT workload might cause the position of the timestamp to change
-      (i.e. due to encapsulation).
+   c. ``mode=lat`` - Specifies the action carried out by this task on this
+      core.
+      Supported modes are: ``acl``, ``classify``, ``drop``, ``gredecap``,
+      ``greencap``, ``ipv6_decap``, ``ipv6_encap``, ``l2fwd``, ``lbnetwork``,
+      ``lbpos``, ``lbqinq``, ``nop``, ``police``, ``qinqdecapv4``,
+      ``qinqencapv4``, ``qos``, ``routing``, ``impair``, ``lb5tuple``,
+      ``mirror``, ``unmpls``, ``tagmpls``, ``nat``, ``decapnsh``, ``encapnsh``,
+      ``gen``, ``genl4`` and ``lat``. This task(0) per core(3) receives packets
+      on port.
+   d. ``rx port=p0`` - The port to receive packets on ``Port 0``. Core 4 will
+      receive packets on ``Port 1``.
+   e. ``lat pos=42`` - Describes where to put a 4-byte timestamp in the packet.
+      Note that the packet length should be longer than ``lat pos`` + 4 bytes
+      to avoid truncation of the timestamp. It defines where the timestamp is
+      to be read from. Note that the SUT workload might cause the position of
+      the timestamp to change (i.e. due to encapsulation).
 
 .. _nsb-sut-generator-label:
 
@@ -720,7 +731,8 @@ Now let's examine the components of the file in detail
 -------------------------------
 
 This section will describes the SUT(VNF) config file. This is the same for both
-baremetal and heat. See this example of ``handle_l2fwd_multiflow-2.cfg`` to explain the options.
+baremetal and heat. See this example of ``handle_l2fwd_multiflow-2.cfg`` to
+explain the options.
 
 .. image:: images/PROX_Handle_2port_cfg.png
    :width: 1400px
@@ -730,13 +742,15 @@ See `prox options`_ for details
 
 Now let's examine the components of the file in detail
 
-1. ``[eal options]`` - same as the Generator config file. This specified the EAL (Environmental Abstraction Layer)
-   options. These are default values and are not changed.
-   See `dpdk wiki page`_.
+1. ``[eal options]`` - same as the Generator config file. This specified the
+   EAL (Environmental Abstraction Layer) options. These are default values and
+   are not changed. See `dpdk wiki page`_.
 
-2. ``[port 0]`` - This section describes the DPDK Port. The number following the keyword ``port`` usually refers to the DPDK Port Id. usually starting from ``0``.
-   Because you can have multiple ports this entry usually repeated. Eg. For a 2 port setup ``[port0]`` and ``[port 1]`` and for a 4 port setup ``[port 0]``, ``[port 1]``,
-   ``[port 2]`` and ``[port 3]``::
+2. ``[port 0]`` - This section describes the DPDK Port. The number following
+   the keyword ``port`` usually refers to the DPDK Port Id. usually starting
+   from ``0``. Because you can have multiple ports this entry usually
+   repeated. E.g. For a 2 port setup ``[port0]`` and ``[port 1]`` and for a 4
+   port setup ``[port 0]``, ``[port 1]``, ``[port 2]`` and ``[port 3]``::
 
       [port 0]
       name=if0
@@ -745,10 +759,14 @@ Now let's examine the components of the file in detail
       tx desc=2048
       promiscuous=yes
 
-   a. In this example ``name =if0`` assigned the name ``if0`` to the port. Any name can be assigned to a port.
-   b. ``mac=hardware`` sets the MAC address assigned by the hardware to data from this port.
-   c. ``rx desc=2048`` sets the number of available descriptors to allocate for receive packets. This can be changed and can effect performance.
-   d. ``tx desc=2048`` sets the number of available descriptors to allocate for transmit packets. This can be changed and can effect performance.
+   a. In this example ``name =if0`` assigned the name ``if0`` to the port. Any
+      name can be assigned to a port.
+   b. ``mac=hardware`` sets the MAC address assigned by the hardware to data
+      from this port.
+   c. ``rx desc=2048`` sets the number of available descriptors to allocate
+      for receive packets. This can be changed and can effect performance.
+   d. ``tx desc=2048`` sets the number of available descriptors to allocate
+      for transmit packets. This can be changed and can effect performance.
    e. ``promiscuous=yes`` this enables promiscuous mode for this port.
 
 3. ``[defaults]`` - Here default operations and settings can be over written.::
@@ -757,35 +775,46 @@ Now let's examine the components of the file in detail
      mempool size=8K
      memcache size=512
 
-   a. In this example ``mempool size=8K`` the number of mbufs per task is altered. Altering this value could effect performance. See `prox options`_ for details.
-   b. ``memcache size=512`` - number of mbufs cached per core, default is 256 this is the cache_size. Altering this value could effect performance.
+   a. In this example ``mempool size=8K`` the number of mbufs per task is
+      altered. Altering this value could effect performance. See
+      `prox options`_ for details.
+   b. ``memcache size=512`` - number of mbufs cached per core, default is 256
+      this is the cache_size. Altering this value could affect performance.
 
-4. ``[global]`` - Here application wide setting are supported. Things like application name, start time, duration and memory configurations can be set here.
+4. ``[global]`` - Here application wide setting are supported. Things like
+   application name, start time, duration and memory configurations can be set
+   here.
    In this example.::
 
       [global]
       start time=5
       name=Basic Gen
 
-    a. ``start time=5`` Time is seconds after which average stats will be started.
+    a. ``start time=5`` Time is seconds after which average stats will be
+       started.
     b. ``name=Handle L2FWD Multiflow (2x)`` Name of the configuration.
 
-5. ``[core 0]`` - This core is designated the master core. Every Prox application must have a master core. The master mode must be assigned to
+5. ``[core 0]`` - This core is designated the master core. Every Prox
+   application must have a master core. The master mode must be assigned to
    exactly one task, running alone on one core.::
 
     [core 0]
     mode=master
 
-6. ``[core 1]`` - This describes the activity on core 1. Cores can be configured by means of a set of [core #] sections,   where # represents either:
+6. ``[core 1]`` - This describes the activity on core 1. Cores can be
+   configured by means of a set of [core #] sections, where # represents
+   either:
 
-   a. an absolute core number: e.g. on a 10-core, dual socket system with hyper-threading,
-      cores are numbered from 0 to 39.
+   a. an absolute core number: e.g. on a 10-core, dual socket system with
+      hyper-threading, cores are numbered from 0 to 39.
 
-   b. PROX allows a core to be identified by a core number, the letter 's', and a socket number.
-      However NSB PROX is hardware agnostic (physical and virtual configurations are the same) it
-      is advisable no to use physical core numbering.
+   b. PROX allows a core to be identified by a core number, the letter 's',
+      and a socket number. However NSB PROX is hardware agnostic (physical and
+      virtual configurations are the same) it is advisable no to use physical
+      core numbering.
 
-   Each core can be assigned with a set of tasks, each running one of the implemented packet processing modes.::
+   Each core can be assigned with a set of tasks, each running one of the
+   implemented packet processing modes.::
 
      [core 1]
      name=none
@@ -796,20 +825,33 @@ Now let's examine the components of the file in detail
      tx port=if1
 
    a. ``name=none`` - No name assigned to the core.
-   b. ``task=0`` - Each core can run a set of tasks. Starting with ``0``. Task 1 can be defined later in this core or
-      can be defined in another ``[core 1]`` section with ``task=1`` later in configuration file. Sometimes running
-      multiple task related to the same packet on the same physical core improves performance, however sometimes it
-      is optimal to move task to a separate core. This is best decided by checking performance.
-   c. ``mode=l2fwd`` - Specifies the action carried out by this task on this core. Supported modes are: acl,
-      classify, drop, gredecap, greencap, ipv6_decap, ipv6_encap, l2fwd, lbnetwork, lbpos, lbqinq, nop,
-      police, qinqdecapv4, qinqencapv4, qos, routing, impair, lb5tuple, mirror, unmpls, tagmpls,
-      nat, decapnsh, encapnsh, gen, genl4 and lat. This code does ``l2fwd`` .. ie it does the L2FWD.
-
-   d. ``dst mac=@@tester_mac1`` - The destination mac address of the packet will be set to the MAC address of ``Port 1`` of destination device. (The Traffic Generator/Verifier)
-   e. ``rx port=if0`` - This specifies that the packets are received from ``Port 0`` called if0
-   f. ``tx port=if1`` - This specifies that the packets are transmitted to ``Port 1``  called if1
-
-   If this example we receive a packet on core on a port, carry out operation on the packet on the core and transmit it on on another port still using the same task on the same core.
+   b. ``task=0`` - Each core can run a set of tasks. Starting with ``0``.
+      Task 1 can be defined later in this core or can be defined in another
+      ``[core 1]`` section with ``task=1`` later in configuration file.
+      Sometimes running multiple task related to the same packet on the same
+      physical core improves performance, however sometimes it is optimal to
+      move task to a separate core. This is best decided by checking
+      performance.
+   c. ``mode=l2fwd`` - Specifies the action carried out by this task on this
+      core. Supported modes are: ``acl``, ``classify``, ``drop``,
+      ``gredecap``, ``greencap``, ``ipv6_decap``, ``ipv6_encap``, ``l2fwd``,
+      ``lbnetwork``, ``lbpos``, ``lbqinq``, ``nop``, ``police``,
+      ``qinqdecapv4``, ``qinqencapv4``, ``qos``, ``routing``, ``impair``,
+      ``lb5tuple``, ``mirror``, ``unmpls``, ``tagmpls``, ``nat``,
+      ``decapnsh``, ``encapnsh``, ``gen``, ``genl4`` and ``lat``. This code
+      does ``l2fwd``. i.e. it does the L2FWD.
+
+   d. ``dst mac=@@tester_mac1`` - The destination mac address of the packet
+      will be set to the MAC address of ``Port 1`` of destination device.
+      (The Traffic Generator/Verifier)
+   e. ``rx port=if0`` - This specifies that the packets are received from
+      ``Port 0`` called if0
+   f. ``tx port=if1`` - This specifies that the packets are transmitted to
+      ``Port 1``  called if1
+
+   In this example we receive a packet on core on a port, carry out operation
+   on the packet on the core and transmit it on on another port still using
+   the same task on the same core.
 
    On some implementation you may wish to use multiple tasks, like this.::
 
@@ -829,15 +871,22 @@ Now let's examine the components of the file in detail
      tx port=if0
      drop=no
 
-   In this example you can see Core 1/Task 0 called ``rx_task`` receives the packet from if0 and perform the l2fwd. However instead of sending the packet to a
-   port it sends it to a core see ``tx cores=1t1``. In this case it sends it to Core 1/Task 1.
+   In this example you can see Core 1/Task 0 called ``rx_task`` receives the
+   packet from if0 and perform the l2fwd. However instead of sending the
+   packet to a port it sends it to a core see ``tx cores=1t1``. In this case it
+   sends it to Core 1/Task 1.
 
-   Core 1/Task 1 called ``l2fwd_if0``, receives the packet, not from a port but from the ring. See ``rx ring=yes``. It does not perform any operation on the packet See ``mode=none``
-   and sends the packets to ``if0`` see ``tx port=if0``.
+   Core 1/Task 1 called ``l2fwd_if0``, receives the packet, not from a port but
+   from the ring. See ``rx ring=yes``. It does not perform any operation on the
+   packet See ``mode=none`` and sends the packets to ``if0`` see
+   ``tx port=if0``.
 
-   It is also possible to implement more complex operations be chaining multiple operations in sequence and using rings to pass packets from one core to another.
+   It is also possible to implement more complex operations by chaining
+   multiple operations in sequence and using rings to pass packets from one
+   core to another.
 
-   In thus example we show a Broadband Network Gateway (BNG) with Quality of Service (QoS).  Communication from task to task is via rings.
+   In this example, we show a Broadband Network Gateway (BNG) with Quality of
+   Service (QoS).  Communication from task to task is via rings.
 
    .. image:: images/PROX_BNG_QOS.png
       :width: 1000px
@@ -848,26 +897,36 @@ Now let's examine the components of the file in detail
 
 .. _baremetal-config-label:
 
-This is required for baremetal testing. It describes the IP address of the various ports, the Network devices drivers and MAC addresses and the network
+This is required for baremetal testing. It describes the IP address of the
+various ports, the Network devices drivers and MAC addresses and the network
 configuration.
 
-In this example we will describe a 2 port configuration. This file is the same for all 2 port NSB Prox tests on the same platforms/configuration.
+In this example we will describe a 2 port configuration. This file is the same
+for all 2 port NSB Prox tests on the same platforms/configuration.
 
   .. image:: images/PROX_Baremetal_config.png
      :width: 1000px
      :alt: NSB PROX Yardstick Config
 
-Now lets describe the sections of the file.
-
-  1. ``TrafficGen`` - This section describes the Traffic Generator node of the test configuration. The name of the node ``trafficgen_1`` must match the node name
-     in the ``Test Description File for Baremetal`` mentioned earlier. The password attribute of the test needs to be configured. All other parameters
-     can remain as default settings.
-  2. ``interfaces`` - This defines the DPDK interfaces on the Traffic Generator.
-  3. ``xe0`` is DPDK Port 0. ``lspci`` and `` ./dpdk-devbind.py -s`` can be used to provide the interface information. ``netmask`` and ``local_ip`` should not be changed
-  4. ``xe1`` is DPDK Port 1. If more than 2 ports are required then ``xe1`` section needs to be repeated and modified accordingly.
-  5. ``vnf`` - This section describes the SUT of the test configuration. The name of the node ``vnf`` must match the node name in the
-     ``Test Description File for Baremetal`` mentioned earlier. The password attribute of the test needs to be configured. All other parameters
-     can remain as default settings
+Now let's describe the sections of the file.
+
+  1. ``TrafficGen`` - This section describes the Traffic Generator node of the
+     test configuration. The name of the node ``trafficgen_1`` must match the
+     node name in the ``Test Description File for Baremetal`` mentioned
+     earlier. The password attribute of the test needs to be configured. All
+     other parameters can remain as default settings.
+  2. ``interfaces`` - This defines the DPDK interfaces on the Traffic
+     Generator.
+  3. ``xe0`` is DPDK Port 0. ``lspci`` and ``./dpdk-devbind.py -s`` can be used
+     to provide the interface information. ``netmask`` and ``local_ip`` should
+     not be changed
+  4. ``xe1`` is DPDK Port 1. If more than 2 ports are required then ``xe1``
+     section needs to be repeated and modified accordingly.
+  5. ``vnf`` - This section describes the SUT of the test configuration. The
+     name of the node ``vnf`` must match the node name in the
+     ``Test Description File for Baremetal`` mentioned earlier. The password
+     attribute of the test needs to be configured. All other parameters can
+     remain as default settings
   6. ``interfaces`` - This defines the DPDK interfaces on the SUT
   7. ``xe0`` - Same as 3 but for the ``SUT``.
   8. ``xe1`` - Same as 4 but for the ``SUT`` also.
@@ -877,11 +936,13 @@ Now lets describe the sections of the file.
 *Grafana Dashboard*
 -------------------
 
-The grafana dashboard visually displays the results of the tests. The steps required to produce a grafana dashboard are described here.
+The grafana dashboard visually displays the results of the tests. The steps
+required to produce a grafana dashboard are described here.
 
 .. _yardstick-config-label:
 
-  a. Configure ``yardstick`` to use influxDB to store test results. See file ``/etc/yardstick/yardstick.conf``.
+  a. Configure ``yardstick`` to use influxDB to store test results. See file
+     ``/etc/yardstick/yardstick.conf``.
 
      .. image:: images/PROX_Yardstick_config.png
         :width: 1000px
@@ -890,10 +951,12 @@ The grafana dashboard visually displays the results of the tests. The steps requ
      1. Specify the dispatcher to use influxDB to store results.
      2. "target = .. " - Specify location of influxDB to store results.
         "db_name = yardstick" - name of database. Do not change
-        "username = root" - username to use to store result. (Many tests are run as root)
+        "username = root" - username to use to store result. (Many tests are
+        run as root)
         "password = ... " - Please set to root user password
 
-  b. Deploy InfludDB & Grafana. See how to Deploy InfluxDB & Grafana. See `grafana deployment`_.
+  b. Deploy InfludDB & Grafana. See how to Deploy InfluxDB & Grafana. See
+     `grafana deployment`_.
   c. Generate the test data. Run the tests as follows .::
 
        yardstick --debug task start tc_prox_<context>_<test>-ports.yaml
@@ -910,7 +973,8 @@ How to run NSB Prox Test on an baremetal environment
 
 In order to run the NSB PROX test.
 
-  1. Install NSB on Traffic Generator node and Prox in SUT. See `NSB Installation`_
+  1. Install NSB on Traffic Generator node and Prox in SUT. See
+     `NSB Installation`_
 
   2. To enter container::
 
@@ -922,8 +986,8 @@ In order to run the NSB PROX test.
 
           cd /home/opnfv/repos/yardstick/samples/vnf_samples/nsut/prox
 
-     b. Install prox-baremetal-2.yam and prox-baremetal-4.yaml for that topology
-        into this directory as per baremetal-config-label_
+     b. Install prox-baremetal-2.yam and prox-baremetal-4.yaml for that
+        topology into this directory as per baremetal-config-label_
 
      c. Install and configure ``yardstick.conf`` ::
 
@@ -971,7 +1035,8 @@ Here is a list of frequently asked questions.
 *NSB Prox does not work on Baremetal, How do I resolve this?*
 -------------------------------------------------------------
 
-If PROX NSB does not work on baremetal, problem is either in network configuration or test file.
+If PROX NSB does not work on baremetal, problem is either in network
+configuration or test file.
 
 *Solution*
 
@@ -1011,8 +1076,8 @@ If PROX NSB does not work on baremetal, problem is either in network configurati
 
              See ``Link detected`` if ``yes`` .... Cable is good. If ``no`` you have an issue with your cable/port.
 
-2. If existing baremetal works then issue is with your test. Check the traffic generator gen_<test>-<ports>.cfg to ensure
-   it is producing a valid packet.
+2. If existing baremetal works then issue is with your test. Check the traffic
+   generator gen_<test>-<ports>.cfg to ensure it is producing a valid packet.
 
 *How do I debug NSB Prox on Baremetal?*
 ---------------------------------------
@@ -1033,7 +1098,8 @@ If PROX NSB does not work on baremetal, problem is either in network configurati
      cd
      /opt/nsb_bin/prox -f /tmp/handle_<test>-<ports>.cfg
 
-4. Now let's examine the Generator Output. In this case the output of gen_l2fwd-4.cfg.
+4. Now let's examine the Generator Output. In this case the output of
+   ``gen_l2fwd-4.cfg``.
 
      .. image:: images/PROX_Gen_GUI.png
         :width: 1000px
@@ -1048,10 +1114,12 @@ If PROX NSB does not work on baremetal, problem is either in network configurati
    It appears what is transmitted is received.
 
    .. Caution::
-      The number of packets MAY not exactly match because the ports are read in sequence.
+      The number of packets MAY not exactly match because the ports are read in
+      sequence.
 
    .. Caution::
-      What is transmitted on PORT X may not always be received on same port. Please check the Test scenario.
+      What is transmitted on PORT X may not always be received on same port.
+      Please check the Test scenario.
 
 5. Now lets examine the SUT Output
 
@@ -1083,17 +1151,18 @@ If PROX NSB does not work on baremetal, problem is either in network configurati
 *NSB Prox works on Baremetal but not in Openstack. How do I resolve this?*
 --------------------------------------------------------------------------
 
-NSB Prox on Baremetal is a lot more forgiving than NSB Prox on Openstack. A badly
-formed packed may still work with PROX on Baremetal. However on
+NSB Prox on Baremetal is a lot more forgiving than NSB Prox on Openstack. A
+badly formed packed may still work with PROX on Baremetal. However on
 Openstack the packet must be correct and all fields of the header correct.
-Eg A packet with an invalid Protocol ID would still work in Baremetal
-but this packet would be rejected by openstack.
+E.g. A packet with an invalid Protocol ID would still work in Baremetal but
+this packet would be rejected by openstack.
 
 *Solution*
 
  1. Check the validity of the packet.
  2. Use a known good packet in your test
- 3. If using ``Random`` fields in the traffic generator, disable them and retry.
+ 3. If using ``Random`` fields in the traffic generator, disable them and
+    retry.
 
 
 *How do I debug NSB Prox on Openstack?*
@@ -1111,7 +1180,8 @@ but this packet would be rejected by openstack.
 
 3. Install openstack credentials.
 
-   Depending on your openstack deployment, the location of these credentials may vary.
+   Depending on your openstack deployment, the location of these credentials
+   may vary.
    On this platform I do this via::
 
      scp root@10.237.222.55:/etc/kolla/admin-openrc.sh .
@@ -1127,8 +1197,8 @@ but this packet would be rejected by openstack.
 
    b. Get the Floating IP of the Traffic Generator & SUT
 
-      This generates a lot of information. Please not the floating IP of the VNF and
-      the Traffic Generator.
+      This generates a lot of information. Please note the floating IP of the
+      VNF and the Traffic Generator.
 
          .. image:: images/PROX_Openstack_stack_show_a.png
             :width: 1000px
@@ -1215,7 +1285,8 @@ If it fails due to ::
 
    Missing value auth-url required for auth plugin password
 
-Check your shell environment for Openstack variables. One of them should contain the authentication URL ::
+Check your shell environment for Openstack variables. One of them should
+contain the authentication URL ::
 
 
    OS_AUTH_URL=``https://192.168.72.41:5000/v3``
@@ -1239,16 +1310,16 @@ Result ::
 
 and visible.
 
-If the Openstack Cli appears to hang, then verify the proxys and no_proxy are set correctly.
-They should be similar to ::
+If the Openstack ClI appears to hang, then verify the proxys and ``no_proxy``
+are set correctly. They should be similar to ::
 
-   FTP_PROXY="http://proxy.ir.intel.com:911/"
-   HTTPS_PROXY="http://proxy.ir.intel.com:911/"
-   HTTP_PROXY="http://proxy.ir.intel.com:911/"
+   FTP_PROXY="http://<your_proxy>:<port>/"
+   HTTPS_PROXY="http://<your_proxy>:<port>/"
+   HTTP_PROXY="http://<your_proxy>:<port>/"
    NO_PROXY="localhost,127.0.0.1,10.237.222.55,10.237.223.80,10.237.222.134,.ir.intel.com"
-   ftp_proxy="http://proxy.ir.intel.com:911/"
-   http_proxy="http://proxy.ir.intel.com:911/"
-   https_proxy="http://proxy.ir.intel.com:911/"
+   ftp_proxy="http://<your_proxy>:<port>/"
+   http_proxy="http://<your_proxy>:<port>/"
+   https_proxy="http://<your_proxy>:<port>/"
    no_proxy="localhost,127.0.0.1,10.237.222.55,10.237.223.80,10.237.222.134,.ir.intel.com"
 
 Where
@@ -1256,8 +1327,6 @@ Where
     1) 10.237.222.55 = IP Address of deployment node
     2) 10.237.223.80 = IP Address of Controller node
     3) 10.237.222.134 = IP Address of Compute Node
-    4) ir.intel.com = local no proxy
-
 
 *How to Understand the Grafana output?*
 ---------------------------------------
@@ -1280,48 +1349,48 @@ Where
 
 A. Test Parameters - Test interval, Duartion, Tolerated Loss and Test Precision
 
-B. Overall No of packets send and received during test
+B. No. of packets send and received during test
 
 C. Generator Stats - packets sent, received and attempted by Generator
 
-D. Packets Size
-
-E. No of packets received by SUT
-
-F. No of packets forwarded by SUT
-
-G. This is the number of packets sent by the generator per port, for each interval.
+D. Packet size
 
-H. This is the number of packets received by the generator per port, for each interval.
+E. No. of packets received by SUT
 
-I. This is the number of packets send and received by the generator and lost by the SUT
-   that meet the success criteria
+F. No. of packets forwarded by SUT
 
-J. This is the changes the Percentage of Line Rate used over a test, The MAX and the
-   MIN should converge to within the interval specified as the ``test-precision``.
+G. No. of packets sent by the generator per port, for each interval.
 
-K. This is the packets Size supported during test. If "N/A" appears in any field the result has not been decided.
+H. No. of packets received by the generator per port, for each interval.
 
-L. This is the calculated throughput in MPPS(Million Packets Per second) for this line rate.
+I. No. of packets sent and received by the generator and lost by the SUT that
+   meet the success criteria
 
-M. This is the actual No, of packets sent by the generator in MPPS
+J. The change in the Percentage of Line Rate used over a test, The MAX and the
+   MIN should converge to within the interval specified as the
+   ``test-precision``.
 
-N. This is the actual No. of packets received by the generator in MPPS
+K. Packet size supported during test. If *N/A* appears in any field the
+   result has not been decided.
 
-O. This is the total No. of packets sent by SUT.
+L. Calculated throughput in MPPS (Million Packets Per second) for this line
+   rate.
 
-P. This is the total No. of packets received by the SUT
+M. No. of packets sent by the generator in MPPS
 
-Q. This is the total No. of packets dropped. (These packets were sent by the generator but not
-   received back by the generator, these may be dropped by the SUT or the Generator)
+N. No. of packets received by the generator in MPPS
 
-R. This is the tolerated no of packets that can be dropped.
+O. No. of packets sent by SUT.
 
-S. This is the test Throughput in Gbps
+P. No. of packets received by the SUT
 
-T. This is the Latencey per Port
+Q. Total no. of dropped packets -- Packets sent but not received back by the
+   generator, these may be dropped by the SUT or the generator.
 
-U. This is the CPU Utilization
+R. The tolerated no. of dropped packets.
 
+S. Test throughput in Gbps
 
+T. Latencey per Port
 
+U. CPU Utilization
index 9a76a32..194099a 100644 (file)
@@ -11,7 +11,6 @@ Yardstick Developer Guide
 
 .. toctree::
    :maxdepth: 4
-   :numbered:
 
    devguide
    devguide_nsb_prox
index 74e752d..5fc2e8d 100755 (executable)
@@ -83,4 +83,4 @@ Contact Yardstick
 
 Feedback? `Contact us`_
 
-.. _Contact us: mailto:opnfv-users@lists.opnfv.org&subject="[yardstick]"
+.. _Contact us: mailto:opnfv-users@lists.opnfv.org&subject="#yardstick"
index 8866315..62250d6 100755 (executable)
@@ -243,26 +243,27 @@ Yardstick Directory structure
         with support for different installers.
 
 *docs/* - All documentation is stored here, such as configuration guides,
-          user guides and Yardstick descriptions.
+          user guides and Yardstick test case descriptions.
 
 *etc/* - Used for test cases requiring specific POD configurations.
 
 *samples/* - test case samples are stored here, most of all scenario and
-             feature's samples are shown in this directory.
+             feature samples are shown in this directory.
 
-*tests/* - Here both Yardstick internal tests (*functional/* and *unit/*) as
-           well as the test cases run to verify the NFVI (*opnfv/*) are stored.
-           Also configurations of what to run daily and weekly at the different
-           PODs is located here.
+*tests/* - The test cases run to verify the NFVI (*opnfv/*) are stored here.
+           The configurations of what to run daily and weekly at the different
+           PODs are also located here.
 
-*tools/* - Currently contains tools to build image for VMs which are deployed
-           by Heat. Currently contains how to build the yardstick-trusty-server
-           image with the different tools that are needed from within the
-           image.
+*tools/* - Contains tools to build image for VMs which are deployed by Heat.
+           Currently contains how to build the yardstick-image with the
+           different tools that are needed from within the image.
 
 *plugin/* - Plug-in configuration files are stored here.
 
-*yardstick/* - Contains the internals of Yardstick: Runners, Scenario, Contexts,
-               CLI parsing, keys, plotting tools, dispatcher, plugin
+*yardstick/* - Contains the internals of Yardstick: :term:`Runners <runner>`,
+               :term:`Scenarios <scenario>`, :term:`Contexts <context>`, CLI
+               parsing, keys, plotting tools, dispatcher, plugin
                install/remove scripts and so on.
 
+*yardstick/tests* - The Yardstick internal tests (*functional/* and *unit/*)
+                    are stored here.
index 6b32592..2f8175c 100644 (file)
@@ -575,17 +575,17 @@ Grafana to display data in the following sections.
 Automatic deployment of InfluxDB and Grafana containers (**recommended**)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-Firstly, enter the Yardstick container::
+1. Enter the Yardstick container::
 
-   sudo -EH docker exec -it yardstick /bin/bash
+     sudo -EH docker exec -it yardstick /bin/bash
 
-Secondly, create InfluxDB container and configure with the following command::
+2. Create InfluxDB container and configure with the following command::
 
-   yardstick env influxdb
+     yardstick env influxdb
 
-Thirdly, create and configure Grafana container::
+3. Create and configure Grafana container::
 
-   yardstick env grafana
+     yardstick env grafana
 
 Then you can run a test case and visit http://host_ip:1948
 (``admin``/``admin``) to see the results.
@@ -613,21 +613,21 @@ Run influxDB::
    sudo -EH docker run -d --name influxdb \
       -p 8083:8083 -p 8086:8086 --expose 8090 --expose 8099 \
       tutum/influxdb
-   docker exec -it influxdb bash
+   docker exec -it influxdb influx
 
 Configure influxDB::
 
-   influx
-      >CREATE USER root WITH PASSWORD 'root' WITH ALL PRIVILEGES
-      >CREATE DATABASE yardstick;
-      >use yardstick;
-      >show MEASUREMENTS;
+      > CREATE USER root WITH PASSWORD 'root' WITH ALL PRIVILEGES
+      > CREATE DATABASE yardstick;
+      > use yardstick;
+      > show MEASUREMENTS;
+      > quit
 
 Run Grafana::
 
    sudo -EH docker run -d --name grafana -p 1948:3000 grafana/grafana
 
-Log on http://{YOUR_IP_HERE}:1948 using ``admin``/``admin`` and configure
+Log on to ``http://{YOUR_IP_HERE}:1948`` using ``admin``/``admin`` and configure
 database resource to be ``{YOUR_IP_HERE}:8086``.
 
 .. image:: images/Grafana_config.png
@@ -640,7 +640,7 @@ Configure ``yardstick.conf``::
    sudo cp etc/yardstick/yardstick.conf.sample /etc/yardstick/yardstick.conf
    sudo vi /etc/yardstick/yardstick.conf
 
-Modify ``yardstick.conf``::
+Modify ``yardstick.conf`` to add the ``influxdb`` dispatcher::
 
    [DEFAULT]
    debug = True
@@ -653,7 +653,7 @@ Modify ``yardstick.conf``::
    username = root
    password = root
 
-Now you can run Yardstick test cases and store the results in influxDB.
+Now Yardstick will store results in InfluxDB when you run a testcase.
 
 
 Deploy InfluxDB and Grafana directly in Ubuntu (**Todo**)
index 363ad48..973d566 100644 (file)
@@ -1,7 +1,7 @@
 .. This work is licensed under a Creative Commons Attribution 4.0 International
 .. License.
 .. http://creativecommons.org/licenses/by/4.0
-.. (c) OPNFV, 2016-2017 Intel Corporation.
+.. (c) OPNFV, 2016-2018 Intel Corporation.
 
 ..
    Convention for heading levels in Yardstick documentation:
@@ -936,7 +936,7 @@ Setup system proxy (if needed). Add the following configuration into the
 ``/etc/environment`` file:
 
 .. note:: The proxy server name/port and IPs should be changed according to
-  actuall/current proxy configuration in the lab.
+  actual/current proxy configuration in the lab.
 
 .. code:: bash
 
@@ -1192,3 +1192,52 @@ installed as part of the requirements of the project.
 
 3. Execute testcase in samplevnf folder e.g.
    ``<repo>/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml``
+
+Spirent Landslide
+-----------------
+
+In order to use Spirent Landslide for vEPC testcases, some dependencies have
+to be preinstalled and properly configured.
+
+- Java
+
+    32-bit Java installation is required for the Spirent Landslide TCL API.
+
+    | ``$ sudo apt-get install openjdk-8-jdk:i386``
+
+    .. important::
+      Make sure ``LD_LIBRARY_PATH`` is pointing to 32-bit JRE. For more details
+      check `Linux Troubleshooting <http://TAS_HOST_IP/tclapiinstall.html#trouble>`
+      section of installation instructions.
+
+- LsApi (Tcl API module)
+
+    Follow Landslide documentation for detailed instructions on Linux
+    installation of Tcl API and its dependencies
+    ``http://TAS_HOST_IP/tclapiinstall.html``.
+    For working with LsApi Python wrapper only steps 1-5 are required.
+
+    .. note:: After installation make sure your API home path is included in
+      ``PYTHONPATH`` environment variable.
+
+    .. important::
+    The current version of LsApi module has an issue with reading LD_LIBRARY_PATH.
+    For LsApi module to initialize correctly following lines (184-186) in
+    lsapi.py
+
+    .. code-block:: python
+
+        ldpath = os.environ.get('LD_LIBRARY_PATH', '')
+        if ldpath == '':
+         environ['LD_LIBRARY_PATH'] = environ['LD_LIBRARY_PATH'] + ':' + ldpath
+
+    should be changed to:
+
+    .. code-block:: python
+
+        ldpath = os.environ.get('LD_LIBRARY_PATH', '')
+        if not ldpath == '':
+               environ['LD_LIBRARY_PATH'] = environ['LD_LIBRARY_PATH'] + ':' + ldpath
+
+.. note:: The Spirent landslide TCL software package needs to be updated in case
+  the user upgrades to a new version of Spirent landslide software.
index b4adf78..7ec5b4e 100644 (file)
@@ -1,7 +1,7 @@
 .. This work is licensed under a Creative Commons Attribution 4.0 International
 .. License.
 .. http://creativecommons.org/licenses/by/4.0
-.. (c) OPNFV, 2016-2017 Intel Corporation.
+.. (c) OPNFV, 2016-2018 Intel Corporation.
 
 Yardstick - NSB Testing - Operation
 ===================================
@@ -434,6 +434,43 @@ There two types of Standalone contexts available: OVS-DPDK and SRIOV.
 OVS-DPDK uses OVS network with DPDK drivers.
 SRIOV enables network traffic to bypass the software switch layer of the Hyper-V stack.
 
+Emulated machine type
+^^^^^^^^^^^^^^^^^^^^^
+
+For better performance test results of emulated VM spawned by Yardstick SA
+context (OvS-DPDK/SRIOV), it may be important to control the emulated machine
+type used by QEMU emulator. This attribute can be configured via TC definition
+in ``contexts`` section under ``extra_specs`` configuration.
+
+For example:
+
+.. code-block:: yaml
+
+  contexts:
+     ...
+     - type: StandaloneSriov
+       ...
+       flavor:
+         ...
+         extra_specs:
+           ...
+           machine_type: pc-i440fx-bionic
+
+Where, ``machine_type`` can be set to one of the emulated machine type
+supported by QEMU running on SUT platform. To get full list of supported
+emulated machine types, the following command can be used on the target SUT
+host.
+
+.. code-block:: yaml
+
+  # qemu-system-x86_64 -machine ?
+
+By default, the ``machine_type`` option is set to ``pc-i440fx-xenial`` which is
+suitable for running Ubuntu 16.04 VM image. So, if this type is not supported
+by the target platform or another VM image is used for stand alone (SA) context
+VM (e.g.: ``bionic`` image for Ubuntu 18.04), this configuration should be
+changed accordingly.
+
 Standalone with OVS-DPDK
 ^^^^^^^^^^^^^^^^^^^^^^^^
 
@@ -459,3 +496,108 @@ Sample test case file
 
 .. literalinclude:: /../samples/vnf_samples/nsut/acl/tc_ovs_rfc2544_ipv4_1rule_1flow_64B_trex.yaml
    :language: yaml
+
+Preparing test run of vEPC test case
+------------------------------------
+
+Provided vEPC test cases are examples of emulation of vEPC infrastructure
+components, such as UE, eNodeB, MME, SGW, PGW.
+
+Location of vEPC test cases: ``samples/vnf_samples/nsut/vepc/``.
+
+Before running a specific vEPC test case using NSB, some preconfiguration
+needs to be done.
+
+Update Spirent Landslide TG configuration in pod file
+=====================================================
+
+Examples of ``pod.yaml`` files could be found in
+:file:`etc/yardstick/nodes/standalone`.
+The name of related pod file could be checked in the context section of NSB
+test case.
+
+The ``pod.yaml`` related to vEPC test case uses some sub-structures that hold the
+details of accessing the Spirent Landslide traffic generator.
+These subsections and the changes to be done in provided example pod file are
+described below.
+
+1. ``tas_manager``: data under this key holds the information required to
+access Landslide TAS (Test Administration Server) and perform needed
+configurations on it.
+
+ * ``ip``: IP address of TAS Manager node; should be updated according to test
+   setup used
+ * ``super_user``: superuser name; could be retrieved from Landslide documentation
+ * ``super_user_password``: superuser password; could be retrieved from
+   Landslide documentation
+ * ``cfguser_password``: password of predefined user named 'cfguser'; default
+   password could be retrieved from Landslide documentation
+ * ``test_user``: username to be used during test run as a Landslide library
+   name; to be defined by test run operator
+ * ``test_user_password``: password of test user; to be defined by test run
+   operator
+ * ``proto``: *http* or *https*; to be defined by test run operator
+ * ``license``: Landslide license number installed on TAS
+
+2. The ``config`` section holds information about test servers (TSs) and
+systems under test (SUTs). Data is represented as a list of entries.
+Each such entry contains:
+
+ * ``test_server``: this subsection represents data related to test server
+   configuration, such as:
+
+   * ``name``: test server name; unique custom name to be defined by test
+     operator
+   * ``role``: this value is used as a key to bind specific Test Server and
+     TestCase; should be set to one of test types supported by TAS license
+   * ``ip``: Test Server IP address
+   * ``thread_model``: parameter related to Test Server performance mode.
+     The value should be one of the following: "Legacy" | "Max" | "Fireball".
+     Refer to Landslide documentation for details.
+   * ``phySubnets``: a structure used to specify IP ranges reservations on
+     specific network interfaces of related Test Server. Structure fields are:
+
+    * ``base``: start of IP address range
+    * ``mask``: IP range mask in CIDR format
+    * ``name``: network interface name, e.g. *eth1*
+    * ``numIps``: size of IP address range
+
+ * ``preResolvedArpAddress``: a structure used to specify the range of IP
+   addresses for which the ARP responses will be emulated
+
+    * ``StartingAddress``: IP address specifying the start of IP address range
+    * ``NumNodes``: size of the IP address range
+
+ * ``suts``: a structure that contains definitions of each specific SUT
+   (represents a vEPC component). SUT structure contains following key/value
+   pairs:
+
+    * ``name``: unique custom string specifying SUT name
+    * ``role``: string value corresponding with an SUT role specified in the
+      session profile (test session template) file
+    * ``managementIp``: SUT management IP adress
+    * ``phy``: network interface name, e.g. *eth1*
+    * ``ip``: vEPC component IP address used in test case topology
+    * ``nextHop``: next hop IP address, to allow for vEPC inter-node communication
+
+Update NSB test case definitions
+================================
+NSB test case file designated for vEPC testing contains an example of specific
+test scenario configuration.
+Test operator may change these definitions as required for the use case that
+requires testing.
+Specifically, following subsections of the vEPC test case (section **scenarios**)
+may be changed.
+
+1. Subsection ``options``: contains custom parameters used for vEPC testing
+
+ * subsection ``dmf``: may contain one or more parameters specified in
+   ``traffic_profile`` template file
+ * subsection ``test_cases``: contains re-definitions of parameters specified
+   in ``session_profile`` template file
+
+    .. note:: All parameters in ``session_profile``, value of which is a
+      placeholder, needs to be re-defined to construct a valid test session.
+
+2. Subsection ``runner``: specifies the test duration and the interval of
+TG and VNF side KPIs polling. For more details, refer to :doc:`03-architecture`.
index 2f0a871..8990800 100644 (file)
@@ -29,6 +29,7 @@ Generic NFVI Test Case Descriptions
    opnfv_yardstick_tc002.rst
    opnfv_yardstick_tc004.rst
    opnfv_yardstick_tc005.rst
+   opnfv_yardstick_tc006.rst
    opnfv_yardstick_tc008.rst
    opnfv_yardstick_tc009.rst
    opnfv_yardstick_tc010.rst
@@ -57,6 +58,7 @@ Generic NFVI Test Case Descriptions
    opnfv_yardstick_tc080.rst
    opnfv_yardstick_tc081.rst
    opnfv_yardstick_tc083.rst
+   opnfv_yardstick_tc084.rst
 
 OPNFV Feature Test Cases
 ========================
@@ -83,6 +85,10 @@ H A
    opnfv_yardstick_tc057.rst
    opnfv_yardstick_tc058.rst
    opnfv_yardstick_tc087.rst
+   opnfv_yardstick_tc088.rst
+   opnfv_yardstick_tc089.rst
+   opnfv_yardstick_tc090.rst
+   opnfv_yardstick_tc091.rst
    opnfv_yardstick_tc092.rst
    opnfv_yardstick_tc093.rst
 
index 1cbd085..ff0bb6f 100644 (file)
@@ -11,7 +11,6 @@ Yardstick User Guide
 
 .. toctree::
    :maxdepth: 4
-   :numbered:
 
    01-introduction
    02-methodology
index f9ca900..723cd6f 100644 (file)
@@ -27,7 +27,7 @@ NSB PROX Test Case Descriptions
    tc_prox_context_buffering_port
    tc_prox_context_load_balancer_port
    tc_prox_context_vpe_port
-   tc_prox_context_lw_after_port
+   tc_prox_context_lw_aftr_port
    tc_epc_default_bearer_landslide
    tc_epc_dedicated_bearer_landslide
    tc_epc_saegw_tput_relocation_landslide
index 17b918c..8c7651b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -41,7 +41,6 @@ scenarios:
       vnf__0:
         rules: acl_1rule.yaml
         vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}}
-    ixia_profile: ../../traffic_profiles/ixia_ipv4_profile_{{num_vnfs * 2}}_port.ixncfg
     runner:
       type: Iteration
       iterations: 10
index fe7be9a..da1c5a7 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -42,7 +42,6 @@ scenarios:
       vnf__0:
         rules: acl_1rule.yaml
         vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}}
-    ixia_profile: ../../traffic_profiles/ixia/ixia_ipv4_profile_{{ num_vnfs }}_port.ixncfg
 
     runner:
       type: Iteration
index bd99fdd..7e5d792 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -40,7 +40,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/acl/acl_ipv4_profile_1flows.ixncfg
 context:
   type: Node
   name: yardstick
index 5f5d086..7c035b9 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -46,7 +46,6 @@ scenarios:
         rules: acl_1rule.yaml
         vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}}
 {% endfor %}
-    ixia_profile: ../../traffic_profiles/ixia_ipv4_profile_{{num_vnfs}}_port.ixncfg
     runner:
       type: Iteration
       iterations: 10
index 469eddf..f766674 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -35,7 +35,6 @@ scenarios:
     vnf__0:
       rules: acl_1rule.yaml
       vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
-  ixia_profile: ../../traffic_profiles/acl/acl_ipv4_profile_1flows.ixncfg
   runner:
     type: Iteration
     iterations: 10
index 024507b..c2c1102 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -46,7 +46,6 @@ scenarios:
         rules: acl_1rule.yaml
         vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}}
 {% endfor %}
-    ixia_profile: ../../traffic_profiles/ixia_ipv4_profile_{{num_vnfs}}_port.ixncfg
 
     runner:
       type: Iteration
index 4abc429..888d0c8 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -45,7 +45,6 @@ scenarios:
         rules: acl_1rule.yaml
         vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}}
 {% endfor %}
-    ixia_profile: ../../traffic_profiles/ixia_ipv4_profile_{{num_vnfs* 2}}_port.ixncfg
 
     runner:
       type: Iteration
index a9eb906..617af48 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -35,7 +35,6 @@ scenarios:
     vnf__0:
       rules: acl_1rule.yaml
       vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
-  ixia_profile: ../../traffic_profiles/acl/acl_ipv4_profile_1flows.ixncfg
   runner:
     type: Iteration
     iterations: 10
diff --git a/samples/vnf_samples/nsut/agnostic/HTTP_requests_concurrency.yaml b/samples/vnf_samples/nsut/agnostic/HTTP_requests_concurrency.yaml
new file mode 100755 (executable)
index 0000000..1e9b1e8
--- /dev/null
@@ -0,0 +1,56 @@
+# Copyright (c) 2018 Intel Corporation\r
+#\r
+# Licensed under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+#      http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or imp\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+\r
+schema: "nsb:traffic_profile:0.1"\r
+\r
+name:            TrafficProfileGenericHTTP\r
+description:     Traffic profile to run HTTP test\r
+traffic_profile:\r
+  traffic_type: TrafficProfileGenericHTTP\r
+\r
+uplink_0:\r
+    ip:\r
+        address: "152.16.100.32"          # must be in same subnet with gateway\r
+        subnet_prefix: 24                 # subnet prefix\r
+        mac: "Auto"                       # port mac addr or auto to generate automatically\r
+        gateway: <GATEWAY_ADDR>           # will be taken from pod file\r
+\r
+    http_client:\r
+        simulated_users: {{ get(simulated_users, 'simulated_users.uplink_0', '65000') }} # number of threads to be run\r
+        page_object:  {{ get(page_object, 'page_object.uplink_0', '/1b.html') }} # http locator to be read\r
+\r
+downlink_0:\r
+    ip:\r
+        address: "152.40.40.32"           # must be in same subnet with gateway\r
+        subnet_prefix: 24                 # subnet prefix\r
+        mac: "Auto"                       # port mac addr or auto to generate automatically\r
+        gateway: <GATEWAY_ADDR>           # will be taken from pod file\r
+\r
+uplink_1:\r
+    ip:\r
+        address: "12.12.12.32"\r
+        subnet_prefix: 24\r
+        mac: "00:00:00:00:00:01"\r
+        gateway: <GATEWAY_ADDR>\r
+\r
+    http_client:\r
+        simulated_users: {{ get(simulated_users, 'simulated_users.uplink_1', '65000') }} # number of threads to be run\r
+        page_object:  {{ get(page_object, 'page_object.uplink_1', '/1b.html') }} # http locator to be read\r
+\r
+downlink_1:\r
+    ip:\r
+        address: "13.13.13.32"\r
+        subnet_prefix: 24\r
+        mac: "00:00:00:00:00:02"\r
+        gateway: <GATEWAY_ADDR>
\ No newline at end of file
diff --git a/samples/vnf_samples/nsut/agnostic/agnostic_vnf_topology_ixia_8ports.yaml b/samples/vnf_samples/nsut/agnostic/agnostic_vnf_topology_ixia_8ports.yaml
new file mode 100644 (file)
index 0000000..88ddf6c
--- /dev/null
@@ -0,0 +1,114 @@
+# Copyright (c) 2018 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.
+nsd:nsd-catalog:
+    nsd:
+    -   id: agnostic-topology
+        name: agnostic-topology
+        short-name: agnostic-topology
+        description: agnostic-topology
+        constituent-vnfd:
+        -   member-vnf-index: '1'
+            vnfd-id-ref: tg__0
+            VNF model: ../../vnf_descriptors/ixia_rfc2544_tpl.yaml      #TG type
+        -   member-vnf-index: '2'
+            vnfd-id-ref: vnf__0
+            VNF model: ../../vnf_descriptors/agnostic_vnf.yaml      #VNF type
+
+        vld:
+        -   id: uplink_0
+            name: tg__0 to vnf__0 link 1
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe0
+                vnfd-id-ref: tg__0
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe0
+                vnfd-id-ref: vnf__0
+
+        -   id: downlink_0
+            name: vnf__0 to tg__0 link 2
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe1
+                vnfd-id-ref: vnf__0
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe1
+                vnfd-id-ref: tg__0
+
+        -   id: uplink_1
+            name: tg__0 to vnf__0 link 3
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe2
+                vnfd-id-ref: tg__0
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe2
+                vnfd-id-ref: vnf__0
+
+        -   id: downlink_1
+            name: vnf__0 to tg__0 link 4
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe3
+                vnfd-id-ref: vnf__0
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe3
+                vnfd-id-ref: tg__0
+        -   id: uplink_2
+            name: tg__0 to vnf__0 link 5
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe4
+                vnfd-id-ref: tg__0
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe4
+                vnfd-id-ref: vnf__0
+
+        -   id: downlink_2
+            name: vnf__0 to tg__0 link 6
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe5
+                vnfd-id-ref: vnf__0
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe5
+                vnfd-id-ref: tg__0
+
+        -   id: uplink_3
+            name: tg__0 to vnf__0 link 7
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe6
+                vnfd-id-ref: tg__0
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe6
+                vnfd-id-ref: vnf__0
+
+        -   id: downlink_3
+            name: vnf__0 to tg__0 link 8
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe7
+                vnfd-id-ref: vnf__0
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe7
+                vnfd-id-ref: tg__0
diff --git a/samples/vnf_samples/nsut/agnostic/agnostic_vnf_topology_ixload_2ports.yaml b/samples/vnf_samples/nsut/agnostic/agnostic_vnf_topology_ixload_2ports.yaml
new file mode 100755 (executable)
index 0000000..80f6dcf
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright (c) 2018 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.
+
+nsd:nsd-catalog:
+    nsd:
+    -   id: agnostic-topology
+        name: agnostic-topology
+        short-name: agnostic-topology
+        description: scenario with HTTP and Agnostic VNF
+        constituent-vnfd:
+        -   member-vnf-index: '1'
+            vnfd-id-ref: tg__0
+            VNF model: ../../vnf_descriptors/tg_ixload.yaml
+        -   member-vnf-index: '2'
+            vnfd-id-ref: vnf__0
+            VNF model: ../../vnf_descriptors/agnostic_vnf.yaml
+
+        vld:
+        -   id: uplink_0
+            name: tg__0 to vnf__0 link 1
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe0
+                vnfd-id-ref: tg__0                   # HTTP Client
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe0
+                vnfd-id-ref: vnf__0                  # VNF
+
+        -   id: downlink_0
+            name: vnf__0 to tg__0 link 2
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe1
+                vnfd-id-ref: vnf__0                  # HTTP Server
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe1
+                vnfd-id-ref: tg__0                   # VNF
diff --git a/samples/vnf_samples/nsut/agnostic/tc_baremetal_http_ixload__Requests_Concurrency_suite.yaml b/samples/vnf_samples/nsut/agnostic/tc_baremetal_http_ixload__Requests_Concurrency_suite.yaml
new file mode 100755 (executable)
index 0000000..d3c75eb
--- /dev/null
@@ -0,0 +1,27 @@
+# Copyright (c) 2018 Intel Corporation\r
+#\r
+# Licensed under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+#      http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+\r
+schema: "yardstick:suite:0.1"\r
+\r
+name: "http test suite"\r
+test_cases_dir: "samples/"\r
+test_cases:\r
+-\r
+  file_name: vnf_samples/nsut/agnostic/tc_baremetal_http_ixload__Requests_Concurrency_template.yaml\r
+  task_args:\r
+    default: '{"page": "/1b.html", "users" : "5000"}'\r
+-\r
+  file_name: vnf_samples/nsut/agnostic/tc_baremetal_http_ixload__Requests_Concurrency_template.yaml\r
+  task_args:\r
+    default: '{"page": "/1b.html", "users" : "6000"}'\r
diff --git a/samples/vnf_samples/nsut/agnostic/tc_baremetal_http_ixload__Requests_Concurrency_template.yaml b/samples/vnf_samples/nsut/agnostic/tc_baremetal_http_ixload__Requests_Concurrency_template.yaml
new file mode 100755 (executable)
index 0000000..de2a779
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright (c) 2018 Intel Corporation\r
+#\r
+# Licensed under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+#      http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+\r
+---\r
+schema: yardstick:task:0.1\r
+{% set users = users or "10000" %}\r
+{% set page = page or "/1b.html" %}\r
+scenarios:\r
+- type: NSPerf\r
+  traffic_profile: "HTTP_requests_concurrency.yaml"\r
+  topology: agnostic_vnf_topology_ixload_2ports.yaml\r
+  nodes:\r
+    tg__0: trafficgen_1.yardstick\r
+    vnf__0: vnf.yardstick\r
+  options:\r
+    simulated_users:\r
+      uplink: [{{users}}]\r
+    page_object:\r
+      uplink: [{{page}}]\r
+    vnf__0: []\r
+  runner:\r
+    type: Duration\r
+    duration: 2\r
+  ixia_profile: ../../traffic_profiles/vfw/HTTP-vFW_IPv4_2Ports_Concurrency.rxf # Need vlan update\r
+context:\r
+  type: Node\r
+  name: yardstick\r
+  nfvi_type: baremetal\r
+  file: /etc/yardstick/nodes/pod_ixia.yaml\r
index 3a1c1cb..7784947 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -41,7 +41,6 @@ scenarios:
       vnf__0:
         rules: acl_1rule.yaml
         vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}}
-    ixia_profile: ../../traffic_profiles/ixia_ipv4_profile_{{num_vnfs * 2}}_port.ixncfg
     runner:
       type: Iteration
       iterations: 10
index 879911f..0621f9a 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -42,7 +42,6 @@ scenarios:
       vnf__0:
         rules: acl_1rule.yaml
         vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}}
-    ixia_profile: ../../traffic_profiles/ixia/ixia_ipv4_profile_{{ num_vnfs }}_port.ixncfg
 
     runner:
       type: Iteration
index a563213..7813a29 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows.ixncfg
 context:
   type: Node
   name: yardstick
index 71f6d1d..ef99a2f 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -41,7 +41,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows.ixncfg
 {% endfor %}
 context:
   type: Node
index c517297..08a2258 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the License);
 # you may not use this file except in compliance with the License.
@@ -44,7 +44,6 @@ scenarios:
     type: Iteration
     iterations: 28
     interval: 35
-  ixia_profile: ../../traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows_3node_latency.ixncfg
 context:
   type: Node
   name: yardstick
index e2002ab..72d19fc 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -47,7 +47,6 @@ scenarios:
         rules: acl_1rule.yaml
         vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}}
 {% endfor %}
-    ixia_profile: ../../traffic_profiles/ixia_ipv4_profile_{{num_vnfs}}_port.ixncfg
     runner:
       type: Iteration
       iterations: 10
index 1d8be5f..90a3aaf 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -36,7 +36,6 @@ scenarios:
     vnf__0:
       rules: acl_1rule.yaml
       vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
-  ixia_profile: ../../traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows.ixncfg
   runner:
     type: Iteration
     iterations: 10
index 7f6e76c..618d018 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -46,7 +46,6 @@ scenarios:
       vnf__{{ vnf_num }}:
         vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}}
 {% endfor %}
-    ixia_profile: ../../traffic_profiles/ixia_ipv4_profile_{{num_vnfs}}_port.ixncfg
 
     runner:
       type: Iteration
index a88a05d..9131749 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -46,7 +46,6 @@ scenarios:
         rules: acl_1rule.yaml
         vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}}
 {% endfor %}
-    ixia_profile: ../../traffic_profiles/ixia_ipv4_profile_{{num_vnfs * 2}}_port.ixncfg
 
     runner:
       type: Iteration
index f0d996d..f163d33 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -36,7 +36,6 @@ scenarios:
     vnf__0:
       rules: acl_1rule.yaml
       vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
-  ixia_profile: ../../traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows.ixncfg
   runner:
     type: Iteration
     iterations: 10
index b9235ee..ab2a633 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -40,7 +40,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows_1518B.ixncfg
 context:
   type: Node
   name: yardstick
index eb5ae3e..03ceaaf 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -11,7 +11,6 @@
 # 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.
-# vfw_ipv4_profile_1flows.ixncfg
 
 ---
 schema: yardstick:task:0.1
@@ -41,7 +40,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_muttiport_1518B.ixncfg
 context:
   type: Node
   name: yardstick
index 7f43ed2..0da6e42 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -40,7 +40,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows_64B.ixncfg
 context:
   type: Node
   name: yardstick
index 8754f4d..6850fd8 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -11,7 +11,6 @@
 # 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.
-# vfw_ipv4_profile_1flows.ixncfg
 
 ---
 schema: yardstick:task:0.1
@@ -41,7 +40,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_muttiport_64B.ixncfg
 context:
   type: Node
   name: yardstick
index fa302d5..235c6fc 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows_1024B.ixncfg
 contexts:
   # put node context first, so we don't HEAT deploy if node has errors
   - name: yardstick1
index 97b19ad..5e56847 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows_1280B.ixncfg
 contexts:
   # put node context first, so we don't HEAT deploy if node has errors
   - name: yardstick1
index 4cab0f2..2286fcb 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows_128B.ixncfg
 contexts:
   # put node context first, so we don't HEAT deploy if node has errors
   - name: yardstick1
index fd30946..680cf7c 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows_1518B.ixncfg
 contexts:
   # put node context first, so we don't HEAT deploy if node has errors
   - name: yardstick1
index 63150af..245236a 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows_256B.ixncfg
 contexts:
   # put node context first, so we don't HEAT deploy if node has errors
   - name: yardstick1
index 9482a39..3a100ed 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows_512B.ixncfg
 contexts:
   # put node context first, so we don't HEAT deploy if node has errors
   - name: yardstick1
index 42dfcc1..f334aa9 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows_64B.ixncfg
 contexts:
   # put node context first, so we don't HEAT deploy if node has errors
   - name: yardstick1
index 2f5e6ea..e819ffc 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2018 Intel Corporation
+# Copyright (c) 2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -71,8 +71,6 @@ contexts:
          hw:cpu_sockets: 1
          hw:cpu_cores: 10
          hw:cpu_threads: 2
-       user: "root"
-       password: ""
      servers:
        vnf_0:
          network_ports:
diff --git a/samples/vnf_samples/nsut/prox/tc_prox_ovs-dpdk_l2fwd-4.yaml b/samples/vnf_samples/nsut/prox/tc_prox_ovs-dpdk_l2fwd-4.yaml
new file mode 100644 (file)
index 0000000..213d557
--- /dev/null
@@ -0,0 +1,113 @@
+# Copyright (c) 2018 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/prox_binsearch.yaml
+  topology: prox-tg-topology-4.yaml
+
+  nodes:
+    tg__0: tg__0.yardstick
+    vnf__0: vnf__0.yardstick
+
+  options:
+    interface_speed_gbps: 10
+
+    vnf__0:
+      prox_path: /opt/nsb_bin/prox
+      prox_config: "configs/handle_l2fwd-4.cfg"
+      prox_args:
+        "-t": ""
+
+    tg__0:
+      prox_path: /opt/nsb_bin/prox
+      prox_config: "configs/gen_l2fwd-4.cfg"
+      prox_args:
+        "-e": ""
+        "-t": ""
+
+  runner:
+    type: Duration
+    # we kill after duration, independent of test duration, so set this high
+    duration: 300
+
+contexts:
+   - name: yardstick
+     type: Node
+     file: prox_tg_bm.yaml
+   - name: yardstick
+     type: StandaloneOvsDpdk
+     file: /etc/yardstick/nodes/standalone/host_ovs.yaml
+     vm_deploy: True
+     ovs_properties:
+       version:
+         ovs: 2.8.0
+         dpdk: 17.05.2
+       pmd_threads: 2
+       ram:
+         socket_0: 2048
+         socket_1: 2048
+       queues: 4
+       vpath: "/usr/local"
+     flavor:
+       images: "/var/lib/libvirt/images/yardstick-nsb-image.img"
+       ram: 16384
+       extra_specs:
+         hw:cpu_sockets: 1
+         hw:cpu_cores: 10
+         hw:cpu_threads: 2
+     servers:
+       vnf__0:
+         network_ports:
+           mgmt:
+             cidr: '1.1.1.62/24'
+           xe0:
+             - uplink_0
+           xe1:
+             - downlink_0
+           xe2:
+             - uplink_1
+           xe3:
+             - downlink_1
+
+     networks:
+       uplink_0:
+         port_num: 0
+         phy_port: "0000:05:00.0"
+         vpci: "0000:00:0a.0"
+         cidr: '152.16.100.10/24'
+         gateway_ip: '152.16.100.20'
+       downlink_0:
+         port_num: 1
+         phy_port: "0000:05:00.1"
+         vpci: "0000:00:0b.0"
+         cidr: '152.16.40.10/24'
+         gateway_ip: '152.16.100.20'
+       uplink_1:
+         port_num: 2
+         phy_port: "0000:05:00.2"
+         vpci: "0000:00:0c.0"
+         cidr: '152.16.50.10/24'
+         gateway_ip: '152.16.100.20'
+       downlink_1:
+         port_num: 3
+         phy_port: "0000:05:00.3"
+         vpci: "0000:00:0d.0"
+         cidr: '152.16.30.10/24'
+         gateway_ip: '152.16.100.20'
+
diff --git a/samples/vnf_samples/nsut/prox/tc_prox_ovs-dpdk_l2fwd_pktTouch-2.yaml b/samples/vnf_samples/nsut/prox/tc_prox_ovs-dpdk_l2fwd_pktTouch-2.yaml
new file mode 100644 (file)
index 0000000..81f867e
--- /dev/null
@@ -0,0 +1,95 @@
+# Copyright (c) 2018 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/prox_binsearch.yaml
+  topology: prox-tg-topology-2.yaml
+
+  nodes:
+    tg__0: tg__0.yardstick
+    vnf__0: vnf__0.yardstick
+
+  options:
+    interface_speed_gbps: 10
+
+    vnf__0:
+      prox_path: /opt/nsb_bin/prox
+      prox_config: "configs/handle_l2fwd_pktTouch-2.cfg"
+      prox_args:
+        "-t": ""
+
+    tg__0:
+      prox_path: /opt/nsb_bin/prox
+      prox_config: "configs/gen_l2fwd_pktTouch-2.cfg"
+      prox_args:
+        "-e": ""
+        "-t": ""
+
+  runner:
+    type: Duration
+    # we kill after duration, independent of test duration, so set this high
+    duration: 300
+
+contexts:
+   - name: yardstick
+     type: Node
+     file: prox_tg_bm.yaml
+   - name: yardstick
+     type: StandaloneOvsDpdk
+     file: /etc/yardstick/nodes/standalone/host_ovs.yaml
+     vm_deploy: True
+     ovs_properties:
+       version:
+         ovs: 2.8.0
+         dpdk: 17.05.2
+       pmd_threads: 2
+       ram:
+         socket_0: 2048
+         socket_1: 2048
+       queues: 4
+       vpath: "/usr/local"
+     flavor:
+       images: "/var/lib/libvirt/images/yardstick-nsb-image.img"
+       ram: 16384
+       extra_specs:
+         hw:cpu_sockets: 1
+         hw:cpu_cores: 10
+         hw:cpu_threads: 2
+     servers:
+       vnf__0:
+         network_ports:
+           mgmt:
+             cidr: '1.1.1.61/24'
+           xe0:
+             - uplink_0
+           xe1:
+             - downlink_0
+     networks:
+       uplink_0:
+         port_num: 0
+         phy_port: "0000:05:00.0"
+         vpci: "0000:00:07.0"
+         cidr: '152.16.100.10/24'
+         gateway_ip: '152.16.100.20'
+       downlink_0:
+         port_num: 1
+         phy_port: "0000:05:00.1"
+         vpci: "0000:00:08.0"
+         cidr: '152.16.40.10/24'
+         gateway_ip: '152.16.100.20'
diff --git a/samples/vnf_samples/nsut/prox/tc_prox_ovs-dpdk_l2fwd_pktTouch-4.yaml b/samples/vnf_samples/nsut/prox/tc_prox_ovs-dpdk_l2fwd_pktTouch-4.yaml
new file mode 100644 (file)
index 0000000..c7e7ba5
--- /dev/null
@@ -0,0 +1,112 @@
+# Copyright (c) 2018 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/prox_binsearch.yaml
+  topology: prox-tg-topology-4.yaml
+
+  nodes:
+    tg__0: tg__0.yardstick
+    vnf__0: vnf__0.yardstick
+
+  options:
+    interface_speed_gbps: 10
+
+    vnf__0:
+      prox_path: /opt/nsb_bin/prox
+      prox_config: "configs/handle_l2fwd_pktTouch-4.cfg"
+      prox_args:
+        "-t": ""
+
+    tg__0:
+      prox_path: /opt/nsb_bin/prox
+      prox_config: "configs/gen_l2fwd_pktTouch-4.cfg"
+      prox_args:
+        "-e": ""
+        "-t": ""
+
+  runner:
+    type: Duration
+    # we kill after duration, independent of test duration, so set this high
+    duration: 300
+
+contexts:
+   - name: yardstick
+     type: Node
+     file: prox_tg_bm.yaml
+   - name: yardstick
+     type: StandaloneOvsDpdk
+     file: /etc/yardstick/nodes/standalone/host_ovs.yaml
+     vm_deploy: True
+     ovs_properties:
+       version:
+         ovs: 2.8.0
+         dpdk: 17.05.2
+       pmd_threads: 2
+       ram:
+         socket_0: 2048
+         socket_1: 2048
+       queues: 4
+       vpath: "/usr/local"
+     flavor:
+       images: "/var/lib/libvirt/images/yardstick-nsb-image.img"
+       ram: 16384
+       extra_specs:
+         hw:cpu_sockets: 1
+         hw:cpu_cores: 10
+         hw:cpu_threads: 2
+     servers:
+       vnf__0:
+         network_ports:
+           mgmt:
+             cidr: '1.1.1.61/24'
+           xe0:
+             - uplink_0
+           xe1:
+             - downlink_0
+           xe2:
+             - uplink_1
+           xe3:
+             - downlink_1
+     networks:
+       uplink_0:
+         port_num: 0
+         phy_port: "0000:05:00.0"
+         vpci: "0000:00:0a.0"
+         cidr: '152.16.100.10/24'
+         gateway_ip: '152.16.100.20'
+       downlink_0:
+         port_num: 1
+         phy_port: "0000:05:00.1"
+         vpci: "0000:00:0b.0"
+         cidr: '152.16.40.10/24'
+         gateway_ip: '152.16.100.20'
+       uplink_1:
+         port_num: 2
+         phy_port: "0000:05:00.2"
+         vpci: "0000:00:0c.0"
+         cidr: '152.16.50.10/24'
+         gateway_ip: '152.16.100.20'
+       downlink_1:
+         port_num: 3
+         phy_port: "0000:05:00.3"
+         vpci: "0000:00:0d.0"
+         cidr: '152.16.30.10/24'
+         gateway_ip: '152.16.100.20'
+
index 97a3d5a..ceeb877 100644 (file)
@@ -61,8 +61,6 @@ contexts:
          hw:cpu_sockets: 1
          hw:cpu_cores: 10
          hw:cpu_threads: 2
-       user: ""
-       password: ""
      servers:
        vnf_0:
          network_ports:
diff --git a/samples/vnf_samples/nsut/prox/tc_prox_sriov_l2fwd-4.yaml b/samples/vnf_samples/nsut/prox/tc_prox_sriov_l2fwd-4.yaml
new file mode 100644 (file)
index 0000000..aeca1ce
--- /dev/null
@@ -0,0 +1,99 @@
+# Copyright (c) 2016-2018 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/prox_binsearch.yaml
+  topology: prox-tg-topology-4.yaml
+
+  nodes:
+    tg__0: tg__0.yardstick
+    vnf__0: vnf__0.yardstick
+
+  options:
+    interface_speed_gbps: 10
+
+    vnf__0:
+      prox_path: /opt/nsb_bin/prox
+      prox_config: "configs/handle_l2fwd-4.cfg"
+      prox_args:
+        "-t": ""
+
+    tg__0:
+      prox_path: /opt/nsb_bin/prox
+      prox_config: "configs/gen_l2fwd-4.cfg"
+      prox_args:
+        "-e": ""
+        "-t": ""
+
+  runner:
+    type: Duration
+    # we kill after duration, independent of test duration, so set this high
+    duration: 300
+
+contexts:
+   - name: yardstick
+     type: Node
+     file: prox_tg_bm.yaml
+   - name: yardstick
+     type: StandaloneSriov
+     file: /etc/yardstick/nodes/standalone/host_sriov.yaml
+     vm_deploy: True
+     flavor:
+       images: "/var/lib/libvirt/images/yardstick-nsb-image.img"
+       ram: 16384
+       extra_specs:
+         hw:cpu_sockets: 1
+         hw:cpu_cores: 10
+         hw:cpu_threads: 2
+     servers:
+       vnf__0:
+         network_ports:
+           mgmt:
+             cidr: '1.1.1.61/24'
+           xe0:
+             - uplink_0
+           xe1:
+             - downlink_0
+           xe2:
+             - uplink_1
+           xe3:
+             - downlink_1
+
+     networks:
+       uplink_0:
+         phy_port: "0000:05:00.0"
+         vpci: "0000:00:0a.0"
+         cidr: '152.16.100.10/24'
+         gateway_ip: '152.16.100.20'
+       downlink_0:
+         phy_port: "0000:05:00.1"
+         vpci: "0000:00:0b.0"
+         cidr: '152.16.40.10/24'
+         gateway_ip: '152.16.100.20'
+       uplink_1:
+         phy_port: "0000:05:00.2"
+         vpci: "0000:00:0c.0"
+         cidr: '152.16.50.10/24'
+         gateway_ip: '152.16.100.20'
+       downlink_1:
+         phy_port: "0000:05:00.3"
+         vpci: "0000:00:0d.0"
+         cidr: '152.16.30.10/24'
+         gateway_ip: '152.16.100.20'
+
diff --git a/samples/vnf_samples/nsut/prox/tc_prox_sriov_l2fwd_pktTouch-2.yaml b/samples/vnf_samples/nsut/prox/tc_prox_sriov_l2fwd_pktTouch-2.yaml
new file mode 100644 (file)
index 0000000..660fce5
--- /dev/null
@@ -0,0 +1,83 @@
+# Copyright (c) 2016-2018 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/prox_binsearch.yaml
+  topology: prox-tg-topology-2.yaml
+
+  nodes:
+    tg__0: tg__0.yardstick
+    vnf__0: vnf__0.yardstick
+
+  options:
+    interface_speed_gbps: 10
+
+    vnf__0:
+      prox_path: /opt/nsb_bin/prox
+      prox_config: "configs/handle_l2fwd_pktTouch-2.cfg"
+      prox_args:
+        "-t": ""
+
+    tg__0:
+      prox_path: /opt/nsb_bin/prox
+      prox_config: "configs/gen_l2fwd_pktTouch-2.cfg"
+      prox_args:
+        "-e": ""
+        "-t": ""
+
+  runner:
+    type: Duration
+    # we kill after duration, independent of test duration, so set this high
+    duration: 300
+
+contexts:
+   - name: yardstick
+     type: Node
+     file: prox_tg_bm.yaml
+   - name: yardstick
+     type: StandaloneSriov
+     file: /etc/yardstick/nodes/standalone/host_sriov.yaml
+     vm_deploy: True
+     flavor:
+       images: "/var/lib/libvirt/images/yardstick-nsb-image.img"
+       ram: 16384
+       extra_specs:
+         hw:cpu_sockets: 1
+         hw:cpu_cores: 10
+         hw:cpu_threads: 2
+     servers:
+       vnf__0:
+         network_ports:
+           mgmt:
+             cidr: '1.1.1.61/24'
+           xe0:
+             - uplink_0
+           xe1:
+             - downlink_0
+     networks:
+       uplink_0:
+         phy_port: "0000:05:00.0"
+         vpci: "0000:00:0a.0"
+         cidr: '152.16.100.10/24'
+         gateway_ip: '152.16.100.20'
+       downlink_0:
+         phy_port: "0000:05:00.1"
+         vpci: "0000:00:0b.0"
+         cidr: '152.16.40.10/24'
+         gateway_ip: '152.16.100.20'
diff --git a/samples/vnf_samples/nsut/prox/tc_prox_sriov_l2fwd_pktTouch-4.yaml b/samples/vnf_samples/nsut/prox/tc_prox_sriov_l2fwd_pktTouch-4.yaml
new file mode 100644 (file)
index 0000000..1571f2f
--- /dev/null
@@ -0,0 +1,99 @@
+# Copyright (c) 2016-2018 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/prox_binsearch.yaml
+  topology: prox-tg-topology-4.yaml
+
+  nodes:
+    tg__0: tg__0.yardstick
+    vnf__0: vnf__0.yardstick
+
+  options:
+    interface_speed_gbps: 10
+
+    vnf__0:
+      prox_path: /opt/nsb_bin/prox
+      prox_config: "configs/handle_l2fwd_pktTouch-4.cfg"
+      prox_args:
+        "-t": ""
+
+    tg__0:
+      prox_path: /opt/nsb_bin/prox
+      prox_config: "configs/gen_l2fwd_pktTouch-4.cfg"
+      prox_args:
+        "-e": ""
+        "-t": ""
+
+  runner:
+    type: Duration
+    # we kill after duration, independent of test duration, so set this high
+    duration: 300
+
+contexts:
+   - name: yardstick
+     type: Node
+     file: prox_tg_bm.yaml
+   - name: yardstick
+     type: StandaloneSriov
+     file: /etc/yardstick/nodes/standalone/host_sriov.yaml
+     vm_deploy: True
+     flavor:
+       images: "/var/lib/libvirt/images/yardstick-nsb-image.img"
+       ram: 16384
+       extra_specs:
+         hw:cpu_sockets: 1
+         hw:cpu_cores: 10
+         hw:cpu_threads: 2
+     servers:
+       vnf__0:
+         network_ports:
+           mgmt:
+             cidr: '1.1.1.61/24'
+           xe0:
+             - uplink_0
+           xe1:
+             - downlink_0
+           xe2:
+             - uplink_1
+           xe3:
+             - downlink_1
+
+     networks:
+       uplink_0:
+         phy_port: "0000:05:00.0"
+         vpci: "0000:00:0a.0"
+         cidr: '152.16.100.10/24'
+         gateway_ip: '152.16.100.20'
+       downlink_0:
+         phy_port: "0000:05:00.1"
+         vpci: "0000:00:0b.0"
+         cidr: '152.16.40.10/24'
+         gateway_ip: '152.16.100.20'
+       uplink_1:
+         phy_port: "0000:05:00.2"
+         vpci: "0000:00:0c.0"
+         cidr: '152.16.50.10/24'
+         gateway_ip: '152.16.100.20'
+       downlink_1:
+         phy_port: "0000:05:00.3"
+         vpci: "0000:00:0d.0"
+         cidr: '152.16.30.10/24'
+         gateway_ip: '152.16.100.20'
+
diff --git a/samples/vnf_samples/nsut/prox/tc_prox_sriov_l3fwd-2.yaml b/samples/vnf_samples/nsut/prox/tc_prox_sriov_l3fwd-2.yaml
new file mode 100644 (file)
index 0000000..e8807ba
--- /dev/null
@@ -0,0 +1,87 @@
+# 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/prox_binsearch.yaml
+  topology: prox-tg-topology-2.yaml
+
+  nodes:
+    tg__0: tg__0.yardstick
+    vnf__0: vnf__0.yardstick
+
+  options:
+    vnf__0:
+      prox_path: /opt/nsb_bin/prox
+      prox_config: "configs/handle_l3fwd-2.cfg"
+      prox_args:
+        "-t": ""
+      prox_files:
+        "configs/ipv4-2port.lua" : ""
+      prox_generate_parameter: True
+
+    tg__0:
+      collectd:
+        interval: 1
+      prox_path: /opt/nsb_bin/prox
+      prox_config: "configs/gen_l3fwd-2.cfg"
+      prox_args:
+        "-e": ""
+        "-t": ""
+
+  runner:
+    type: Duration
+    # we kill after duration, independent of test duration, so set this high
+    duration: 1800
+
+contexts:
+   - name: yardstick
+     type: Node
+     file: prox_tg_bm.yaml
+   - name: yardstick
+     type: StandaloneSriov
+     file: /etc/yardstick/nodes/standalone/host_sriov.yaml
+     vm_deploy: True
+     flavor:
+       images: "/var/lib/libvirt/images/yardstick-nsb-image.img"
+       ram: 16384
+       extra_specs:
+         hw:cpu_sockets: 1
+         hw:cpu_cores: 10
+         hw:cpu_threads: 2
+     servers:
+       vnf__0:
+         network_ports:
+           mgmt:
+             cidr: '1.1.1.62/24'
+           xe0:
+             - uplink_0
+           xe1:
+             - downlink_0
+     networks:
+       uplink_0:
+         phy_port: "0000:05:00.0"
+         vpci: "0000:00:0a.0"
+         cidr: '152.16.100.10/24'
+         gateway_ip: '152.16.100.20'
+       downlink_0:
+         phy_port: "0000:05:00.1"
+         vpci: "0000:00:0b.0"
+         cidr: '152.16.40.10/24'
+         gateway_ip: '152.16.100.20'
+
diff --git a/samples/vnf_samples/nsut/prox/tc_prox_sriov_l3fwd-4.yaml b/samples/vnf_samples/nsut/prox/tc_prox_sriov_l3fwd-4.yaml
new file mode 100644 (file)
index 0000000..16578a1
--- /dev/null
@@ -0,0 +1,102 @@
+# 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/prox_binsearch.yaml
+  topology: prox-tg-topology-4.yaml
+
+  nodes:
+    tg__0: tg__0.yardstick
+    vnf__0: vnf__0.yardstick
+
+  options:
+    vnf__0:
+      prox_path: /opt/nsb_bin/prox
+      prox_config: "configs/handle_l3fwd-4.cfg"
+      prox_args:
+        "-t": ""
+      prox_files:
+        "configs/ipv4.lua" : ""
+      prox_generate_parameter: True
+
+    tg__0:
+      collectd:
+        interval: 1
+      prox_path: /opt/nsb_bin/prox
+      prox_config: "configs/gen_l3fwd-4.cfg"
+      prox_args:
+        "-e": ""
+        "-t": ""
+
+  runner:
+    type: Duration
+    # we kill after duration, independent of test duration, so set this high
+    duration: 1800
+
+contexts:
+   - name: yardstick
+     type: Node
+     file: prox_tg_bm.yaml
+   - name: yardstick
+     type: StandaloneSriov
+     file: /etc/yardstick/nodes/standalone/host_sriov.yaml
+     vm_deploy: True
+     flavor:
+       images: "/var/lib/libvirt/images/yardstick-nsb-image.img"
+       ram: 16384
+       extra_specs:
+         hw:cpu_sockets: 1
+         hw:cpu_cores: 10
+         hw:cpu_threads: 2
+     servers:
+       vnf__0:
+         network_ports:
+           mgmt:
+             cidr: '1.1.1.62/24'
+           xe0:
+             - uplink_0
+           xe1:
+             - downlink_0
+           xe2:
+             - uplink_1
+           xe3:
+             - downlink_1
+
+     networks:
+       uplink_0:
+         phy_port: "0000:05:00.0"
+         vpci: "0000:00:0a.0"
+         cidr: '152.16.100.10/24'
+         gateway_ip: '152.16.100.20'
+       downlink_0:
+         phy_port: "0000:05:00.1"
+         vpci: "0000:00:0b.0"
+         cidr: '152.16.40.10/24'
+         gateway_ip: '152.16.100.20'
+       uplink_1:
+         phy_port: "0000:05:00.2"
+         vpci: "0000:00:0c.0"
+         cidr: '152.16.50.10/24'
+         gateway_ip: '152.16.100.20'
+       downlink_1:
+         phy_port: "0000:05:00.3"
+         vpci: "0000:00:0d.0"
+         cidr: '152.16.30.10/24'
+         gateway_ip: '152.16.100.20'
+
index 1c807ca..7a9a265 100644 (file)
@@ -22,6 +22,10 @@ scenarios:
     tg__0: trafficgen_1.yardstick
     vnf__0: vnf.yardstick
   options:
+    simulated_users:
+      uplink: [65000]
+    page_object:
+      uplink: ["/1b.html"]
     framesize:
       uplink: {64B: 100}
       downlink: {64B: 100}
index 6c9cb9d..5f5fa4b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -40,7 +40,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg
 context:
   type: Node
   name: yardstick
index 56afdf4..9055eb8 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -11,7 +11,6 @@
 # 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.
-# vfw_ipv4_profile_1flows.ixncfg
 
 ---
 schema: yardstick:task:0.1
@@ -41,7 +40,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_muttiport.ixncfg
 context:
   type: Node
   name: yardstick
index 0aea822..07138d6 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -41,7 +41,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg
 {% endfor %}
 context:
   type: Node
index d71b985..077f1fb 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -41,7 +41,6 @@ scenarios:
     type: Iteration
     iterations: 28
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg
 context:
   type: Node
   name: yardstick
index f442c71..96a079b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -41,7 +41,6 @@ scenarios:
       vnf__0:
         rules: acl_1rule.yaml
         vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}}
-    ixia_profile: ../../traffic_profiles/ixia_ipv4_profile_{{num_vnfs * 2}}_port.ixncfg
     runner:
       type: Iteration
       iterations: 10
index d00fe1d..43803d3 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -42,7 +42,6 @@ scenarios:
       vnf__0:
         rules: acl_1rule.yaml
         vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}}
-    ixia_profile: ../../traffic_profiles/ixia/ixia_ipv4_profile_{{ num_vnfs }}_port.ixncfg
 
     runner:
       type: Iteration
index 1e95c8c..7b597d6 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg
 contexts:
   # put node context first, so we don't HEAT deploy if node has errors
   - name: yardstick1
index 1a7e147..03e6c34 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg
 contexts:
   # put node context first, so we don't HEAT deploy if node has errors
   - name: yardstick1
index 9a4e60b..516afcd 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg
 contexts:
   # put node context first, so we don't HEAT deploy if node has errors
   - name: yardstick1
index 7a1ffd8..73f21ca 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg
 contexts:
   # put node context first, so we don't HEAT deploy if node has errors
   - name: yardstick1
index c06c9ad..4603ad0 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg
 contexts:
   # put node context first, so we don't HEAT deploy if node has errors
   - name: yardstick1
index 798dca2..340a1be 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg
 contexts:
   # put node context first, so we don't HEAT deploy if node has errors
   - name: yardstick1
index b685699..042eb24 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg
 contexts:
   # put node context first, so we don't HEAT deploy if node has errors
   - name: traffic_gen
index 2469dc8..c94ab31 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ scenarios:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_muttiport.ixncfg
 contexts:
   # put node context first, so we don't HEAT deploy if node has errors
   - name: traffic_gen
index a77d900..d23c746 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -35,7 +35,6 @@ scenarios:
     vnf__0:
       rules: acl_1rule.yaml
       vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg
   runner:
     type: Iteration
     iterations: 10
index 3606a55..42903cd 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -46,7 +46,6 @@ scenarios:
         rules: acl_1rule.yaml
         vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}}
 {% endfor %}
-    ixia_profile: ../../traffic_profiles/ixia_ipv4_profile_{{num_vnfs}}_port.ixncfg
     runner:
       type: Iteration
       iterations: 10
index c263a76..14934e9 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -45,7 +45,6 @@ scenarios:
         rules: acl_1rule.yaml
         vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}}
 {% endfor %}
-    ixia_profile: ../../traffic_profiles/ixia/ixia_ipv4_profile_{{num_vnfs * 2}}_port.ixncfg
     runner:
       type: Iteration
       iterations: 10
index 458471a..96cdf0f 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -35,7 +35,6 @@ scenarios:
     vnf__0:
       rules: acl_1rule.yaml
       vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
-  ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg
   runner:
     type: Iteration
     iterations: 10
index d701696..7ac918d 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -46,7 +46,6 @@ scenarios:
         rules: acl_1rule.yaml
         vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}}
 {% endfor %}
-    ixia_profile: ../../traffic_profiles/ixia/ixia_ipv4_profile_{{ num_vnfs }}_port.ixncfg
 
     runner:
       type: Iteration
index 79a6be0..c91bb23 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -45,7 +45,6 @@ scenarios:
         rules: acl_1rule.yaml
         vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}}
 {% endfor %}
-    ixia_profile: ../../traffic_profiles/ixia/ixia_ipv4_profile_{{num_vnfs * 2}}_port.ixncfg
 
     runner:
       type: Iteration
index 04668d3..cbe6cf1 100644 (file)
@@ -32,11 +32,12 @@ scenarios:
     traffic_type: 4
     vnf__0:
       nfvi_enable: True
-      vnf_config: vpe_config
+      vnf_config: {file: './vpe_config/vpe_config_2_ports',
+                   action_bulk_file: './vpe_config/action_bulk_512.txt',
+                   full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'}
   runner:
     type: Duration
     duration: 4
-  ixia_profile: ../../traffic_profiles/vpe/HTTP-vPE_IPv4_2Ports.rxf # Need vlan update
 context:
   type: Node
   name: yardstick
index 4f8395b..1587680 100644 (file)
@@ -34,7 +34,9 @@ scenarios:
       allowed_drop_rate: 0.0001 - 0.0001
     vnf__0:
       nfvi_enable: True
-      vnf_config: vpe_config
+      vnf_config: {file: './vpe_config/vpe_config_2_ports',
+                   action_bulk_file: './vpe_config/action_bulk_512.txt',
+                   full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'}
   runner:
     type: Iteration
     iterations: 10
index 271cb89..b7d209e 100644 (file)
@@ -34,7 +34,9 @@ scenarios:
       allowed_drop_rate: 0.0001 - 0.0001
     vnf__0:
       nfvi_enable: True
-      vnf_config: vpe_config
+      vnf_config: {file: './vpe_config/vpe_config_2_ports',
+                   action_bulk_file: './vpe_config/action_bulk_512.txt',
+                   full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'}
   runner:
     type: Iteration
     iterations: 10
index d55540a..330d8e8 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -34,12 +34,13 @@ scenarios:
       allowed_drop_rate: 0.0001 - 0.0001
     vnf__0:
       nfvi_enable: True
-      vnf_config: vpe_config
+      vnf_config: {file: './vpe_config/vpe_config_2_ports',
+                   action_bulk_file: './vpe_config/action_bulk_512.txt',
+                   full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'}
   runner:
     type: Iteration
     iterations: 10
     interval: 35
-  ixia_profile: ../../traffic_profiles/vpe/vpe_ipv4_profile_1flows.ixncfg
 context:
   type: Node
   name: yardstick
index a552730..b687164 100644 (file)
@@ -36,7 +36,9 @@ scenarios:
       correlated_traffic: true
     vnf__0:
       nfvi_enable: True
-      vnf_config: vpe_config
+      vnf_config: {file: './vpe_config/vpe_config_2_ports',
+                   action_bulk_file: './vpe_config/action_bulk_512.txt',
+                   full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'}
   runner:
     type: Iteration
     iterations: 10
index 47b9a6f..421697f 100644 (file)
@@ -35,7 +35,9 @@ scenarios:
       allowed_drop_rate: 0.0001 - 0.0001
     vnf__0:
       nfvi_enable: True
-      vnf_config: vpe_config
+      vnf_config: {file: './vpe_config/vpe_config_2_ports',
+                   action_bulk_file: './vpe_config/action_bulk_512.txt',
+                   full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'}
   runner:
     type: Iteration
     iterations: 10
index 5293b52..56c7147 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -34,8 +34,9 @@ scenarios:
       allowed_drop_rate: 0.0001 - 0.0001
     vnf__0:
       nfvi_enable: True
-      vnf_config: vpe_config
-  ixia_profile: ../../traffic_profiles/vpe/vpe_ipv4_profile_1flows.ixncfg
+      vnf_config: {file: './vpe_config/vpe_config_2_ports',
+                   action_bulk_file: './vpe_config/action_bulk_512.txt',
+                   full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'}
   runner:
     type: Iteration
     iterations: 10
index ce23980..39aea13 100644 (file)
@@ -34,7 +34,9 @@ scenarios:
       allowed_drop_rate: 0.0001 - 0.0001
     vnf__0:
       nfvi_enable: True
-      vnf_config: vpe_config
+      vnf_config: {file: './vpe_config/vpe_config_2_ports',
+                   action_bulk_file: './vpe_config/action_bulk_512.txt',
+                   full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'}
   runner:
     type: Iteration
     iterations: 10
diff --git a/samples/vnf_samples/nsut/vpe/vpe_config/vpe_config_2_ports b/samples/vnf_samples/nsut/vpe/vpe_config/vpe_config_2_ports
new file mode 100644 (file)
index 0000000..35443c8
--- /dev/null
@@ -0,0 +1,86 @@
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[TM0]
+burst_read = 24
+burst_write = 32
+cfg = /tmp/full_tm_profile_10G.cfg
+
+[PIPELINE1]
+type = FIREWALL
+core = s0c1
+pktq_in = RXQ0.0
+pktq_out = SWQ0 SINK0
+n_rules = 4096
+pkt_type = qinq_ipv4
+
+[PIPELINE2]
+type = FLOW_CLASSIFICATION
+core = s0c2
+pktq_in = SWQ0
+pktq_out = SWQ1 SINK1
+n_flows = 65536
+key_size = 8
+key_offset = 268
+key_mask = 00000FFF00000FFF
+flowid_offset = 172
+
+[PIPELINE3]
+type = FLOW_ACTIONS
+core = s0c2
+pktq_in = SWQ1
+pktq_out = SWQ2
+n_flows = 65536
+n_meters_per_flow = 1
+flow_id_offset = 172
+ip_hdr_offset = 278
+color_offset = 176
+
+[PIPELINE4]
+type = FLOW_ACTIONS
+core = s0c1
+pktq_in = SWQ2
+pktq_out = SWQ3
+n_flows = 65536
+n_meters_per_flow = 4
+flow_id_offset = 172
+ip_hdr_offset = 278
+color_offset = 176
+
+[PIPELINE5]
+type = ROUTING
+core = s0c3
+pktq_in = SWQ3
+pktq_out = TXQ1.0 SINK2
+encap = ethernet_mpls
+mpls_color_mark = yes
+ip_hdr_offset = 278
+color_offset = 176
+
+[PIPELINE6]
+type = ROUTING
+core = s0c4
+pktq_in = RXQ1.0
+pktq_out = SWQ4 SINK3
+encap = ethernet_qinq
+qinq_sched = yes
+ip_hdr_offset = 270
+
+[PIPELINE7]
+type = PASS-THROUGH
+core = s0c5
+pktq_in = SWQ4
+pktq_out = SWQ5
+
+[PIPELINE8]
+type = PASS-THROUGH
+core = s0c5
+pktq_in = SWQ5 TM0
+pktq_out = TM0 SWQ6
+
+[PIPELINE9]
+type = PASS-THROUGH
+core = s0c5
+pktq_in = SWQ6
+pktq_out = TXQ0.0
diff --git a/samples/vnf_samples/traffic_profiles/acl/acl_ipv4_profile_1flows.ixncfg b/samples/vnf_samples/traffic_profiles/acl/acl_ipv4_profile_1flows.ixncfg
deleted file mode 100644 (file)
index 01269be..0000000
Binary files a/samples/vnf_samples/traffic_profiles/acl/acl_ipv4_profile_1flows.ixncfg and /dev/null differ
diff --git a/samples/vnf_samples/traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows.ixncfg b/samples/vnf_samples/traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows.ixncfg
deleted file mode 100644 (file)
index d242043..0000000
Binary files a/samples/vnf_samples/traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows.ixncfg and /dev/null differ
diff --git a/samples/vnf_samples/traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows_3node_latency.ixncfg b/samples/vnf_samples/traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows_3node_latency.ixncfg
deleted file mode 100644 (file)
index fdf47da..0000000
Binary files a/samples/vnf_samples/traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows_3node_latency.ixncfg and /dev/null differ
index dcc11d5..fec8b33 100644 (file)
@@ -13,10 +13,8 @@ uplink_0:
         gateway: <GATEWAY_ADDR>           # will be taken from pod file
 
     http_client:
-        http_no_requests: "1000"          # number of http iterations
-        http_concurency: "65000"          # number of threads to be run
-        http_locator:  "/1B.bin"          # http locator to be read
-        attacker_tests: "False"           # True : If attacker Test, False : Otherwise
+        simulated_users: {{ get(simulated_users, 'simulated_users.uplink_0', '65000') }} # number of threads to be run
+        page_object:  {{ get(page_object, 'page_object.uplink_0', '/1b.html') }} # http locator to be read
 
 downlink_0:
     ip:
@@ -33,10 +31,8 @@ uplink_1:
         gateway: <GATEWAY_ADDR>
 
     http_client:
-        http_no_requests: "1000"
-        http_concurency: "65000"
-        http_locator:  "/1B.bin"
-        attacker_tests: "False"
+        simulated_users: {{ get(simulated_users, 'simulated_users.uplink_1', '65000') }} # number of threads to be run
+        page_object:  {{ get(page_object, 'page_object.uplink_1', '/1b.html') }} # http locator to be read
 
 downlink_1:
     ip:
diff --git a/samples/vnf_samples/traffic_profiles/ixia/ixia_ipv4_profile_2_port.ixncfg b/samples/vnf_samples/traffic_profiles/ixia/ixia_ipv4_profile_2_port.ixncfg
deleted file mode 100644 (file)
index 01269be..0000000
Binary files a/samples/vnf_samples/traffic_profiles/ixia/ixia_ipv4_profile_2_port.ixncfg and /dev/null differ
diff --git a/samples/vnf_samples/traffic_profiles/ixia/ixia_ipv4_profile_4_port.ixncfg b/samples/vnf_samples/traffic_profiles/ixia/ixia_ipv4_profile_4_port.ixncfg
deleted file mode 100644 (file)
index 76accc1..0000000
Binary files a/samples/vnf_samples/traffic_profiles/ixia/ixia_ipv4_profile_4_port.ixncfg and /dev/null differ
index 7942fbf..a21227f 100644 (file)
@@ -41,7 +41,7 @@ name:            rfc2544
 description:     Traffic profile to run RFC2544 latency
 traffic_profile:
   traffic_type : IXIARFC2544Profile # defines traffic behavior - constant or look for highest possible throughput
-  frame_rate : 100  # pc of linerate
+  frame_rate : 100%  # pc of linerate
   injection_time: {{ injection_time }}
   enable_latency: True
 
@@ -50,7 +50,7 @@ uplink_0:
         id: 1
         outer_l2:
             framesize:
-                64B: "{{ get(imix, 'imix.uplink.imix_small', '0') }}"
+                64B: "{{ get(imix, 'imix.uplink.imix_64B', '0') }}"
                 128B: "{{ get(imix, 'imix.uplink.imix_128B', '0') }}"
                 256B: "{{ get(imix, 'imix.uplink.imix_256B', '0') }}"
                 373b: "{{ get(imix, 'imix.uplink.imix_373B', '0') }}"
@@ -69,7 +69,7 @@ uplink_0:
                     cfi: 0
 
         outer_l3v4:
-            proto: "tcp"
+            proto: "udp"
             srcip4: "{{get(flow, 'flow.src_ip_0', '192.168.0.0-192.168.255.255') }}"
             dstip4: "{{get(flow, 'flow.dst_ip_0', '192.16.0.0-192.16.0.31') }}"
             count: "{{get(flow, 'flow.count', '1') }}"
@@ -84,11 +84,11 @@ uplink_0:
             count: "{{get(flow, 'flow.count', '1') }}"
             seed: "{{get(flow, 'flow.seed', '1') }}"
 downlink_0:
-      id: 2
       ipv4:
+        id: 2
         outer_l2:
             framesize:
-                64B: "{{ get(imix, 'imix.uplink.imix_small', '0') }}"
+                64B: "{{ get(imix, 'imix.uplink.imix_64B', '0') }}"
                 128B: "{{ get(imix, 'imix.uplink.imix_128B', '0') }}"
                 256B: "{{ get(imix, 'imix.uplink.imix_256B', '0') }}"
                 373b: "{{ get(imix, 'imix.uplink.imix_373B', '0') }}"
@@ -97,7 +97,7 @@ downlink_0:
                 1518B: "{{get(imix, 'imix.uplink.imix_1500B', '0') }}"
 
         outer_l3v4:
-            proto: "tcp"
+            proto: "udp"
             srcip4: "{{get(flow, 'flow.dst_ip_0', '192.16.0.0-192.16.0.31') }}"
             dstip4: "{{get(flow, 'flow.src_ip_0', '192.168.0.0-192.168.255.255') }}"
             count: "{{get(flow, 'flow.count', '1') }}"
@@ -112,11 +112,11 @@ downlink_0:
             count: "{{get(flow, 'flow.count', '1') }}"
             seed: "{{get(flow, 'flow.seed', '1') }}"
 uplink_1:
-      id: 3
       ipv4:
+        id: 3
         outer_l2:
             framesize:
-                64B: "{{ get(imix, 'imix.uplink.imix_small', '0') }}"
+                64B: "{{ get(imix, 'imix.uplink.imix_64B', '0') }}"
                 128B: "{{ get(imix, 'imix.uplink.imix_128B', '0') }}"
                 256B: "{{ get(imix, 'imix.uplink.imix_256B', '0') }}"
                 373b: "{{ get(imix, 'imix.uplink.imix_373B', '0') }}"
@@ -135,7 +135,7 @@ uplink_1:
                     cfi: 0
 
         outer_l3v4:
-            proto: "tcp"
+            proto: "udp"
             srcip4: "{{get(flow, 'flow.srcip_1', '192.168.0.0-192.168.255.255') }}"
             dstip4: "{{get(flow, 'flow.dstip_1', '192.16.0.0-192.16.0.31') }}"
             count: "{{get(flow, 'flow.count', '1') }}"
@@ -150,11 +150,11 @@ uplink_1:
             count: "{{get(flow, 'flow.count', '1') }}"
             seed: "{{get(flow, 'flow.seed', '1') }}"
 downlink_1:
-      id: 4
       ipv4:
+        id: 4
         outer_l2:
             framesize:
-                64B: "{{ get(imix, 'imix.uplink.imix_small', '0') }}"
+                64B: "{{ get(imix, 'imix.uplink.imix_64B', '0') }}"
                 128B: "{{ get(imix, 'imix.uplink.imix_128B', '0') }}"
                 256B: "{{ get(imix, 'imix.uplink.imix_256B', '0') }}"
                 373b: "{{ get(imix, 'imix.uplink.imix_373B', '0') }}"
@@ -163,7 +163,7 @@ downlink_1:
                 1518B: "{{get(imix, 'imix.uplink.imix_1500B', '0') }}"
 
         outer_l3v4:
-            proto: "tcp"
+            proto: "udp"
             srcip4: "{{get(flow, 'flow.dst_ip_1', '192.16.0.0-192.16.0.31') }}"
             dstip4: "{{get(flow, 'flow.src_ip_1', '192.168.0.0-192.168.255.255') }}"
             count: "{{get(flow, 'flow.count', '1') }}"
diff --git a/samples/vnf_samples/traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg b/samples/vnf_samples/traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg
deleted file mode 100644 (file)
index 01269be..0000000
Binary files a/samples/vnf_samples/traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg and /dev/null differ
diff --git a/samples/vnf_samples/traffic_profiles/vfw/vfw_ipv4_profile_muttiport.ixncfg b/samples/vnf_samples/traffic_profiles/vfw/vfw_ipv4_profile_muttiport.ixncfg
deleted file mode 100644 (file)
index 76accc1..0000000
Binary files a/samples/vnf_samples/traffic_profiles/vfw/vfw_ipv4_profile_muttiport.ixncfg and /dev/null differ
diff --git a/samples/vnf_samples/traffic_profiles/vpe/vpe_ipv4_profile_1flows.ixncfg b/samples/vnf_samples/traffic_profiles/vpe/vpe_ipv4_profile_1flows.ixncfg
deleted file mode 100644 (file)
index dc05fc8..0000000
Binary files a/samples/vnf_samples/traffic_profiles/vpe/vpe_ipv4_profile_1flows.ixncfg and /dev/null differ
diff --git a/samples/vnf_samples/traffic_profiles/vpe/vpe_ipv4_profile_256Kflows.ixncfg b/samples/vnf_samples/traffic_profiles/vpe/vpe_ipv4_profile_256Kflows.ixncfg
deleted file mode 100644 (file)
index b7e45bf..0000000
Binary files a/samples/vnf_samples/traffic_profiles/vpe/vpe_ipv4_profile_256Kflows.ixncfg and /dev/null differ
index 1004c62..aa5fdd3 100644 (file)
@@ -45,7 +45,7 @@ VM_TEMPLATE = """
   <vcpu cpuset='{cpuset}'>{vcpu}</vcpu>
  {cputune}
   <os>
-    <type arch="x86_64" machine="pc-i440fx-xenial">hvm</type>
+    <type arch="x86_64" machine="{machine}">hvm</type>
     <boot dev="hd" />
   </os>
   <features>
@@ -107,7 +107,7 @@ version: 2
 ethernets:
   ens3:
     match:
-      mac_address: {mac_address}
+      macaddress: {mac_address}
     addresses:
       - {ip_address}
 EOF
@@ -161,7 +161,8 @@ class Libvirt(object):
         return vm_pci
 
     @classmethod
-    def add_ovs_interface(cls, vpath, port_num, vpci, vports_mac, xml_str):
+    def add_ovs_interface(cls, vpath, port_num, vpci, vports_mac, xml_str,
+                          queues):
         """Add a DPDK OVS 'interface' XML node in 'devices' node
 
         <devices>
@@ -203,7 +204,7 @@ class Libvirt(object):
         model.set('type', 'virtio')
 
         driver = ET.SubElement(interface, 'driver')
-        driver.set('queues', '4')
+        driver.set('queues', str(queues))
 
         host = ET.SubElement(driver, 'host')
         host.set('mrg_rxbuf', 'off')
@@ -305,6 +306,7 @@ class Libvirt(object):
         cpuset = Libvirt.pin_vcpu_for_perf(connection, hw_socket)
 
         cputune = extra_spec.get('cputune', '')
+        machine = extra_spec.get('machine_type', 'pc-i440fx-xenial')
         mac = StandaloneContextHelper.get_mac_address(0x00)
         image = cls.create_snapshot_qemu(connection, index,
                                          flavor.get("images", None))
@@ -315,7 +317,8 @@ class Libvirt(object):
             memory=memory, vcpu=vcpu, cpu=cpu,
             numa_cpus=numa_cpus,
             socket=socket, threads=threads,
-            vm_image=image, cpuset=cpuset, cputune=cputune)
+            vm_image=image, cpuset=cpuset,
+            machine=machine, cputune=cputune)
 
         # Add CD-ROM device
         vm_xml = Libvirt.add_cdrom(cdrom_img, vm_xml)
@@ -570,6 +573,8 @@ class StandaloneContextHelper(object):
         # Update image with public key
         key_filename = node.get('key_filename')
         ip_netmask = "{0}/{1}".format(node.get('ip'), node.get('netmask'))
+        ip_netmask = "{0}/{1}".format(node.get('ip'),
+                                      IPNetwork(ip_netmask).prefixlen)
         Libvirt.gen_cdrom_image(connection, cdrom_img, vm_name, user_name, key_filename, mac,
                                 ip_netmask)
         return node
index a1af3c7..42a2754 100644 (file)
@@ -24,6 +24,7 @@ from yardstick.benchmark import contexts
 from yardstick.benchmark.contexts import base
 from yardstick.benchmark.contexts.standalone import model
 from yardstick.common import exceptions
+from yardstick.common import utils as common_utils
 from yardstick.network_services import utils
 from yardstick.network_services.utils import get_nsb_option
 
@@ -143,6 +144,10 @@ class OvsDpdkContext(base.Context):
         if lcore_mask:
             lcore_mask = ovs_other_config.format("--no-wait ", "dpdk-lcore-mask='%s'" % lcore_mask)
 
+        max_idle = self.ovs_properties.get("max_idle", '')
+        if max_idle:
+            max_idle = ovs_other_config.format("", "max-idle=%s" % max_idle)
+
         cmd_list = [
             "mkdir -p /usr/local/var/run/openvswitch",
             "mkdir -p {}".format(os.path.dirname(log_path)),
@@ -153,6 +158,7 @@ class OvsDpdkContext(base.Context):
             lcore_mask,
             detach_cmd.format(vpath, ovs_sock_path, log_path),
             ovs_other_config.format("", "pmd-cpu-mask=%s" % pmd_mask),
+            max_idle,
         ]
 
         for cmd in cmd_list:
@@ -176,8 +182,10 @@ class OvsDpdkContext(base.Context):
             'ovs-vsctl add-br {0} -- set bridge {0} datapath_type=netdev'.
             format(MAIN_BRIDGE)
         ]
-        dpdk_rxq = " options:n_rxq={queue}".format(
-            queue=self.ovs_properties.get("queues", 1))
+        dpdk_rxq = ""
+        queues = self.ovs_properties.get("queues")
+        if queues:
+            dpdk_rxq = " options:n_rxq={queue}".format(queue=queues)
 
         ordered_network = collections.OrderedDict(self.networks)
         for index, vnf in enumerate(ordered_network.values()):
@@ -235,7 +243,6 @@ class OvsDpdkContext(base.Context):
 
     def check_ovs_dpdk_env(self):
         self.cleanup_ovs_dpdk_env()
-        self._check_hugepages()
 
         version = self.ovs_properties.get("version", {})
         ovs_ver = version.get("ovs", self.DEFAULT_OVS)
@@ -375,6 +382,7 @@ class OvsDpdkContext(base.Context):
 
     def _enable_interfaces(self, index, vfs, xml_str):
         vpath = self.ovs_properties.get("vpath", "/usr/local")
+        queue = self.ovs_properties.get("queues", 1)
         vf = self.networks[vfs[0]]
         port_num = vf.get('port_num', 0)
         vpci = utils.PciAddress(vf['vpci'].strip())
@@ -383,13 +391,18 @@ class OvsDpdkContext(base.Context):
         vf['vpci'] = \
             "{}:{}:{:02x}.{}".format(vpci.domain, vpci.bus, slot, vpci.function)
         return model.Libvirt.add_ovs_interface(
-            vpath, port_num, vf['vpci'], vf['mac'], xml_str)
+            vpath, port_num, vf['vpci'], vf['mac'], xml_str, queue)
 
     def setup_ovs_dpdk_context(self):
         nodes = []
 
         self.configure_nics_for_ovs_dpdk()
 
+        hp_total_mb = int(self.vm_flavor.get('ram', '4096')) * len(self.servers)
+        common_utils.setup_hugepages(self.connection, hp_total_mb * 1024)
+
+        self._check_hugepages()
+
         for index, (key, vnf) in enumerate(collections.OrderedDict(
                 self.servers).items()):
             cfg = '/tmp/vm_ovs_%d.xml' % index
index f1b67a2..e037dd8 100644 (file)
@@ -21,6 +21,7 @@ from yardstick import ssh
 from yardstick.benchmark import contexts
 from yardstick.benchmark.contexts import base
 from yardstick.benchmark.contexts.standalone import model
+from yardstick.common import utils
 from yardstick.network_services.utils import get_nsb_option
 from yardstick.network_services.utils import PciAddress
 
@@ -222,6 +223,9 @@ class SriovContext(base.Context):
         #   1 : modprobe host_driver with num_vfs
         self.configure_nics_for_sriov()
 
+        hp_total_mb = int(self.vm_flavor.get('ram', '4096')) * len(self.servers)
+        utils.setup_hugepages(self.connection, hp_total_mb * 1024)
+
         for index, (key, vnf) in enumerate(collections.OrderedDict(
                 self.servers).items()):
             cfg = '/tmp/vm_sriov_%s.xml' % str(index)
index d8f0625..5ac51cd 100644 (file)
@@ -151,6 +151,26 @@ class NetworkServiceTestCase(scenario_base.Scenario):
         return options.get('duration',
                            tprofile_base.TrafficProfileConfig.DEFAULT_DURATION)
 
+    def _key_list_to_dict(self, key, value_list):
+        value_dict = {}
+        try:
+            for index, count in enumerate(value_list[key]):
+                value_dict["{}_{}".format(key, index)] = count
+        except KeyError:
+            value_dict = {}
+
+        return value_dict
+
+    def _get_simulated_users(self):
+        users = self.scenario_cfg.get("options", {}).get("simulated_users", {})
+        simulated_users = self._key_list_to_dict("uplink", users)
+        return {"simulated_users": simulated_users}
+
+    def _get_page_object(self):
+        objects = self.scenario_cfg.get("options", {}).get("page_object", {})
+        page_object = self._key_list_to_dict("uplink", objects)
+        return {"page_object": page_object}
+
     def _fill_traffic_profile(self):
         tprofile = self._get_traffic_profile()
         extra_args = self.scenario_cfg.get('extra_args', {})
@@ -160,8 +180,9 @@ class NetworkServiceTestCase(scenario_base.Scenario):
             tprofile_base.TrafficProfile.UPLINK: {},
             tprofile_base.TrafficProfile.DOWNLINK: {},
             'extra_args': extra_args,
-            'duration': self._get_duration()}
-
+            'duration': self._get_duration(),
+            'page_object': self._get_page_object(),
+            'simulated_users': self._get_simulated_users()}
         traffic_vnfd = vnfdgen.generate_vnfd(tprofile, tprofile_data)
 
         traffic_config = \
index e4c72dc..5b8b000 100644 (file)
@@ -102,13 +102,14 @@ class StorPerf(base.Scenario):
         setup_res = requests.post('http://%s:5000/api/v1.0/configurations'
                                   % self.target, json=env_args)
 
-        setup_res_content = jsonutils.loads(
-            setup_res.content)
 
         if setup_res.status_code != 200:
-            raise RuntimeError("Failed to create a stack, error message:",
-                               setup_res_content["message"])
+            LOG.error("Failed to create stack. %s: %s",
+                      setup_res.status_code, setup_res.content)
+            raise RuntimeError("Failed to create stack. %s: %s" %
+                               (setup_res.status_code, setup_res.content))
         elif setup_res.status_code == 200:
+            setup_res_content = jsonutils.loads(setup_res.content)
             LOG.info("stack_id: %s", setup_res_content["stack_id"])
 
         while not self._query_setup_state():
@@ -122,14 +123,15 @@ class StorPerf(base.Scenario):
     def _query_job_state(self, job_id):
         """Query the status of the supplied job_id and report on metrics"""
         LOG.info("Fetching report for %s...", job_id)
-        report_res = requests.get('http://{}:5000/api/v1.0/jobs'.format
-                                  (self.target),
+        report_res = requests.get('http://%s:5000/api/v1.0/jobs' % self.target,
                                   params={'id': job_id, 'type': 'status'})
 
         report_res_content = jsonutils.loads(
             report_res.content)
 
         if report_res.status_code != 200:
+            LOG.error("Failed to fetch report, error message: %s",
+                      report_res_content["message"])
             raise RuntimeError("Failed to fetch report, error message:",
                                report_res_content["message"])
         else:
@@ -186,15 +188,15 @@ class StorPerf(base.Scenario):
 
         LOG.info("Starting a job with parameters %s", job_args)
         job_res = requests.post('http://%s:5000/api/%s/jobs' % (self.target,
-                                                                api_version),
-                                json=job_args)
-
-        job_res_content = jsonutils.loads(job_res.content)
+                                                                api_version), json=job_args)
 
         if job_res.status_code != 200:
-            raise RuntimeError("Failed to start a job, error message:",
-                               job_res_content["message"])
+            LOG.error("Failed to start job. %s: %s",
+                               job_res.status_code, job_res.content)
+            raise RuntimeError("Failed to start job. %s: %s" %
+                               (job_res.status_code, job_res.content))
         elif job_res.status_code == 200:
+            job_res_content = jsonutils.loads(job_res.content)
             job_id = job_res_content["job_id"]
             LOG.info("Started job id: %s...", job_id)
 
@@ -225,8 +227,8 @@ class StorPerf(base.Scenario):
                 LOG.info("Job %s completed with steady state %s",
                          job_id, steady_state)
 
-            result_res = requests.get('http://%s:5000/api/v1.0/jobs?'
-                                      'type=status&id=%s' % (self.target, job_id))
+            result_res = requests.get('http://%s:5000/api/v1.0/jobs?id=%s' %
+                                      (self.target, job_id))
             result_res_content = jsonutils.loads(
                 result_res.content)
             result.update(result_res_content)
@@ -247,13 +249,14 @@ class StorPerf(base.Scenario):
         job_res = requests.post('http://%s:5000/api/v1.0/initializations' %
                                 self.target, json=job_args)
 
-        job_res_content = jsonutils.loads(job_res.content)
 
         if job_res.status_code != 200:
-            raise RuntimeError(
-                "Failed to start initialization job, error message:",
-                job_res_content["message"])
+            LOG.error("Failed to start initialization job, error message: %s: %s",
+                      job_res.status_code, job_res.content)
+            raise RuntimeError("Failed to start initialization job, error message: %s: %s" %
+                               (job_res.status_code, job_res.content))
         elif job_res.status_code == 200:
+            job_res_content = jsonutils.loads(job_res.content)
             job_id = job_res_content["job_id"]
             LOG.info("Started initialization as job id: %s...", job_id)
 
@@ -271,6 +274,8 @@ class StorPerf(base.Scenario):
         if teardown_res.status_code == 400:
             teardown_res_content = jsonutils.loads(
                 teardown_res.json_data)
+            LOG.error("Failed to reset environment, error message: %s",
+                      teardown_res_content['message'])
             raise RuntimeError("Failed to reset environment, error message:",
                                teardown_res_content['message'])
 
index 31885c0..2052479 100644 (file)
@@ -499,6 +499,23 @@ def read_meminfo(ssh_client):
     return output
 
 
+def setup_hugepages(ssh_client, size_kb):
+    """Setup needed number of hugepages for the size specified"""
+
+    NR_HUGEPAGES_PATH = '/proc/sys/vm/nr_hugepages'
+    meminfo = read_meminfo(ssh_client)
+    hp_size_kb = int(meminfo['Hugepagesize'])
+    hp_number = int(abs(size_kb / hp_size_kb))
+    ssh_client.execute(
+        'echo %s | sudo tee %s' % (hp_number, NR_HUGEPAGES_PATH))
+    hp = six.BytesIO()
+    ssh_client.get_file_obj(NR_HUGEPAGES_PATH, hp)
+    hp_number_set = int(hp.getvalue().decode('utf-8').splitlines()[0])
+    logger.info('Hugepages size (kB): %s, number claimed: %s, number set: %s',
+                hp_size_kb, hp_number, hp_number_set)
+    return hp_size_kb, hp_number, hp_number_set
+
+
 def find_relative_file(path, task_path):
     """
     Find file in one of places: in abs of path or relative to a directory path,
index 0064b4f..5a186be 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -17,3 +17,4 @@ DEFAULT_VNF_TIMEOUT = 3600
 PROCESS_JOIN_TIMEOUT = 3
 ONE_GIGABIT_IN_BITS = 1000000000
 NIC_GBPS_DEFAULT = 10
+RETRY_TIMEOUT = 5
index 556682b..1f465bd 100644 (file)
@@ -69,6 +69,7 @@ class IxNextgen(object):  # pragma: no cover
 
     PORT_STATS_NAME_MAP = {
         "stat_name": 'Stat Name',
+        "port_name": 'Port Name',
         "Frames_Tx": 'Frames Tx.',
         "Valid_Frames_Rx": 'Valid Frames Rx.',
         "Frames_Tx_Rate": 'Frames Tx. Rate',
@@ -85,6 +86,18 @@ class IxNextgen(object):  # pragma: no cover
         "Store-Forward_Max_latency_ns": 'Store-Forward Max Latency (ns)',
     }
 
+    PPPOX_CLIENT_PER_PORT_NAME_MAP = {
+        'subs_port': 'Port',
+        'Sessions_Up': 'Sessions Up',
+        'Sessions_Down': 'Sessions Down',
+        'Sessions_Not_Started': 'Sessions Not Started',
+        'Sessions_Total': 'Sessions Total'
+    }
+
+    PORT_STATISTICS = '::ixNet::OBJ-/statistics/view:"Port Statistics"'
+    FLOW_STATISTICS = '::ixNet::OBJ-/statistics/view:"Flow Statistics"'
+    PPPOX_CLIENT_PER_PORT = '::ixNet::OBJ-/statistics/view:"PPPoX Client Per Port"'
+
     @staticmethod
     def get_config(tg_cfg):
         card = []
@@ -560,6 +573,8 @@ class IxNextgen(object):  # pragma: no cover
                           or ipaddress.IPV4LENGTH
                 dstmask = traffic_param['outer_l3']['dstmask'] \
                           or ipaddress.IPV4LENGTH
+                priority = traffic_param['outer_l3']['priority']
+
                 if srcip:
                     self._update_ipv4_address(
                         self._get_stack_item(fg_id, PROTO_IPV4)[0],
@@ -568,6 +583,56 @@ class IxNextgen(object):  # pragma: no cover
                     self._update_ipv4_address(
                         self._get_stack_item(fg_id, PROTO_IPV4)[0],
                         'dstIp', str(dstip), dstseed, dstmask, count)
+                if priority:
+                    self._update_ipv4_priority(
+                        self._get_stack_item(fg_id, PROTO_IPV4)[0], priority)
+
+    def _update_ipv4_priority(self, ip_descriptor, priority):
+        """Set the IPv4 priority in a config element stack IP field
+
+        :param ip_descriptor: (str) IP descriptor, e.g.:
+        /traffic/trafficItem:1/configElement:1/stack:"ipv4-2"
+        :param priority: (dict) priority configuration from traffic profile, e.g.:
+        {'tos':
+            'precedence': [1, 4, 7]
+            }
+         """
+        if 'raw' in priority:
+            priority_field = self._get_field_in_stack_item(ip_descriptor,
+                                                           'priority.raw')
+            self._set_priority_field(priority_field, priority['raw'])
+
+        elif 'dscp' in priority:
+            for field, value in priority['dscp'].items():
+                priority_field = self._get_field_in_stack_item(
+                    ip_descriptor,
+                    'priority.ds.phb.{field}.{field}'.format(field=field))
+                self._set_priority_field(priority_field, value)
+
+        elif 'tos' in priority:
+            for field, value in priority['tos'].items():
+                priority_field = self._get_field_in_stack_item(
+                    ip_descriptor, 'priority.tos.' + field)
+                self._set_priority_field(priority_field, value)
+
+    def _set_priority_field(self, field_descriptor, value):
+        """Set the priority field described by field_descriptor
+
+        :param field_descriptor: (str) field descriptor, e.g.:
+        /traffic/trafficItem:1/configElement:1/stack:"ipv4-2"/ \
+        field:"ipv4.header.priority.raw-3
+        :param value: (list, int) list of integers or single integer value
+        """
+        if isinstance(value, list):
+            self.ixnet.setMultiAttribute(field_descriptor,
+                                         '-valueList', value,
+                                         '-activeFieldChoice', 'true',
+                                         '-valueType', 'valueList')
+        else:
+            self.ixnet.setMultiAttribute(field_descriptor,
+                                         '-activeFieldChoice', 'true',
+                                         '-singleValue', str(value))
+        self.ixnet.commit()
 
     def update_l4(self, traffic):
         """Update the L4 headers
@@ -681,12 +746,30 @@ class IxNextgen(object):  # pragma: no cover
         :return: dictionary with the statistics; the keys of this dictionary
                  are PORT_STATS_NAME_MAP and LATENCY_NAME_MAP keys.
         """
-        port_statistics = '::ixNet::OBJ-/statistics/view:"Port Statistics"'
-        flow_statistics = '::ixNet::OBJ-/statistics/view:"Flow Statistics"'
-        stats = self._build_stats_map(port_statistics,
+        stats = self._build_stats_map(self.PORT_STATISTICS,
+                                      self.PORT_STATS_NAME_MAP)
+        stats.update(self._build_stats_map(self.FLOW_STATISTICS,
+                                           self.LATENCY_NAME_MAP))
+        return stats
+
+    def get_pppoe_scenario_statistics(self):
+        """Retrieve port, flow and PPPoE subscribers statistics
+
+        "Port Statistics" parameters are stored in self.PORT_STATS_NAME_MAP.
+        "Flow Statistics" parameters are stored in self.LATENCY_NAME_MAP.
+        "PPPoX Client Per Port" parameters are stored in
+        self.PPPOE_CLIENT_PER_PORT_NAME_MAP
+
+        :return: dictionary with the statistics; the keys of this dictionary
+                 are PORT_STATS_NAME_MAP, LATENCY_NAME_MAP and
+                 PPPOE_CLIENT_PER_PORT_NAME_MAP keys.
+        """
+        stats = self._build_stats_map(self.PORT_STATISTICS,
                                       self.PORT_STATS_NAME_MAP)
-        stats.update(self._build_stats_map(flow_statistics,
-                                          self.LATENCY_NAME_MAP))
+        stats.update(self._build_stats_map(self.FLOW_STATISTICS,
+                                           self.LATENCY_NAME_MAP))
+        stats.update(self._build_stats_map(self.PPPOX_CLIENT_PER_PORT,
+                                           self.PPPOX_CLIENT_PER_PORT_NAME_MAP))
         return stats
 
     def start_protocols(self):
index 7155480..4fbe796 100644 (file)
@@ -22,7 +22,7 @@ from yardstick.common import utils
 \r
 FIREWALL_ADD_DEFAULT = "p {0} firewall add default 1"\r
 FIREWALL_ADD_PRIO = """\\r
-p {0} firewall add priority 1 ipv4  {1} 24 0.0.0.0 0 0 65535 0 65535 6 0xFF port 0"""\r
+p {0} firewall add priority 1 ipv4  {1} 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0"""\r
 \r
 FLOW_ADD_QINQ_RULES = """\\r
 p {0} flow add qinq 128 512 port 0 id 1\r
index 3ccec63..c64e751 100644 (file)
@@ -16,6 +16,14 @@ import sys
 import os
 import logging
 import collections
+import subprocess
+try:
+    libs = subprocess.check_output(
+        'python -c "import site; print(site.getsitepackages())"', shell=True)
+
+    sys.path.extend(libs[1:-1].replace("'", "").split(','))
+except subprocess.CalledProcessError:
+    pass
 
 # ixload uses its own py2. So importing jsonutils fails. So adding below
 # workaround to support call from yardstick
@@ -24,7 +32,7 @@ try:
 except ImportError:
     import json as jsonutils
 
-from yardstick.common import exceptions
+from yardstick.common import exceptions #pylint: disable=wrong-import-position
 
 try:
     from IxLoad import IxLoad, StatCollectorUtils
@@ -256,6 +264,57 @@ class IXLOADHttpTest(object):
                 continue
 
             self.update_network_param(net_traffic, param["ip"])
+            if "uplink" in name:
+                self.update_http_client_param(net_traffic, param["http_client"])
+
+    def update_http_client_param(self, net_traffic, param):
+        """Update http client object in net_traffic
+
+        Update http client object in net_traffic by parameters
+        specified in param.
+        Do not return anything.
+
+        :param net_traffic: (IxLoadObjectProxy) proxy obj to tcl net_traffic object
+        :param param: (dict) http_client section from traffic profile
+        :return:
+        """
+        self.update_page_size(net_traffic, param["page_object"])
+        self.update_user_count(net_traffic, param["simulated_users"])
+
+    def update_page_size(self, net_traffic, page_object):
+        """Update page_object field in http client object in net_traffic
+
+        This function update field which configure page_object
+        which will be loaded from server
+        Do not return anything.
+
+        :param net_traffic: (IxLoadObjectProxy) proxy obj to tcl net_traffic object
+        :param page_object: (str) path to object on server e.g. "/4k.html"
+        :return:
+        """
+        try:
+            activity = net_traffic.activityList[0]
+            ix_http_command = activity.agent.actionList[0]
+            ix_http_command.config(pageObject=page_object)
+        except Exception:
+            raise exceptions.InvalidRxfFile
+
+    def update_user_count(self, net_traffic, user_count):
+        """Update userObjectiveValue field in activity object in net_traffic
+
+        This function update field which configure users count
+        which will be simulated by client.
+        Do not return anything.
+
+        :param net_traffic: (IxLoadObjectProxy) proxy obj to tcl net_traffic object
+        :param user_count: (int) number of simulated users
+        :return:
+        """
+        try:
+            activity = net_traffic.activityList[0]
+            activity.config(userObjectiveValue=user_count)
+        except Exception:
+            raise exceptions.InvalidRxfFile
 
     def start_http_test(self):
         self.ix_load = IxLoad()
index 0b7a78c..83d24a4 100644 (file)
@@ -113,6 +113,7 @@ class IXIARFC2544Profile(trex_traffic_profile.TrexProfile):
                     'dstmask': dstmask,
                     'type': key,
                     'proto': outer_l3.get('proto'),
+                    'priority': outer_l3.get('priority')
                 })
 
             outer_l4 = value.get('outer_l4')
index de4b3f9..be450c9 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@ from __future__ import absolute_import
 
 import logging
 import multiprocessing
+import time
 
 from yardstick.network_services.traffic_profile.base import TrafficProfile
 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxProfileHelper
@@ -117,6 +118,7 @@ class ProxProfile(TrafficProfile):
         try:
             pkt_size = next(self.pkt_size_iterator)
         except StopIteration:
+            time.sleep(5)
             self.done.set()
             return
 
index 321c057..8d721c0 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@ import re
 import select
 import socket
 import time
+
 from collections import OrderedDict, namedtuple
 from contextlib import contextmanager
 from itertools import repeat, chain
@@ -325,6 +326,27 @@ class ProxSocketHelper(object):
 
         return ret_str, False
 
+    def get_string(self, pkt_dump_only=False, timeout=0.01):
+
+        def is_ready_string():
+            # recv() is blocking, so avoid calling it when no data is waiting.
+            ready = select.select([self._sock], [], [], timeout)
+            return bool(ready[0])
+
+        status = False
+        ret_str = ""
+        while status is False:
+            for status in iter(is_ready_string, False):
+                decoded_data = self._sock.recv(256).decode('utf-8')
+                ret_str, done = self._parse_socket_data(decoded_data,
+                                                        pkt_dump_only)
+                if (done):
+                    status = True
+                    break
+
+        LOG.debug("Received data from socket: [%s]", ret_str)
+        return status, ret_str
+
     def get_data(self, pkt_dump_only=False, timeout=0.01):
         """ read data from the socket """
 
@@ -394,7 +416,6 @@ class ProxSocketHelper(object):
         """ stop all cores on the remote instance """
         LOG.debug("Stop all")
         self.put_command("stop all\n")
-        time.sleep(3)
 
     def stop(self, cores, task=''):
         """ stop specific cores on the remote instance """
@@ -406,7 +427,6 @@ class ProxSocketHelper(object):
 
         LOG.debug("Stopping cores %s", tmpcores)
         self.put_command("stop {} {}\n".format(join_non_strings(',', tmpcores), task))
-        time.sleep(3)
 
     def start_all(self):
         """ start all cores on the remote instance """
@@ -423,13 +443,11 @@ class ProxSocketHelper(object):
 
         LOG.debug("Starting cores %s", tmpcores)
         self.put_command("start {}\n".format(join_non_strings(',', tmpcores)))
-        time.sleep(3)
 
     def reset_stats(self):
         """ reset the statistics on the remote instance """
         LOG.debug("Reset stats")
         self.put_command("reset stats\n")
-        time.sleep(1)
 
     def _run_template_over_cores(self, template, cores, *args):
         for core in cores:
@@ -440,7 +458,6 @@ class ProxSocketHelper(object):
         LOG.debug("Set packet size for core(s) %s to %d", cores, pkt_size)
         pkt_size -= 4
         self._run_template_over_cores("pkt_size {} 0 {}\n", cores, pkt_size)
-        time.sleep(1)
 
     def set_value(self, cores, offset, value, length):
         """ set value on the remote instance """
@@ -545,49 +562,44 @@ class ProxSocketHelper(object):
         return rx, tx, drop, tsc
 
     def multi_port_stats(self, ports):
-        """get counter values from all ports port"""
-
-        ports_str = ""
-        for port in ports:
-            ports_str = ports_str + str(port) + ","
-        ports_str = ports_str[:-1]
+        """get counter values from all  ports at once"""
 
+        ports_str = ",".join(map(str, ports))
         ports_all_data = []
         tot_result = [0] * len(ports)
 
-        retry_counter = 0
         port_index = 0
-        while (len(ports) is not len(ports_all_data)) and (retry_counter < 10):
+        while (len(ports) is not len(ports_all_data)):
             self.put_command("multi port stats {}\n".format(ports_str))
-            ports_all_data = self.get_data().split(";")
+            status, ports_all_data_str = self.get_string()
+
+            if not status:
+                return False, []
+
+            ports_all_data = ports_all_data_str.split(";")
 
             if len(ports) is len(ports_all_data):
                 for port_data_str in ports_all_data:
 
+                    tmpdata = []
                     try:
-                        tot_result[port_index] = [try_int(s, 0) for s in port_data_str.split(",")]
+                        tmpdata = [try_int(s, 0) for s in port_data_str.split(",")]
                     except (IndexError, TypeError):
-                        LOG.error("Port Index error %d  %s - retrying ", port_index, port_data_str)
-
-                    if (len(tot_result[port_index]) is not 6) or \
-                                    tot_result[port_index][0] is not ports[port_index]:
-                        ports_all_data = []
-                        tot_result = [0] * len(ports)
-                        port_index = 0
-                        time.sleep(0.1)
+                        LOG.error("Unpacking data error %s", port_data_str)
+                        return False, []
+
+                    if (len(tmpdata) < 6) or tmpdata[0] not in ports:
                         LOG.error("Corrupted PACKET %s - retrying", port_data_str)
-                        break
+                        return False, []
                     else:
+                        tot_result[port_index] = tmpdata
                         port_index = port_index + 1
             else:
                 LOG.error("Empty / too much data - retry -%s-", ports_all_data)
-                ports_all_data = []
-                tot_result = [0] * len(ports)
-                port_index = 0
-                time.sleep(0.1)
+                return False, []
 
-            retry_counter = retry_counter + 1
-        return tot_result
+        LOG.debug("Multi port packet ..OK.. %s", tot_result)
+        return True, tot_result
 
     def port_stats(self, ports):
         """get counter values from a specific port"""
@@ -1070,41 +1082,70 @@ class ProxDataHelper(object):
     def totals_and_pps(self):
         if self._totals_and_pps is None:
             rx_total = tx_total = 0
-            all_ports = self.sut.multi_port_stats(range(self.port_count))
-            for port in all_ports:
-                rx_total = rx_total + port[1]
-                tx_total = tx_total + port[2]
-            requested_pps = self.value / 100.0 * self.line_rate_to_pps()
-            self._totals_and_pps = rx_total, tx_total, requested_pps
+            ok = False
+            timeout = time.time() + constants.RETRY_TIMEOUT
+            while not ok:
+                ok, all_ports = self.sut.multi_port_stats([
+                    self.vnfd_helper.port_num(port_name)
+                    for port_name in self.vnfd_helper.port_pairs.all_ports])
+                if time.time() > timeout:
+                    break
+            if ok:
+                for port in all_ports:
+                    rx_total = rx_total + port[1]
+                    tx_total = tx_total + port[2]
+                requested_pps = self.value / 100.0 * self.line_rate_to_pps()
+                self._totals_and_pps = rx_total, tx_total, requested_pps
         return self._totals_and_pps
 
     @property
     def rx_total(self):
-        return self.totals_and_pps[0]
+        try:
+            ret_val = self.totals_and_pps[0]
+        except (AttributeError, ValueError, TypeError, LookupError):
+            ret_val = 0
+        return ret_val
 
     @property
     def tx_total(self):
-        return self.totals_and_pps[1]
+        try:
+            ret_val = self.totals_and_pps[1]
+        except (AttributeError, ValueError, TypeError, LookupError):
+            ret_val = 0
+        return ret_val
 
     @property
     def requested_pps(self):
-        return self.totals_and_pps[2]
+        try:
+            ret_val = self.totals_and_pps[2]
+        except (AttributeError, ValueError, TypeError, LookupError):
+            ret_val = 0
+        return ret_val
 
     @property
     def samples(self):
         samples = {}
         ports = []
-        port_names = []
+        port_names = {}
         for port_name, port_num in self.vnfd_helper.ports_iter():
             ports.append(port_num)
-            port_names.append(port_name)
-
-        results = self.sut.multi_port_stats(ports)
-        for result in results:
-            port_num = result[0]
-            samples[port_names[port_num]] = {
-                    "in_packets": result[1],
-                    "out_packets": result[2]}
+            port_names[port_num] = port_name
+
+        ok = False
+        timeout = time.time() + constants.RETRY_TIMEOUT
+        while not ok:
+            ok, results = self.sut.multi_port_stats(ports)
+            if time.time() > timeout:
+                break
+        if ok:
+            for result in results:
+                port_num = result[0]
+                try:
+                    samples[port_names[port_num]] = {
+                        "in_packets": result[1],
+                        "out_packets": result[2]}
+                except (IndexError, KeyError):
+                    pass
         return samples
 
     def __enter__(self):
index 839f309..c3b5036 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
 import errno
 import logging
 import datetime
+import time
 
 from yardstick.common.process import check_if_process_failed
 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxDpdkVnfSetupEnvHelper
@@ -81,6 +82,8 @@ class ProxApproxVnf(SampleVNF):
                 "packets_in": 0,
                 "packets_dropped": 0,
                 "packets_fwd": 0,
+                "curr_packets_in": 0,
+                "curr_packets_fwd": 0,
                 "collect_stats": {"core": {}},
             })
             return result
@@ -97,15 +100,26 @@ class ProxApproxVnf(SampleVNF):
             raise RuntimeError("Failed ..Invalid no of ports .. "
                                "1, 2 or 4 ports only supported at this time")
 
-        all_port_stats = self.vnf_execute('multi_port_stats', range(port_count))
-        rx_total = tx_total = tsc = 0
-        try:
-            for single_port_stats in all_port_stats:
-                rx_total = rx_total + single_port_stats[1]
-                tx_total = tx_total + single_port_stats[2]
-                tsc = tsc + single_port_stats[5]
-        except (TypeError, IndexError):
-            LOG.error("Invalid data ...")
+        tmpPorts = [self.vnfd_helper.port_num(port_name)
+                    for port_name in self.vnfd_helper.port_pairs.all_ports]
+        ok = False
+        timeout = time.time() + constants.RETRY_TIMEOUT
+        while not ok:
+            ok, all_port_stats = self.vnf_execute('multi_port_stats', tmpPorts)
+            if time.time() > timeout:
+                break
+
+        if ok:
+            rx_total = tx_total = tsc = 0
+            try:
+                for single_port_stats in all_port_stats:
+                    rx_total = rx_total + single_port_stats[1]
+                    tx_total = tx_total + single_port_stats[2]
+                    tsc = tsc + single_port_stats[5]
+            except (TypeError, IndexError):
+                LOG.error("Invalid data ...")
+                return {}
+        else:
             return {}
 
         tsc = tsc / port_count
index 21719cb..673344f 100644 (file)
@@ -22,7 +22,6 @@ import uuid
 import subprocess
 import time
 
-import six
 
 from trex_stl_lib.trex_stl_client import LoggerApi
 from trex_stl_lib.trex_stl_client import STLClient
@@ -114,19 +113,6 @@ class DpdkVnfSetupEnvHelper(SetupEnvHelper):
         self.used_drivers = None
         self.dpdk_bind_helper = DpdkBindHelper(ssh_helper)
 
-    def _setup_hugepages(self):
-        meminfo = utils.read_meminfo(self.ssh_helper)
-        hp_size_kb = int(meminfo['Hugepagesize'])
-        hugepages_gb = self.scenario_helper.all_options.get('hugepages_gb', 16)
-        nr_hugepages = int(abs(hugepages_gb * 1024 * 1024 / hp_size_kb))
-        self.ssh_helper.execute('echo %s | sudo tee %s' %
-                                (nr_hugepages, self.NR_HUGEPAGES_PATH))
-        hp = six.BytesIO()
-        self.ssh_helper.get_file_obj(self.NR_HUGEPAGES_PATH, hp)
-        nr_hugepages_set = int(hp.getvalue().decode('utf-8').splitlines()[0])
-        LOG.info('Hugepages size (kB): %s, number claimed: %s, number set: %s',
-                 hp_size_kb, nr_hugepages, nr_hugepages_set)
-
     def build_config(self):
         vnf_cfg = self.scenario_helper.vnf_cfg
         task_path = self.scenario_helper.task_path
@@ -194,7 +180,7 @@ class DpdkVnfSetupEnvHelper(SetupEnvHelper):
         """No actions/rules (flows) by default"""
         return None
 
-    def _build_pipeline_kwargs(self):
+    def _build_pipeline_kwargs(self, cfg_file=None):
         tool_path = self.ssh_helper.provision_tool(tool_file=self.APP_NAME)
         # count the number of actual ports in the list of pairs
         # remove duplicate ports
@@ -214,7 +200,7 @@ class DpdkVnfSetupEnvHelper(SetupEnvHelper):
             hwlb = ' --hwlb %s' % worker_threads
 
         self.pipeline_kwargs = {
-            'cfg_file': self.CFG_CONFIG,
+            'cfg_file': cfg_file if cfg_file else self.CFG_CONFIG,
             'script': self.CFG_SCRIPT,
             'port_mask_hex': ports_mask_hex,
             'tool_path': tool_path,
@@ -239,7 +225,8 @@ class DpdkVnfSetupEnvHelper(SetupEnvHelper):
 
     def _setup_dpdk(self):
         """Setup DPDK environment needed for VNF to run"""
-        self._setup_hugepages()
+        hugepages_gb = self.scenario_helper.all_options.get('hugepages_gb', 16)
+        utils.setup_hugepages(self.ssh_helper, hugepages_gb * 1024 * 1024)
         self.dpdk_bind_helper.load_dpdk_driver()
 
         exit_status = self.dpdk_bind_helper.check_dpdk_driver()
index b7cf8b3..349ef78 100644 (file)
@@ -17,13 +17,11 @@ from __future__ import absolute_import
 from __future__ import print_function
 
 
-import os
 import logging
 import re
 import posixpath
 
-from six.moves import configparser, zip
-
+from yardstick.common import utils
 from yardstick.common.process import check_if_process_failed
 from yardstick.network_services.helpers.samplevnf_helper import PortPairs
 from yardstick.network_services.pipeline import PipelineRules
@@ -43,15 +41,6 @@ Pkts in:\\s(\\d+)\r\n\
 
 class ConfigCreate(object):
 
-    @staticmethod
-    def vpe_tmq(config, index):
-        tm_q = 'TM{0}'.format(index)
-        config.add_section(tm_q)
-        config.set(tm_q, 'burst_read', '24')
-        config.set(tm_q, 'burst_write', '32')
-        config.set(tm_q, 'cfg', '/tmp/full_tm_profile_10G.cfg')
-        return config
-
     def __init__(self, vnfd_helper, socket):
         super(ConfigCreate, self).__init__()
         self.sw_q = -1
@@ -64,141 +53,6 @@ class ConfigCreate(object):
         self.socket = socket
         self._dpdk_port_to_link_id_map = None
 
-    @property
-    def dpdk_port_to_link_id_map(self):
-        # we need interface name -> DPDK port num (PMD ID) -> LINK ID
-        # LINK ID -> PMD ID is governed by the port mask
-        # LINK instances are created implicitly based on the PORT_MASK application startup
-        # argument. LINK0 is the first port enabled in the PORT_MASK, port 1 is the next one,
-        # etc. The LINK ID is different than the DPDK PMD-level NIC port ID, which is the actual
-        #  position in the bitmask mentioned above. For example, if bit 5 is the first bit set
-        # in the bitmask, then LINK0 is having the PMD ID of 5. This mechanism creates a
-        # contiguous LINK ID space and isolates the configuration file against changes in the
-        # board PCIe slots where NICs are plugged in.
-        if self._dpdk_port_to_link_id_map is None:
-            self._dpdk_port_to_link_id_map = {}
-            for link_id, port_name in enumerate(sorted(self.vnfd_helper.port_pairs.all_ports,
-                                                       key=self.vnfd_helper.port_num)):
-                self._dpdk_port_to_link_id_map[port_name] = link_id
-        return self._dpdk_port_to_link_id_map
-
-    def vpe_initialize(self, config):
-        config.add_section('EAL')
-        config.set('EAL', 'log_level', '0')
-
-        config.add_section('PIPELINE0')
-        config.set('PIPELINE0', 'type', 'MASTER')
-        config.set('PIPELINE0', 'core', 's%sC0' % self.socket)
-
-        config.add_section('MEMPOOL0')
-        config.set('MEMPOOL0', 'pool_size', '256K')
-
-        config.add_section('MEMPOOL1')
-        config.set('MEMPOOL1', 'pool_size', '2M')
-        return config
-
-    def vpe_rxq(self, config):
-        for port in self.downlink_ports:
-            new_section = 'RXQ{0}.0'.format(self.dpdk_port_to_link_id_map[port])
-            config.add_section(new_section)
-            config.set(new_section, 'mempool', 'MEMPOOL1')
-
-        return config
-
-    def get_sink_swq(self, parser, pipeline, k, index):
-        sink = ""
-        pktq = parser.get(pipeline, k)
-        if "SINK" in pktq:
-            self.sink_q += 1
-            sink = " SINK{0}".format(self.sink_q)
-        if "TM" in pktq:
-            sink = " TM{0}".format(index)
-        pktq = "SWQ{0}{1}".format(self.sw_q, sink)
-        return pktq
-
-    def vpe_upstream(self, vnf_cfg, index=0):  # pragma: no cover
-        # NOTE(ralonsoh): this function must be covered in UTs.
-        parser = configparser.ConfigParser()
-        parser.read(os.path.join(vnf_cfg, 'vpe_upstream'))
-
-        for pipeline in parser.sections():
-            for k, v in parser.items(pipeline):
-                if k == "pktq_in":
-                    if "RXQ" in v:
-                        port = self.dpdk_port_to_link_id_map[self.uplink_ports[index]]
-                        value = "RXQ{0}.0".format(port)
-                    else:
-                        value = self.get_sink_swq(parser, pipeline, k, index)
-
-                    parser.set(pipeline, k, value)
-
-                elif k == "pktq_out":
-                    if "TXQ" in v:
-                        port = self.dpdk_port_to_link_id_map[self.downlink_ports[index]]
-                        value = "TXQ{0}.0".format(port)
-                    else:
-                        self.sw_q += 1
-                        value = self.get_sink_swq(parser, pipeline, k, index)
-
-                    parser.set(pipeline, k, value)
-
-            new_pipeline = 'PIPELINE{0}'.format(self.n_pipeline)
-            if new_pipeline != pipeline:
-                parser._sections[new_pipeline] = parser._sections[pipeline]
-                parser._sections.pop(pipeline)
-            self.n_pipeline += 1
-        return parser
-
-    def vpe_downstream(self, vnf_cfg, index):  # pragma: no cover
-        # NOTE(ralonsoh): this function must be covered in UTs.
-        parser = configparser.ConfigParser()
-        parser.read(os.path.join(vnf_cfg, 'vpe_downstream'))
-        for pipeline in parser.sections():
-            for k, v in parser.items(pipeline):
-
-                if k == "pktq_in":
-                    port = self.dpdk_port_to_link_id_map[self.downlink_ports[index]]
-                    if "RXQ" not in v:
-                        value = self.get_sink_swq(parser, pipeline, k, index)
-                    elif "TM" in v:
-                        value = "RXQ{0}.0 TM{1}".format(port, index)
-                    else:
-                        value = "RXQ{0}.0".format(port)
-
-                    parser.set(pipeline, k, value)
-
-                if k == "pktq_out":
-                    port = self.dpdk_port_to_link_id_map[self.uplink_ports[index]]
-                    if "TXQ" not in v:
-                        self.sw_q += 1
-                        value = self.get_sink_swq(parser, pipeline, k, index)
-                    elif "TM" in v:
-                        value = "TXQ{0}.0 TM{1}".format(port, index)
-                    else:
-                        value = "TXQ{0}.0".format(port)
-
-                    parser.set(pipeline, k, value)
-
-            new_pipeline = 'PIPELINE{0}'.format(self.n_pipeline)
-            if new_pipeline != pipeline:
-                parser._sections[new_pipeline] = parser._sections[pipeline]
-                parser._sections.pop(pipeline)
-            self.n_pipeline += 1
-        return parser
-
-    def create_vpe_config(self, vnf_cfg):
-        config = configparser.ConfigParser()
-        vpe_cfg = os.path.join("/tmp/vpe_config")
-        with open(vpe_cfg, 'w') as cfg_file:
-            config = self.vpe_initialize(config)
-            config = self.vpe_rxq(config)
-            config.write(cfg_file)
-            for index, _ in enumerate(self.uplink_ports):
-                config = self.vpe_upstream(vnf_cfg, index)
-                config.write(cfg_file)
-                config = self.vpe_downstream(vnf_cfg, index)
-                config = self.vpe_tmq(config, index)
-                config.write(cfg_file)
 
     def generate_vpe_script(self, interfaces):
         rules = PipelineRules(pipeline_id=1)
@@ -231,16 +85,10 @@ class ConfigCreate(object):
 
         return rules.get_string()
 
-    def generate_tm_cfg(self, vnf_cfg):
-        vnf_cfg = os.path.join(vnf_cfg, "full_tm_profile_10G.cfg")
-        if os.path.exists(vnf_cfg):
-            return open(vnf_cfg).read()
-
 
 class VpeApproxSetupEnvHelper(DpdkVnfSetupEnvHelper):
 
     APP_NAME = 'vPE_vnf'
-    CFG_CONFIG = "/tmp/vpe_config"
     CFG_SCRIPT = "/tmp/vpe_script"
     TM_CONFIG = "/tmp/full_tm_profile_10G.cfg"
     CORES = ['0', '1', '2', '3', '4', '5']
@@ -253,33 +101,44 @@ class VpeApproxSetupEnvHelper(DpdkVnfSetupEnvHelper):
         self.all_ports = self._port_pairs.all_ports
 
     def build_config(self):
+        vnf_cfg = self.scenario_helper.vnf_cfg
+        task_path = self.scenario_helper.task_path
+        action_bulk_file = vnf_cfg.get('action_bulk_file', '/tmp/action_bulk_512.txt')
+        full_tm_profile_file = vnf_cfg.get('full_tm_profile_file', '/tmp/full_tm_profile_10G.cfg')
+        config_file = vnf_cfg.get('file', '/tmp/vpe_config')
         vpe_vars = {
             "bin_path": self.ssh_helper.bin_path,
             "socket": self.socket,
         }
-
         self._build_vnf_ports()
         vpe_conf = ConfigCreate(self.vnfd_helper, self.socket)
-        vpe_conf.create_vpe_config(self.scenario_helper.vnf_cfg)
 
-        config_basename = posixpath.basename(self.CFG_CONFIG)
+        config_basename = posixpath.basename(config_file)
         script_basename = posixpath.basename(self.CFG_SCRIPT)
-        tm_basename = posixpath.basename(self.TM_CONFIG)
-        with open(self.CFG_CONFIG) as handle:
-            vpe_config = handle.read()
 
-        self.ssh_helper.upload_config_file(config_basename, vpe_config.format(**vpe_vars))
+        with utils.open_relative_file(action_bulk_file, task_path) as handle:
+            action_bulk = handle.read()
 
+        with utils.open_relative_file(full_tm_profile_file, task_path) as handle:
+            full_tm_profile = handle.read()
+
+        with utils.open_relative_file(config_file, task_path) as handle:
+            vpe_config = handle.read()
+
+        # vpe_script needs to be autogenerated
         vpe_script = vpe_conf.generate_vpe_script(self.vnfd_helper.interfaces)
+        # upload the 4 config files to the target server
+        self.ssh_helper.upload_config_file(config_basename, vpe_config.format(**vpe_vars))
         self.ssh_helper.upload_config_file(script_basename, vpe_script.format(**vpe_vars))
-
-        tm_config = vpe_conf.generate_tm_cfg(self.scenario_helper.vnf_cfg)
-        self.ssh_helper.upload_config_file(tm_basename, tm_config)
+        self.ssh_helper.upload_config_file(posixpath.basename(action_bulk_file),
+                                           action_bulk.format(**vpe_vars))
+        self.ssh_helper.upload_config_file(posixpath.basename(full_tm_profile_file),
+                                           full_tm_profile.format(**vpe_vars))
 
         LOG.info("Provision and start the %s", self.APP_NAME)
-        LOG.info(self.CFG_CONFIG)
+        LOG.info(config_file)
         LOG.info(self.CFG_SCRIPT)
-        self._build_pipeline_kwargs()
+        self._build_pipeline_kwargs(cfg_file='/tmp/' + config_basename)
         return self.PIPELINE_COMMAND.format(**self.pipeline_kwargs)
 
 
index 98d2b18..e76a3ca 100644 (file)
@@ -17,6 +17,7 @@ import os
 import uuid
 
 import mock
+import netaddr
 import unittest
 from xml.etree import ElementTree
 
@@ -54,7 +55,7 @@ class ModelLibvirtTestCase(unittest.TestCase):
         numa_cpus=0 - 10,
         socket=1, threads=1,
         vm_image="/var/lib/libvirt/images/yardstick-nsb-image.img",
-        cpuset=2 - 10, cputune='')
+        cpuset=2 - 10, cputune='', machine='pc')
 
     def setUp(self):
         self.pci_address_str = '0001:04:03.2'
@@ -123,7 +124,7 @@ class ModelLibvirtTestCase(unittest.TestCase):
     def test_add_ovs_interfaces(self):
         xml_input = copy.deepcopy(XML_SAMPLE)
         xml_output = model.Libvirt.add_ovs_interface(
-            '/usr/local', 0, self.pci_address_str, self.mac, xml_input)
+            '/usr/local', 0, self.pci_address_str, self.mac, xml_input, 4)
 
         root = ElementTree.fromstring(xml_output)
         et_out = ElementTree.ElementTree(element=root)
@@ -292,6 +293,7 @@ class ModelLibvirtTestCase(unittest.TestCase):
         hostname = root.find('name').text
         mac = "00:11:22:33:44:55"
         ip = "{0}/{1}".format(node.get('ip'), node.get('netmask'))
+        ip = "{0}/{1}".format(node.get('ip'), netaddr.IPNetwork(ip).prefixlen)
         model.StandaloneContextHelper.check_update_key(self.mock_ssh, node, hostname, id_name,
                                                        cdrom_img, mac)
         mock_gen_cdrom_image.assert_called_once_with(self.mock_ssh, cdrom_img, hostname,
@@ -350,7 +352,8 @@ class ModelLibvirtTestCase(unittest.TestCase):
         xml_ref = model.VM_TEMPLATE.format(vm_name='vm_name',
             random_uuid=_uuid, mac_addr=mac, memory='1024', vcpu='8', cpu='4',
             numa_cpus='0-7', socket='3', threads='2',
-            vm_image='qemu_image', cpuset='4,5', cputune='cool')
+            vm_image='qemu_image', cpuset='4,5', cputune='cool',
+            machine='pc-i440fx-xenial')
         xml_ref = model.Libvirt.add_cdrom(cdrom_img, xml_ref)
         self.assertEqual(xml_out, xml_ref)
         mock_get_mac_address.assert_called_once_with(0x00)
index 6cc8b11..190e83d 100644 (file)
@@ -24,6 +24,7 @@ from yardstick.benchmark.contexts import base
 from yardstick.benchmark.contexts.standalone import model
 from yardstick.benchmark.contexts.standalone import ovs_dpdk
 from yardstick.common import exceptions
+from yardstick.common import utils as common_utils
 from yardstick.network_services import utils
 
 
@@ -171,11 +172,9 @@ class OvsDpdkContextTestCase(unittest.TestCase):
        self.ovs_dpdk.wait_for_vswitchd = 0
        self.assertIsNone(self.ovs_dpdk.cleanup_ovs_dpdk_env())
 
-    @mock.patch.object(ovs_dpdk.OvsDpdkContext, '_check_hugepages')
     @mock.patch.object(utils, 'get_nsb_option')
     @mock.patch.object(model.OvsDeploy, 'ovs_deploy')
-    def test_check_ovs_dpdk_env(self, mock_ovs_deploy, mock_get_nsb_option,
-                                mock_check_hugepages):
+    def test_check_ovs_dpdk_env(self, mock_ovs_deploy, mock_get_nsb_option):
         self.ovs_dpdk.connection = mock.Mock()
         self.ovs_dpdk.connection.execute = mock.Mock(
             return_value=(1, 0, 0))
@@ -189,11 +188,9 @@ class OvsDpdkContextTestCase(unittest.TestCase):
 
         self.ovs_dpdk.check_ovs_dpdk_env()
         mock_ovs_deploy.assert_called_once()
-        mock_check_hugepages.assert_called_once()
         mock_get_nsb_option.assert_called_once_with('bin_path')
 
-    @mock.patch.object(ovs_dpdk.OvsDpdkContext, '_check_hugepages')
-    def test_check_ovs_dpdk_env_wrong_version(self, mock_check_hugepages):
+    def test_check_ovs_dpdk_env_wrong_version(self):
         self.ovs_dpdk.connection = mock.Mock()
         self.ovs_dpdk.connection.execute = mock.Mock(
             return_value=(1, 0, 0))
@@ -206,7 +203,6 @@ class OvsDpdkContextTestCase(unittest.TestCase):
 
         with self.assertRaises(exceptions.OVSUnsupportedVersion):
             self.ovs_dpdk.check_ovs_dpdk_env()
-        mock_check_hugepages.assert_called_once()
 
     @mock.patch('yardstick.ssh.SSH')
     def test_deploy(self, *args):
@@ -389,15 +385,20 @@ class OvsDpdkContextTestCase(unittest.TestCase):
         self.ovs_dpdk._enable_interfaces(0, ["private_0"], 'test')
         mock_add_ovs_interface.assert_called_once_with(
             'fake_path', 0, self.NETWORKS['private_0']['vpci'],
-            self.NETWORKS['private_0']['mac'], 'test')
+            self.NETWORKS['private_0']['mac'], 'test', 1)
 
+    @mock.patch.object(ovs_dpdk.OvsDpdkContext, '_check_hugepages')
+    @mock.patch.object(common_utils, 'setup_hugepages')
     @mock.patch.object(model.StandaloneContextHelper, 'check_update_key')
     @mock.patch.object(model.Libvirt, 'write_file')
     @mock.patch.object(model.Libvirt, 'build_vm_xml')
     @mock.patch.object(model.Libvirt, 'check_if_vm_exists_and_delete')
     @mock.patch.object(model.Libvirt, 'virsh_create_vm')
-    def test_setup_ovs_dpdk_context(self, mock_create_vm, mock_check_if_exists, mock_build_xml,
-                                    mock_write_file, mock_check_update_key):
+    def test_setup_ovs_dpdk_context(self, mock_create_vm, mock_check_if_exists,
+                                    mock_build_xml, mock_write_file,
+                                    mock_check_update_key,
+                                    mock_setup_hugepages,
+                                    mock__check_hugepages):
         self.ovs_dpdk.vm_deploy = True
         self.ovs_dpdk.connection = mock.Mock()
         self.ovs_dpdk.vm_names = ['vm-0', 'vm-1']
@@ -413,7 +414,7 @@ class OvsDpdkContextTestCase(unittest.TestCase):
         }
         self.ovs_dpdk.networks = self.NETWORKS
         self.ovs_dpdk.host_mgmt = {}
-        self.ovs_dpdk.flavor = {}
+        self.ovs_dpdk.vm_flavor = {'ram': '1024'}
         self.ovs_dpdk.file_path = '/var/lib/libvirt/images/cdrom-0.img'
         self.ovs_dpdk.configure_nics_for_ovs_dpdk = mock.Mock(return_value="")
         self.ovs_dpdk._name_task_id = 'fake_name'
@@ -429,6 +430,8 @@ class OvsDpdkContextTestCase(unittest.TestCase):
 
         self.assertEqual([vnf_instance_2],
                          self.ovs_dpdk.setup_ovs_dpdk_context())
+        mock_setup_hugepages.assert_called_once_with(self.ovs_dpdk.connection, 1024 * 1024)
+        mock__check_hugepages.assert_called_once()
         mock_create_vm.assert_called_once_with(
             self.ovs_dpdk.connection, '/tmp/vm_ovs_0.xml')
         mock_check_if_exists.assert_called_once_with(
index 316aca7..0809a98 100644 (file)
@@ -22,6 +22,7 @@ from yardstick.benchmark import contexts
 from yardstick.benchmark.contexts import base
 from yardstick.benchmark.contexts.standalone import model
 from yardstick.benchmark.contexts.standalone import sriov
+from yardstick.common import utils
 
 
 class SriovContextTestCase(unittest.TestCase):
@@ -276,13 +277,15 @@ class SriovContextTestCase(unittest.TestCase):
         mock_add_sriov.assert_called_once_with(
             '0000:00:0a.0', 0, self.NETWORKS['private_0']['mac'], 'test')
 
+    @mock.patch.object(utils, 'setup_hugepages')
     @mock.patch.object(model.StandaloneContextHelper, 'check_update_key')
     @mock.patch.object(model.Libvirt, 'build_vm_xml')
     @mock.patch.object(model.Libvirt, 'check_if_vm_exists_and_delete')
     @mock.patch.object(model.Libvirt, 'write_file')
     @mock.patch.object(model.Libvirt, 'virsh_create_vm')
-    def test_setup_sriov_context(self, mock_create_vm, mock_write_file, mock_check,
-                                 mock_build_vm_xml, mock_check_update_key):
+    def test_setup_sriov_context(self, mock_create_vm, mock_write_file,
+                                 mock_check, mock_build_vm_xml,
+                                 mock_check_update_key, mock_setup_hugepages):
         self.sriov.servers = {
             'vnf_0': {
                 'network_ports': {
@@ -295,7 +298,7 @@ class SriovContextTestCase(unittest.TestCase):
         connection = mock.Mock()
         self.sriov.connection = connection
         self.sriov.host_mgmt = {'ip': '1.2.3.4'}
-        self.sriov.vm_flavor = 'flavor'
+        self.sriov.vm_flavor = {'ram': '1024'}
         self.sriov.networks = 'networks'
         self.sriov.configure_nics_for_sriov = mock.Mock()
         self.sriov._name_task_id = 'fake_name'
@@ -314,15 +317,16 @@ class SriovContextTestCase(unittest.TestCase):
             mock_vnf_node.generate_vnf_instance = mock.Mock(
                 return_value='node_1')
             nodes_out = self.sriov.setup_sriov_context()
+        mock_setup_hugepages.assert_called_once_with(connection, 1024*1024)
         mock_check_update_key.assert_called_once_with(connection, 'node_1', vm_name,
                                                       self.sriov._name_task_id, cdrom_img,
                                                       mac)
         self.assertEqual(['node_2'], nodes_out)
         mock_vnf_node.generate_vnf_instance.assert_called_once_with(
-            'flavor', 'networks', '1.2.3.4', 'vnf_0',
+            self.sriov.vm_flavor, 'networks', '1.2.3.4', 'vnf_0',
             self.sriov.servers['vnf_0'], '00:00:00:00:00:01')
         mock_build_vm_xml.assert_called_once_with(
-            connection, 'flavor', vm_name, 0, cdrom_img)
+            connection, self.sriov.vm_flavor, vm_name, 0, cdrom_img)
         mock_create_vm.assert_called_once_with(connection, cfg)
         mock_check.assert_called_once_with(vm_name, connection)
         mock_write_file.assert_called_once_with(cfg, 'out_xml')
index 90248d1..8214782 100644 (file)
@@ -325,6 +325,8 @@ class TestNetworkServiceTestCase(unittest.TestCase):
                 },
             },
             'options': {
+                'simulated_users': {'uplink': [1, 2]},
+                'page_object': {'uplink': [1, 2]},
                 'framesize': {'64B': 100}
             },
             'runner': {
@@ -620,6 +622,20 @@ class TestNetworkServiceTestCase(unittest.TestCase):
             with self.assertRaises(IOError):
                 self.s._get_traffic_profile()
 
+    def test__key_list_to_dict(self):
+        result = self.s._key_list_to_dict("uplink", {"uplink": [1, 2]})
+        self.assertEqual({"uplink_0": 1, "uplink_1": 2}, result)
+
+    def test__get_simulated_users(self):
+        result = self.s._get_simulated_users()
+        self.assertEqual({'simulated_users': {'uplink_0': 1, 'uplink_1': 2}},
+                         result)
+
+    def test__get_page_object(self):
+        result = self.s._get_page_object()
+        self.assertEqual({'page_object': {'uplink_0': 1, 'uplink_1': 2}},
+                         result)
+
     def test___get_traffic_imix_exception(self):
         with mock.patch.dict(self.scenario_cfg["traffic_options"], {'imix': ''}):
             self.assertEqual({'imix': {'64B': 100}},
@@ -642,7 +658,11 @@ class TestNetworkServiceTestCase(unittest.TestCase):
                  'flow': {'flow': {}},
                  'imix': {'imix': {'64B': 100}},
                  'uplink': {},
-                 'duration': 30}
+                 'duration': 30,
+                 'simulated_users': {
+                     'simulated_users': {'uplink_0': 1, 'uplink_1': 2}},
+                 'page_object': {
+                     'page_object': {'uplink_0': 1, 'uplink_1': 2}},}
             )
             mock_tprofile_get.assert_called_once_with(fake_vnfd)
 
index 3cf6c4d..c0c9289 100644 (file)
@@ -1407,3 +1407,20 @@ class SafeCaseTestCase(unittest.TestCase):
 
     def test_default_value(self):
         self.assertEqual(0, utils.safe_cast('', 'int', 0))
+
+
+class SetupHugepagesTestCase(unittest.TestCase):
+
+    @mock.patch.object(six, 'BytesIO', return_value=six.BytesIO(b'5\n'))
+    @mock.patch.object(utils, 'read_meminfo',
+                       return_value={'Hugepagesize': '1024'})
+    def test_setup_hugepages(self, mock_meminfo, *args):
+        ssh = mock.Mock()
+        ssh.execute = mock.Mock()
+        hp_size_kb, hp_number, hp_number_set = utils.setup_hugepages(ssh, 10 * 1024)
+        mock_meminfo.assert_called_once_with(ssh)
+        ssh.execute.assert_called_once_with(
+            'echo 10 | sudo tee /proc/sys/vm/nr_hugepages')
+        self.assertEqual(hp_size_kb, 1024)
+        self.assertEqual(hp_number, 10)
+        self.assertEqual(hp_number_set, 5)
index c80cbbe..5e2578b 100644 (file)
@@ -46,7 +46,8 @@ TRAFFIC_PARAMETERS = {
             'dstip': '152.16.40.20',
             'srcip': '152.16.100.20',
             'dstmask': 24,
-            'srcmask': 24
+            'srcmask': 24,
+            'priority': {'raw': '0x01'}
         },
         'outer_l4': {
             'seed': 1,
@@ -78,7 +79,8 @@ TRAFFIC_PARAMETERS = {
             'dstip': '2001::10',
             'srcip': '2021::10',
             'dstmask': 64,
-            'srcmask': 64
+            'srcmask': 64,
+            'priority': {'raw': '0x01'}
         },
         'outer_l4': {
             'seed': 1,
@@ -582,15 +584,15 @@ class TestIxNextgen(unittest.TestCase):
                 self.ixnet_gen.update_frame(TRAFFIC_PARAMETERS, 40)
 
     def test_get_statistics(self):
-        port_statistics = '::ixNet::OBJ-/statistics/view:"Port Statistics"'
-        flow_statistics = '::ixNet::OBJ-/statistics/view:"Flow Statistics"'
         with mock.patch.object(self.ixnet_gen, '_build_stats_map') as \
                 mock_build_stats:
             self.ixnet_gen.get_statistics()
 
         mock_build_stats.assert_has_calls([
-            mock.call(port_statistics, self.ixnet_gen.PORT_STATS_NAME_MAP),
-            mock.call(flow_statistics, self.ixnet_gen.LATENCY_NAME_MAP)])
+            mock.call(self.ixnet_gen.PORT_STATISTICS,
+                      self.ixnet_gen.PORT_STATS_NAME_MAP),
+            mock.call(self.ixnet_gen.FLOW_STATISTICS,
+                      self.ixnet_gen.LATENCY_NAME_MAP)])
 
     def test__set_flow_tracking(self):
         self.ixnet_gen._ixnet.getList.return_value = ['traffic_item']
@@ -612,6 +614,18 @@ class TestIxNextgen(unittest.TestCase):
             'encapsulation', '-offset', 'IPv4 TOS Precedence')
         self.assertEqual(self.ixnet.commit.call_count, 2)
 
+    def test_get_pppoe_scenario_statistics(self):
+        with mock.patch.object(self.ixnet_gen, '_build_stats_map') as \
+                mock_build_stats:
+            self.ixnet_gen.get_pppoe_scenario_statistics()
+
+        mock_build_stats.assert_any_call(self.ixnet_gen.PORT_STATISTICS,
+                                         self.ixnet_gen.PORT_STATS_NAME_MAP)
+        mock_build_stats.assert_any_call(self.ixnet_gen.FLOW_STATISTICS,
+                                         self.ixnet_gen.LATENCY_NAME_MAP)
+        mock_build_stats.assert_any_call(self.ixnet_gen.PPPOX_CLIENT_PER_PORT,
+                                         self.ixnet_gen.PPPOX_CLIENT_PER_PORT_NAME_MAP)
+
     def test__update_ipv4_address(self):
         with mock.patch.object(self.ixnet_gen, '_get_field_in_stack_item',
                                return_value='field_desc'):
@@ -622,6 +636,62 @@ class TestIxNextgen(unittest.TestCase):
             '-randomMask', '0.0.0.63', '-valueType', 'random',
             '-countValue', 25)
 
+    def test__update_ipv4_priority_raw(self):
+        priority = {'raw': '0x01'}
+        self.ixnet_gen._set_priority_field = mock.Mock()
+        with mock.patch.object(self.ixnet_gen, '_get_field_in_stack_item',
+                               return_value='field_desc'):
+            self.ixnet_gen._update_ipv4_priority('field_desc', priority)
+
+        self.ixnet_gen._set_priority_field.assert_called_once_with(
+            'field_desc', priority['raw'])
+
+    def test__update_ipv4_priority_dscp(self):
+        priority = {'dscp': {'defaultPHB': [0, 1, 2, 3]}}
+        self.ixnet_gen._set_priority_field = mock.Mock()
+        with mock.patch.object(self.ixnet_gen, '_get_field_in_stack_item',
+                               return_value='field_desc'):
+            self.ixnet_gen._update_ipv4_priority('field_desc', priority)
+
+        self.ixnet_gen._set_priority_field.assert_called_once_with(
+            'field_desc', priority['dscp']['defaultPHB'])
+
+    def test__update_ipv4_priority_tos(self):
+        priority = {'tos': {'precedence': [0, 4, 7]}}
+        self.ixnet_gen._set_priority_field = mock.Mock()
+        with mock.patch.object(self.ixnet_gen, '_get_field_in_stack_item',
+                               return_value='field_desc'):
+            self.ixnet_gen._update_ipv4_priority('field_desc', priority)
+
+        self.ixnet_gen._set_priority_field.assert_called_once_with(
+            'field_desc', priority['tos']['precedence'])
+
+    def test__update_ipv4_priority_wrong_priority_type(self):
+        priority = {'test': [0, 4, 7]}
+        self.ixnet_gen._set_priority_field = mock.Mock()
+        with mock.patch.object(self.ixnet_gen, '_get_field_in_stack_item',
+                               return_value='field_desc'):
+            self.ixnet_gen._update_ipv4_priority('field_desc', priority)
+
+        self.assertEqual(self.ixnet_gen._set_priority_field.call_count, 0)
+
+    def test__set_priority_field_list_value(self):
+        value = [1, 4, 7]
+        self.ixnet_gen._set_priority_field('field_desc', value)
+        self.ixnet_gen.ixnet.setMultiAttribute.assert_called_once_with(
+            'field_desc',
+            '-valueList', [1, 4, 7],
+            '-activeFieldChoice', 'true',
+            '-valueType', 'valueList')
+
+    def test__set_priority_field_single_value(self):
+        value = 7
+        self.ixnet_gen._set_priority_field('field_desc', value)
+        self.ixnet_gen.ixnet.setMultiAttribute.assert_called_once_with(
+            'field_desc',
+            '-activeFieldChoice', 'true',
+            '-singleValue', '7')
+
     def test__update_udp_port(self):
         with mock.patch.object(self.ixnet_gen, '_get_field_in_stack_item',
                                return_value='field_desc'):
@@ -642,10 +712,13 @@ class TestIxNextgen(unittest.TestCase):
                 mock_update_add, \
                 mock.patch.object(self.ixnet_gen, '_get_stack_item'), \
                 mock.patch.object(self.ixnet_gen,
-                '_get_config_element_by_flow_group_name', return_value='celm'):
+                '_get_config_element_by_flow_group_name', return_value='celm'), \
+                mock.patch.object(self.ixnet_gen, '_update_ipv4_priority') as \
+                        mock_update_priority:
             self.ixnet_gen.update_ip_packet(TRAFFIC_PARAMETERS)
 
         self.assertEqual(4, len(mock_update_add.mock_calls))
+        self.assertEqual(2, len(mock_update_priority.mock_calls))
 
     def test_update_ip_packet_exception_no_config_element(self):
         with mock.patch.object(self.ixnet_gen,
index 1adab48..c9be200 100644 (file)
@@ -249,16 +249,20 @@ class TestIxLoadTrafficGen(unittest.TestCase):
         ixload = http_ixload.IXLOADHttpTest(
             jsonutils.dump_as_bytes(self.test_input))
 
-        ixload.links_param = {"uplink_0": {"ip": {}}}
+        ixload.links_param = {"uplink_0": {"ip": {},
+                                           "http_client": {}}}
 
         ixload.test = mock.Mock()
         ixload.test.communityList = community_list
 
         ixload.update_network_param = mock.Mock()
+        ixload.update_http_client_param = mock.Mock()
 
         ixload.update_config()
 
         ixload.update_network_param.assert_called_once_with(net_taraffic_0, {})
+        ixload.update_http_client_param.assert_called_once_with(net_taraffic_0,
+                                                                {})
 
     def test_update_network_mac_address(self):
         ethernet = mock.MagicMock()
@@ -338,6 +342,57 @@ class TestIxLoadTrafficGen(unittest.TestCase):
             net_traffic,
             "mac")
 
+    def test_update_http_client_param(self):
+        net_traffic = mock.Mock()
+
+        ixload = http_ixload.IXLOADHttpTest(
+            jsonutils.dump_as_bytes(self.test_input))
+
+        ixload.update_page_size = mock.Mock()
+        ixload.update_user_count = mock.Mock()
+
+        param = {"page_object": "page_object",
+                 "simulated_users": "simulated_users"}
+
+        ixload.update_http_client_param(net_traffic, param)
+
+        ixload.update_page_size.assert_called_once_with(net_traffic,
+                                                        "page_object")
+        ixload.update_user_count.assert_called_once_with(net_traffic,
+                                                         "simulated_users")
+
+    def test_update_page_size(self):
+        activity = mock.MagicMock()
+        net_traffic = mock.Mock()
+
+        ixload = http_ixload.IXLOADHttpTest(
+            jsonutils.dump_as_bytes(self.test_input))
+
+        net_traffic.activityList = [activity]
+        ix_http_command = activity.agent.actionList[0]
+        ixload.update_page_size(net_traffic, "page_object")
+        ix_http_command.config.assert_called_once_with(
+            pageObject="page_object")
+
+        net_traffic.activityList = []
+        with self.assertRaises(exceptions.InvalidRxfFile):
+            ixload.update_page_size(net_traffic, "page_object")
+
+    def test_update_user_count(self):
+        activity = mock.MagicMock()
+        net_traffic = mock.Mock()
+
+        ixload = http_ixload.IXLOADHttpTest(
+            jsonutils.dump_as_bytes(self.test_input))
+
+        net_traffic.activityList = [activity]
+        ixload.update_user_count(net_traffic, 123)
+        activity.config.assert_called_once_with(userObjectiveValue=123)
+
+        net_traffic.activityList = []
+        with self.assertRaises(exceptions.InvalidRxfFile):
+            ixload.update_user_count(net_traffic, 123)
+
     @mock.patch('yardstick.network_services.traffic_profile.http_ixload.IxLoad')
     @mock.patch('yardstick.network_services.traffic_profile.http_ixload.StatCollectorUtils')
     def test_start_http_test(self, *args):
index 3d6ebb2..894b16e 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017 Intel Corporation
+# Copyright (c) 2016-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -320,7 +320,8 @@ class TestProxSocketHelper(unittest.TestCase):
         self.assertEqual(len(prox._pkt_dumps), 0)
 
         mock_select.select.reset_mock()
-        mock_select.select.side_effect = chain([['a'], ['']], repeat([1], 3))
+        mock_select.select.side_effect = chain([['a'], ['']],
+                                               repeat([1], 3))
         mock_recv.decode.return_value = PACKET_DUMP_1
         ret = prox.get_data()
         self.assertEqual(mock_select.select.call_count, 2)
@@ -328,13 +329,54 @@ class TestProxSocketHelper(unittest.TestCase):
         self.assertEqual(len(prox._pkt_dumps), 1)
 
         mock_select.select.reset_mock()
-        mock_select.select.side_effect = chain([[object()], [None]], repeat([1], 3))
+        mock_select.select.side_effect = chain([[object()], [None]],
+                                               repeat([1], 3))
         mock_recv.decode.return_value = PACKET_DUMP_2
         ret = prox.get_data()
         self.assertEqual(mock_select.select.call_count, 1)
         self.assertEqual(ret, 'jumped over')
         self.assertEqual(len(prox._pkt_dumps), 3)
 
+    @mock.patch.object(prox_helpers, 'select')
+    def test_get_string(self, mock_select):
+        mock_select.select.side_effect = [[1], [0]]
+        mock_socket = mock.MagicMock()
+        mock_recv = mock_socket.recv()
+        mock_recv.decode.return_value = ""
+        prox = prox_helpers.ProxSocketHelper(mock_socket)
+        status, ret = prox.get_string()
+        self.assertEqual(ret, "")
+        self.assertTrue(status)
+        self.assertEqual(len(prox._pkt_dumps), 0)
+
+    @mock.patch.object(prox_helpers, 'select')
+    def test_get_string2(self, mock_select):
+        mock_select.select.side_effect = chain([['a'], ['']],
+                                               repeat([1], 3))
+        mock_socket = mock.MagicMock()
+        mock_recv = mock_socket.recv()
+        mock_recv.decode.return_value = PACKET_DUMP_1
+        prox = prox_helpers.ProxSocketHelper(mock_socket)
+        status, ret = prox.get_string()
+        self.assertEqual(mock_select.select.call_count, 2)
+        self.assertEqual(ret, 'pktdump,3,11')
+        self.assertTrue(status)
+        self.assertEqual(len(prox._pkt_dumps), 1)
+
+    @mock.patch.object(prox_helpers, 'select')
+    def test_get_string3(self, mock_select):
+        mock_select.select.side_effect = chain([[object()], [None]],
+                                               repeat([1], 3))
+        mock_socket = mock.MagicMock()
+        mock_recv = mock_socket.recv()
+        mock_recv.decode.return_value = PACKET_DUMP_2
+        prox = prox_helpers.ProxSocketHelper(mock_socket)
+        status, ret = prox.get_string()
+        self.assertTrue(status)
+        self.assertTrue(mock_select.select.assert_called_once)
+        self.assertEqual(ret, 'jumped over')
+        self.assertEqual(len(prox._pkt_dumps), 2)
+
     def test__parse_socket_data_mixed_data(self):
         prox = prox_helpers.ProxSocketHelper(mock.MagicMock())
         ret, _ = prox._parse_socket_data(PACKET_DUMP_NON_1, False)
@@ -551,26 +593,60 @@ class TestProxSocketHelper(unittest.TestCase):
     def test_multi_port_stats(self, *args):
         mock_socket = mock.MagicMock()
         prox = prox_helpers.ProxSocketHelper(mock_socket)
-        prox.get_data = mock.MagicMock(return_value='0,1,2,3,4,5;1,1,2,3,4,5')
+        prox.get_string = mock.MagicMock(return_value=(True, '0,1,2,3,4,5;1,1,2,3,4,5'))
         expected = [[0, 1, 2, 3, 4, 5], [1, 1, 2, 3, 4, 5]]
-        result = prox.multi_port_stats([0, 1])
+        status, result = prox.multi_port_stats([0, 1])
         self.assertEqual(result, expected)
-
-        prox.get_data = mock.MagicMock(return_value='0,1,2,3,4,5;1,1,2,3,4,5')
-        result = prox.multi_port_stats([0])
-        expected = [0]
-        self.assertEqual(result, expected)
-
-        prox.get_data = mock.MagicMock(return_value='0,1,2,3;1,1,2,3,4,5')
-        result = prox.multi_port_stats([0, 1])
-        expected = [0] * 2
-        self.assertEqual(result, expected)
-
-        prox.get_data = mock.MagicMock(return_value='99,1,2,3,4,5;1,1,2,3,4,5')
-        expected = [0] * 2
-        result = prox.multi_port_stats([0, 1])
+        self.assertEqual(status, True)
+
+        prox.get_string = mock.MagicMock(
+            return_value=(True, '0,1,2,3,4,5;1,1,2,3,4,5'))
+        status, result = prox.multi_port_stats([0])
+        self.assertEqual(status, False)
+
+        prox.get_string = mock.MagicMock(
+            return_value=(True, '0,1,2,3,4,5;1,1,2,3,4,5'))
+        status, result = prox.multi_port_stats([0, 1, 2])
+        self.assertEqual(status, False)
+
+        prox.get_string = mock.MagicMock(
+            return_value=(True, '0,1,2,3;1,1,2,3,4,5'))
+        status, result = prox.multi_port_stats([0, 1])
+        self.assertEqual(status, False)
+
+        prox.get_string = mock.MagicMock(
+            return_value=(True, '99,1,2,3,4,5;1,1,2,3,4,5'))
+        status, result = prox.multi_port_stats([0, 1])
+        self.assertEqual(status, False)
+
+        prox.get_string = mock.MagicMock(
+            return_value=(True, '99,1,2,3,4,5;1,1,2,3,4,5'))
+        status, result = prox.multi_port_stats([99, 1])
+        expected = [[99, 1, 2, 3, 4, 5], [1, 1, 2, 3, 4, 5]]
+        self.assertEqual(status, True)
         self.assertEqual(result, expected)
 
+        prox.get_string = mock.MagicMock(
+            return_value=(True,
+                          '2,21,22,23,24,25;1,11,12,13,14,15;0,1,2,3,4,5'))
+
+        sample1 = [0, 1, 2, 3, 4, 5]
+        sample2 = [1, 11, 12, 13, 14, 15]
+        sample3 = [2, 21, 22, 23, 24, 25]
+        expected = [sample3, sample2, sample1]
+        status, result = prox.multi_port_stats([1, 2, 0])
+        self.assertTrue(status)
+        self.assertListEqual(result, expected)
+
+        prox.get_string = mock.MagicMock(
+            return_value=(True, '6,21,22,23,24,25;1,11,12,13,14,15;0,1,2,3,4,5'))
+        ok, result = prox.multi_port_stats([1, 6, 0])
+        sample1 = [6, 21, 22, 23, 24, 25]
+        sample2 = [1, 11, 12, 13, 14, 15]
+        sample3 = [0, 1, 2, 3, 4, 5]
+        expected = [sample1, sample2, sample3]
+        self.assertListEqual(result, expected)
+        self.assertTrue(ok)
 
     def test_port_stats(self):
         port_stats = [
@@ -1584,8 +1660,9 @@ class TestProxDataHelper(unittest.TestCase):
         vnfd_helper.port_pairs.all_ports = list(range(4))
 
         sut = mock.MagicMock()
-        sut.multi_port_stats.return_value = [[0, 1, 2, 3, 4, 5], [1, 1, 2, 3, 4, 5],
-                                             [2, 1, 2, 3, 4, 5], [3, 1, 2, 3, 4, 5]]
+        sut.multi_port_stats.return_value = (True,
+                                             [[0, 1, 2, 3, 4, 5], [1, 1, 2, 3, 4, 5],
+                                              [2, 1, 2, 3, 4, 5], [3, 1, 2, 3, 4, 5]])
 
         data_helper = prox_helpers.ProxDataHelper(
             vnfd_helper, sut, pkt_size, 25, None,
@@ -1593,14 +1670,77 @@ class TestProxDataHelper(unittest.TestCase):
 
         self.assertEqual(data_helper.rx_total, 4)
         self.assertEqual(data_helper.tx_total, 8)
-        self.assertEqual(data_helper.requested_pps, 6.25e6)
+        self.assertEqual(data_helper.requested_pps, 6250000.0)
+
+        vnfd_helper = mock.MagicMock()
+        vnfd_helper.port_pairs.all_ports = [3, 4]
+
+        sut = mock.MagicMock()
+        sut.multi_port_stats.return_value = (True,
+                                             [[3, 1, 2, 3, 4, 5], [4, 1, 2, 3, 4, 5]])
+
+        data_helper = prox_helpers.ProxDataHelper(
+            vnfd_helper, sut, pkt_size, 25, None,
+            constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS)
+
+        self.assertEqual(data_helper.rx_total, 2)
+        self.assertEqual(data_helper.tx_total, 4)
+        self.assertEqual(data_helper.requested_pps, 3125000.0)
+
+        vnfd_helper = mock.MagicMock()
+        vnfd_helper.port_pairs.all_ports = [0, 1, 2, 3, 4, 6, 7]
+
+        sut = mock.MagicMock()
+        sut.multi_port_stats.return_value = (True,
+                                             [[8, 1, 2, 3, 4, 5], [9, 1, 2, 3, 4, 5]])
+
+        data_helper = prox_helpers.ProxDataHelper(
+            vnfd_helper, sut, pkt_size, 25, None,
+            constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS)
+
+        self.assertEqual(data_helper.rx_total, 2)
+        self.assertEqual(data_helper.tx_total, 4)
+        self.assertEqual(data_helper.requested_pps, 10937500.0)
+
+        vnfd_helper = mock.MagicMock()
+        vnfd_helper.port_pairs.all_ports = []
+
+        sut = mock.MagicMock()
+        sut.multi_port_stats.return_value = (True,
+                                             [[8, 1, 2, 3, 4, 5], [9, 1, 2, 3, 4, 5]])
+
+        data_helper = prox_helpers.ProxDataHelper(
+            vnfd_helper, sut, pkt_size, 25, None,
+            constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS)
+
+        self.assertEqual(data_helper.rx_total, 2)
+        self.assertEqual(data_helper.tx_total, 4)
+        self.assertEqual(data_helper.requested_pps, 0.0)
+
+    def test_totals_and_pps2(self):
+        pkt_size = 180
+        vnfd_helper = mock.MagicMock()
+        vnfd_helper.port_pairs.all_ports = list(range(4))
+
+        sut = mock.MagicMock()
+        sut.multi_port_stats.return_value = (True,
+                                             [[0, 'A', 2, 3, 4, 5], [1, 'B', 'C', 3, 4, 5],
+                                              ['D', 1, 2, 3, 4, 5], [3, 1, 2, 3, 4, 'F']])
+
+        data_helper = prox_helpers.ProxDataHelper(
+            vnfd_helper, sut, pkt_size, 25, None,
+            constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS)
+
+        self.assertEqual(data_helper.rx_total, 0)
+        self.assertEqual(data_helper.tx_total, 0)
+        self.assertEqual(data_helper.requested_pps, 0)
 
     def test_samples(self):
         vnfd_helper = mock.MagicMock()
         vnfd_helper.ports_iter.return_value = [('xe0', 0), ('xe1', 1)]
 
         sut = mock.MagicMock()
-        sut.multi_port_stats.return_value = [[0, 1, 2, 3, 4, 5], [1, 11, 12, 3, 4, 5]]
+        sut.multi_port_stats.return_value = (True, [[0, 1, 2, 3, 4, 5], [1, 11, 12, 3, 4, 5]])
 
         data_helper = prox_helpers.ProxDataHelper(
             vnfd_helper, sut, None, None, None, None)
@@ -1618,13 +1758,35 @@ class TestProxDataHelper(unittest.TestCase):
         result = data_helper.samples
         self.assertDictEqual(result, expected)
 
+    def test_samples2(self):
+        vnfd_helper = mock.MagicMock()
+        vnfd_helper.ports_iter.return_value = [('xe1', 3), ('xe2', 7)]
+
+        sut = mock.MagicMock()
+        sut.multi_port_stats.return_value = (True, [[3, 1, 2, 3, 4, 5], [7, 11, 12, 3, 4, 5]])
+
+        data_helper = prox_helpers.ProxDataHelper(
+            vnfd_helper, sut, None, None, None, None)
+
+        expected = {
+            'xe1': {
+                'in_packets': 1,
+                'out_packets': 2,
+            },
+            'xe2': {
+                'in_packets': 11,
+                'out_packets': 12,
+            },
+        }
+        result = data_helper.samples
+        self.assertDictEqual(result, expected)
+
     def test___enter__(self):
         vnfd_helper = mock.MagicMock()
         vnfd_helper.port_pairs.all_ports = list(range(4))
         vnfd_helper.ports_iter.return_value = [('xe1', 3), ('xe2', 7)]
 
         sut = mock.MagicMock()
-        sut.port_stats.return_value = list(range(10))
 
         data_helper = prox_helpers.ProxDataHelper(vnfd_helper, sut, None, None,
             5.4, constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS)
@@ -1978,7 +2140,6 @@ class TestProxProfileHelper(unittest.TestCase):
 
         client = mock.MagicMock()
         client.hz.return_value = 2
-        client.port_stats.return_value = tuple(range(12))
 
         helper.client = client
         helper.get_latency = mock.MagicMock(return_value=[3.3, 3.6, 3.8])
@@ -1988,18 +2149,20 @@ class TestProxProfileHelper(unittest.TestCase):
         with helper.traffic_context(64, 1):
             pass
 
-    @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
-    def test_run_test(self, _):
+    def test_run_test(self, *args):
         resource_helper = mock.MagicMock()
         resource_helper.step_delta = 0.4
         resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2))
-        resource_helper.sut.port_stats.return_value = list(range(10))
+        resource_helper.sut.multi_port_stats.return_value = (True, [[0, 1, 1, 2, 4, 5],
+                                                                    [1, 1, 2, 3, 4, 5]])
 
         helper = prox_helpers.ProxProfileHelper(resource_helper)
 
-        helper.run_test(120, 5, 6.5,
-                        constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS)
-
+        helper.run_test(pkt_size=120, duration=5, value=6.5, tolerated_loss=0.0,
+                        line_speed=constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS)
+        self.assertTrue(resource_helper.sut.multi_port_stats.called)
+        self.assertTrue(resource_helper.sut.stop_all.called)
+        self.assertTrue(resource_helper.sut.reset_stats.called)
 
 class TestProxMplsProfileHelper(unittest.TestCase):
 
@@ -2135,22 +2298,30 @@ class TestProxBngProfileHelper(unittest.TestCase):
         self.assertEqual(helper.arp_task_cores, expected_arp_task)
         self.assertEqual(helper._cores_tuple, expected_combined)
 
-    @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
-    def test_run_test(self, _):
+    def test_run_test(self, *args):
         resource_helper = mock.MagicMock()
         resource_helper.step_delta = 0.4
         resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2))
-        resource_helper.sut.port_stats.return_value = list(range(10))
+        resource_helper.sut.multi_port_stats.return_value = (True, [[0, 1, 1, 2, 4, 5],
+                                                                    [1, 1, 2, 3, 4, 5]])
 
         helper = prox_helpers.ProxBngProfileHelper(resource_helper)
 
-        helper.run_test(120, 5, 6.5,
-                        constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS)
+        helper.run_test(pkt_size=120, duration=5, value=6.5, tolerated_loss=0.0,
+                        line_speed=constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS)
+        self.assertTrue(resource_helper.sut.multi_port_stats.called)
+        self.assertTrue(resource_helper.sut.stop_all.called)
+        self.assertTrue(resource_helper.sut.reset_stats.called)
+
+        resource_helper.reset_mock()
 
         # negative pkt_size is the only way to make ratio > 1
-        helper.run_test(-1000, 5, 6.5,
-                        constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS)
+        helper.run_test(pkt_size=-1000, duration=5, value=6.5, tolerated_loss=0.0,
+                        line_speed=constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS)
 
+        self.assertTrue(resource_helper.sut.multi_port_stats.called)
+        self.assertTrue(resource_helper.sut.stop_all.called)
+        self.assertTrue(resource_helper.sut.reset_stats.called)
 
 class TestProxVpeProfileHelper(unittest.TestCase):
 
@@ -2253,18 +2424,21 @@ class TestProxVpeProfileHelper(unittest.TestCase):
         self.assertEqual(helper.inet_ports, expected_inet)
         self.assertEqual(helper._ports_tuple, expected_combined)
 
-    @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
-    def test_run_test(self, _):
+    def test_run_test(self, *args):
         resource_helper = mock.MagicMock()
         resource_helper.step_delta = 0.4
         resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2))
-        resource_helper.sut.port_stats.return_value = list(range(10))
+        resource_helper.sut.multi_port_stats.return_value = (True, [[0, 1, 1, 2, 4, 5],
+                                                                    [1, 1, 2, 3, 4, 5]])
 
         helper = prox_helpers.ProxVpeProfileHelper(resource_helper)
 
-        helper.run_test(120, 5, 6.5)
-        helper.run_test(-1000, 5, 6.5)  # negative pkt_size is the only way to make ratio > 1
+        helper.run_test(pkt_size=120, duration=5, value=6.5, tolerated_loss=0.0,
+                        line_speed=constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS)
 
+        # negative pkt_size is the only way to make ratio > 1
+        helper.run_test(pkt_size=-1000, duration=5, value=6.5, tolerated_loss=0.0,
+                        line_speed=constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS)
 
 class TestProxlwAFTRProfileHelper(unittest.TestCase):
 
@@ -2367,14 +2541,18 @@ class TestProxlwAFTRProfileHelper(unittest.TestCase):
         self.assertEqual(helper.inet_ports, expected_inet)
         self.assertEqual(helper._ports_tuple, expected_combined)
 
-    @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
-    def test_run_test(self, _):
+    def test_run_test(self, *args):
         resource_helper = mock.MagicMock()
         resource_helper.step_delta = 0.4
         resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2))
-        resource_helper.sut.port_stats.return_value = list(range(10))
+        resource_helper.sut.multi_port_stats.return_value = (True, [[0, 1, 2, 4, 6, 5],
+                                                                    [1, 1, 2, 3, 4, 5]])
 
         helper = prox_helpers.ProxlwAFTRProfileHelper(resource_helper)
 
-        helper.run_test(120, 5, 6.5)
-        helper.run_test(-1000, 5, 6.5)  # negative pkt_size is the only way to make ratio > 1
+        helper.run_test(pkt_size=120, duration=5, value=6.5, tolerated_loss=0.0,
+                        line_speed=constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS)
+
+        # negative pkt_size is the only way to make ratio > 1
+        helper.run_test(pkt_size=-1000, duration=5, value=6.5, tolerated_loss=0.0,
+                        line_speed=constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS)
index f144e8c..62cbea0 100644 (file)
@@ -335,6 +335,8 @@ class TestProxApproxVnf(unittest.TestCase):
             'packets_in': 0,
             'packets_dropped': 0,
             'packets_fwd': 0,
+            'curr_packets_in': 0,
+            'curr_packets_fwd': 0,
             'collect_stats': {'core': {}}
         }
         result = prox_approx_vnf.collect_kpi()
@@ -346,8 +348,8 @@ class TestProxApproxVnf(unittest.TestCase):
         mock_ssh(ssh)
 
         resource_helper = mock.MagicMock()
-        resource_helper.execute.return_value = [[0, 1, 2, 3, 4, 5], [1, 1, 2, 3, 4, 5],
-                                                [2, 1, 2, 3, 4, 5], [3, 1, 2, 3, 4, 5]]
+        resource_helper.execute.return_value = (True,
+                                                [[0, 1, 2, 3, 4, 5], [1, 1, 2, 3, 4, 5]])
         resource_helper.collect_collectd_kpi.return_value = {'core': {'result': 234}}
 
         prox_approx_vnf = prox_vnf.ProxApproxVnf(NAME, self.VNFD0, 'task_id')
@@ -355,20 +357,61 @@ class TestProxApproxVnf(unittest.TestCase):
             'nodes': {prox_approx_vnf.name: "mock"}
         }
         prox_approx_vnf.resource_helper = resource_helper
+        prox_approx_vnf.tsc_hz = 1000
 
         expected = {
+            'curr_packets_in': 200,
+            'curr_packets_fwd': 400,
             'physical_node': 'mock_node',
-            'packets_in': 4,
-            'packets_dropped': 4,
-            'packets_fwd': 8,
+            'packets_in': 2,
+            'packets_dropped': 2,
+            'packets_fwd': 4,
             'collect_stats': {'core': {'result': 234}},
         }
         result = prox_approx_vnf.collect_kpi()
         self.assertEqual(result['packets_in'], expected['packets_in'])
         self.assertEqual(result['packets_dropped'], expected['packets_dropped'])
         self.assertEqual(result['packets_fwd'], expected['packets_fwd'])
-        self.assertNotEqual(result['packets_fwd'], 0)
-        self.assertNotEqual(result['packets_fwd'], 0)
+        self.assertEqual(result['curr_packets_in'], expected['curr_packets_in'])
+        self.assertEqual(result['curr_packets_fwd'], expected['curr_packets_fwd'])
+
+    @mock.patch.object(ctx_base.Context, 'get_physical_node_from_server', return_value='mock_node')
+    @mock.patch(SSH_HELPER)
+    def test_collect_kpi_bad_input(self, ssh, *args):
+        mock_ssh(ssh)
+
+        resource_helper = mock.MagicMock()
+        resource_helper.execute.return_value = (True,
+                                                [[0, 'A', 'B', 'C', 'D', 'E'],
+                                                 ['F', 1, 2, 3, 4, 5]])
+
+        prox_approx_vnf = prox_vnf.ProxApproxVnf(NAME, self.VNFD0, 'task_id')
+        prox_approx_vnf.scenario_helper.scenario_cfg = {
+            'nodes': {prox_approx_vnf.name: "mock"}
+        }
+        prox_approx_vnf.resource_helper = resource_helper
+
+        result = prox_approx_vnf.collect_kpi()
+        self.assertDictEqual(result, {})
+
+    @mock.patch.object(ctx_base.Context, 'get_physical_node_from_server', return_value='mock_node')
+    @mock.patch(SSH_HELPER)
+    def test_collect_kpi_bad_input2(self, ssh, *args):
+        mock_ssh(ssh)
+
+        resource_helper = mock.MagicMock()
+        resource_helper.execute.return_value = (False,
+                                                [[0, 'A', 'B', 'C', 'D', 'E'],
+                                                 ['F', 1, 2, 3, 4, 5]])
+
+        prox_approx_vnf = prox_vnf.ProxApproxVnf(NAME, self.VNFD0, 'task_id')
+        prox_approx_vnf.scenario_helper.scenario_cfg = {
+            'nodes': {prox_approx_vnf.name: "mock"}
+        }
+        prox_approx_vnf.resource_helper = resource_helper
+
+        result = prox_approx_vnf.collect_kpi()
+        self.assertDictEqual(result, {})
 
     @mock.patch.object(ctx_base.Context, 'get_physical_node_from_server', return_value='mock_node')
     @mock.patch(SSH_HELPER)
index c9d42fb..43682dd 100644 (file)
@@ -16,7 +16,6 @@ from copy import deepcopy
 
 import unittest
 import mock
-import six
 
 from yardstick.common import exceptions as y_exceptions
 from yardstick.common import utils
@@ -521,38 +520,6 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
         result = DpdkVnfSetupEnvHelper._update_traffic_type(ip_pipeline_cfg, traffic_options)
         self.assertEqual(result, expected)
 
-    @mock.patch.object(six, 'BytesIO', return_value=six.BytesIO(b'100\n'))
-    @mock.patch.object(utils, 'read_meminfo',
-                       return_value={'Hugepagesize': '2048'})
-    def test__setup_hugepages_no_hugepages_defined(self, mock_meminfo, *args):
-        ssh_helper = mock.Mock()
-        scenario_helper = mock.Mock()
-        scenario_helper.all_options = {}
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(
-            mock.ANY, ssh_helper, scenario_helper)
-        with mock.patch.object(sample_vnf.LOG, 'info') as mock_info:
-            dpdk_setup_helper._setup_hugepages()
-            mock_info.assert_called_once_with(
-                'Hugepages size (kB): %s, number claimed: %s, number set: '
-                '%s', 2048, 8192, 100)
-        mock_meminfo.assert_called_once_with(ssh_helper)
-
-    @mock.patch.object(six, 'BytesIO', return_value=six.BytesIO(b'100\n'))
-    @mock.patch.object(utils, 'read_meminfo',
-                       return_value={'Hugepagesize': '1048576'})
-    def test__setup_hugepages_8gb_hugepages_defined(self, mock_meminfo, *args):
-        ssh_helper = mock.Mock()
-        scenario_helper = mock.Mock()
-        scenario_helper.all_options = {'hugepages_gb': 8}
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(
-            mock.ANY, ssh_helper, scenario_helper)
-        with mock.patch.object(sample_vnf.LOG, 'info') as mock_info:
-            dpdk_setup_helper._setup_hugepages()
-            mock_info.assert_called_once_with(
-                'Hugepages size (kB): %s, number claimed: %s, number set: '
-                '%s', 1048576, 8, 100)
-        mock_meminfo.assert_called_once_with(ssh_helper)
-
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.open')
     @mock.patch.object(utils, 'find_relative_file')
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.MultiPortConfig')
@@ -638,15 +605,17 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
                 dpdk_vnf_setup_env_helper.setup_vnf_environment(),
                 ResourceProfile)
 
-    def test__setup_dpdk(self):
+    @mock.patch.object(utils, 'setup_hugepages')
+    def test__setup_dpdk(self, mock_setup_hugepages):
         ssh_helper = mock.Mock()
         ssh_helper.execute = mock.Mock()
         ssh_helper.execute.return_value = (0, 0, 0)
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(mock.ANY, ssh_helper, mock.ANY)
-        with mock.patch.object(dpdk_setup_helper, '_setup_hugepages') as \
-                mock_setup_hp:
-            dpdk_setup_helper._setup_dpdk()
-        mock_setup_hp.assert_called_once()
+        scenario_helper = mock.Mock()
+        scenario_helper.all_options = {'hugepages_gb': 8}
+        dpdk_setup_helper = DpdkVnfSetupEnvHelper(mock.ANY, ssh_helper,
+                                                  scenario_helper)
+        dpdk_setup_helper._setup_dpdk()
+        mock_setup_hugepages.assert_called_once_with(ssh_helper, 8*1024*1024)
         ssh_helper.execute.assert_has_calls([
             mock.call('sudo modprobe uio && sudo modprobe igb_uio'),
             mock.call('lsmod | grep -i igb_uio')
index ec0e6aa..741201f 100644 (file)
@@ -205,8 +205,8 @@ class TestIXIATrafficGen(unittest.TestCase):
             vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
             ixnet_traffic_gen = tg_rfc2544_ixia.IxiaTrafficGen(NAME, vnfd,
                                                                'task_id')
-            scenario_cfg = {'tc': "nsb_test_case", "topology": "",
-                            'ixia_profile': "ixload.cfg"}
+            scenario_cfg = {'tc': "nsb_test_case",
+                            "topology": ""}
             scenario_cfg.update(
                 {
                     'options': {
@@ -379,7 +379,6 @@ class TestIXIATrafficGen(unittest.TestCase):
                     },
                 },
             },
-            'ixia_profile': '/path/to/profile',
             'task_path': '/path/to/task'
         }
 
index 7b937df..8d49cb3 100644 (file)
@@ -16,7 +16,6 @@ from multiprocessing import Process, Queue
 import time
 
 import mock
-from six.moves import configparser
 import unittest
 
 from yardstick.benchmark.contexts import base as ctx_base
@@ -147,48 +146,6 @@ class TestConfigCreate(unittest.TestCase):
         self.assertEqual(config_create.downlink_ports, ['xe1'])
         self.assertEqual(config_create.socket, 2)
 
-    def test_dpdk_port_to_link_id(self):
-        vnfd_helper = vnf_base.VnfdHelper(self.VNFD_0)
-        config_create = vpe_vnf.ConfigCreate(vnfd_helper, 2)
-        self.assertEqual(config_create.dpdk_port_to_link_id_map, {'xe0': 0, 'xe1': 1})
-
-    def test_vpe_initialize(self):
-        vnfd_helper = vnf_base.VnfdHelper(self.VNFD_0)
-        config_create = vpe_vnf.ConfigCreate(vnfd_helper, 2)
-        config = configparser.ConfigParser()
-        config_create.vpe_initialize(config)
-        self.assertEqual(config.get('EAL', 'log_level'), '0')
-        self.assertEqual(config.get('PIPELINE0', 'type'), 'MASTER')
-        self.assertEqual(config.get('PIPELINE0', 'core'), 's2C0')
-        self.assertEqual(config.get('MEMPOOL0', 'pool_size'), '256K')
-        self.assertEqual(config.get('MEMPOOL1', 'pool_size'), '2M')
-
-    def test_vpe_rxq(self):
-        vnfd_helper = vnf_base.VnfdHelper(self.VNFD_0)
-        config_create = vpe_vnf.ConfigCreate(vnfd_helper, 2)
-        config = configparser.ConfigParser()
-        config_create.downlink_ports = ['xe0']
-        config_create.vpe_rxq(config)
-        self.assertEqual(config.get('RXQ0.0', 'mempool'), 'MEMPOOL1')
-
-    def test_get_sink_swq(self):
-        vnfd_helper = vnf_base.VnfdHelper(self.VNFD_0)
-        config_create = vpe_vnf.ConfigCreate(vnfd_helper, 2)
-        config = configparser.ConfigParser()
-        config.add_section('PIPELINE0')
-        config.set('PIPELINE0', 'key1', 'value1')
-        config.set('PIPELINE0', 'key2', 'value2 SINK')
-        config.set('PIPELINE0', 'key3', 'TM value3')
-        config.set('PIPELINE0', 'key4', 'value4')
-        config.set('PIPELINE0', 'key5', 'the SINK value5')
-
-        self.assertEqual(config_create.get_sink_swq(config, 'PIPELINE0', 'key1', 5), 'SWQ-1')
-        self.assertEqual(config_create.get_sink_swq(config, 'PIPELINE0', 'key2', 5), 'SWQ-1 SINK0')
-        self.assertEqual(config_create.get_sink_swq(config, 'PIPELINE0', 'key3', 5), 'SWQ-1 TM5')
-        config_create.sw_q += 1
-        self.assertEqual(config_create.get_sink_swq(config, 'PIPELINE0', 'key4', 5), 'SWQ0')
-        self.assertEqual(config_create.get_sink_swq(config, 'PIPELINE0', 'key5', 5), 'SWQ0 SINK1')
-
     def test_generate_vpe_script(self):
         vnfd_helper = vnf_base.VnfdHelper(self.VNFD_0)
         vpe_config_vnf = vpe_vnf.ConfigCreate(vnfd_helper, 2)
@@ -214,36 +171,6 @@ class TestConfigCreate(unittest.TestCase):
         self.assertIsInstance(result, str)
         self.assertNotEqual(result, '')
 
-    def test_create_vpe_config(self):
-        vnfd_helper = vnf_base.VnfdHelper(self.VNFD_0)
-        config_create = vpe_vnf.ConfigCreate(vnfd_helper, 23)
-        config_create.uplink_ports = ['xe1']
-        with mock.patch.object(config_create, 'vpe_upstream') as mock_up, \
-                mock.patch.object(config_create, 'vpe_downstream') as \
-                mock_down, \
-                mock.patch.object(config_create, 'vpe_tmq') as mock_tmq, \
-                mock.patch.object(config_create, 'vpe_initialize') as \
-                mock_ini, \
-                mock.patch.object(config_create, 'vpe_rxq') as mock_rxq:
-            mock_ini_obj = mock.Mock()
-            mock_rxq_obj = mock.Mock()
-            mock_up_obj = mock.Mock()
-            mock_down_obj = mock.Mock()
-            mock_tmq_obj = mock.Mock()
-            mock_ini.return_value = mock_ini_obj
-            mock_rxq.return_value = mock_rxq_obj
-            mock_up.return_value = mock_up_obj
-            mock_down.return_value = mock_down_obj
-            mock_tmq.return_value = mock_tmq_obj
-            config_create.create_vpe_config('fake_config_file')
-
-        mock_rxq.assert_called_once_with(mock_ini_obj)
-        mock_up.assert_called_once_with('fake_config_file', 0)
-        mock_down.assert_called_once_with('fake_config_file', 0)
-        mock_tmq.assert_called_once_with(mock_down_obj, 0)
-        mock_up_obj.write.assert_called_once()
-        mock_tmq_obj.write.assert_called_once()
-
 
 class TestVpeApproxVnf(unittest.TestCase):