diff options
25 files changed, 449 insertions, 374 deletions
diff --git a/ansible/install_trex_standalone.yml b/ansible/install_trex_standalone.yml deleted file mode 100644 index 9cf64142b..000000000 --- a/ansible/install_trex_standalone.yml +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright (c) 2017 Intel Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. ---- -- hosts: yardstick - vars: - ansible_python_interpreter: "/usr/bin/env python" - # needed for virtualenv - NSB_INSTALL_DIR: /root/nsb_install - INSTALL_BIN_PATH: /opt/nsb_bin - #TREX_DOWNLOAD: "https://trex-tgn.cisco.com/trex/release/v2.05.tar.gz" - TREX_VERSION: v2.20 - TREX_DOWNLOAD: "https://trex-tgn.cisco.com/trex/release/{{ TREX_VERSION }}.tar.gz" - - tasks: - - get_url: - url: "{{ TREX_DOWNLOAD }}" - dest: "{{ NSB_INSTALL_DIR }}" - checksum: "sha256:b9620341e552d2ef71d5ffa39ef92f12a1186836c250390db77bd7228497b91c" - - - unarchive: - src: "{{ NSB_INSTALL_DIR }}/{{ TREX_DOWNLOAD|basename }}" - dest: "{{ NSB_INSTALL_DIR }}" - copy: no - - - file: path="{{ INSTALL_BIN_PATH }}/trex" state=absent - - file: path="{{ INSTALL_BIN_PATH }}/trex" state=directory - - - command: mv "{{ NSB_INSTALL_DIR }}/{{ TREX_DOWNLOAD|basename|regex_replace('\.tar.gz', '') }}" "{{ INSTALL_BIN_PATH }}/trex/scripts" - - - file: path="{{ INSTALL_BIN_PATH }}/trex/scripts/automation/trex_control_plane/stl/__init__.py" state=touch - - - command: cp "{{ INSTALL_BIN_PATH }}/trex/scripts/dpdk_nic_bind.py" "{{ INSTALL_BIN_PATH }}" - - - name: add scripts to PYTHONPATH - lineinfile: - dest: /etc/environment - regexp: "^PYTHONPATH=" - line: "PYTHONPATH={{ INSTALL_BIN_PATH }}/trex/scripts/automation/trex_control_plane:{{ INSTALL_BIN_PATH }}/trex/scripts/automation/trex_control_plane/stl:{{ NSB_INSTALL_DIR }}/yardstick" - state: present - create: yes diff --git a/ansible/roles/download_dpdk/defaults/main.yml b/ansible/roles/download_dpdk/defaults/main.yml index d548280f5..885eebf03 100644 --- a/ansible/roles/download_dpdk/defaults/main.yml +++ b/ansible/roles/download_dpdk/defaults/main.yml @@ -1,14 +1,18 @@ --- -dpdk_version: "17.02" -dpdk_url: "http://dpdk.org/browse/dpdk/snapshot/dpdk-{{ dpdk_version }}.tar.gz" +dpdk_version: "17.02.1" +dpdk_url: "http://fast.dpdk.org/rel/dpdk-{{ dpdk_version }}.tar.xz" dpdk_file: "{{ dpdk_url|basename }}" -dpdk_unarchive: "{{ dpdk_file|regex_replace('[.]tar[.]gz$', '') }}" +dpdk_unarchive: "{{ dpdk_file|regex_replace('[.]tar[.]xz$', '') }}" dpdk_dest: "{{ clone_dest }}/" -#Note DPDK 17.08 17.11 and 18.02 are currently unsupported due to prox build issues -dpdk_sha256s: - "16.07": "sha256:d876e4b2a7101f28e7e345d3c88e66afe877d15f0159c19c5bc5bc26b7b7d788" - "17.02": "sha256:b07b546e910095174bdb6152bb0d7ce057cc4b79aaa74771aeee4e8a7219fb38" - "17.05": "sha256:763bfb7e1765efcc949e79d645dc9f1ebd16591431ba0db5ce22becd928dcd0a" - "17.08": "sha256:3a08addbff45c636538514e9a5838fb91ea557661a4c071e03a9a6987d46e5b6" #unsupported - "17.11": "sha256:77a727bb3834549985f291409c9a77a1e8be1c9329ce4c3eb19a22d1461022e4" #unsupported - "18.02": "sha256:f1210310fd5f01a3babe3a09d9b3e5a9db791c2ec6ecfbf94ade9f893a0632b8" #unsupported + +#NOTE(ralonsoh): DPDK > 17.02 are currently unsupported due to prox build issues +dpdk_md5: + "16.07.2": "md5:4922ea2ec935b64ff5c191fec53344a6" + "16.11.7": "md5:c081d113dfd57633e3bc3ebc802691be" + "17.02.1": "md5:cbdf8b7a92ce934d47c38cbc9c20c54a" + "17.05": "md5:0a68c31cd6a6cabeed0a4331073e4c05" #Ubuntu 17.10 support + "17.05.2": "md5:37afc9ce410d8e6945a1beb173074003" #unsupported + "17.08.2": "md5:dd239a878c8c40cf482fdfe438f8d99c" #unsupported + "17.11.3": "md5:68ca84ac878011acf44e75d33b46f55b" #unsupported + "18.02.2": "md5:75ad6d39b513649744e49c9fcbbb9ca5" #unsupported + "18.05": "md5:9fc86367cd9407ff6a8dfea56c4eddc4" #unsupported diff --git a/ansible/roles/download_dpdk/tasks/main.yml b/ansible/roles/download_dpdk/tasks/main.yml index bcb5dde1a..bea3febed 100644 --- a/ansible/roles/download_dpdk/tasks/main.yml +++ b/ansible/roles/download_dpdk/tasks/main.yml @@ -25,7 +25,7 @@ url: "{{ dpdk_url }}" dest: "{{ dpdk_dest }}" validate_certs: False - checksum: "{{ dpdk_sha256s[dpdk_version] }}" + checksum: "{{ dpdk_md5[dpdk_version] }}" - unarchive: src: "{{ dpdk_dest }}/{{ dpdk_file }}" diff --git a/ansible/roles/install_samplevnf/vars/main.yml b/ansible/roles/install_samplevnf/vars/main.yml index 45cea6820..c92a9b09f 100644 --- a/ansible/roles/install_samplevnf/vars/main.yml +++ b/ansible/roles/install_samplevnf/vars/main.yml @@ -47,12 +47,14 @@ vnf_build_dependencies: vnf_build_dirs: ACL: vACL FW: vFW - CGNATP: vCGNAPT + CGNAPT: vCGNAPT + PE: vPE UDP_Replay: UDP_Replay PROX: DPPD-PROX vnf_app_names: ACL: vACL FW: vFW - CGNATP: vCGNAPT + CGNAPT: vCGNAPT + PE: vPE UDP_Replay: UDP_Replay PROX: prox diff --git a/ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml b/ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml index 479b45c92..d858257b1 100644 --- a/ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml +++ b/ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml @@ -44,7 +44,9 @@ - role: install_samplevnf vnf_name: FW - role: install_samplevnf - vnf_name: CGNATP + vnf_name: CGNAPT + - role: install_samplevnf + vnf_name: PE # build shared DPDK for collectd only, required DPDK downloaded already - install_dpdk_shared - install_rabbitmq diff --git a/ansible/ubuntu_server_cloudimg_modify_samplevnfs.yml b/ansible/ubuntu_server_cloudimg_modify_samplevnfs.yml index 7aa6c8c12..aab5a741c 100644 --- a/ansible/ubuntu_server_cloudimg_modify_samplevnfs.yml +++ b/ansible/ubuntu_server_cloudimg_modify_samplevnfs.yml @@ -54,7 +54,9 @@ - role: install_samplevnf vnf_name: FW - role: install_samplevnf - vnf_name: CGNATP + vnf_name: CGNAPT + - role: install_samplevnf + vnf_name: PE # build shared DPDK for collectd only, required DPDK downloaded already - install_dpdk_shared - install_rabbitmq diff --git a/docker/Dockerfile b/docker/Dockerfile index be9156685..097bc3c3f 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -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 python-openstackclient==3.11.0 python-heatclient==1.11.0 ansible==2.5.5 +RUN pip install appdirs==1.4.0 pyopenssl==17.5.0 python-openstackclient==3.12.0 python-heatclient==1.11.0 ansible==2.5.5 RUN mkdir -p ${REPOS_DIR} diff --git a/docker/Dockerfile.aarch64.patch b/docker/Dockerfile.aarch64.patch index 712718426..ef41cba03 100644 --- a/docker/Dockerfile.aarch64.patch +++ b/docker/Dockerfile.aarch64.patch @@ -31,7 +31,7 @@ index 62ea0d0..f2f41771 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 python-openstackclient==3.11.0 python-heatclient==1.11.0 ansible==2.5.5 + RUN pip install appdirs==1.4.0 pyopenssl==17.5.0 python-openstackclient==3.12.0 python-heatclient==1.11.0 ansible==2.5.5 @@ -48,8 +49,8 @@ RUN echo "daemon off;" >> /etc/nginx/nginx.conf # nginx=5000, rabbitmq=5672 diff --git a/docs/testing/developer/devguide/devguide.rst b/docs/testing/developer/devguide/devguide.rst index 04d5350be..dbe92b846 100755 --- a/docs/testing/developer/devguide/devguide.rst +++ b/docs/testing/developer/devguide/devguide.rst @@ -1,16 +1,42 @@ +.. + 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. + + Convention for heading levels in Yardstick documentation: + + ======= Heading 0 (reserved for the title in a document) + ------- Heading 1 + ~~~~~~~ Heading 2 + +++++++ Heading 3 + ''''''' Heading 4 + + Avoid deeper levels because they do not render well. + Introduction -============= +------------ -Yardstick is a project dealing with performance testing. Yardstick produces its own test cases but can also be considered as a framework to support feature project testing. +Yardstick is a project dealing with performance testing. Yardstick produces +its own test cases but can also be considered as a framework to support feature +project testing. -Yardstick developed a test API that can be used by any OPNFV project. Therefore there are many ways to contribute to Yardstick. +Yardstick developed a test API that can be used by any OPNFV project. Therefore +there are many ways to contribute to Yardstick. You can: * Develop new test cases * Review codes * Develop Yardstick API / framework -* Develop Yardstick grafana dashboards and Yardstick reporting page +* Develop Yardstick grafana dashboards and Yardstick reporting page * Write Yardstick documentation This developer guide describes how to interact with the Yardstick project. @@ -19,28 +45,30 @@ part is a list of “How to” to help you to join the Yardstick family whatever your field of interest is. Where can I find some help to start? --------------------------------------- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. _`user guide`: http://artifacts.opnfv.org/yardstick/danube/1.0/docs/stesting_user_userguide/index.html .. _`wiki page`: https://wiki.opnfv.org/display/yardstick/ 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 title 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] +prefix in the subject at opnfv-tech-discuss@lists.opnfv.org or on the IRC chan +#opnfv-yardstick. Yardstick developer areas -========================== +------------------------- Yardstick framework --------------------- +~~~~~~~~~~~~~~~~~~~ -Yardstick can be considered as a framework. Yardstick is release as a docker +Yardstick can be considered as a framework. Yardstick is released as a docker file, including tools, scripts and a CLI to prepare the environement and run -tests. It simplifies the integration of external test suites in CI pipeline -and provide commodity tools to collect and display results. +tests. It simplifies the integration of external test suites in CI pipelines +and provides commodity tools to collect and display results. -Since Danube, test categories also known as tiers have been created to group +Since Danube, test categories (also known as tiers) have been created to group similar tests, provide consistant sub-lists and at the end optimize test duration for CI (see How To section). @@ -56,44 +84,54 @@ The tiers are: How Todos? -=========== +---------- How Yardstick works? ---------------------- +~~~~~~~~~~~~~~~~~~~~ The installation and configuration of the Yardstick is described in the `user guide`_. How to work with test cases? ----------------------------- - +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -**Sample Test cases** +Sample Test cases ++++++++++++++++++ -Yardstick provides many sample test cases which are located at "samples" directory of repo. +Yardstick provides many sample test cases which are located at ``samples`` directory of repo. -Sample test cases are designed as following goals: +Sample test cases are designed with the following goals: -1. Helping user better understand yardstick features(including new feature and new test capacity). +1. Helping user better understand Yardstick features (including new feature and + new test capacity). -2. Helping developer to debug his new feature and test case before it is offical released. +2. Helping developer to debug a new feature and test case before it is + offically released. -3. Helping other developers understand and verify the new patch before the patch merged. +3. Helping other developers understand and verify the new patch before the + patch is merged. -So developers should upload your sample test case as well when they are trying to upload a new patch which is about the yardstick new test case or new feature. +Developers should upload their sample test cases as well when they are +uploading a new patch which is about the Yardstick new test case or new feature. -**OPNFV Release Test cases** +OPNFV Release Test cases +++++++++++++++++++++++++ -OPNFV Release test cases which are located at "tests/opnfv/test_cases" of repo. -those test cases are runing by OPNFV CI jobs, It means those test cases should be more mature than sample test cases. -OPNFV scenario owners can select related test cases and add them into the test suites which is represent the scenario. +OPNFV Release test cases are located at ``yardstick/tests/opnfv/test_cases``. +These test cases are run by OPNFV CI jobs, which means these test cases should +be more mature than sample test cases. +OPNFV scenario owners can select related test cases and add them into the test +suites which represent their scenario. -**Test case Description File** +Test case Description File +++++++++++++++++++++++++++ This section will introduce the meaning of the Test case description file. -we will use ping.yaml as a example to show you how to understand the test case description file. -In this Yaml file, you can easily find it consists of two sections. One is “Scenarios”, the other is “Context”.:: +we will use ping.yaml as a example to show you how to understand the test case +description file. +This ``yaml`` file consists of two sections. One is ``scenarios``, the other +is ``context``.:: --- # Sample benchmark task config file @@ -150,18 +188,32 @@ In this Yaml file, you can easily find it consists of two sections. One is “Sc {% endif %} -"Contexts" section is the description of pre-condition of testing. As ping.yaml shown, you can configure the image, flavor , name ,affinity and network of Test VM(servers), with this section, you will get a pre-condition env for Testing. -Yardstick will automatic setup the stack which are described in this section. -In fact, yardstick use convert this section to heat template and setup the VMs by heat-client (Meanwhile, yardstick can support to convert this section to Kubernetes template to setup containers). - -Two Test VMs(athena and ares) are configured by keyword "servers". -"flavor" will determine how many vCPU, how much memory for test VMs. -As "yardstick-flavor" is a basic flavor which will be automatically created when you run command "yardstick env prepare". "yardstick-flavor" is "1 vCPU 1G RAM,3G Disk". -"image" is the image name of test VMs. if you use cirros.3.5.0, you need fill the username of this image into "user". the "policy" of placement of Test VMs have two values (affinity and availability). -"availability" means anti-affinity. In "network" section, you can configure which provide network and physical_network you want Test VMs use. -you may need to configure segmentation_id when your network is vlan. - -Moreover, you can configure your specific flavor as below, yardstick will setup the stack for you. :: +The ``contexts`` section is the description of pre-condition of testing. As +``ping.yaml`` shows, you can configure the image, flavor, name, affinity and +network of Test VM (servers), with this section, you will get a pre-condition +env for Testing. +Yardstick will automatically setup the stack which are described in this +section. +Yardstick converts this section to heat template and sets up the VMs with +heat-client (Yardstick can also support to convert this section to Kubernetes +template to setup containers). + +In the examples above, two Test VMs (athena and ares) are configured by +keyword ``servers``. +``flavor`` will determine how many vCPU, how much memory for test VMs. +As ``yardstick-flavor`` is a basic flavor which will be automatically created +when you run command ``yardstick env prepare``. ``yardstick-flavor`` is +``1 vCPU 1G RAM,3G Disk``. +``image`` is the image name of test VMs. If you use ``cirros.3.5.0``, you need +fill the username of this image into ``user``. +The ``policy`` of placement of Test VMs have two values (``affinity`` and +``availability``). ``availability`` means anti-affinity. +In the ``network`` section, you can configure which ``provider`` network and +``physical_network`` you want Test VMs to use. +You may need to configure ``segmentation_id`` when your network is vlan. + +Moreover, you can configure your specific flavor as below, Yardstick will setup +the stack for you. :: flavor: name: yardstick-new-flavor @@ -170,7 +222,8 @@ Moreover, you can configure your specific flavor as below, yardstick will setup disk: 2 -Besides default heat stack, yardstick also allow you to setup other two types stack. they are "Node" and "Kubernetes". :: +Besides default ``Heat`` context, Yardstick also allows you to setup two other +types of context. They are ``Node`` and ``Kubernetes``. :: context: type: Kubernetes @@ -183,48 +236,64 @@ and :: name: LF +The ``scenarios`` section is the description of testing steps, you can +orchestrate the complex testing step through scenarios. -"Scenarios" section is the description of testing step, you can orchestrate the complex testing step through orchestrate scenarios. +Each scenario will do one testing step. +In one scenario, you can configure the type of scenario (operation), ``runner`` +type and ``sla`` of the scenario. -Each scenario will do one testing step, In one scenario, you can configure the type of scenario(operation), runner type and SLA of the scenario. +For TC002, We only have one step, which is Ping from host VM to target VM. In +this step, we also have some detailed operations implemented (such as ssh to +VM, ping from VM1 to VM2. Get the latency, verify the SLA, report the result). -For TC002, We only have one step , that is Ping from host VM to target VM. In this step, we also have some detail operation implement ( such as ssh to VM, ping from VM1 to VM2. Get the latency, verify the SLA, report the result). +If you want to get this implementation details implement, you can check with +the scenario.py file. For Ping scenario, you can find it in Yardstick repo +(``yardstick/yardstick/benchmark/scenarios/networking/ping.py``). -If you want to get this detail implement , you can check with the scenario.py file. For Ping scenario, you can find it in yardstick repo ( yardstick / yardstick / benchmark / scenarios / networking / ping.py) +After you select the type of scenario (such as Ping), you will select one type +of ``runner``, there are 4 types of runner. ``Iteration`` and ``Duration`` are +the most commonly used, and the default is ``Iteration``. -after you select the type of scenario( such as Ping), you will select one type of runner, there are 4 types of runner. Usually, we use the "Iteration" and "Duration". and Default is "Iteration". -For Iteration, you can specify the iteration number and interval of iteration. :: +For ``Iteration``, you can specify the iteration number and interval of iteration. :: runner: type: Iteration iterations: 10 interval: 1 -That means yardstick will iterate the 10 times of Ping test and the interval of each iteration is one second. +That means Yardstick will repeat the Ping test 10 times and the interval of +each iteration is one second. -For Duration, you can specify the duration of this scenario and the interval of each ping test. :: +For ``Duration``, you can specify the duration of this scenario and the +interval of each ping test. :: runner: type: Duration duration: 60 interval: 10 -That means yardstick will run the ping test as loop until the total time of this scenario reach the 60s and the interval of each loop is ten seconds. - +That means Yardstick will run the ping test as loop until the total time of +this scenario reaches 60s and the interval of each loop is ten seconds. -SLA is the criterion of this scenario. that depends on the scenario. different scenario can have different SLA metric. +SLA is the criterion of this scenario. This depends on the scenario. Different +scenarios can have different SLA metric. -**How to write a new test case** -Yardstick already provide a library of testing step. that means yardstick provide lots of type scenario. +How to write a new test case +++++++++++++++++++++++++++++ -Basiclly, What you need to do is to orchestrate the scenario from the library. +Yardstick already provides a library of testing steps (i.e. different types of +scenario). -Here, We will show two cases. One is how to write a simple test case, the other is how to write a quite complex test case. +Basically, what you need to do is to orchestrate the scenario from the library. +Here, we will show two cases. One is how to write a simple test case, the other +is how to write a quite complex test case. Write a new simple test case +'''''''''''''''''''''''''''' First, you can image a basic test case description as below. @@ -314,7 +383,7 @@ First, you can image a basic test case description as below. TODO How can I contribute to Yardstick? ------------------------------------ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you are already a contributor of any OPNFV project, you can contribute to Yardstick. If you are totally new to OPNFV, you must first create your Linux @@ -329,7 +398,7 @@ We distinguish 2 levels of contributors: Yardstick commitors are promoted by the Yardstick contributors. Gerrit & JIRA introduction -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +++++++++++++++++++++++++++ .. _Gerrit: https://www.gerritcodereview.com/ .. _`OPNFV Gerrit`: http://gerrit.opnfv.org/ @@ -338,7 +407,8 @@ Gerrit & JIRA introduction OPNFV uses Gerrit_ for web based code review and repository management for the Git Version Control System. You can access `OPNFV Gerrit`_. Please note that -you need to have Linux Foundation ID in order to use OPNFV Gerrit. You can get one from this link_. +you need to have Linux Foundation ID in order to use OPNFV Gerrit. You can get +one from this link_. OPNFV uses JIRA_ for issue management. An important principle of change management is to have two-way trace-ability between issue management @@ -350,14 +420,16 @@ If you want to contribute to Yardstick, you can pick a issue from Yardstick's JIRA dashboard or you can create you own issue and submit it to JIRA. Install Git and Git-reviews -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ++++++++++++++++++++++++++++ Installing and configuring Git and Git-Review is necessary in order to submit -code to Gerrit. The `Getting to the code <https://wiki.opnfv.org/display/DEV/Developer+Getting+Started>`_ page will provide you with some help for that. +code to Gerrit. The +`Getting to the code <https://wiki.opnfv.org/display/DEV/Developer+Getting+Started>`_ +page will provide you with some help for that. Verify your patch locally before submitting -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ++++++++++++++++++++++++++++++++++++++++++++ Once you finish a patch, you can submit it to Gerrit for code review. A developer sends a new patch to Gerrit will trigger patch verify job on Jenkins @@ -366,7 +438,8 @@ code coverage test. Before you submit your patch, it is recommended to run the patch verification in your local environment first. Open a terminal window and set the project's directory to the working -directory using the ``cd`` command. Assume that ``YARDSTICK_REPO_DIR`` is the path to the Yardstick project folder on your computer:: +directory using the ``cd`` command. Assume that ``YARDSTICK_REPO_DIR`` is the +path to the Yardstick project folder on your computer:: cd $YARDSTICK_REPO_DIR @@ -377,7 +450,7 @@ Verify your patch:: It is used in CI but also by the CLI. Submit the code with Git -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +++++++++++++++++++++++++ Tell Git which files you would like to take into account for the next commit. This is called 'staging' the files, by placing them into the staging area, @@ -417,7 +490,7 @@ to the commits, and eventually navigate among the latter more easily. `This document`_ happened to be very clear and useful to get started with that. Push the code to Gerrit for review -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +++++++++++++++++++++++++++++++++++ Now that the code has been comitted into your local Git repository the following step is to push it online to Gerrit for it to be reviewed. The @@ -432,27 +505,27 @@ Yardstick committers and contributors to review your codes. :width: 800px :alt: Gerrit for code review -You can find a list Yardstick people `here <https://wiki.opnfv.org/display/yardstick/People>`_, -or use the ``yardstick-reviewers`` and ``yardstick-committers`` groups in gerrit. +You can find a list Yardstick people +`here <https://wiki.opnfv.org/display/yardstick/People>`_, or use the +``yardstick-reviewers`` and ``yardstick-committers`` groups in gerrit. Modify the code under review in Gerrit -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +++++++++++++++++++++++++++++++++++++++ At the same time the code is being reviewed in Gerrit, you may need to edit it to make some changes and then send it back for review. The following steps go through the procedure. Once you have modified/edited your code files under your IDE, you will have to -stage them. The 'status' command is very helpful at this point as it provides -an overview of Git's current state:: +stage them. The ``git status`` command is very helpful at this point as it +provides an overview of Git's current state:: git status -The output of the command provides us with the files that have been modified -after the latest commit. +This command lists the files that have been modified since the last commit. You can now stage the files that have been modified as part of the Gerrit code -review edition/modification/improvement using ``git add`` command. It is now +review addition/modification/improvement using ``git add`` command. It is now time to commit the newly modified files, but the objective here is not to create a new commit, we simply want to inject the new changes into the previous commit. You can achieve that with the '--amend' option on the @@ -469,7 +542,8 @@ The final step consists in pushing the newly modified commit to Gerrit:: Plugins -========== +------- -For information about Yardstick plugins, refer to the chapter **Installing a plug-in into Yardstick** in the `user guide`_. +For information about Yardstick plugins, refer to the chapter +**Installing a plug-in into Yardstick** in the `user guide`_. diff --git a/requirements.txt b/requirements.txt index a7a7e68b1..43d7120db 100644 --- a/requirements.txt +++ b/requirements.txt @@ -29,20 +29,20 @@ futures==3.1.1;python_version=='2.7' # BSD; OSI Approved BSD License influxdb==4.1.1 # MIT License; OSI Approved MIT License IxNetwork==8.40.1124.9 # MIT License; OSI Approved MIT License jinja2schema==0.1.4 # OSI Approved BSD License -keystoneauth1==3.1.0 # OSI Approved Apache Software License +keystoneauth1==3.3.0 # OSI Approved Apache Software License kubernetes==6.0.0 # OSI Approved Apache Software License mock==2.0.0 # OSI Approved BSD License; `BSD License`_; http://github.com/testing-cabal/mock/blob/master/LICENSE.txt msgpack-python==0.4.8 # OSI Approved Apache Software License netaddr==0.7.19 # BSD License; OSI Approved BSD License; OSI Approved MIT License netifaces==0.10.6 # MIT License; OSI Approved MIT License os-client-config==1.28.0 # OSI Approved Apache Software License -osc-lib==1.7.0 # OSI Approved Apache Software License -oslo.config==4.11.1 # OSI Approved Apache Software License +osc-lib==1.8.0 # OSI Approved Apache Software License +oslo.config==5.1.0 # OSI Approved Apache Software License oslo.i18n==3.17.0 # OSI Approved Apache Software License -oslo.messaging===5.36.0 # OSI Approved Apache Software License -oslo.privsep===1.22.1 # OSI Approved Apache Software License +oslo.messaging==5.36.0 # OSI Approved Apache Software License +oslo.privsep==1.23.0 # OSI Approved Apache Software License oslo.serialization==2.20.1 # OSI Approved Apache Software License -oslo.utils==3.28.0 # OSI Approved Apache Software License +oslo.utils==3.33.0 # OSI Approved Apache Software License paramiko==2.2.1 # LGPL; OSI Approved GNU Library or Lesser General Public License (LGPL) pbr==3.1.1 # OSI Approved Apache Software License; Apache License, Version 2.0 pika==0.10.0 # BSD; OSI Approved BSD License @@ -52,13 +52,13 @@ pycrypto==2.6.1 # Public Domain pyparsing==2.2.0 # MIT License; OSI Approved MIT License pyroute2==0.4.21 # dual license GPLv2+ and Apache v2; OSI Approved GNU General Public License v2 or later (GPLv2+); OSI Approved Apache Software License pyrsistent==0.14.1 # LICENSE.mit; OSI Approved MIT License -python-cinderclient==3.1.0 # OSI Approved Apache Software License +python-cinderclient==3.3.0 # OSI Approved Apache Software License python-glanceclient==2.8.0 # OSI Approved Apache Software License python-keystoneclient==3.13.0 # OSI Approved Apache Software License python-neutronclient==6.5.0 # OSI Approved Apache Software License python-novaclient==9.1.1 # OSI Approved Apache Software License pyzmq==16.0.2 # LGPL+BSD; OSI Approved GNU Library or Lesser General Public License (LGPL); OSI Approved BSD License -requests==2.11.1 # Apache 2.0; OSI Approved Apache Software License +requests==2.14.2 # Apache 2.0; OSI Approved Apache Software License requestsexceptions==1.3.0 # OSI Approved Apache Software License scp==0.10.2 # LGPL shade==1.22.2 # OSI Approved Apache Software License diff --git a/test-requirements.txt b/test-requirements.txt index 4828e98b0..7825cc5d2 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -14,8 +14,8 @@ testtools==2.3.0 # OSI Approved MIT License unittest2==1.1.0 # OSI Approved BSD License # NOTE(ralonsoh): to be removed, only for coverage support -python-heatclient==1.8.1 # OSI Approved Apache Software License +python-heatclient==1.11.0 # OSI Approved Apache Software License -# Yardstick F release <-> OpenStack Pike release -openstack_requirements==1.1.0 # OSI Approved Apache Software License --e git+https://github.com/openstack/requirements.git@stable/pike#egg=os_requirements +# Yardstick G release <-> OpenStack Queens release +openstack_requirements==1.2.0 # OSI Approved Apache Software License +-e git+https://github.com/openstack/requirements.git@stable/queens#egg=os_requirements diff --git a/yardstick/benchmark/contexts/base.py b/yardstick/benchmark/contexts/base.py index 1c798fbb3..f3f5879eb 100644 --- a/yardstick/benchmark/contexts/base.py +++ b/yardstick/benchmark/contexts/base.py @@ -14,6 +14,7 @@ import os from yardstick.common import constants from yardstick.common import utils +from yardstick.common import yaml_loader from yardstick.common.constants import YARDSTICK_ROOT_PATH @@ -73,13 +74,13 @@ class Context(object): def read_pod_file(self, attrs): self.file_path = file_path = attrs.get("file", "pod.yaml") try: - cfg = utils.read_yaml_file(self.file_path) + cfg = yaml_loader.read_yaml_file(self.file_path) except IOError as io_error: if io_error.errno != errno.ENOENT: raise self.file_path = os.path.join(YARDSTICK_ROOT_PATH, file_path) - cfg = utils.read_yaml_file(self.file_path) + cfg = yaml_loader.read_yaml_file(self.file_path) for node in cfg["nodes"]: node["ctx_type"] = self.__context_type__ diff --git a/yardstick/benchmark/contexts/standalone/model.py b/yardstick/benchmark/contexts/standalone/model.py index 764cde3f7..ecddcbbe0 100644 --- a/yardstick/benchmark/contexts/standalone/model.py +++ b/yardstick/benchmark/contexts/standalone/model.py @@ -26,7 +26,7 @@ import xml.etree.ElementTree as ET from yardstick import ssh from yardstick.common import constants from yardstick.common import exceptions -from yardstick.common.utils import read_yaml_file +from yardstick.common import yaml_loader from yardstick.network_services.utils import PciAddress from yardstick.network_services.helpers.cpu import CpuSysCores @@ -399,13 +399,13 @@ class StandaloneContextHelper(object): nodes = [] nfvi_host = [] try: - cfg = read_yaml_file(self.file_path) + cfg = yaml_loader.read_yaml_file(self.file_path) except IOError as io_error: if io_error.errno != errno.ENOENT: raise self.file_path = os.path.join(constants.YARDSTICK_ROOT_PATH, file_path) - cfg = read_yaml_file(self.file_path) + cfg = yaml_loader.read_yaml_file(self.file_path) nodes.extend([node for node in cfg["nodes"] if str(node["role"]) != nfvi_role]) nfvi_host.extend([node for node in cfg["nodes"] if str(node["role"]) == nfvi_role]) diff --git a/yardstick/common/utils.py b/yardstick/common/utils.py index 251e5cc6c..f9fe0e336 100644 --- a/yardstick/common/utils.py +++ b/yardstick/common/utils.py @@ -37,7 +37,6 @@ from oslo_utils import encodeutils import yardstick from yardstick.common import exceptions -from yardstick.common.yaml_loader import yaml_load logger = logging.getLogger(__name__) @@ -528,11 +527,3 @@ def wait_until_true(predicate, timeout=60, sleep=1, exception=None): if exception and issubclass(exception, Exception): raise exception # pylint: disable=raising-bad-type raise exceptions.WaitTimeout - - -def read_yaml_file(path): - """Read yaml file""" - - with open(path) as stream: - data = yaml_load(stream) - return data diff --git a/yardstick/common/yaml_loader.py b/yardstick/common/yaml_loader.py index 0572bd582..18673be7c 100644 --- a/yardstick/common/yaml_loader.py +++ b/yardstick/common/yaml_loader.py @@ -10,10 +10,6 @@ # License for the specific language governing permissions and limitations # under the License. -# yardstick: this file is copied from python-heatclient and slightly modified - -from __future__ import absolute_import - import yaml @@ -23,6 +19,7 @@ if hasattr(yaml, 'CSafeLoader'): else: yaml_loader = type('CustomLoader', (yaml.SafeLoader,), {}) + if hasattr(yaml, 'CSafeDumper'): yaml_dumper = yaml.CSafeDumper else: @@ -31,3 +28,10 @@ else: def yaml_load(tmpl_str): return yaml.load(tmpl_str, Loader=yaml_loader) + + +def read_yaml_file(path): + """Read yaml file""" + with open(path) as stream: + data = yaml_load(stream) + return data diff --git a/yardstick/network_services/traffic_profile/ixia_rfc2544.py b/yardstick/network_services/traffic_profile/ixia_rfc2544.py index e105c2f55..39336785e 100644 --- a/yardstick/network_services/traffic_profile/ixia_rfc2544.py +++ b/yardstick/network_services/traffic_profile/ixia_rfc2544.py @@ -25,6 +25,10 @@ class IXIARFC2544Profile(TrexProfile): UPLINK = 'uplink' DOWNLINK = 'downlink' + def __init__(self, yaml_data): + super(IXIARFC2544Profile, self).__init__(yaml_data) + self.rate = self.config.frame_rate + def _get_ixia_traffic_profile(self, profile_data, mac=None): if mac is None: mac = {} diff --git a/yardstick/network_services/vnf_generic/vnf/vpe_vnf.py b/yardstick/network_services/vnf_generic/vnf/vpe_vnf.py index bfff45c67..57ea2eee3 100644 --- a/yardstick/network_services/vnf_generic/vnf/vpe_vnf.py +++ b/yardstick/network_services/vnf_generic/vnf/vpe_vnf.py @@ -239,7 +239,7 @@ class ConfigCreate(object): class VpeApproxSetupEnvHelper(DpdkVnfSetupEnvHelper): - APP_NAME = 'vPE_vnf' + APP_NAME = 'vPE' CFG_CONFIG = "/tmp/vpe_config" CFG_SCRIPT = "/tmp/vpe_script" TM_CONFIG = "/tmp/full_tm_profile_10G.cfg" @@ -286,7 +286,7 @@ class VpeApproxSetupEnvHelper(DpdkVnfSetupEnvHelper): class VpeApproxVnf(SampleVNF): """ This class handles vPE VNF model-driver definitions """ - APP_NAME = 'vPE_vnf' + APP_NAME = 'vPE' APP_WORD = 'vpe' COLLECT_KPI = VPE_COLLECT_KPI WAIT_TIME = 20 diff --git a/yardstick/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py b/yardstick/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py index 5be22a034..a4a8359d5 100644 --- a/yardstick/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py +++ b/yardstick/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py @@ -58,7 +58,10 @@ class OvsDpdkContextTestCase(unittest.TestCase): 'file': self._get_file_abspath(self.NODES_ovs_dpdk_SAMPLE) } self.ovs_dpdk = ovs_dpdk.OvsDpdkContext() + self._mock_log = mock.patch.object(ovs_dpdk, 'LOG') + self.mock_log = self._mock_log.start() self.addCleanup(self._remove_contexts) + self.addCleanup(self._stop_mocks) @staticmethod def _remove_contexts(): @@ -66,6 +69,9 @@ class OvsDpdkContextTestCase(unittest.TestCase): context._delete_context() base.Context.list = [] + def _stop_mocks(self): + self._mock_log.stop() + @mock.patch('yardstick.benchmark.contexts.standalone.model.Server') @mock.patch('yardstick.benchmark.contexts.standalone.model.StandaloneContextHelper') def test___init__(self, mock_helper, mock_server): diff --git a/yardstick/tests/unit/benchmark/contexts/test_base.py b/yardstick/tests/unit/benchmark/contexts/test_base.py index 1e63b4831..5fd7352f5 100644 --- a/yardstick/tests/unit/benchmark/contexts/test_base.py +++ b/yardstick/tests/unit/benchmark/contexts/test_base.py @@ -19,6 +19,7 @@ import mock from yardstick.benchmark.contexts import base from yardstick.benchmark.contexts.base import Context +from yardstick.common import yaml_loader from yardstick.tests.unit import base as ut_base from yardstick.common.constants import YARDSTICK_ROOT_PATH @@ -131,7 +132,7 @@ class ContextTestCase(ut_base.BaseUnitTestCase): mock_get_ctx.assert_called_once() self.assertIsNone(result) - @mock.patch('yardstick.common.utils.read_yaml_file') + @mock.patch.object(yaml_loader, 'read_yaml_file') def test_read_pod_file(self, mock_read_yaml_file): attrs = {'name': 'foo', 'task_id': '12345678', diff --git a/yardstick/tests/unit/benchmark/contexts/test_heat.py b/yardstick/tests/unit/benchmark/contexts/test_heat.py index 7605ef29a..7782d96bd 100644 --- a/yardstick/tests/unit/benchmark/contexts/test_heat.py +++ b/yardstick/tests/unit/benchmark/contexts/test_heat.py @@ -20,6 +20,7 @@ from yardstick.benchmark.contexts import model from yardstick.common import constants as consts from yardstick.common import exceptions as y_exc from yardstick.common import openstack_utils +from yardstick.common import yaml_loader from yardstick import ssh @@ -80,12 +81,13 @@ class HeatContextTestCase(unittest.TestCase): self.assertIsNone(self.test_context.heat_parameters) self.assertIsNone(self.test_context.key_filename) - @mock.patch('yardstick.common.utils.read_yaml_file') + @mock.patch.object(yaml_loader, 'read_yaml_file') @mock.patch('yardstick.benchmark.contexts.heat.PlacementGroup') @mock.patch('yardstick.benchmark.contexts.heat.ServerGroup') @mock.patch('yardstick.benchmark.contexts.heat.Network') @mock.patch('yardstick.benchmark.contexts.heat.Server') - def test_init(self, mock_server, mock_network, mock_sg, mock_pg, mock_read_yaml): + def test_init(self, mock_server, mock_network, mock_sg, mock_pg, + mock_read_yaml): mock_read_yaml.return_value = self.HEAT_POD_SAMPLE pgs = {'pgrp1': {'policy': 'availability'}} @@ -764,7 +766,7 @@ class HeatContextTestCase(unittest.TestCase): nodes = self.test_context._get_physical_nodes() self.assertEquals(nodes, {}) - @mock.patch('yardstick.common.utils.read_yaml_file') + @mock.patch.object(yaml_loader, 'read_yaml_file') def test__get_physical_node_for_server(self, mock_read_yaml): attrs = {'name': 'foo', 'task_id': '12345678', diff --git a/yardstick/tests/unit/benchmark/contexts/test_node.py b/yardstick/tests/unit/benchmark/contexts/test_node.py index 7fd13a406..da16074d9 100644 --- a/yardstick/tests/unit/benchmark/contexts/test_node.py +++ b/yardstick/tests/unit/benchmark/contexts/test_node.py @@ -8,14 +8,16 @@ ############################################################################## import os -import unittest import errno + import mock +import unittest -from yardstick.common import constants as consts from yardstick.benchmark.contexts import base from yardstick.benchmark.contexts import node +from yardstick.common import constants as consts from yardstick.common import exceptions +from yardstick.common import yaml_loader class NodeContextTestCase(unittest.TestCase): @@ -56,7 +58,7 @@ class NodeContextTestCase(unittest.TestCase): self.assertEqual(self.test_context.env, {}) self.assertEqual(self.test_context.attrs, {}) - @mock.patch('yardstick.common.utils.read_yaml_file') + @mock.patch.object(yaml_loader, 'read_yaml_file') @mock.patch('{}.os.path.join'.format(PREFIX)) def test_init_negative(self, mock_path_join, read_mock): special_path = '/foo/bar/error_file' diff --git a/yardstick/tests/unit/benchmark/runner/test_base.py b/yardstick/tests/unit/benchmark/runner/test_base.py index 727207f5a..559c991f3 100644 --- a/yardstick/tests/unit/benchmark/runner/test_base.py +++ b/yardstick/tests/unit/benchmark/runner/test_base.py @@ -10,36 +10,40 @@ import time import mock -import unittest -from subprocess import CalledProcessError +import subprocess - -from yardstick.benchmark.runners import base +from yardstick.benchmark.runners import base as runner_base from yardstick.benchmark.runners import iteration +from yardstick.tests.unit import base as ut_base -class ActionTestCase(unittest.TestCase): +class ActionTestCase(ut_base.BaseUnitTestCase): - @mock.patch("yardstick.benchmark.runners.base.subprocess") - def test__execute_shell_command(self, mock_subprocess): - mock_subprocess.check_output.side_effect = CalledProcessError(-1, '') + def setUp(self): + self._mock_log = mock.patch.object(runner_base.log, 'error') + self.mock_log = self._mock_log.start() + self.addCleanup(self._stop_mocks) - self.assertEqual(base._execute_shell_command("")[0], -1) + def _stop_mocks(self): + self._mock_log.stop() - @mock.patch("yardstick.benchmark.runners.base.subprocess") - def test__single_action(self, mock_subprocess): - mock_subprocess.check_output.side_effect = CalledProcessError(-1, '') + @mock.patch.object(subprocess, 'check_output') + def test__execute_shell_command(self, mock_subprocess): + mock_subprocess.side_effect = subprocess.CalledProcessError(-1, '') + self.assertEqual(runner_base._execute_shell_command("")[0], -1) - base._single_action(0, "echo", mock.MagicMock()) + @mock.patch.object(subprocess, 'check_output') + def test__single_action(self, mock_subprocess): + mock_subprocess.side_effect = subprocess.CalledProcessError(-1, '') + runner_base._single_action(0, 'echo', mock.Mock()) - @mock.patch("yardstick.benchmark.runners.base.subprocess") + @mock.patch.object(subprocess, 'check_output') def test__periodic_action(self, mock_subprocess): - mock_subprocess.check_output.side_effect = CalledProcessError(-1, '') - - base._periodic_action(0, "echo", mock.MagicMock()) + mock_subprocess.side_effect = subprocess.CalledProcessError(-1, '') + runner_base._periodic_action(0, 'echo', mock.Mock()) -class RunnerTestCase(unittest.TestCase): +class RunnerTestCase(ut_base.BaseUnitTestCase): def setUp(self): config = { @@ -86,7 +90,7 @@ class RunnerTestCase(unittest.TestCase): self.assertEqual(idle_result, actual_result) def test__run_benchmark(self): - runner = base.Runner(mock.Mock()) + runner = runner_base.Runner(mock.Mock()) with self.assertRaises(NotImplementedError): runner._run_benchmark(mock.Mock(), mock.Mock(), mock.Mock(), mock.Mock()) diff --git a/yardstick/tests/unit/benchmark/scenarios/availability/test_scenario_general.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_scenario_general.py index cd065c961..dbf3d83b2 100644 --- a/yardstick/tests/unit/benchmark/scenarios/availability/test_scenario_general.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_scenario_general.py @@ -13,6 +13,7 @@ import unittest from yardstick.benchmark.scenarios.availability import scenario_general from yardstick.common import exceptions as y_exc + class ScenarioGeneralTestCase(unittest.TestCase): @mock.patch.object(scenario_general, 'Director') @@ -37,19 +38,21 @@ class ScenarioGeneralTestCase(unittest.TestCase): 'index': 2}] } } - self.instance = scenario_general.ScenarioGeneral(self.scenario_cfg, None) + self.instance = scenario_general.ScenarioGeneral(self.scenario_cfg, + None) self.instance.setup() self.instance.director.verify.return_value = True def test_scenario_general_all_successful(self): - ret = {} self.instance.run(ret) self.instance.teardown() self.assertEqual(ret['sla_pass'], 1) - def test_scenario_general_exception(self): - self.instance.director.createActionPlayer.side_effect = KeyError('Wrong') + @mock.patch.object(scenario_general.LOG, 'exception') + def test_scenario_general_exception(self, *args): + self.instance.director.createActionPlayer.side_effect = ( + KeyError('Wrong')) self.instance.director.data = {} ret = {} self.instance.run(ret) diff --git a/yardstick/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py b/yardstick/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py index 6b3532fa2..3bb8b9192 100644 --- a/yardstick/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py +++ b/yardstick/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from copy import deepcopy +import copy import mock import unittest @@ -440,6 +440,12 @@ class TestIXIARFC2544Profile(unittest.TestCase): result = r_f_c2544_profile._get_ixia_traffic_profile(profile_data, mac) self.assertIsNotNone(result) + def test__init__(self): + t_profile_data = copy.deepcopy(self.TRAFFIC_PROFILE) + t_profile_data['traffic_profile']['frame_rate'] = 12345678 + r_f_c2544_profile = ixia_rfc2544.IXIARFC2544Profile(t_profile_data) + self.assertEqual(12345678, r_f_c2544_profile.rate) + def test__get_ixia_traffic_profile_default_args(self): r_f_c2544_profile = ixia_rfc2544.IXIARFC2544Profile( self.TRAFFIC_PROFILE) @@ -521,7 +527,7 @@ class TestIXIARFC2544Profile(unittest.TestCase): traffic_generator.vnfd_helper.port_num.side_effect = ports_expected traffic_generator.client.return_value = True - traffic_profile = deepcopy(self.TRAFFIC_PROFILE) + traffic_profile = copy.deepcopy(self.TRAFFIC_PROFILE) traffic_profile.update({ "uplink_0": ["xe0"], "downlink_0": ["xe1", "xe2"], diff --git a/yardstick/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py b/yardstick/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py index 1c3acb6e5..3b095647c 100644 --- a/yardstick/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py +++ b/yardstick/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py @@ -1,4 +1,3 @@ - # Copyright (c) 2016-2017 Intel Corporation # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,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. -# from itertools import repeat, chain import os @@ -22,39 +20,21 @@ import time import mock import unittest -from yardstick.tests import STL_MOCKS from yardstick.common import utils -from yardstick.network_services.vnf_generic.vnf.base import VnfdHelper from yardstick.network_services import constants +from yardstick.network_services.vnf_generic.vnf import base as vnf_base +from yardstick.network_services.vnf_generic.vnf import prox_helpers +from yardstick.network_services.vnf_generic.vnf import sample_vnf -STLClient = mock.MagicMock() -stl_patch = mock.patch.dict("sys.modules", STL_MOCKS) -stl_patch.start() - -if stl_patch: - from yardstick.network_services.vnf_generic.vnf.sample_vnf import ScenarioHelper - from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxSocketHelper - from yardstick.network_services.vnf_generic.vnf.prox_helpers import PacketDump - from yardstick.network_services.vnf_generic.vnf.prox_helpers import CoreSocketTuple - from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxTestDataTuple - from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxDpdkVnfSetupEnvHelper - from yardstick.network_services.vnf_generic.vnf.prox_helpers import TotStatsTuple - from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxDataHelper - from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxResourceHelper - from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxProfileHelper - from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxMplsProfileHelper - from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxBngProfileHelper - from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxVpeProfileHelper - from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxlwAFTRProfileHelper class TestCoreTuple(unittest.TestCase): def test___init__(self): - core_tuple = CoreSocketTuple('core 5s6') + core_tuple = prox_helpers.CoreSocketTuple('core 5s6') self.assertEqual(core_tuple.core_id, 5) self.assertEqual(core_tuple.socket_id, 6) self.assertFalse(core_tuple.is_hyperthread()) - core_tuple = CoreSocketTuple('core 5s6h') + core_tuple = prox_helpers.CoreSocketTuple('core 5s6h') self.assertEqual(core_tuple.core_id, 5) self.assertEqual(core_tuple.socket_id, 6) self.assertTrue(core_tuple.is_hyperthread()) @@ -82,7 +62,7 @@ class TestCoreTuple(unittest.TestCase): for bad_input in bad_inputs: with self.assertRaises(ValueError): - CoreSocketTuple(bad_input) + prox_helpers.CoreSocketTuple(bad_input) def test_find_in_topology(self): topology_in = { @@ -94,20 +74,20 @@ class TestCoreTuple(unittest.TestCase): }, } - core_tuple = CoreSocketTuple('core 5s6') + core_tuple = prox_helpers.CoreSocketTuple('core 5s6') expected = 'a' result = core_tuple.find_in_topology(topology_in) self.assertEqual(result, expected) - core_tuple = CoreSocketTuple('core 5s6h') + core_tuple = prox_helpers.CoreSocketTuple('core 5s6h') expected = 'c' result = core_tuple.find_in_topology(topology_in) self.assertEqual(result, expected) def test_find_in_topology_negative(self): - core_tuple = CoreSocketTuple('core 6s5') + core_tuple = prox_helpers.CoreSocketTuple('core 6s5') with self.assertRaises(ValueError): # no socket key core_tuple.find_in_topology({}) @@ -120,7 +100,7 @@ class TestCoreTuple(unittest.TestCase): # no first value (as needed by non-hyperthread core) core_tuple.find_in_topology({5: {6: {'key1': []}}}) - core_tuple = CoreSocketTuple('core 6s5h') + core_tuple = prox_helpers.CoreSocketTuple('core 6s5h') with self.assertRaises(ValueError): # no second value (as needed by hyperthread core) core_tuple.find_in_topology({5: {6: {'key1': ['e']}}}) @@ -130,20 +110,21 @@ class TestTotStatsTuple(unittest.TestCase): def test___new___negative(self): with self.assertRaises(TypeError): # no values - TotStatsTuple() + prox_helpers.TotStatsTuple() with self.assertRaises(TypeError): # one, non-integer value - TotStatsTuple('a') + prox_helpers.TotStatsTuple('a') with self.assertRaises(TypeError): # too many values - TotStatsTuple(3, 4, 5, 6, 7) + prox_helpers.TotStatsTuple(3, 4, 5, 6, 7) class TestProxTestDataTuple(unittest.TestCase): def test___init__(self): - prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, 6, 7, 8, 9) + prox_test_data = prox_helpers.ProxTestDataTuple( + 1, 2, 3, 4, 5, 6, 7, 8, 9) self.assertEqual(prox_test_data.tolerated, 1) self.assertEqual(prox_test_data.tsc_hz, 2) self.assertEqual(prox_test_data.delta_rx, 3) @@ -155,22 +136,26 @@ class TestProxTestDataTuple(unittest.TestCase): self.assertEqual(prox_test_data.requested_pps, 9) def test_properties(self): - prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, 6, 7, 8, 9) + prox_test_data = prox_helpers.ProxTestDataTuple( + 1, 2, 3, 4, 5, 6, 7, 8, 9) self.assertEqual(prox_test_data.pkt_loss, 12.5) self.assertEqual(prox_test_data.tx_mpps, 1.6 / 1e6) self.assertEqual(prox_test_data.can_be_lost, 0) self.assertEqual(prox_test_data.drop_total, 1) self.assertFalse(prox_test_data.success) - prox_test_data = ProxTestDataTuple(10, 2, 3, 4, 5, 6, 997, 998, 9) + prox_test_data = prox_helpers.ProxTestDataTuple( + 10, 2, 3, 4, 5, 6, 997, 998, 9) self.assertTrue(prox_test_data.success) def test_pkt_loss_zero_division(self): - prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, 6, 7, 0, 9) + prox_test_data = prox_helpers.ProxTestDataTuple( + 1, 2, 3, 4, 5, 6, 7, 0, 9) self.assertEqual(prox_test_data.pkt_loss, 100.0) def test_get_samples(self): - prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, [6.1, 6.9, 6.4], 7, 8, 9) + prox_test_data = prox_helpers.ProxTestDataTuple( + 1, 2, 3, 4, 5, [6.1, 6.9, 6.4], 7, 8, 9) expected = { "Throughput": 1.2 / 1e6, @@ -206,7 +191,8 @@ class TestProxTestDataTuple(unittest.TestCase): @mock.patch('yardstick.LOG_RESULT', create=True) def test_log_data(self, mock_logger): my_mock_logger = mock.MagicMock() - prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, [6.1, 6.9, 6.4], 7, 8, 9) + prox_test_data = prox_helpers.ProxTestDataTuple( + 1, 2, 3, 4, 5, [6.1, 6.9, 6.4], 7, 8, 9) prox_test_data.log_data() my_mock_logger.debug.assert_not_called() @@ -222,23 +208,24 @@ class TestPacketDump(unittest.TestCase): PAYLOAD = "payload" def test__init__(self): - PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD) + prox_helpers.PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD) def test___str__(self): expected = '<PacketDump port: port_id payload: {}>'.format(self.PAYLOAD) - dump1 = PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD) + dump1 = prox_helpers.PacketDump( + "port_id", len(self.PAYLOAD), self.PAYLOAD) self.assertEqual(str(dump1), expected) def test_port_id(self): - p = PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD) + p = prox_helpers.PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD) self.assertEqual(p.port_id, "port_id") def test_data_len(self): - p = PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD) + p = prox_helpers.PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD) self.assertEqual(p.data_len, len(self.PAYLOAD)) def test_payload(self): - p = PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD) + p = prox_helpers.PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD) self.assertEqual(p.payload(), self.PAYLOAD) self.assertEqual(p.payload(3), self.PAYLOAD[3:]) @@ -301,33 +288,33 @@ class TestProxSocketHelper(unittest.TestCase): def _stop_mocks(self): self._mock_time_sleep.stop() - @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.socket') + @mock.patch.object(prox_helpers, 'socket') def test___init__(self, mock_socket): expected = mock_socket.socket() - prox = ProxSocketHelper() + prox = prox_helpers.ProxSocketHelper() result = prox._sock self.assertEqual(result, expected) def test_connect(self): mock_sock = mock.MagicMock() - prox = ProxSocketHelper(mock_sock) + prox = prox_helpers.ProxSocketHelper(mock_sock) prox.connect('10.20.30.40', 23456) mock_sock.connect.assert_called_once() def test_get_sock(self): mock_sock = mock.MagicMock() - prox = ProxSocketHelper(mock_sock) + prox = prox_helpers.ProxSocketHelper(mock_sock) result = prox.get_socket() self.assertIs(result, mock_sock) # TODO(elfoley): Split this into three tests - @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.select') + @mock.patch.object(prox_helpers, 'select') def test_get_data(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 = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) ret = prox.get_data() self.assertEqual(ret, "") self.assertEqual(len(prox._pkt_dumps), 0) @@ -349,7 +336,7 @@ class TestProxSocketHelper(unittest.TestCase): self.assertEqual(len(prox._pkt_dumps), 3) def test__parse_socket_data_mixed_data(self): - prox = ProxSocketHelper(mock.MagicMock()) + prox = prox_helpers.ProxSocketHelper(mock.MagicMock()) ret, _ = prox._parse_socket_data(PACKET_DUMP_NON_1, False) self.assertEqual(ret, 'not_a_dump,1,2') self.assertEqual(len(prox._pkt_dumps), 0) @@ -359,7 +346,7 @@ class TestProxSocketHelper(unittest.TestCase): self.assertEqual(len(prox._pkt_dumps), 1) def test__parse_socket_data_bad_data(self): - prox = ProxSocketHelper(mock.MagicMock()) + prox = prox_helpers.ProxSocketHelper(mock.MagicMock()) with self.assertRaises(ValueError): prox._parse_socket_data(PACKET_DUMP_BAD_1, False) @@ -370,7 +357,7 @@ class TestProxSocketHelper(unittest.TestCase): self.assertEqual(ret, 'pktdump,3') def test__parse_socket_data_pkt_dump_only(self): - prox = ProxSocketHelper(mock.MagicMock()) + prox = prox_helpers.ProxSocketHelper(mock.MagicMock()) ret, _ = prox._parse_socket_data('', True) self.assertFalse(ret) @@ -382,20 +369,20 @@ class TestProxSocketHelper(unittest.TestCase): def test_put_command(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.put_command("data") mock_socket.sendall.assert_called_once() def test_put_command_socket_error(self): mock_socket = mock.MagicMock() mock_socket.sendall.side_effect = OSError - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.put_command("data") mock_socket.sendall.assert_called_once() def test_get_packet_dump(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox._pkt_dumps = [] self.assertIsNone(prox.get_packet_dump()) @@ -405,61 +392,61 @@ class TestProxSocketHelper(unittest.TestCase): def test_stop_all_reset(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.stop_all_reset() mock_socket.sendall.assert_called() def test_stop_all(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.stop_all() mock_socket.sendall.assert_called() def test_stop(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.stop([3, 4, 5], 16) mock_socket.sendall.assert_called() def test_start_all(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.start_all() mock_socket.sendall.assert_called() def test_start(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.start([3, 4, 5]) mock_socket.sendall.assert_called() def test_reset_stats(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.reset_stats() mock_socket.sendall.assert_called() def test_set_pkt_size(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.set_pkt_size([3, 4, 5], 1024) self.assertEqual(mock_socket.sendall.call_count, 3) def test_set_value(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.set_value([3, 4, 5], 10, 20, 30) self.assertEqual(mock_socket.sendall.call_count, 3) def test_reset_values(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.reset_values([3, 4, 5]) self.assertEqual(mock_socket.sendall.call_count, 3) def test_set_speed(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.set_speed([3, 4, 5], 1000) self.assertEqual(mock_socket.sendall.call_count, 3) @@ -476,7 +463,7 @@ class TestProxSocketHelper(unittest.TestCase): ] mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.set_speed = set_speed = mock.MagicMock() prox.slope_speed(core_data, 5) self.assertEqual(set_speed.call_count, 20) @@ -487,7 +474,7 @@ class TestProxSocketHelper(unittest.TestCase): def test_set_pps(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.set_pps([3, 4, 5], 1000, 512) self.assertEqual(mock_socket.sendall.call_count, 3) @@ -501,7 +488,7 @@ class TestProxSocketHelper(unittest.TestCase): ] mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.get_data = mock.MagicMock(side_effect=latency_output) expected = ( @@ -524,7 +511,7 @@ class TestProxSocketHelper(unittest.TestCase): def test_get_all_tot_stats_error(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.get_data = mock.MagicMock(return_value='3,4,5') expected = [0, 0, 0, 0] result = prox.get_all_tot_stats() @@ -532,7 +519,7 @@ class TestProxSocketHelper(unittest.TestCase): def test_get_all_tot_stats(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.get_data = mock.MagicMock(return_value='3,4,5,6') expected = 3, 4, 5, 6 result = prox.get_all_tot_stats() @@ -540,7 +527,7 @@ class TestProxSocketHelper(unittest.TestCase): def test_hz(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.get_data = mock.MagicMock(return_value='3,4,5,6') expected = 6 result = prox.hz() @@ -554,16 +541,16 @@ class TestProxSocketHelper(unittest.TestCase): ] mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.get_data = mock.MagicMock(side_effect=core_stats) expected = 21, 24, 27, 14 result = prox.core_stats([3, 4, 5], 16) self.assertEqual(result, expected) - def test_multi_port_stats(self): - + @mock.patch.object(prox_helpers.LOG, 'error') + def test_multi_port_stats(self, *args): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + 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') expected = [[0, 1, 2, 3, 4, 5], [1, 1, 2, 3, 4, 5]] result = prox.multi_port_stats([0, 1]) @@ -593,7 +580,7 @@ class TestProxSocketHelper(unittest.TestCase): ] mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.get_data = mock.MagicMock(side_effect=port_stats) expected = [16, 26, 36, 46, 56, 66, 76, 86, 96, 106, 116, 126] result = prox.port_stats([3, 4, 5]) @@ -610,7 +597,7 @@ class TestProxSocketHelper(unittest.TestCase): ] mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.get_data = mock.MagicMock(side_effect=get_data_output) expected = { 'start_tot': start_tot, @@ -623,7 +610,7 @@ class TestProxSocketHelper(unittest.TestCase): def test_tot_stats(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.get_data = mock.MagicMock(return_value='3,4,5,6') expected = 3, 4, 5 result = prox.tot_stats() @@ -631,7 +618,7 @@ class TestProxSocketHelper(unittest.TestCase): def test_tot_ierrors(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.get_data = mock.MagicMock(return_value='3,4,5,6') expected = 3, 3 result = prox.tot_ierrors() @@ -639,25 +626,25 @@ class TestProxSocketHelper(unittest.TestCase): def test_set_count(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.set_count(432, [3, 4, 5]) self.assertEqual(mock_socket.sendall.call_count, 3) def test_dump_rx(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.dump_rx(3, 5, 8) mock_socket.sendall.assert_called_once() def test_quit(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.quit() mock_socket.sendall.assert_called() def test_force_quit(self): mock_socket = mock.MagicMock() - prox = ProxSocketHelper(mock_socket) + prox = prox_helpers.ProxSocketHelper(mock_socket) prox.force_quit() mock_socket.sendall.assert_called() @@ -769,8 +756,8 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): } def test_global_section(self): - setup_helper = ProxDpdkVnfSetupEnvHelper(mock.MagicMock(), mock.MagicMock(), - mock.MagicMock()) + setup_helper = prox_helpers.ProxDpdkVnfSetupEnvHelper( + mock.MagicMock(), mock.MagicMock(), mock.MagicMock()) setup_helper._prox_config_data = [('a', [])] @@ -818,8 +805,8 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): self.assertEqual(result, global_section[1]) def test_find_in_section(self): - setup_helper = ProxDpdkVnfSetupEnvHelper(mock.MagicMock(), mock.MagicMock(), - mock.MagicMock()) + setup_helper = prox_helpers.ProxDpdkVnfSetupEnvHelper( + mock.MagicMock(), mock.MagicMock(), mock.MagicMock()) setup_helper._prox_config_data = [ ('global', [ @@ -872,44 +859,51 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): # empty string input_str = '' expected = '' - result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat') + result = (prox_helpers.ProxDpdkVnfSetupEnvHelper. + _replace_quoted_with_value(input_str, 'cat')) self.assertEqual(result, expected) # no quoted substring input_str = 'lion tiger bear' expected = 'lion tiger bear' - result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat') + result = (prox_helpers.ProxDpdkVnfSetupEnvHelper. + _replace_quoted_with_value(input_str, 'cat')) self.assertEqual(result, expected) # partially quoted substring input_str = 'lion "tiger bear' expected = 'lion "tiger bear' - result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat') + result = (prox_helpers.ProxDpdkVnfSetupEnvHelper. + _replace_quoted_with_value(input_str, 'cat')) self.assertEqual(result, expected) # one quoted substring input_str = 'lion "tiger" bear' expected = 'lion "cat" bear' - result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat') + result = (prox_helpers.ProxDpdkVnfSetupEnvHelper. + _replace_quoted_with_value(input_str, 'cat')) self.assertEqual(result, expected) # two quoted substrings input_str = 'lion "tiger" bear "shark" whale' expected = 'lion "cat" bear "shark" whale' - result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat') + result = (prox_helpers.ProxDpdkVnfSetupEnvHelper. + _replace_quoted_with_value(input_str, 'cat')) self.assertEqual(result, expected) # two quoted substrings, both replaced input_str = 'lion "tiger" bear "shark" whale' expected = 'lion "cat" bear "cat" whale' - result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat', 2) + result = (prox_helpers.ProxDpdkVnfSetupEnvHelper. + _replace_quoted_with_value(input_str, 'cat', 2)) self.assertEqual(result, expected) def test__get_tx_port(self): # no data input_data = {'section1': []} expected = -1 - result = ProxDpdkVnfSetupEnvHelper._get_tx_port('section1', input_data) + result = (prox_helpers.ProxDpdkVnfSetupEnvHelper. + _get_tx_port('section1', input_data)) self.assertEqual(result, expected) # data for other section @@ -921,7 +915,8 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): ], } expected = -1 - result = ProxDpdkVnfSetupEnvHelper._get_tx_port('section1', input_data) + result = (prox_helpers.ProxDpdkVnfSetupEnvHelper. + _get_tx_port('section1', input_data)) self.assertEqual(result, expected) # data for section @@ -930,7 +925,8 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): ('tx port', '3'), ] expected = 3 - result = ProxDpdkVnfSetupEnvHelper._get_tx_port('section1', input_data) + result = (prox_helpers.ProxDpdkVnfSetupEnvHelper. + _get_tx_port('section1', input_data)) self.assertEqual(result, expected) # more data for section, @@ -939,14 +935,16 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): ('tx port', '1', 'and more', 234), ]) expected = 1 - result = ProxDpdkVnfSetupEnvHelper._get_tx_port('section1', input_data) + result = (prox_helpers.ProxDpdkVnfSetupEnvHelper. + _get_tx_port('section1', input_data)) self.assertEqual(result, expected) # TODO(elfoley): Split this into several smaller tests def test_write_prox_config(self): input_data = {} expected = '' - result = ProxDpdkVnfSetupEnvHelper.write_prox_config(input_data) + result = (prox_helpers.ProxDpdkVnfSetupEnvHelper. + write_prox_config(input_data)) self.assertEqual(result, expected) input_data = [ @@ -956,7 +954,8 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): ], ] expected = '[section1]' - result = ProxDpdkVnfSetupEnvHelper.write_prox_config(input_data) + result = (prox_helpers.ProxDpdkVnfSetupEnvHelper. + write_prox_config(input_data)) self.assertEqual(result, expected) input_data = [ @@ -983,12 +982,13 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): 'key3=234', 'key4=multi-line\n\tvalue', ]) - result = ProxDpdkVnfSetupEnvHelper.write_prox_config(input_data) + result = (prox_helpers.ProxDpdkVnfSetupEnvHelper. + write_prox_config(input_data)) self.assertEqual(result, expected) def test_prox_config_data(self): - setup_helper = ProxDpdkVnfSetupEnvHelper(mock.MagicMock(), mock.MagicMock(), - mock.MagicMock()) + setup_helper = prox_helpers.ProxDpdkVnfSetupEnvHelper( + mock.MagicMock(), mock.MagicMock(), mock.MagicMock()) setup_helper.config_queue = config_queue = mock.MagicMock() config_queue.get.return_value = expected = [('s', [('a', 3), ('b', 45)])] @@ -1009,7 +1009,7 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): vnfd_helper = mock.MagicMock() ssh_helper = mock.MagicMock() - scenario_helper = ScenarioHelper('vnf1') + scenario_helper = sample_vnf.ScenarioHelper('vnf1') scenario_helper.scenario_cfg = { 'task_path': 'a/b', 'options': { @@ -1017,7 +1017,8 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): }, } - helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper) + helper = prox_helpers.ProxDpdkVnfSetupEnvHelper( + vnfd_helper, ssh_helper, scenario_helper) helper.copy_to_target = mock.MagicMock(return_value='3') helper.generate_prox_config_file = mock.MagicMock(return_value='4') helper.upload_prox_config = mock.MagicMock(return_value='5') @@ -1043,7 +1044,7 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): mock_find_path.side_effect = ['1', '2'] vnfd_helper = mock.MagicMock() ssh_helper = mock.MagicMock() - scenario_helper = ScenarioHelper('vnf1') + scenario_helper = sample_vnf.ScenarioHelper('vnf1') scenario_helper.scenario_cfg = { 'task_path': 'a/b', 'options': { @@ -1052,7 +1053,8 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): } vnfd_helper.port_pairs.all_ports = ['xe0', 'xe1', 'xe2', 'xe3'] - helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper) + helper = prox_helpers.ProxDpdkVnfSetupEnvHelper( + vnfd_helper, ssh_helper, scenario_helper) helper.copy_to_target = mock.MagicMock(side_effect=['33', '34', '35']) helper.generate_prox_config_file = mock.MagicMock(return_value='44') helper.upload_prox_config = mock.MagicMock(return_value='55') @@ -1078,7 +1080,7 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): mock_find_path.side_effect = ['1', '2'] + [str(i) for i in range(len(vnf1['prox_files']))] vnfd_helper = mock.MagicMock() ssh_helper = mock.MagicMock() - scenario_helper = ScenarioHelper('vnf1') + scenario_helper = sample_vnf.ScenarioHelper('vnf1') scenario_helper.scenario_cfg = { 'task_path': 'a/b', 'options': { @@ -1086,7 +1088,8 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): }, } - helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper) + helper = prox_helpers.ProxDpdkVnfSetupEnvHelper( + vnfd_helper, ssh_helper, scenario_helper) helper.copy_to_target = mock.MagicMock(side_effect=['33', '34', '35']) helper.generate_prox_config_file = mock.MagicMock(return_value='44') helper.upload_prox_config = mock.MagicMock(return_value='55') @@ -1115,7 +1118,7 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): vnfd_helper = mock.Mock() ssh_helper = mock.Mock() ssh_helper.join_bin_path.return_value = '/opt/nsb_bin/prox' - scenario_helper = ScenarioHelper('vnf1') + scenario_helper = sample_vnf.ScenarioHelper('vnf1') scenario_helper.scenario_cfg = { 'task_path': 'a/b', 'options': { @@ -1126,8 +1129,8 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): expected = ("sudo bash -c 'cd /opt/nsb_bin; /opt/nsb_bin/prox -o cli " "-f -f /tmp/prox.cfg '") - helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, - scenario_helper) + helper = prox_helpers.ProxDpdkVnfSetupEnvHelper( + vnfd_helper, ssh_helper, scenario_helper) with mock.patch.object(helper, 'build_config_file') as mock_cfg_file: helper.remote_path = '/tmp/prox.cfg' prox_cmd = helper.build_config() @@ -1139,7 +1142,8 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): ssh_helper = mock.MagicMock() scenario_helper = mock.MagicMock() - helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper) + helper = prox_helpers.ProxDpdkVnfSetupEnvHelper( + vnfd_helper, ssh_helper, scenario_helper) helper.additional_files = {"ipv4.lua": "/tmp/ipv4.lua"} res = helper._insert_additional_file('dofile("ipv4.lua")') self.assertEqual(res, 'dofile("/tmp/ipv4.lua")') @@ -1155,11 +1159,12 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): mock_parser_type.side_effect = init - vnfd_helper = VnfdHelper(self.VNFD0) + vnfd_helper = vnf_base.VnfdHelper(self.VNFD0) ssh_helper = mock.MagicMock() scenario_helper = mock.MagicMock() - helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper) + helper = prox_helpers.ProxDpdkVnfSetupEnvHelper( + vnfd_helper, ssh_helper, scenario_helper) helper.additional_files = {} expected = [] @@ -1244,7 +1249,8 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): ssh_helper = mock.MagicMock() scenario_helper = mock.MagicMock() - helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper) + helper = prox_helpers.ProxDpdkVnfSetupEnvHelper( + vnfd_helper, ssh_helper, scenario_helper) helper.additional_files = {} helper.remote_prox_file_name = 'remote' vnfd_helper.interfaces = [ @@ -1290,7 +1296,8 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): ssh_helper = mock.MagicMock() scenario_helper = mock.MagicMock() - helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper) + helper = prox_helpers.ProxDpdkVnfSetupEnvHelper( + vnfd_helper, ssh_helper, scenario_helper) expected = 'a/b' result = helper.put_string_to_file('my long string', 'a/b') @@ -1302,7 +1309,8 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): ssh_helper = mock.MagicMock() scenario_helper = mock.MagicMock() - helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper) + helper = prox_helpers.ProxDpdkVnfSetupEnvHelper( + vnfd_helper, ssh_helper, scenario_helper) expected = '/tmp/c' result = helper.copy_to_target('a/b', 'c') self.assertEqual(result, expected) @@ -1313,7 +1321,8 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase): ssh_helper = mock.MagicMock() scenario_helper = mock.MagicMock() - helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper) + helper = prox_helpers.ProxDpdkVnfSetupEnvHelper( + vnfd_helper, ssh_helper, scenario_helper) helper.write_prox_config = mock.MagicMock(return_value='a long string') expected = '/tmp/a' result = helper.upload_prox_config('a', {}) @@ -1432,7 +1441,8 @@ class TestProxResourceHelper(unittest.TestCase): 'nor here', 'and still not', ] - result = ProxResourceHelper.find_pci('target', input_str_list) + result = prox_helpers.ProxResourceHelper.find_pci('target', + input_str_list) self.assertFalse(result) input_str_list = [ @@ -1441,13 +1451,14 @@ class TestProxResourceHelper(unittest.TestCase): 'this is a target', 'did we miss it', ] - result = ProxResourceHelper.find_pci('target', input_str_list) + result = prox_helpers.ProxResourceHelper.find_pci('target', + input_str_list) self.assertTrue(result) @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.RETRY_INTERVAL', 0) @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.ProxSocketHelper') def test_sut(self, *args): - helper = ProxResourceHelper(mock.MagicMock()) + helper = prox_helpers.ProxResourceHelper(mock.MagicMock()) self.assertIsNone(helper.client) result = helper.sut self.assertIsNotNone(result) @@ -1458,7 +1469,7 @@ class TestProxResourceHelper(unittest.TestCase): setup_helper = mock.MagicMock() setup_helper.find_in_section.return_value = expected = 'prox type' - helper = ProxResourceHelper(setup_helper) + helper = prox_helpers.ProxResourceHelper(setup_helper) self.assertIsNone(helper._test_type) self.assertEqual(helper.test_type, expected) @@ -1466,7 +1477,7 @@ class TestProxResourceHelper(unittest.TestCase): self.assertEqual(helper.test_type, expected) def test_collect_collectd_kpi(self): - helper = ProxResourceHelper(mock.MagicMock()) + helper = prox_helpers.ProxResourceHelper(mock.MagicMock()) helper.resource = resource = mock.MagicMock() resource.check_if_system_agent_running.return_value = 0, '1234' @@ -1478,7 +1489,7 @@ class TestProxResourceHelper(unittest.TestCase): self.assertDictEqual(result, expected) def test_collect_kpi(self): - helper = ProxResourceHelper(mock.MagicMock()) + helper = prox_helpers.ProxResourceHelper(mock.MagicMock()) helper._queue = queue = mock.MagicMock() helper._result = {'z': 123} helper.resource = resource = mock.MagicMock() @@ -1503,7 +1514,7 @@ class TestProxResourceHelper(unittest.TestCase): setup_helper = mock.MagicMock() setup_helper.vnfd_helper.interfaces = [] - helper = ProxResourceHelper(setup_helper) + helper = prox_helpers.ProxResourceHelper(setup_helper) result = helper._connect() self.assertIs(result, client) @@ -1515,41 +1526,41 @@ class TestProxResourceHelper(unittest.TestCase): def test_run_traffic(self): setup_helper = mock.MagicMock() - helper = ProxResourceHelper(setup_helper) + helper = prox_helpers.ProxResourceHelper(setup_helper) traffic_profile = mock.MagicMock(**{"done": True}) helper.run_traffic(traffic_profile) self.assertEqual(helper._terminated.value, 1) def test__run_traffic_once(self): setup_helper = mock.MagicMock() - helper = ProxResourceHelper(setup_helper) + helper = prox_helpers.ProxResourceHelper(setup_helper) traffic_profile = mock.MagicMock(**{"done": True}) helper._run_traffic_once(traffic_profile) self.assertEqual(helper._terminated.value, 1) def test_start_collect(self): setup_helper = mock.MagicMock() - helper = ProxResourceHelper(setup_helper) + helper = prox_helpers.ProxResourceHelper(setup_helper) helper.resource = resource = mock.MagicMock() self.assertIsNone(helper.start_collect()) resource.start.assert_called_once() def test_terminate(self): setup_helper = mock.MagicMock() - helper = ProxResourceHelper(setup_helper) + helper = prox_helpers.ProxResourceHelper(setup_helper) with self.assertRaises(NotImplementedError): helper.terminate() def test_up_post(self): setup_helper = mock.MagicMock() - helper = ProxResourceHelper(setup_helper) + helper = prox_helpers.ProxResourceHelper(setup_helper) helper.client = expected = mock.MagicMock() result = helper.up_post() self.assertEqual(result, expected) def test_execute(self): setup_helper = mock.MagicMock() - helper = ProxResourceHelper(setup_helper) + helper = prox_helpers.ProxResourceHelper(setup_helper) helper.client = mock.MagicMock() expected = helper.client.my_command() @@ -1574,7 +1585,7 @@ class TestProxDataHelper(unittest.TestCase): 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]] - data_helper = ProxDataHelper( + data_helper = prox_helpers.ProxDataHelper( vnfd_helper, sut, pkt_size, 25, None, constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS) @@ -1589,7 +1600,8 @@ class TestProxDataHelper(unittest.TestCase): sut = mock.MagicMock() sut.multi_port_stats.return_value = [[0, 1, 2, 3, 4, 5], [1, 11, 12, 3, 4, 5]] - data_helper = ProxDataHelper(vnfd_helper, sut, None, None, None, None) + data_helper = prox_helpers.ProxDataHelper( + vnfd_helper, sut, None, None, None, None) expected = { 'xe0': { @@ -1612,17 +1624,19 @@ class TestProxDataHelper(unittest.TestCase): sut = mock.MagicMock() sut.port_stats.return_value = list(range(10)) - data_helper = ProxDataHelper(vnfd_helper, sut, None, None, + data_helper = prox_helpers.ProxDataHelper(vnfd_helper, sut, None, None, 5.4, constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS) data_helper._totals_and_pps = 12, 32, 4.5 data_helper.tsc_hz = 9.8 - data_helper.measured_stats = {'delta': TotStatsTuple(6.1, 6.2, 6.3, 6.4)} + data_helper.measured_stats = { + 'delta': prox_helpers.TotStatsTuple(6.1, 6.2, 6.3, 6.4)} data_helper.latency = 7 self.assertIsNone(data_helper.result_tuple) self.assertEqual(data_helper.line_speed, 10000000000) - expected = ProxTestDataTuple(5.4, 9.8, 6.1, 6.2, 6.3, 7, 12, 32, 4.5) + expected = prox_helpers.ProxTestDataTuple( + 5.4, 9.8, 6.1, 6.2, 6.3, 7, 12, 32, 4.5) with data_helper: pass @@ -1635,7 +1649,8 @@ class TestProxDataHelper(unittest.TestCase): def test___enter___negative(self): vnfd_helper = mock.MagicMock() - data_helper = ProxDataHelper(vnfd_helper, None, None, None, None, None) + data_helper = prox_helpers.ProxDataHelper( + vnfd_helper, None, None, None, None, None) vnfd_helper.port_pairs.all_ports = [] with self.assertRaises(AssertionError): @@ -1654,17 +1669,18 @@ class TestProxDataHelper(unittest.TestCase): start = (3, 4, 1, 2) end = (9, 7, 6, 8) - sut = ProxSocketHelper(mock.MagicMock()) + sut = prox_helpers.ProxSocketHelper(mock.MagicMock()) sut.get_all_tot_stats = mock.MagicMock(side_effect=[start, end]) - data_helper = ProxDataHelper(vnfd_helper, sut, None, None, 5.4, None) + data_helper = prox_helpers.ProxDataHelper( + vnfd_helper, sut, None, None, 5.4, None) self.assertIsNone(data_helper.measured_stats) expected = { 'start_tot': start, 'end_tot': end, - 'delta': TotStatsTuple(6, 3, 5, 6), + 'delta': prox_helpers.TotStatsTuple(6, 3, 5, 6), } with data_helper.measure_tot_stats(): pass @@ -1678,7 +1694,8 @@ class TestProxDataHelper(unittest.TestCase): sut = mock.MagicMock() sut.hz.return_value = '54.6' - data_helper = ProxDataHelper(vnfd_helper, sut, None, None, None, None) + data_helper = prox_helpers.ProxDataHelper( + vnfd_helper, sut, None, None, None, None) self.assertIsNone(data_helper.tsc_hz) @@ -1697,12 +1714,13 @@ class TestProxProfileHelper(unittest.TestCase): mock_type2.__prox_profile_type__ = 'my_type' mock_utils.itersubclasses.return_value = [mock_type1, mock_type2] - self.assertEqual(ProxProfileHelper.get_cls('my_type'), mock_type2) + self.assertEqual(prox_helpers.ProxProfileHelper.get_cls('my_type'), + mock_type2) @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.utils') def test_get_cls_default(self, mock_utils): mock_utils.itersubclasses.return_value = [] - ProxProfileHelper.get_cls('my_type') + prox_helpers.ProxProfileHelper.get_cls('my_type') @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.SocketTopology') def test_cpu_topology(self, mock_socket_topology): @@ -1711,7 +1729,7 @@ class TestProxProfileHelper(unittest.TestCase): resource_helper = mock.MagicMock() resource_helper.setup_helper.ssh_helper.execute.return_value = 0, 'output', '' - helper = ProxProfileHelper(resource_helper) + helper = prox_helpers.ProxProfileHelper(resource_helper) self.assertIsNone(helper._cpu_topology) result = helper.cpu_topology self.assertEqual(result, 432) @@ -1723,7 +1741,7 @@ class TestProxProfileHelper(unittest.TestCase): resource_helper = mock.MagicMock() resource_helper.setup_helper.prox_config_data = [] - helper = ProxProfileHelper(resource_helper) + helper = prox_helpers.ProxProfileHelper(resource_helper) helper._cpu_topology = [] expected = [] @@ -1751,7 +1769,7 @@ class TestProxProfileHelper(unittest.TestCase): ]), ] - helper = ProxProfileHelper(resource_helper) + helper = prox_helpers.ProxProfileHelper(resource_helper) helper._cpu_topology = { 1: { 3: { @@ -1781,7 +1799,7 @@ class TestProxProfileHelper(unittest.TestCase): resource_helper = mock.MagicMock() resource_helper.setup_helper.prox_config_data = [] - helper = ProxProfileHelper(resource_helper) + helper = prox_helpers.ProxProfileHelper(resource_helper) helper._cpu_topology = [] expected = [] @@ -1809,7 +1827,7 @@ class TestProxProfileHelper(unittest.TestCase): ]), ] - helper = ProxProfileHelper(resource_helper) + helper = prox_helpers.ProxProfileHelper(resource_helper) helper._cpu_topology = { 1: { 3: { @@ -1835,7 +1853,7 @@ class TestProxProfileHelper(unittest.TestCase): self.assertIs(result, helper.latency_cores) def test_all_rx_cores(self): - helper = ProxBngProfileHelper(mock.MagicMock()) + helper = prox_helpers.ProxBngProfileHelper(mock.MagicMock()) helper._latency_cores = expected = [3, 4, 6] helper._test_cores = [5, 2, 1] @@ -1865,7 +1883,7 @@ class TestProxProfileHelper(unittest.TestCase): ]), ] - helper = ProxProfileHelper(resource_helper) + helper = prox_helpers.ProxProfileHelper(resource_helper) helper._cpu_topology = { 0: { 1: { @@ -1891,7 +1909,7 @@ class TestProxProfileHelper(unittest.TestCase): resource_helper = mock.MagicMock() resource_helper.setup_helper.vnfd_helper.interfaces = [] - helper = ProxProfileHelper(resource_helper) + helper = prox_helpers.ProxProfileHelper(resource_helper) helper._latency_cores = [] expected = [] @@ -1910,7 +1928,7 @@ class TestProxProfileHelper(unittest.TestCase): setup_helper = mock.MagicMock() setup_helper.vnfd_helper.interfaces = [] - helper = ProxProfileHelper(setup_helper) + helper = prox_helpers.ProxProfileHelper(setup_helper) helper._cpu_topology = { 0: { 1: { @@ -1975,7 +1993,7 @@ class TestProxProfileHelper(unittest.TestCase): resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2)) resource_helper.sut.port_stats.return_value = list(range(10)) - helper = ProxProfileHelper(resource_helper) + helper = prox_helpers.ProxProfileHelper(resource_helper) helper.run_test(120, 5, 6.5, constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS) @@ -2008,7 +2026,7 @@ class TestProxMplsProfileHelper(unittest.TestCase): ]), ] - helper = ProxMplsProfileHelper(resource_helper) + helper = prox_helpers.ProxMplsProfileHelper(resource_helper) helper._cpu_topology = { 0: { 1: { @@ -2035,7 +2053,7 @@ class TestProxMplsProfileHelper(unittest.TestCase): def test_traffic_context(self): setup_helper = mock.MagicMock() - helper = ProxMplsProfileHelper(setup_helper) + helper = prox_helpers.ProxMplsProfileHelper(setup_helper) with helper.traffic_context(120, 5.4): pass @@ -2078,7 +2096,7 @@ class TestProxBngProfileHelper(unittest.TestCase): ]), ] - helper = ProxBngProfileHelper(resource_helper) + helper = prox_helpers.ProxBngProfileHelper(resource_helper) helper._cpu_topology = { 0: { 1: { @@ -2122,7 +2140,7 @@ class TestProxBngProfileHelper(unittest.TestCase): resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2)) resource_helper.sut.port_stats.return_value = list(range(10)) - helper = ProxBngProfileHelper(resource_helper) + helper = prox_helpers.ProxBngProfileHelper(resource_helper) helper.run_test(120, 5, 6.5, constants.NIC_GBPS_DEFAULT * constants.ONE_GIGABIT_IN_BITS) @@ -2159,7 +2177,7 @@ class TestProxVpeProfileHelper(unittest.TestCase): ]), ] - helper = ProxVpeProfileHelper(resource_helper) + helper = prox_helpers.ProxVpeProfileHelper(resource_helper) helper._cpu_topology = { 0: { 1: { @@ -2206,7 +2224,7 @@ class TestProxVpeProfileHelper(unittest.TestCase): ]), ] - helper = ProxVpeProfileHelper(resource_helper) + helper = prox_helpers.ProxVpeProfileHelper(resource_helper) helper._port_list = { 0: { 1: { @@ -2240,7 +2258,7 @@ class TestProxVpeProfileHelper(unittest.TestCase): resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2)) resource_helper.sut.port_stats.return_value = list(range(10)) - helper = ProxVpeProfileHelper(resource_helper) + 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 @@ -2273,7 +2291,7 @@ class TestProxlwAFTRProfileHelper(unittest.TestCase): ]), ] - helper = ProxlwAFTRProfileHelper(resource_helper) + helper = prox_helpers.ProxlwAFTRProfileHelper(resource_helper) helper._cpu_topology = { 0: { 1: { @@ -2320,7 +2338,7 @@ class TestProxlwAFTRProfileHelper(unittest.TestCase): ]), ] - helper = ProxlwAFTRProfileHelper(resource_helper) + helper = prox_helpers.ProxlwAFTRProfileHelper(resource_helper) helper._port_list = { 0: { 1: { @@ -2354,7 +2372,7 @@ class TestProxlwAFTRProfileHelper(unittest.TestCase): resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2)) resource_helper.sut.port_stats.return_value = list(range(10)) - helper = ProxlwAFTRProfileHelper(resource_helper) + 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 |