aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ansible/roles/cpu_pin_local_teardown/tasks/main.yaml (renamed from ansible/roles/cpu_pin_local_teardowm/tasks/main.yaml)0
-rw-r--r--ansible/roles/vcpu_pin_set_setup/tasks/main.yaml2
-rwxr-xr-xapi/api-prepare.sh3
-rw-r--r--api/resources/env_action.py30
-rw-r--r--docker/Dockerfile5
-rw-r--r--docs/release/release-notes/release-notes.rst89
-rw-r--r--docs/testing/user/userguide/04-installation.rst20
-rwxr-xr-xinstall.sh4
-rwxr-xr-xnsb_setup.sh2
-rw-r--r--requirements.txt4
-rw-r--r--samples/vnf_samples/vnf_descriptors/tg_ping_tpl.yaml9
-rw-r--r--samples/vnf_samples/vnf_descriptors/tg_rfc2544_tpl.yaml9
-rw-r--r--samples/vnf_samples/vnf_descriptors/tg_rfc2544_tpl_4port.yaml103
-rw-r--r--samples/vnf_samples/vnf_descriptors/tg_trex_tpl.yaml9
-rw-r--r--samples/vnf_samples/vnf_descriptors/vpe_vnf.yaml10
-rw-r--r--samples/vnf_samples/vnf_descriptors/vpe_vnf_4port.yaml99
-rw-r--r--tests/opnfv/test_cases/opnfv_yardstick_tc008.yaml3
-rw-r--r--tests/opnfv/test_cases/opnfv_yardstick_tc019.yaml4
-rw-r--r--tests/opnfv/test_cases/opnfv_yardstick_tc025.yaml4
-rw-r--r--tests/opnfv/test_cases/opnfv_yardstick_tc050.yaml20
-rw-r--r--tests/opnfv/test_cases/opnfv_yardstick_tc052.yaml2
-rw-r--r--tests/opnfv/test_cases/opnfv_yardstick_tc053.yaml2
-rw-r--r--tests/opnfv/test_cases/opnfv_yardstick_tc054.yaml12
-rw-r--r--tests/opnfv/test_cases/opnfv_yardstick_tc077.yaml63
-rw-r--r--tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-ha_daily.yaml32
-rw-r--r--tests/unit/benchmark/contexts/test_heat.py7
-rw-r--r--tests/unit/benchmark/contexts/test_model.py139
-rw-r--r--tests/unit/benchmark/core/test_plugin.py8
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py6
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_attacker_general.py4
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_attacker_process.py4
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_monitor_command.py2
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_monitor_general.py6
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_monitor_process.py4
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_operation_general.py6
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_result_checker_general.py16
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_scenario_general.py6
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_util.py32
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_cachestat.py14
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_computecapacity.py6
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_cpuload.py28
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_cyclictest.py38
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_lmbench.py18
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_memload.py14
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_plugintest.py6
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_ramspeed.py18
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_unixbench.py26
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_iperf3.py52
-rwxr-xr-xtests/unit/benchmark/scenarios/networking/test_netperf.py26
-rwxr-xr-xtests/unit/benchmark/scenarios/networking/test_netperf_node.py26
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_netutilization.py18
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_networkcapacity.py6
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_nstat.py8
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_ping.py8
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_ping6.py18
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_pktgen.py46
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py46
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py186
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_sfc.py36
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_vnf_generic.py12
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_vsperf.py20
-rw-r--r--tests/unit/benchmark/scenarios/storage/test_fio.py34
-rw-r--r--tests/unit/benchmark/scenarios/storage/test_storagecapacity.py10
-rw-r--r--tests/unit/network_services/nfvi/test_resource.py6
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py16
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py28
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py28
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py14
-rw-r--r--tests/unit/orchestrator/__init__.py0
-rw-r--r--tests/unit/orchestrator/test_heat.py146
-rw-r--r--tests/unit/test_ssh.py56
-rw-r--r--yardstick/benchmark/contexts/heat.py19
-rw-r--r--yardstick/benchmark/contexts/model.py27
-rw-r--r--yardstick/benchmark/contexts/node.py16
-rw-r--r--yardstick/benchmark/core/plugin.py72
-rwxr-xr-xyardstick/benchmark/runners/base.py7
-rw-r--r--yardstick/benchmark/runners/iteration.py8
-rw-r--r--yardstick/benchmark/scenarios/availability/attacker/attacker_baremetal.py36
-rw-r--r--yardstick/benchmark/scenarios/availability/attacker/attacker_general.py15
-rw-r--r--yardstick/benchmark/scenarios/availability/attacker/attacker_process.py15
-rwxr-xr-xyardstick/benchmark/scenarios/availability/ha_tools/check_process_python.bash2
-rwxr-xr-xyardstick/benchmark/scenarios/availability/ha_tools/fault_process_kill.bash6
-rw-r--r--yardstick/benchmark/scenarios/availability/ha_tools/nova/create_flavor.bash2
-rw-r--r--yardstick/benchmark/scenarios/availability/ha_tools/nova/delete_flavor.bash2
-rw-r--r--yardstick/benchmark/scenarios/availability/ha_tools/nova/show_flavors.bash2
-rwxr-xr-xyardstick/benchmark/scenarios/availability/ha_tools/start_service.bash16
-rwxr-xr-xyardstick/benchmark/scenarios/availability/ha_tools/stop_service.bash17
-rw-r--r--yardstick/benchmark/scenarios/availability/monitor/monitor_command.py19
-rw-r--r--yardstick/benchmark/scenarios/availability/monitor/monitor_general.py11
-rw-r--r--yardstick/benchmark/scenarios/availability/monitor/monitor_process.py10
-rw-r--r--yardstick/benchmark/scenarios/availability/operation/operation_general.py79
-rw-r--r--yardstick/benchmark/scenarios/availability/result_checker/result_checker_general.py52
-rw-r--r--yardstick/benchmark/scenarios/availability/scenario_general.py14
-rwxr-xr-xyardstick/benchmark/scenarios/availability/serviceha.py7
-rw-r--r--yardstick/benchmark/scenarios/availability/util.py25
-rw-r--r--yardstick/benchmark/scenarios/compute/cachestat.py12
-rw-r--r--yardstick/benchmark/scenarios/compute/computecapacity.py10
-rw-r--r--yardstick/benchmark/scenarios/compute/cpuload.py10
-rw-r--r--yardstick/benchmark/scenarios/compute/cyclictest.py27
-rw-r--r--yardstick/benchmark/scenarios/compute/lmbench.py10
-rw-r--r--yardstick/benchmark/scenarios/compute/memload.py10
-rw-r--r--yardstick/benchmark/scenarios/compute/perf.py10
-rw-r--r--yardstick/benchmark/scenarios/compute/plugintest.py11
-rw-r--r--yardstick/benchmark/scenarios/compute/ramspeed.py10
-rw-r--r--yardstick/benchmark/scenarios/compute/unixbench.py10
-rw-r--r--yardstick/benchmark/scenarios/networking/iperf3.py21
-rwxr-xr-xyardstick/benchmark/scenarios/networking/netperf.py20
-rwxr-xr-xyardstick/benchmark/scenarios/networking/netperf_node.py23
-rw-r--r--yardstick/benchmark/scenarios/networking/netutilization.py10
-rw-r--r--yardstick/benchmark/scenarios/networking/networkcapacity.py10
-rw-r--r--yardstick/benchmark/scenarios/networking/nstat.py10
-rw-r--r--yardstick/benchmark/scenarios/networking/ping.py18
-rw-r--r--yardstick/benchmark/scenarios/networking/ping6.py15
-rw-r--r--yardstick/benchmark/scenarios/networking/pktgen.py22
-rw-r--r--yardstick/benchmark/scenarios/networking/pktgen_dpdk.py55
-rw-r--r--yardstick/benchmark/scenarios/networking/pktgen_dpdk_benchmark.bash196
-rw-r--r--yardstick/benchmark/scenarios/networking/pktgen_dpdk_throughput.py226
-rw-r--r--yardstick/benchmark/scenarios/networking/sfc.py59
-rw-r--r--yardstick/benchmark/scenarios/networking/testpmd_rev.bash69
-rw-r--r--yardstick/benchmark/scenarios/networking/vnf_generic.py8
-rw-r--r--yardstick/benchmark/scenarios/networking/vsperf.py10
-rw-r--r--yardstick/benchmark/scenarios/storage/fio.py10
-rw-r--r--yardstick/benchmark/scenarios/storage/storagecapacity.py12
-rw-r--r--yardstick/common/constants.py2
-rw-r--r--yardstick/common/openstack_utils.py6
-rw-r--r--yardstick/common/utils.py19
-rw-r--r--yardstick/dispatcher/http.py7
-rw-r--r--yardstick/network_services/nfvi/resource.py12
-rw-r--r--yardstick/network_services/vnf_generic/vnf/tg_ping.py12
-rw-r--r--yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py12
-rw-r--r--yardstick/network_services/vnf_generic/vnf/tg_trex.py15
-rw-r--r--yardstick/network_services/vnf_generic/vnf/vpe_vnf.py16
-rw-r--r--yardstick/network_services/vnf_generic/vnfdgen.py2
-rw-r--r--yardstick/orchestrator/heat.py97
-rw-r--r--yardstick/ssh.py26
135 files changed, 2378 insertions, 1035 deletions
diff --git a/ansible/roles/cpu_pin_local_teardowm/tasks/main.yaml b/ansible/roles/cpu_pin_local_teardown/tasks/main.yaml
index 29475421d..29475421d 100644
--- a/ansible/roles/cpu_pin_local_teardowm/tasks/main.yaml
+++ b/ansible/roles/cpu_pin_local_teardown/tasks/main.yaml
diff --git a/ansible/roles/vcpu_pin_set_setup/tasks/main.yaml b/ansible/roles/vcpu_pin_set_setup/tasks/main.yaml
index 2a456ab9a..2278525eb 100644
--- a/ansible/roles/vcpu_pin_set_setup/tasks/main.yaml
+++ b/ansible/roles/vcpu_pin_set_setup/tasks/main.yaml
@@ -18,4 +18,4 @@
lineinfile:
dest: /etc/nova/nova.conf
insertafter: 'DEFAULT'
- line: 'vcpu_pin_set={{cpu_set}}
+ line: 'vcpu_pin_set={{cpu_set}}'
diff --git a/api/api-prepare.sh b/api/api-prepare.sh
index f2be48909..7632d9da9 100755
--- a/api/api-prepare.sh
+++ b/api/api-prepare.sh
@@ -33,6 +33,9 @@ close-on-exec = 1
daemonize= /var/log/yardstick/uwsgi.log
socket = /var/run/yardstick.sock
EOF
+ if [[ "${YARDSTICK_VENV}" ]];then
+ echo "virtualenv = ${YARDSTICK_VENV}" >> "${uwsgi_config}"
+ fi
fi
# nginx config
diff --git a/api/resources/env_action.py b/api/resources/env_action.py
index f6f43e5ac..7bfaf27a7 100644
--- a/api/resources/env_action.py
+++ b/api/resources/env_action.py
@@ -199,30 +199,25 @@ def prepareYardstickEnv(args):
def _already_source_openrc():
"""Check if openrc is sourced already"""
return all(os.environ.get(k) for k in ['OS_AUTH_URL', 'OS_USERNAME',
- 'OS_PASSWORD', 'OS_TENANT_NAME',
- 'EXTERNAL_NETWORK'])
+ 'OS_PASSWORD', 'EXTERNAL_NETWORK'])
def _prepare_env_daemon(task_id):
_create_task(task_id)
- installer_ip = os.environ.get('INSTALLER_IP', 'undefined')
- installer_type = os.environ.get('INSTALLER_TYPE', 'undefined')
-
try:
- _check_variables(installer_ip, installer_type)
-
_create_directories()
rc_file = consts.OPENRC
if not _already_source_openrc():
- _get_remote_rc_file(rc_file, installer_ip, installer_type)
+ if not os.path.exists(rc_file):
+ installer_ip = os.environ.get('INSTALLER_IP', '192.168.200.2')
+ installer_type = os.environ.get('INSTALLER_TYPE', 'compass')
+ _get_remote_rc_file(rc_file, installer_ip, installer_type)
+ _source_file(rc_file)
+ _append_external_network(rc_file)
_source_file(rc_file)
- _append_external_network(rc_file)
-
- # update the external_network
- _source_file(rc_file)
_clean_images()
@@ -234,17 +229,6 @@ def _prepare_env_daemon(task_id):
logger.debug('Error: %s', e)
-def _check_variables(installer_ip, installer_type):
-
- if installer_ip == 'undefined':
- raise SystemExit('Missing INSTALLER_IP')
-
- if installer_type == 'undefined':
- raise SystemExit('Missing INSTALLER_TYPE')
- elif installer_type not in consts.INSTALLERS:
- raise SystemExit('INSTALLER_TYPE is not correct')
-
-
def _create_directories():
yardstick_utils.makedirs(consts.CONF_DIR)
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 52a15df1b..96a5d774d 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -23,7 +23,10 @@ ENV IMAGE_DIR /home/opnfv/images/
ENV YARDSTICK_REPO_DIR ${REPOS_DIR}/yardstick
ENV RELENG_REPO_DIR ${REPOS_DIR}/releng
-RUN apt-get update && apt-get install -y git
+RUN apt-get update && apt-get install -y git python-setuptools python-pip
+RUN easy_install -U setuptools==30.0.0
+RUN pip install appdirs==1.4.0
+
RUN mkdir -p ${REPOS_DIR}
RUN git config --global http.sslVerify false
diff --git a/docs/release/release-notes/release-notes.rst b/docs/release/release-notes/release-notes.rst
index 669cbf3ab..d89f9ed24 100644
--- a/docs/release/release-notes/release-notes.rst
+++ b/docs/release/release-notes/release-notes.rst
@@ -41,7 +41,7 @@ Version History
| | 3.0 | Yardstick for Danube release |
| | | |
+----------------+--------------------+---------------------------------+
-| | 2.0 | Yardstick for Danube release |
+| May 4th, 2017 | 2.0 | Yardstick for Danube release |
| | | |
+----------------+--------------------+---------------------------------+
| Mar 31st, 2017 | 1.0 | Yardstick for Danube release |
@@ -139,19 +139,19 @@ Release Data
| **Project** | Yardstick |
| | |
+--------------------------------------+--------------------------------------+
-| **Repo/tag** | yardstick/Danube.1.0 |
+| **Repo/tag** | yardstick/Danube.2.0 |
| | |
+--------------------------------------+--------------------------------------+
-| **Yardstick Docker image tag** | Danube.1.0 |
+| **Yardstick Docker image tag** | Danube.2.0 |
| | |
+--------------------------------------+--------------------------------------+
| **Release designation** | Danube |
| | |
+--------------------------------------+--------------------------------------+
-| **Release date** | March 31st, 2017 |
+| **Release date** | May 4th, 2017 |
| | |
+--------------------------------------+--------------------------------------+
-| **Purpose of the delivery** | OPNFV Danube release 1.0 |
+| **Purpose of the delivery** | OPNFV Danube release 2.0 |
| | |
+--------------------------------------+--------------------------------------+
@@ -170,27 +170,8 @@ Documents
Software Deliverables
---------------------
-**Yardstick framework source code <Danube.1.0>**
-+--------------------------------------+--------------------------------------+
-| **Project** | Yardstick |
-| | |
-+--------------------------------------+--------------------------------------+
-| **Repo/tag** | yardstick/Danube.1.0 |
-| | |
-+--------------------------------------+--------------------------------------+
-| **Yardstick Docker image tag** | Danube.1.0 |
-| | |
-+--------------------------------------+--------------------------------------+
-| **Release designation** | Danube |
-| | |
-+--------------------------------------+--------------------------------------+
-| **Release date** | March 31st, 2017 |
-| | |
-+--------------------------------------+--------------------------------------+
-| **Purpose of the delivery** | OPNFV Danube release |
-| | |
-+--------------------------------------+--------------------------------------+
+ - The Yardstick Docker image: https://hub.docker.com/r/opnfv/yardstick (tag: danube.2.0)
**Contexts**
@@ -534,7 +515,7 @@ Feature additions
Scenario Matrix
===============
-For Danube 1.0, Yardstick was tested on the following scenarios:
+For Danube 2.0, Yardstick was tested on the following scenarios:
+-------------------------+---------+---------+---------+---------+
| Scenario | Apex | Compass | Fuel | Joid |
@@ -598,7 +579,9 @@ For Danube 1.0, Yardstick was tested on the following scenarios:
| os-nosdn-kvm_ovs_dpdk | | | X | |
| _bar-noha | | | | |
+-------------------------+---------+---------+---------+---------+
-
+| opnfv_os-ovn-nofeature- | X | | | |
+| noha_daily | | | | |
++-------------------------+---------+---------+---------+---------+
Test results
============
@@ -630,6 +613,52 @@ Known Issues/Faults
Corrected Faults
----------------
+Danube.2.0:
+
++----------------------------+------------------------------------------------+
+| **JIRA REFERENCE** | **SLOGAN** |
+| | |
++----------------------------+------------------------------------------------+
+| JIRA: YARDSTICK-608 | Set work directory in Yardstick container |
+| | |
++----------------------------+------------------------------------------------+
+| JIRA: YARDSTICK-616 | Bugfix: https support should adapt insecure |
+| | situation |
++----------------------------+------------------------------------------------+
+| JIRA: YARDSTICK-620 | Yardstick virtualenv support |
+| | |
++----------------------------+------------------------------------------------+
+| JIRA: YARDSTICK-621 | Bugfix: fix query job status in TC074 |
+| | |
++----------------------------+------------------------------------------------+
+| JIRA: YARDSTICK-622 | Bugfix: take test case modification into |
+| | effect in load_images.sh |
++----------------------------+------------------------------------------------+
+| JIRA: YARDSTICK-623 | change openrc file path to |
+| | /etc/yardstick/openstack.creds |
++----------------------------+------------------------------------------------+
+| JIRA: YARDSTICK-624 | Add opnfv_os-ovn-nofeature-noha_daily test |
+| | suite |
++----------------------------+------------------------------------------------+
+| JIRA: YARDSTICK-628 | Bugfix: Make tc019 and tc025 accept |
+| | --task-args options |
++----------------------------+------------------------------------------------+
+| JIRA: YARDSTICK-629 | Bugfix: yardstick env prepare cmd do not |
+| | support other installer |
++----------------------------+------------------------------------------------+
+| JIRA: YARDSTICK-632 | Bugfix: KeyError when using http dispatcher |
+| | |
++----------------------------+------------------------------------------------+
+| JIRA: YARDSTICK-633 | Bugfix: Environment Compatibility Issues in HA |
+| | Test Cases |
++----------------------------+------------------------------------------------+
+| JIRA: YARDSTICK-634 | fix ha issue when run tc050~tc054 in ci |
+| | |
++----------------------------+------------------------------------------------+
+| JIRA: YARDSTICK-635 | Bugfix: Local Openstack Operation in HA test |
+| | frameworks |
++----------------------------+------------------------------------------------+
+
Danube.1.0:
+----------------------------+------------------------------------------------+
@@ -644,7 +673,7 @@ Danube.1.0:
+----------------------------+------------------------------------------------+
-Danube 1.0 known restrictions/issues
+Danube 2.0 known restrictions/issues
====================================
+-----------+-----------+----------------------------------------------+
| Installer | Scenario | Issue |
@@ -662,7 +691,6 @@ Danube 1.0 known restrictions/issues
+-----------+-----------+----------------------------------------------+
-
Open JIRA tickets
=================
@@ -670,6 +698,9 @@ Open JIRA tickets
| **JIRA REFERENCE** | **SLOGAN** |
| | |
+----------------------------+------------------------------------------------+
+| JIRA: YARDSTICK-626 | Fio and Lmbench don't work in Ubuntu-arm64 |
+| | image |
++----------------------------+------------------------------------------------+
| JIRA: YARDSTICK-603 | Timeout waiting for floating ip |
| | (which actually pingable) |
+----------------------------+------------------------------------------------+
diff --git a/docs/testing/user/userguide/04-installation.rst b/docs/testing/user/userguide/04-installation.rst
index c1325cab5..0c2bb58cf 100644
--- a/docs/testing/user/userguide/04-installation.rst
+++ b/docs/testing/user/userguide/04-installation.rst
@@ -63,6 +63,10 @@ Prepare the Yardstick container
.. _dockerhub: https://hub.docker.com/r/opnfv/yardstick/
+Install docker on your guest system with the following command, if not done yet::
+
+ wget -qO- https://get.docker.com/ | sh
+
Pull the Yardstick Docker image (``opnfv/yardstick``) from the public dockerhub
registry under the OPNFV account: dockerhub_, with the following docker
command::
@@ -146,6 +150,12 @@ In the Yardstick container, the Yardstick repository is located in the ``/home/o
yardstick env prepare
**NOTE**: The above command just works for four OPNFV installers -- **Apex**, **Compass**, **Fuel** and **Joid**.
+The env prepare command may take up to 6-8 minutes to finish building
+yardstick-image and other environment preparation. Meanwhile if you wish to
+monitor the env prepare process, you can enter the Yardstick container in a new
+terminal window and execute the following command::
+
+ tail -f /var/log/yardstick/uwsgi.log
The second way
@@ -267,14 +277,23 @@ Docker image from Docker hub::
Install Yardstick
^^^^^^^^^^^^^^^^^^^^^
+Prerequisite preparation::
+
+ apt-get update && apt-get install -y git python-setuptools python-pip
+ easy_install -U setuptools==30.0.0
+ pip install appdirs==1.4.0
+ pip install virtualenv
+
Create a virtual environment::
virtualenv ~/yardstick_venv
+ export YARDSTICK_VENV=~/yardstick_venv
source ~/yardstick_venv/bin/activate
Download the source code and install Yardstick from it::
git clone https://gerrit.opnfv.org/gerrit/yardstick
+ export YARDSTICK_REPO_DIR=~/yardstick
cd yardstick
./install.sh
@@ -487,4 +506,3 @@ yaml file and add test cases, constraint or task arguments if necessary.
Proxy Support (**Todo**)
---------------------------
-
diff --git a/install.sh b/install.sh
index 25a4f5960..dc2663628 100755
--- a/install.sh
+++ b/install.sh
@@ -47,9 +47,7 @@ apt-get update && apt-get install -y \
uwsgi-plugin-python \
supervisor \
python-pip \
- vim \
- python-setuptools && \
- easy_install -U setuptools==30.0.0
+ vim
apt-get -y autoremove && apt-get clean
diff --git a/nsb_setup.sh b/nsb_setup.sh
index 332c0345c..05d1fd6db 100755
--- a/nsb_setup.sh
+++ b/nsb_setup.sh
@@ -241,5 +241,5 @@ else
clear
echo "Installation completed..."
echo "Virtual Environment : $INSTALL_BIN_PATH/yardstick_venv"
-echo "Please Refer README.NSB.rst document on how to get started on VNF testing."
+echo "Please refer to Chapter 13 of the Yardstick User Guide for how to get started with VNF testing."
fi
diff --git a/requirements.txt b/requirements.txt
index 80547f5cd..b22bce3be 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -7,9 +7,10 @@
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-appdirs==1.4.0
+ansible==2.2.0.0
Babel==2.3.4
backport-ipaddress==0.1
+chainmap==1.0.2
cliff==2.3.0
cmd2==0.6.8
coverage==4.1b2
@@ -70,6 +71,7 @@ PyYAML==3.11
requests==2.10.0
requestsexceptions==1.1.3
scp==0.10.2
+shade==1.17.0
simplejson==3.8.2
six==1.10.0
stevedore==1.17.1
diff --git a/samples/vnf_samples/vnf_descriptors/tg_ping_tpl.yaml b/samples/vnf_samples/vnf_descriptors/tg_ping_tpl.yaml
index 6e8fcf77e..8192f2568 100644
--- a/samples/vnf_samples/vnf_descriptors/tg_ping_tpl.yaml
+++ b/samples/vnf_samples/vnf_descriptors/tg_ping_tpl.yaml
@@ -23,9 +23,18 @@ vnfd:vnfd-catalog:
memory-mb: '4096'
mgmt-interface:
vdu-id: pinggen-baremetal
+ {% if user is defined %}
user: '{{user}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if password is defined %}
password: '{{password}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if ip is defined %}
ip: '{{ip}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if key_filename is defined %}
+ key_filename: '{{key_filename}}' # Value filled by vnfdgen
+ {% endif %}
connection-point:
- name: xe0
type: VPORT
diff --git a/samples/vnf_samples/vnf_descriptors/tg_rfc2544_tpl.yaml b/samples/vnf_samples/vnf_descriptors/tg_rfc2544_tpl.yaml
index 97feae5ba..dee3dd760 100644
--- a/samples/vnf_samples/vnf_descriptors/tg_rfc2544_tpl.yaml
+++ b/samples/vnf_samples/vnf_descriptors/tg_rfc2544_tpl.yaml
@@ -20,9 +20,18 @@ vnfd:vnfd-catalog:
description: TRex stateless traffic verifier
mgmt-interface:
vdu-id: trexgen-baremetal
+ {% if user is defined %}
user: '{{user}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if password is defined %}
password: '{{password}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if ip is defined %}
ip: '{{ip}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if key_filename is defined %}
+ key_filename: '{{key_filename}}' # Value filled by vnfdgen
+ {% endif %}
connection-point:
- name: xe0
type: VPORT
diff --git a/samples/vnf_samples/vnf_descriptors/tg_rfc2544_tpl_4port.yaml b/samples/vnf_samples/vnf_descriptors/tg_rfc2544_tpl_4port.yaml
new file mode 100644
index 000000000..47da39099
--- /dev/null
+++ b/samples/vnf_samples/vnf_descriptors/tg_rfc2544_tpl_4port.yaml
@@ -0,0 +1,103 @@
+# 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.
+
+vnfd:vnfd-catalog:
+ vnfd:
+ - id: TrexTrafficGenRFC # nsb class mapping
+ name: trexverifier
+ short-name: trexverifier
+ description: TRex stateless traffic verifier
+ mgmt-interface:
+ vdu-id: trexgen-baremetal
+ {% if user is defined %}
+ user: '{{user}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if password is defined %}
+ password: '{{password}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if ip is defined %}
+ ip: '{{ip}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if key_filename is defined %}
+ key_filename: '{{key_filename}}' # Value filled by vnfdgen
+ {% endif %}
+ connection-point:
+ - name: xe0
+ type: VPORT
+ - name: xe1
+ type: VPORT
+ vdu:
+ - id: trexgen-baremetal
+ name: trexgen-baremetal
+ description: TRex stateless traffic verifier
+ external-interface:
+ - name: xe0
+ virtual-interface:
+ type: PCI-PASSTHROUGH
+ # Substitution variables MUST be quoted. Otherwise Python can misinterpet them.
+ vpci: '{{ interfaces.xe0.vpci }}' # Value filled by vnfdgen
+ local_iface_name: '{{ interfaces.xe0.local_iface_name }}' # Value filled by vnfdgen
+ local_ip: '{{ interfaces.xe0.local_ip }}' # Value filled by vnfdgen
+ driver: '{{ interfaces.xe0.driver}}' # Value filled by vnfdgen
+ dst_ip: '{{ interfaces.xe0.dst_ip }}' # Value filled by vnfdgen
+ local_mac: '{{ interfaces.xe0.local_mac }}' # Value filled by vnfdgen
+ dst_mac: '{{ interfaces.xe0.dst_mac }}' # Value filled by vnfdgen
+ bandwidth: 10 Gbps
+ vnfd-connection-point-ref: xe0
+ - name: xe1
+ virtual-interface:
+ type: PCI-PASSTHROUGH
+ vpci: '{{ interfaces.xe1.vpci }}' # Value filled by vnfdgen
+ local_iface_name: '{{ interfaces.xe1.local_iface_name }}' # Value filled by vnfdgen
+ local_ip: '{{ interfaces.xe1.local_ip }}' # Value filled by vnfdgen
+ driver: '{{ interfaces.xe1.driver}}' # Value filled by vnfdgen
+ dst_ip: '{{ interfaces.xe1.dst_ip }}' # Value filled by vnfdgen
+ local_mac: '{{ interfaces.xe1.local_mac }}' # Value filled by vnfdgen
+ dst_mac: '{{ interfaces.xe1.dst_mac }}' # Value filled by vnfdgen
+ bandwidth: 10 Gbps
+ vnfd-connection-point-ref: xe1
+ - name: xe2
+ virtual-interface:
+ type: PCI-PASSTHROUGH
+ # Substitution variables MUST be quoted. Otherwise Python can misinterpet them.
+ vpci: '{{ interfaces.xe2.vpci }}' # Value filled by vnfdgen
+ local_iface_name: '{{ interfaces.xe2.local_iface_name }}' # Value filled by vnfdgen
+ local_ip: '{{ interfaces.xe2.local_ip }}' # Value filled by vnfdgen
+ driver: '{{ interfaces.xe2.driver}}' # Value filled by vnfdgen
+ dst_ip: '{{ interfaces.xe2.dst_ip }}' # Value filled by vnfdgen
+ local_mac: '{{ interfaces.xe2.local_mac }}' # Value filled by vnfdgen
+ dst_mac: '{{ interfaces.xe2.dst_mac }}' # Value filled by vnfdgen
+ bandwidth: 10 Gbps
+ vnfd-connection-point-ref: xe2
+ - name: xe3
+ virtual-interface:
+ type: PCI-PASSTHROUGH
+ vpci: '{{ interfaces.xe3.vpci }}' # Value filled by vnfdgen
+ local_iface_name: '{{ interfaces.xe3.local_iface_name }}' # Value filled by vnfdgen
+ local_ip: '{{ interfaces.xe3.local_ip }}' # Value filled by vnfdgen
+ driver: '{{ interfaces.xe3.driver}}' # Value filled by vnfdgen
+ dst_ip: '{{ interfaces.xe3.dst_ip }}' # Value filled by vnfdgen
+ local_mac: '{{ interfaces.xe3.local_mac }}' # Value filled by vnfdgen
+ dst_mac: '{{ interfaces.xe3.dst_mac }}' # Value filled by vnfdgen
+ bandwidth: 10 Gbps
+ vnfd-connection-point-ref: xe3
+
+ benchmark:
+ kpi:
+ - rx_throughput_fps
+ - tx_throughput_fps
+ - tx_throughput_mbps
+ - rx_throughput_mbps
+ - in_packets
+ - out_packets
diff --git a/samples/vnf_samples/vnf_descriptors/tg_trex_tpl.yaml b/samples/vnf_samples/vnf_descriptors/tg_trex_tpl.yaml
index b1641836b..8daca467c 100644
--- a/samples/vnf_samples/vnf_descriptors/tg_trex_tpl.yaml
+++ b/samples/vnf_samples/vnf_descriptors/tg_trex_tpl.yaml
@@ -23,9 +23,18 @@ vnfd:vnfd-catalog:
memory-mb: '4096'
mgmt-interface:
vdu-id: trexgen-baremetal
+ {% if user is defined %}
user: '{{user}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if password is defined %}
password: '{{password}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if ip is defined %}
ip: '{{ip}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if key_filename is defined %}
+ key_filename: '{{key_filename}}' # Value filled by vnfdgen
+ {% endif %}
connection-point:
- name: xe0
type: VPORT
diff --git a/samples/vnf_samples/vnf_descriptors/vpe_vnf.yaml b/samples/vnf_samples/vnf_descriptors/vpe_vnf.yaml
index 75041c3ce..95b0fa8cf 100644
--- a/samples/vnf_samples/vnf_descriptors/vpe_vnf.yaml
+++ b/samples/vnf_samples/vnf_descriptors/vpe_vnf.yaml
@@ -20,10 +20,18 @@ vnfd:vnfd-catalog:
description: vPe approximation using DPDK
mgmt-interface:
vdu-id: vpevnf-baremetal
+ {% if user is defined %}
user: '{{user}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if password is defined %}
password: '{{password}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if ip is defined %}
ip: '{{ip}}' # Value filled by vnfdgen
- host: '{{host}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if key_filename is defined %}
+ key_filename: '{{key_filename}}' # Value filled by vnfdgen
+ {% endif %}
connection-point:
- name: xe0
type: VPORT
diff --git a/samples/vnf_samples/vnf_descriptors/vpe_vnf_4port.yaml b/samples/vnf_samples/vnf_descriptors/vpe_vnf_4port.yaml
new file mode 100644
index 000000000..a446f0cb6
--- /dev/null
+++ b/samples/vnf_samples/vnf_descriptors/vpe_vnf_4port.yaml
@@ -0,0 +1,99 @@
+# 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.
+
+vnfd:vnfd-catalog:
+ vnfd:
+ - id: VpeApproxVnf
+ name: VpeVnfSshIntel
+ short-name: VpeVnf
+ description: vPe approximation using DPDK
+ mgmt-interface:
+ vdu-id: vpevnf-baremetal
+ {% if user is defined %}
+ user: '{{user}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if password is defined %}
+ password: '{{password}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if ip is defined %}
+ ip: '{{ip}}' # Value filled by vnfdgen
+ {% endif %}
+ {% if key_filename is defined %}
+ key_filename: '{{key_filename}}' # Value filled by vnfdgen
+ {% endif %}
+ connection-point:
+ - name: xe0
+ type: VPORT
+ - name: xe1
+ type: VPORT
+ vdu:
+ - id: vpevnf-baremetal
+ name: vpevnf-baremetal
+ description: vpe approximation using DPDK
+ external-interface:
+ - name: xe0
+ virtual-interface:
+ type: PCI-PASSTHROUGH
+ # Substitution variables MUST be quoted. Otherwise Python can misinterpet them.
+ vpci: '{{ interfaces.xe0.vpci }}' # Value filled by vnfdgen
+ local_ip: '{{ interfaces.xe0.local_ip }}' # Value filled by vnfdgen
+ dst_ip: '{{ interfaces.xe0.dst_ip }}' # Value filled by vnfdgen
+ local_mac: '{{ interfaces.xe0.local_mac }}' # Value filled by vnfdgen
+ netmask: '{{ interfaces.xe0.netmask }}' # Value filled by vnfdgen
+ dst_mac: '{{ interfaces.xe0.dst_mac }}' # Value filled by vnfdgen
+ bandwidth: 10 Gbps
+ vnfd-connection-point-ref: xe0
+ - name: xe1
+ virtual-interface:
+ type: PCI-PASSTHROUGH
+ # Substitution variables MUST be quoted. Otherwise Python can misinterpet them.
+ vpci: '{{ interfaces.xe1.vpci }}' # Value filled by vnfdgen
+ local_ip: '{{ interfaces.xe1.local_ip }}' # Value filled by vnfdgen
+ dst_ip: '{{ interfaces.xe1.dst_ip }}' # Value filled by vnfdgen
+ local_mac: '{{ interfaces.xe1.local_mac }}' # Value filled by vnfdgen
+ netmask: '{{ interfaces.xe1.netmask }}' # Value filled by vnfdgen
+ dst_mac: '{{ interfaces.xe1.dst_mac }}' # Value filled by vnfdgen
+ bandwidth: 10 Gbps
+ vnfd-connection-point-ref: xe1
+ - name: xe2
+ virtual-interface:
+ type: PCI-PASSTHROUGH
+ # Substitution variables MUST be quoted. Otherwise Python can misinterpet them.
+ vpci: '{{ interfaces.xe2.vpci }}' # Value filled by vnfdgen
+ local_iface_name: '{{ interfaces.xe2.local_iface_name }}' # Value filled by vnfdgen
+ local_ip: '{{ interfaces.xe2.local_ip }}' # Value filled by vnfdgen
+ driver: '{{ interfaces.xe2.driver}}' # Value filled by vnfdgen
+ dst_ip: '{{ interfaces.xe2.dst_ip }}' # Value filled by vnfdgen
+ local_mac: '{{ interfaces.xe2.local_mac }}' # Value filled by vnfdgen
+ dst_mac: '{{ interfaces.xe2.dst_mac }}' # Value filled by vnfdgen
+ bandwidth: 10 Gbps
+ vnfd-connection-point-ref: xe2
+ - name: xe3
+ virtual-interface:
+ type: PCI-PASSTHROUGH
+ vpci: '{{ interfaces.xe3.vpci }}' # Value filled by vnfdgen
+ local_iface_name: '{{ interfaces.xe3.local_iface_name }}' # Value filled by vnfdgen
+ local_ip: '{{ interfaces.xe3.local_ip }}' # Value filled by vnfdgen
+ driver: '{{ interfaces.xe3.driver}}' # Value filled by vnfdgen
+ dst_ip: '{{ interfaces.xe3.dst_ip }}' # Value filled by vnfdgen
+ local_mac: '{{ interfaces.xe3.local_mac }}' # Value filled by vnfdgen
+ dst_mac: '{{ interfaces.xe3.dst_mac }}' # Value filled by vnfdgen
+ bandwidth: 10 Gbps
+ vnfd-connection-point-ref: xe3
+ routing_table: {{ routing_table }}
+ benchmark:
+ kpi:
+ - packets_in
+ - packets_fwd
+ - packets_dropped
diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc008.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc008.yaml
index a9802346b..4c7fdab90 100644
--- a/tests/opnfv/test_cases/opnfv_yardstick_tc008.yaml
+++ b/tests/opnfv/test_cases/opnfv_yardstick_tc008.yaml
@@ -65,3 +65,6 @@ context:
networks:
test:
cidr: '10.0.1.0/24'
+ #test-sriov:
+ #cidr: '10.0.1.0/24'
+ #provider: "sriov"
diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc019.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc019.yaml
index ea36b7b38..9b720e17e 100644
--- a/tests/opnfv/test_cases/opnfv_yardstick_tc019.yaml
+++ b/tests/opnfv/test_cases/opnfv_yardstick_tc019.yaml
@@ -12,6 +12,8 @@ schema: "yardstick:task:0.1"
description: >
Sample test case for the HA of controller node Openstack service.
+{% set file = file or 'etc/yardstick/nodes/fuel_baremetal/pod.yaml' %}
+
scenarios:
-
type: ServiceHA
@@ -50,4 +52,4 @@ scenarios:
context:
type: Node
name: LF
- file: etc/yardstick/nodes/fuel_virtual/pod.yaml
+ file: {{file}}
diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc025.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc025.yaml
index 4a995fd5a..ec3d1c8d1 100644
--- a/tests/opnfv/test_cases/opnfv_yardstick_tc025.yaml
+++ b/tests/opnfv/test_cases/opnfv_yardstick_tc025.yaml
@@ -12,6 +12,8 @@ schema: "yardstick:task:0.1"
description: >
Sample test case for the HA of OpenStack Controll Node abnormally shutdown.
+{% set file = file or 'etc/yardstick/nodes/fuel_virtual/pod.yaml' %}
+
scenarios:
-
type: ServiceHA
@@ -49,4 +51,4 @@ scenarios:
context:
type: Node
name: LF
- file: etc/yardstick/nodes/fuel_virtual/pod.yaml
+ file: {{file}}
diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc050.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc050.yaml
index b1dc31e90..1296c0592 100644
--- a/tests/opnfv/test_cases/opnfv_yardstick_tc050.yaml
+++ b/tests/opnfv/test_cases/opnfv_yardstick_tc050.yaml
@@ -14,6 +14,10 @@ description: >
This test case is written by new scenario-based HA testing framework.
{% set file = file or 'etc/yardstick/nodes/fuel_baremetal/pod.yaml' %}
+{% set external_net = external_net or 'br-ex' %}
+{% set management_net = management_net or 'br-mgmt' %}
+{% set storage_net = storage_net or 'br-storage' %}
+{% set internal_net = internal_net or 'br-mesh' %}
scenarios:
-
@@ -26,9 +30,9 @@ scenarios:
key: "close-br-public"
attack_key: "close-interface"
action_parameter:
- interface: "br-ex"
+ interface: {{external_net}}
rollback_parameter:
- interface: "br-ex"
+ interface: {{external_net}}
-
fault_type: "general-attacker"
@@ -36,9 +40,9 @@ scenarios:
key: "close-br-mgmt"
attack_key: "close-interface"
action_parameter:
- interface: "br-mgmt"
+ interface: {{management_net}}
rollback_parameter:
- interface: "br-mgmt"
+ interface: {{management_net}}
-
fault_type: "general-attacker"
@@ -46,9 +50,9 @@ scenarios:
key: "close-br-storage"
attack_key: "close-interface"
action_parameter:
- interface: "br-storage"
+ interface: {{storage_net}}
rollback_parameter:
- interface: "br-storage"
+ interface: {{storage_net}}
-
fault_type: "general-attacker"
@@ -56,9 +60,9 @@ scenarios:
key: "close-br-private"
attack_key: "close-interface"
action_parameter:
- interface: "br-mesh"
+ interface: {{internal_net}}
rollback_parameter:
- interface: "br-mesh"
+ interface: {{internal_net}}
monitors:
-
diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc052.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc052.yaml
index 6e060b15d..4254e79b6 100644
--- a/tests/opnfv/test_cases/opnfv_yardstick_tc052.yaml
+++ b/tests/opnfv/test_cases/opnfv_yardstick_tc052.yaml
@@ -40,7 +40,6 @@ scenarios:
operation_type: "general-operation"
key: "create-flavor"
operation_key: "nova-create-flavor"
- host: node1
action_parameter:
flavorconfig: "test-001 test-001 100 1 1"
rollback_parameter:
@@ -50,7 +49,6 @@ scenarios:
-
checker_type: "general-result-checker"
key: "check-flavor"
- host: node1
checker_key: "nova-flavor-checker"
expectedValue: "test-001"
condition: "in"
diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc053.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc053.yaml
index b6bbb8966..cc5b5cd3e 100644
--- a/tests/opnfv/test_cases/opnfv_yardstick_tc053.yaml
+++ b/tests/opnfv/test_cases/opnfv_yardstick_tc053.yaml
@@ -34,7 +34,7 @@ scenarios:
host: node1
monitor_time: 20
sla:
- max_recover_time: 30
+ max_recover_time: 20
-
monitor_type: "openstack-cmd"
diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc054.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc054.yaml
index 2d51a96cc..b9bb889a1 100644
--- a/tests/opnfv/test_cases/opnfv_yardstick_tc054.yaml
+++ b/tests/opnfv/test_cases/opnfv_yardstick_tc054.yaml
@@ -14,6 +14,10 @@ description: >
This test case is written by new scenario-based HA testing framework.
{% set file = file or 'etc/yardstick/nodes/fuel_baremetal/pod.yaml' %}
+{% set vip_management = vip_management or '192.168.0.2' %}
+{% set vip_public = vip_public or '172.16.0.3' %}
+{% set vip_router_management = vip_router_management or '192.168.0.1' %}
+{% set vip_router_public = vip_router_public or '172.16.0.2' %}
scenarios:
-
@@ -43,7 +47,7 @@ scenarios:
sla:
max_outage_time: 5
parameter:
- ip_address: "192.168.0.2"
+ ip_address: {{vip_management}}
-
monitor_type: "general-monitor"
@@ -54,7 +58,7 @@ scenarios:
sla:
max_outage_time: 5
parameter:
- ip_address: "172.16.0.2"
+ ip_address: {{vip_router_public}}
-
monitor_type: "general-monitor"
@@ -65,7 +69,7 @@ scenarios:
sla:
max_outage_time: 5
parameter:
- ip_address: "192.168.0.1"
+ ip_address: {{vip_router_management}}
-
monitor_type: "general-monitor"
@@ -76,7 +80,7 @@ scenarios:
sla:
max_outage_time: 5
parameter:
- ip_address: "172.16.0.3"
+ ip_address: {{vip_public}}
steps:
diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc077.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc077.yaml
new file mode 100644
index 000000000..93ae063c6
--- /dev/null
+++ b/tests/opnfv/test_cases/opnfv_yardstick_tc077.yaml
@@ -0,0 +1,63 @@
+##############################################################################
+# Copyright (c) 2017 Nokia and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+
+schema: "yardstick:task:0.1"
+description: >
+ Yardstick TC077 config file;
+ Extend TC008 to run pktgen-dpdk (sender) and testpmd (receiver) inside VM.
+
+scenarios:
+{% for pkt_size in [64, 128, 256, 512, 1024, 1280, 1518] %}
+ {% for num_ports in [1, 10, 50, 100, 500, 1000] %}
+-
+ type: PktgenDPDK
+ options:
+ packetsize: {{pkt_size}}
+ number_of_ports: {{num_ports}}
+ duration: 20
+
+ host: demeter.yardstick-TC077
+ target: poseidon.yardstick-TC077
+
+ runner:
+ type: Iteration
+ iterations: 3
+ interval: 1
+
+ sla:
+ max_ppm: 1
+ action: rate-control
+ {% endfor %}
+{% endfor %}
+
+context:
+ name: yardstick-TC077
+ image: yardstick-dpdk-image
+ flavor: yardstick-dpdk-flavor
+ user: ubuntu
+
+ placement_groups:
+ pgrp1:
+ policy: "availability"
+
+ servers:
+ demeter:
+ floating_ip: true
+ placement: "pgrp1"
+ poseidon:
+ floating_ip: true
+ placement: "pgrp1"
+
+ networks:
+ test:
+ cidr: '10.0.1.0/24'
+ test2:
+ cidr: '10.0.2.0/24'
+ provider: "sriov"
diff --git a/tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-ha_daily.yaml
index 97c234e45..d18a4e6d5 100644
--- a/tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-ha_daily.yaml
+++ b/tests/opnfv/test_suites/opnfv_os-nosdn-nofeature-ha_daily.yaml
@@ -37,9 +37,21 @@ test_cases:
huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml",
"host": "node4.LF","target": "node5.LF"}'
-
+ file_name: opnfv_yardstick_tc019.yaml
+ constraint:
+ installer: compass,fuel
+ pod: huawei-pod2,ericsson-pod1
+ task_args:
+ huawei-pod2: '{"file": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml"}'
+ ericsson-pod1: '{"file": "etc/yardstick/nodes/fuel_baremetal/pod.yaml"}'
+-
file_name: opnfv_yardstick_tc045.yaml
constraint:
- installer: fuel
+ installer: compass,fuel
+ pod: huawei-pod2,ericsson-pod1
+ task_args:
+ huawei-pod2: '{"file": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml"}'
+ ericsson-pod1: '{"file": "etc/yardstick/nodes/fuel_baremetal/pod.yaml"}'
-
file_name: opnfv_yardstick_tc046.yaml
constraint:
@@ -47,11 +59,19 @@ test_cases:
-
file_name: opnfv_yardstick_tc047.yaml
constraint:
- installer: fuel
+ installer: compass,fuel
+ pod: huawei-pod2,ericsson-pod1
+ task_args:
+ huawei-pod2: '{"file": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml"}'
+ ericsson-pod1: '{"file": "etc/yardstick/nodes/fuel_baremetal/pod.yaml"}'
-
file_name: opnfv_yardstick_tc048.yaml
constraint:
- installer: fuel
+ installer: compass,fuel
+ pod: huawei-pod2,ericsson-pod1
+ task_args:
+ huawei-pod2: '{"file": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml"}'
+ ericsson-pod1: '{"file": "etc/yardstick/nodes/fuel_baremetal/pod.yaml"}'
-
file_name: opnfv_yardstick_tc049.yaml
constraint:
@@ -63,7 +83,11 @@ test_cases:
-
file_name: opnfv_yardstick_tc051.yaml
constraint:
- installer: fuel
+ installer: compass,fuel
+ pod: huawei-pod2,ericsson-pod1
+ task_args:
+ huawei-pod2: '{"file": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml"}'
+ ericsson-pod1: '{"file": "etc/yardstick/nodes/fuel_baremetal/pod.yaml"}'
-
file_name: opnfv_yardstick_tc052.yaml
constraint:
diff --git a/tests/unit/benchmark/contexts/test_heat.py b/tests/unit/benchmark/contexts/test_heat.py
index 8f4852ca8..d878ebe97 100644
--- a/tests/unit/benchmark/contexts/test_heat.py
+++ b/tests/unit/benchmark/contexts/test_heat.py
@@ -21,6 +21,7 @@ import uuid
import mock
from yardstick.benchmark.contexts import heat
+from yardstick.benchmark.contexts import model
LOG = logging.getLogger(__name__)
@@ -102,12 +103,18 @@ class HeatContextTestCase(unittest.TestCase):
self.test_context.keypair_name = "foo-key"
self.test_context.secgroup_name = "foo-secgroup"
self.test_context.key_uuid = "2f2e4997-0a8e-4eb7-9fa4-f3f8fbbc393b"
+ netattrs = {'cidr': '10.0.0.0/24', 'provider': None, 'external_network': 'ext_net'}
+ self.mock_context.name = 'bar'
+ self.test_context.networks = [model.Network("fool-network", self.mock_context, netattrs)]
self.test_context._add_resources_to_template(mock_template)
mock_template.add_keypair.assert_called_with(
"foo-key",
"2f2e4997-0a8e-4eb7-9fa4-f3f8fbbc393b")
mock_template.add_security_group.assert_called_with("foo-secgroup")
+# mock_template.add_network.assert_called_with("bar-fool-network", 'physnet1', None)
+ mock_template.add_router.assert_called_with("bar-fool-network-router", netattrs["external_network"], "bar-fool-network-subnet")
+ mock_template.add_router_interface.assert_called_with("bar-fool-network-router-if0", "bar-fool-network-router", "bar-fool-network-subnet")
@mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
def test_deploy(self, mock_template):
diff --git a/tests/unit/benchmark/contexts/test_model.py b/tests/unit/benchmark/contexts/test_model.py
index 6ae4e6dac..3fb186b9b 100644
--- a/tests/unit/benchmark/contexts/test_model.py
+++ b/tests/unit/benchmark/contexts/test_model.py
@@ -170,6 +170,9 @@ class ServerTestCase(unittest.TestCase):
self.mock_context.keypair_name = 'some-keys'
self.mock_context.secgroup_name = 'some-secgroup'
self.mock_context.user = "some-user"
+ netattrs = {'cidr': '10.0.0.0/24', 'provider': None, 'external_network': 'ext_net'}
+ self.mock_context.networks = [model.Network("some-network", self.mock_context, netattrs)]
+
def test_construct_defaults(self):
@@ -208,13 +211,18 @@ class ServerTestCase(unittest.TestCase):
@mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
def test__add_instance(self, mock_template):
- attrs = {'image': 'some-image', 'flavor': 'some-flavor'}
+ attrs = {'image': 'some-image', 'flavor': 'some-flavor', 'floating_ip': '192.168.1.10', 'floating_ip_assoc': 'some-vm'}
test_server = model.Server('foo', self.mock_context, attrs)
+ self.mock_context.flavors = ['flavor1', 'flavor2', 'some-flavor']
+
mock_network = mock.Mock()
mock_network.name = 'some-network'
mock_network.stack_name = 'some-network-stack'
mock_network.subnet_stack_name = 'some-network-stack-subnet'
+ mock_network.provider = 'sriov'
+ mock_network.external_network = 'ext_net'
+ mock_network.router = model.Router('some-router', 'some-network', self.mock_context, 'ext_net')
test_server._add_instance(mock_template, 'some-server',
[mock_network], 'hints')
@@ -223,11 +231,136 @@ class ServerTestCase(unittest.TestCase):
'some-server-some-network-port',
mock_network.stack_name,
mock_network.subnet_stack_name,
- sec_group_id=self.mock_context.secgroup_name)
+ sec_group_id=self.mock_context.secgroup_name,
+ provider=mock_network.provider)
+
+ mock_template.add_floating_ip.assert_called_with(
+ 'some-server-fip',
+ mock_network.external_network,
+ 'some-server-some-network-port',
+ 'bar-some-network-some-router-if0',
+ 'some-secgroup'
+ )
+
+ mock_template.add_floating_ip_association.assert_called_with(
+ 'some-server-fip-assoc',
+ 'some-server-fip',
+ 'some-server-some-network-port'
+ )
mock_template.add_server.assert_called_with(
- 'some-server', 'some-image', 'some-flavor',
+ 'some-server', 'some-image',
+ flavor='some-flavor',
+ flavors=['flavor1', 'flavor2', 'some-flavor'],
ports=['some-server-some-network-port'],
user=self.mock_context.user,
key_name=self.mock_context.keypair_name,
+ user_data='',
+ scheduler_hints='hints')
+
+ @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
+ def test__add_instance_with_user_data(self, mock_template):
+ user_data = "USER_DATA"
+ attrs = {
+ 'image': 'some-image', 'flavor': 'some-flavor',
+ 'user_data': user_data,
+ }
+ test_server = model.Server('foo', self.mock_context, attrs)
+
+ test_server._add_instance(mock_template, 'some-server',
+ [], 'hints')
+
+ mock_template.add_server.assert_called_with(
+ 'some-server', 'some-image',
+ flavor='some-flavor',
+ flavors=self.mock_context.flavors,
+ ports=[],
+ user=self.mock_context.user,
+ key_name=self.mock_context.keypair_name,
+ user_data=user_data,
+ scheduler_hints='hints')
+
+ @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
+ def test__add_instance_plus_flavor(self, mock_template):
+
+ user_data = ''
+ attrs = {
+ 'image': 'some-image', 'flavor': 'flavor1',
+ 'flavors': ['flavor2'], 'user_data': user_data
+ }
+ test_server = model.Server('ServerFlavor-2', self.mock_context, attrs)
+
+ self.mock_context.flavors = ['flavor2']
+ mock_network = mock.Mock()
+ mock_network.configure_mock(name='some-network', stack_name= 'some-network-stack',
+ subnet_stack_name = 'some-network-stack-subnet',
+ provider = 'some-provider')
+
+ test_server._add_instance(mock_template, 'ServerFlavor-2',
+ [mock_network], 'hints')
+
+ mock_template.add_port.assert_called_with(
+ 'ServerFlavor-2-some-network-port',
+ mock_network.stack_name,
+ mock_network.subnet_stack_name,
+ provider=mock_network.provider,
+ sec_group_id=self.mock_context.secgroup_name)
+
+ mock_template.add_server.assert_called_with(
+ 'ServerFlavor-2', 'some-image',
+ flavor='flavor1',
+ flavors=['flavor2'],
+ ports=['ServerFlavor-2-some-network-port'],
+ user=self.mock_context.user,
+ key_name=self.mock_context.keypair_name,
+ user_data=user_data,
+ scheduler_hints='hints')
+
+ @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
+ def test__add_instance_misc(self, mock_template):
+
+ user_data = ''
+ attrs = {
+ 'image': 'some-image', 'flavor': 'flavor1',
+ 'flavors': ['flavor2'], 'user_data': user_data
+ }
+ test_server = model.Server('ServerFlavor-3', self.mock_context, attrs)
+
+ self.mock_context.flavors = ['flavor2']
+ self.mock_context.flavor = {'vcpus': 4}
+ mock_network = mock.Mock()
+ mock_network.name = 'some-network'
+ mock_network.stack_name = 'some-network-stack'
+ mock_network.subnet_stack_name = 'some-network-stack-subnet'
+
+ test_server._add_instance(mock_template, 'ServerFlavor-3',
+ [mock_network], 'hints')
+
+
+ mock_template.add_port(
+ 'ServerFlavor-3-some-network-port',
+ mock_network.stack_name,
+ mock_network.subnet_stack_name,
+ sec_group_id=self.mock_context.secgroup_name)
+
+ mock_template.add_flavor(
+ vcpus=4,
+ ram=2048,
+ disk=1)
+
+ mock_template.add_flavor(
+ vcpus=4,
+ ram=2048,
+ disk=1,
+ extra_specs={'cat': 1, 'dog': 2, 'dragon': 1000})
+
+ mock_template.add_server.assert_called_with(
+ 'ServerFlavor-3', 'some-image',
+ flavor='flavor1',
+ flavors=['flavor2'],
+ ports=['ServerFlavor-3-some-network-port'],
+ user=self.mock_context.user,
+ key_name=self.mock_context.keypair_name,
+ user_data=user_data,
scheduler_hints='hints')
+
diff --git a/tests/unit/benchmark/core/test_plugin.py b/tests/unit/benchmark/core/test_plugin.py
index edc103415..f9c076159 100644
--- a/tests/unit/benchmark/core/test_plugin.py
+++ b/tests/unit/benchmark/core/test_plugin.py
@@ -41,7 +41,7 @@ class pluginTestCase(unittest.TestCase):
def test_install(self, mock_ssh):
p = plugin.Plugin()
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
input_file = Arg()
p.install(input_file)
expected_result = {}
@@ -49,7 +49,7 @@ class pluginTestCase(unittest.TestCase):
def test_remove(self, mock_ssh):
p = plugin.Plugin()
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
input_file = Arg()
p.remove(input_file)
expected_result = {}
@@ -57,7 +57,7 @@ class pluginTestCase(unittest.TestCase):
def test_install_setup_run(self, mock_ssh):
p = plugin.Plugin()
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
plugins = {
"name": "sample"
}
@@ -76,7 +76,7 @@ class pluginTestCase(unittest.TestCase):
def test_remove_setup_run(self, mock_ssh):
p = plugin.Plugin()
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
plugins = {
"name": "sample"
}
diff --git a/tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py b/tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py
index 9e2e8b172..28b27c78a 100644
--- a/tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py
+++ b/tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py
@@ -63,7 +63,7 @@ class AttackerBaremetalTestCase(unittest.TestCase):
ins = attacker_baremetal.BaremetalAttacker(self.attacker_cfg,
self.context)
- mock_ssh.SSH().execute.return_value = (0, "running", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
ins.setup()
ins.inject_fault()
ins.recover()
@@ -71,7 +71,7 @@ class AttackerBaremetalTestCase(unittest.TestCase):
def test__attacker_baremetal_check_failuer(self, mock_ssh):
ins = attacker_baremetal.BaremetalAttacker(self.attacker_cfg,
self.context)
- mock_ssh.SSH().execute.return_value = (0, "error check", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "error check", '')
ins.setup()
def test__attacker_baremetal_recover_successful(self, mock_ssh):
@@ -81,6 +81,6 @@ class AttackerBaremetalTestCase(unittest.TestCase):
ins = attacker_baremetal.BaremetalAttacker(self.attacker_cfg,
self.context)
- mock_ssh.SSH().execute.return_value = (0, "running", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
ins.setup()
ins.recover()
diff --git a/tests/unit/benchmark/scenarios/availability/test_attacker_general.py b/tests/unit/benchmark/scenarios/availability/test_attacker_general.py
index 322b58391..612b5a662 100644
--- a/tests/unit/benchmark/scenarios/availability/test_attacker_general.py
+++ b/tests/unit/benchmark/scenarios/availability/test_attacker_general.py
@@ -44,7 +44,7 @@ class GeneralAttackerServiceTestCase(unittest.TestCase):
cls = baseattacker.BaseAttacker.get_attacker_cls(self.attacker_cfg)
ins = cls(self.attacker_cfg, self.context)
- mock_ssh.SSH().execute.return_value = (0, "running", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
ins.setup()
ins.inject_fault()
ins.recover()
@@ -54,5 +54,5 @@ class GeneralAttackerServiceTestCase(unittest.TestCase):
cls = baseattacker.BaseAttacker.get_attacker_cls(self.attacker_cfg)
ins = cls(self.attacker_cfg, self.context)
- mock_ssh.SSH().execute.return_value = (0, "error check", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "error check", '')
ins.setup()
diff --git a/tests/unit/benchmark/scenarios/availability/test_attacker_process.py b/tests/unit/benchmark/scenarios/availability/test_attacker_process.py
index d7771bd33..eec512a58 100644
--- a/tests/unit/benchmark/scenarios/availability/test_attacker_process.py
+++ b/tests/unit/benchmark/scenarios/availability/test_attacker_process.py
@@ -41,7 +41,7 @@ class AttackerServiceTestCase(unittest.TestCase):
cls = baseattacker.BaseAttacker.get_attacker_cls(self.attacker_cfg)
ins = cls(self.attacker_cfg, self.context)
- mock_ssh.SSH().execute.return_value = (0, "running", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
ins.setup()
ins.inject_fault()
ins.recover()
@@ -51,5 +51,5 @@ class AttackerServiceTestCase(unittest.TestCase):
cls = baseattacker.BaseAttacker.get_attacker_cls(self.attacker_cfg)
ins = cls(self.attacker_cfg, self.context)
- mock_ssh.SSH().execute.return_value = (0, "error check", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "error check", '')
ins.setup()
diff --git a/tests/unit/benchmark/scenarios/availability/test_monitor_command.py b/tests/unit/benchmark/scenarios/availability/test_monitor_command.py
index a84bfd2c5..c179bbfaf 100644
--- a/tests/unit/benchmark/scenarios/availability/test_monitor_command.py
+++ b/tests/unit/benchmark/scenarios/availability/test_monitor_command.py
@@ -87,5 +87,5 @@ class MonitorOpenstackCmdTestCase(unittest.TestCase):
instance = monitor_command.MonitorOpenstackCmd(
self.config, self.context)
instance.setup()
- mock_ssh.SSH().execute.return_value = (0, "0", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "0", '')
ret = instance.monitor_func()
diff --git a/tests/unit/benchmark/scenarios/availability/test_monitor_general.py b/tests/unit/benchmark/scenarios/availability/test_monitor_general.py
index 369f6f4f7..169b630bf 100644
--- a/tests/unit/benchmark/scenarios/availability/test_monitor_general.py
+++ b/tests/unit/benchmark/scenarios/availability/test_monitor_general.py
@@ -53,7 +53,7 @@ class GeneralMonitorServiceTestCase(unittest.TestCase):
ins = monitor_general.GeneralMonitor(self.monitor_cfg, self.context)
ins.setup()
- mock_ssh.SSH().execute.return_value = (0, "running", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
ins.monitor_func()
ins._result = {'outage_time': 0}
ins.verify_SLA()
@@ -64,7 +64,7 @@ class GeneralMonitorServiceTestCase(unittest.TestCase):
self.monitor_cfg_noparam, self.context)
ins.setup()
- mock_ssh.SSH().execute.return_value = (0, "running", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
ins.monitor_func()
ins._result = {'outage_time': 0}
ins.verify_SLA()
@@ -74,7 +74,7 @@ class GeneralMonitorServiceTestCase(unittest.TestCase):
self.monitor_cfg_noparam, self.context)
ins.setup()
- mock_ssh.SSH().execute.return_value = (1, "error", 'error')
+ mock_ssh.SSH.from_node().execute.return_value = (1, "error", 'error')
ins.monitor_func()
ins._result = {'outage_time': 2}
ins.verify_SLA()
diff --git a/tests/unit/benchmark/scenarios/availability/test_monitor_process.py b/tests/unit/benchmark/scenarios/availability/test_monitor_process.py
index 8270405cd..8c267e413 100644
--- a/tests/unit/benchmark/scenarios/availability/test_monitor_process.py
+++ b/tests/unit/benchmark/scenarios/availability/test_monitor_process.py
@@ -42,7 +42,7 @@ class MonitorProcessTestCase(unittest.TestCase):
ins = monitor_process.MonitorProcess(self.monitor_cfg, self.context)
- mock_ssh.SSH().execute.return_value = (0, "1", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "1", '')
ins.setup()
ins.monitor_func()
ins._result = {"outage_time": 0}
@@ -52,7 +52,7 @@ class MonitorProcessTestCase(unittest.TestCase):
ins = monitor_process.MonitorProcess(self.monitor_cfg, self.context)
- mock_ssh.SSH().execute.return_value = (0, "0", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "0", '')
ins.setup()
ins.monitor_func()
ins._result = {"outage_time": 10}
diff --git a/tests/unit/benchmark/scenarios/availability/test_operation_general.py b/tests/unit/benchmark/scenarios/availability/test_operation_general.py
index 2c6dc1617..fb8ccb122 100644
--- a/tests/unit/benchmark/scenarios/availability/test_operation_general.py
+++ b/tests/unit/benchmark/scenarios/availability/test_operation_general.py
@@ -50,7 +50,7 @@ class GeneralOperaionTestCase(unittest.TestCase):
def test__operation_successful(self, mock_open, mock_ssh):
ins = operation_general.GeneralOperaion(self.operation_cfg,
self.context)
- mock_ssh.SSH().execute.return_value = (0, "success", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "success", '')
ins.setup()
ins.run()
ins.rollback()
@@ -58,7 +58,7 @@ class GeneralOperaionTestCase(unittest.TestCase):
def test__operation_successful_noparam(self, mock_open, mock_ssh):
ins = operation_general.GeneralOperaion(self.operation_cfg_noparam,
self.context)
- mock_ssh.SSH().execute.return_value = (0, "success", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "success", '')
ins.setup()
ins.run()
ins.rollback()
@@ -66,7 +66,7 @@ class GeneralOperaionTestCase(unittest.TestCase):
def test__operation_fail(self, mock_open, mock_ssh):
ins = operation_general.GeneralOperaion(self.operation_cfg,
self.context)
- mock_ssh.SSH().execute.return_value = (1, "failed", '')
+ mock_ssh.SSH.from_node().execute.return_value = (1, "failed", '')
ins.setup()
ins.run()
ins.rollback()
diff --git a/tests/unit/benchmark/scenarios/availability/test_result_checker_general.py b/tests/unit/benchmark/scenarios/availability/test_result_checker_general.py
index c5451fabd..d036bb0da 100644
--- a/tests/unit/benchmark/scenarios/availability/test_result_checker_general.py
+++ b/tests/unit/benchmark/scenarios/availability/test_result_checker_general.py
@@ -47,7 +47,7 @@ class GeneralResultCheckerTestCase(unittest.TestCase):
def test__result_checker_eq(self, mock_open, mock_ssh):
ins = result_checker_general.GeneralResultChecker(self.checker_cfg,
self.context)
- mock_ssh.SSH().execute.return_value = (0, "1", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "1", '')
ins.setup()
self.assertTrue(ins.verify())
@@ -56,7 +56,7 @@ class GeneralResultCheckerTestCase(unittest.TestCase):
config['condition'] = 'gt'
ins = result_checker_general.GeneralResultChecker(config,
self.context)
- mock_ssh.SSH().execute.return_value = (0, "2", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "2", '')
ins.setup()
self.assertTrue(ins.verify())
@@ -65,7 +65,7 @@ class GeneralResultCheckerTestCase(unittest.TestCase):
config['condition'] = 'gt_eq'
ins = result_checker_general.GeneralResultChecker(config,
self.context)
- mock_ssh.SSH().execute.return_value = (0, "1", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "1", '')
ins.setup()
self.assertTrue(ins.verify())
@@ -74,7 +74,7 @@ class GeneralResultCheckerTestCase(unittest.TestCase):
config['condition'] = 'lt'
ins = result_checker_general.GeneralResultChecker(config,
self.context)
- mock_ssh.SSH().execute.return_value = (0, "0", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "0", '')
ins.setup()
self.assertTrue(ins.verify())
@@ -83,7 +83,7 @@ class GeneralResultCheckerTestCase(unittest.TestCase):
config['condition'] = 'lt_eq'
ins = result_checker_general.GeneralResultChecker(config,
self.context)
- mock_ssh.SSH().execute.return_value = (0, "1", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "1", '')
ins.setup()
self.assertTrue(ins.verify())
@@ -93,7 +93,7 @@ class GeneralResultCheckerTestCase(unittest.TestCase):
config['expectedValue'] = "value"
ins = result_checker_general.GeneralResultChecker(config,
self.context)
- mock_ssh.SSH().execute.return_value = (0, "value return", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "value return", '')
ins.setup()
self.assertTrue(ins.verify())
@@ -102,7 +102,7 @@ class GeneralResultCheckerTestCase(unittest.TestCase):
config['condition'] = 'wrong'
ins = result_checker_general.GeneralResultChecker(config,
self.context)
- mock_ssh.SSH().execute.return_value = (0, "1", '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, "1", '')
ins.setup()
self.assertFalse(ins.verify())
@@ -111,6 +111,6 @@ class GeneralResultCheckerTestCase(unittest.TestCase):
config.pop('parameter')
ins = result_checker_general.GeneralResultChecker(config,
self.context)
- mock_ssh.SSH().execute.return_value = (1, "fail", '')
+ mock_ssh.SSH.from_node().execute.return_value = (1, "fail", '')
ins.setup()
ins.verify()
diff --git a/tests/unit/benchmark/scenarios/availability/test_scenario_general.py b/tests/unit/benchmark/scenarios/availability/test_scenario_general.py
index 593fc77b3..ea54fbb9b 100644
--- a/tests/unit/benchmark/scenarios/availability/test_scenario_general.py
+++ b/tests/unit/benchmark/scenarios/availability/test_scenario_general.py
@@ -48,7 +48,7 @@ class ScenarioGeneralTestCase(unittest.TestCase):
def test_scenario_general_all_successful(self, mock_director):
ins = ScenarioGeneral(self.scenario_cfg, None)
ins.setup()
- ins.run(None)
+ ins.run({})
ins.teardown()
def test_scenario_general_exception(self, mock_director):
@@ -56,7 +56,7 @@ class ScenarioGeneralTestCase(unittest.TestCase):
mock_obj = mock.Mock()
mock_obj.createActionPlayer.side_effect = KeyError('Wrong')
ins.director = mock_obj
- ins.run(None)
+ ins.run({})
ins.teardown()
def test_scenario_general_case_fail(self, mock_director):
@@ -64,5 +64,5 @@ class ScenarioGeneralTestCase(unittest.TestCase):
mock_obj = mock.Mock()
mock_obj.verify.return_value = False
ins.director = mock_obj
- ins.run(None)
+ ins.run({})
ins.teardown()
diff --git a/tests/unit/benchmark/scenarios/availability/test_util.py b/tests/unit/benchmark/scenarios/availability/test_util.py
new file mode 100644
index 000000000..bb0e6bc79
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/availability/test_util.py
@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+
+##############################################################################
+# Copyright (c) 2016 Kanglin Yin and others
+# 14_ykl@tongji.edu.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# Unittest for yardstick.benchmark.scenarios.availability.utils
+
+import mock
+import unittest
+
+from yardstick.benchmark.scenarios.availability import util
+
+@mock.patch('yardstick.benchmark.scenarios.availability.util.subprocess')
+class ExecuteShellTestCase(unittest.TestCase):
+
+ def test__fun_execute_shell_command_successful(self, mock_subprocess):
+ cmd = "env"
+ mock_subprocess.check_output.return_value = (0, 'unittest')
+ exitcode, output = util.execute_shell_command(cmd)
+ self.assertEqual(exitcode, 0)
+
+ def test__fun_execute_shell_command_fail_cmd_exception(self, mock_subprocess):
+ cmd = "env"
+ mock_subprocess.check_output.side_effect = RuntimeError
+ exitcode, output = util.execute_shell_command(cmd)
+ self.assertEqual(exitcode, -1)
diff --git a/tests/unit/benchmark/scenarios/compute/test_cachestat.py b/tests/unit/benchmark/scenarios/compute/test_cachestat.py
index 8a06c754b..b0ddfc6b4 100644
--- a/tests/unit/benchmark/scenarios/compute/test_cachestat.py
+++ b/tests/unit/benchmark/scenarios/compute/test_cachestat.py
@@ -35,7 +35,7 @@ class CACHEstatTestCase(unittest.TestCase):
def test_cachestat_successful_setup(self, mock_ssh):
c = cachestat.CACHEstat({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
c.setup()
self.assertIsNotNone(c.client)
@@ -43,20 +43,20 @@ class CACHEstatTestCase(unittest.TestCase):
def test_execute_command_success(self, mock_ssh):
c = cachestat.CACHEstat({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
c.setup()
expected_result = 'abcdefg'
- mock_ssh.SSH().execute.return_value = (0, expected_result, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, expected_result, '')
result = c._execute_command("foo")
self.assertEqual(result, expected_result)
def test_execute_command_failed(self, mock_ssh):
c = cachestat.CACHEstat({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
c.setup()
- mock_ssh.SSH().execute.return_value = (127, '', 'Failed executing \
+ mock_ssh.SSH.from_node().execute.return_value = (127, '', 'Failed executing \
command')
self.assertRaises(RuntimeError, c._execute_command,
"cat /proc/meminfo")
@@ -67,11 +67,11 @@ class CACHEstatTestCase(unittest.TestCase):
}
args = {"options": options}
c = cachestat.CACHEstat(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
c.setup()
output = self._read_file("cachestat_sample_output.txt")
- mock_ssh.SSH().execute.return_value = (0, output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, output, '')
result = c._get_cache_usage()
expected_result = {"cachestat": {"cache0": {"HITS": "6462",
"DIRTIES": "29",
diff --git a/tests/unit/benchmark/scenarios/compute/test_computecapacity.py b/tests/unit/benchmark/scenarios/compute/test_computecapacity.py
index 4efa66932..7b9a5ad4a 100644
--- a/tests/unit/benchmark/scenarios/compute/test_computecapacity.py
+++ b/tests/unit/benchmark/scenarios/compute/test_computecapacity.py
@@ -45,7 +45,7 @@ class ComputeCapacityTestCase(unittest.TestCase):
def test_capacity_successful_setup(self, mock_ssh):
c = computecapacity.ComputeCapacity({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
c.setup()
self.assertIsNotNone(c.client)
@@ -54,7 +54,7 @@ class ComputeCapacityTestCase(unittest.TestCase):
def test_capacity_successful(self, mock_ssh):
c = computecapacity.ComputeCapacity({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, SAMPLE_OUTPUT, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, SAMPLE_OUTPUT, '')
c.run(self.result)
expected_result = jsonutils.loads(SAMPLE_OUTPUT)
self.assertEqual(self.result, expected_result)
@@ -62,5 +62,5 @@ class ComputeCapacityTestCase(unittest.TestCase):
def test_capacity_unsuccessful_script_error(self, mock_ssh):
c = computecapacity.ComputeCapacity({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, c.run, self.result)
diff --git a/tests/unit/benchmark/scenarios/compute/test_cpuload.py b/tests/unit/benchmark/scenarios/compute/test_cpuload.py
index ffa781215..840ac7885 100644
--- a/tests/unit/benchmark/scenarios/compute/test_cpuload.py
+++ b/tests/unit/benchmark/scenarios/compute/test_cpuload.py
@@ -42,7 +42,7 @@ class CPULoadTestCase(unittest.TestCase):
args = {'options': options}
l = cpuload.CPULoad(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
l.setup()
self.assertIsNotNone(l.client)
@@ -58,7 +58,7 @@ class CPULoadTestCase(unittest.TestCase):
args = {'options': options}
l = cpuload.CPULoad(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (127, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (127, '', '')
l.setup()
self.assertIsNotNone(l.client)
@@ -74,11 +74,11 @@ class CPULoadTestCase(unittest.TestCase):
args = {'options': options}
l = cpuload.CPULoad(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
l.setup()
expected_result = 'abcdefg'
- mock_ssh.SSH().execute.return_value = (0, expected_result, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, expected_result, '')
result = l._execute_command("foo")
self.assertEqual(result, expected_result)
@@ -91,10 +91,10 @@ class CPULoadTestCase(unittest.TestCase):
args = {'options': options}
l = cpuload.CPULoad(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
l.setup()
- mock_ssh.SSH().execute.return_value = (127, '', 'abcdefg')
+ mock_ssh.SSH.from_node().execute.return_value = (127, '', 'abcdefg')
self.assertRaises(RuntimeError, l._execute_command,
"cat /proc/loadavg")
@@ -107,10 +107,10 @@ class CPULoadTestCase(unittest.TestCase):
args = {'options': options}
l = cpuload.CPULoad(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
l.setup()
- mock_ssh.SSH().execute.return_value = \
+ mock_ssh.SSH.from_node().execute.return_value = \
(0, '1.50 1.45 1.51 3/813 14322', '')
result = l._get_loadavg()
expected_result = \
@@ -126,13 +126,13 @@ class CPULoadTestCase(unittest.TestCase):
args = {'options': options}
l = cpuload.CPULoad(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
l.setup()
l.interval = 1
l.count = 1
mpstat_output = self._read_file("cpuload_sample_output1.txt")
- mock_ssh.SSH().execute.return_value = (0, mpstat_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, mpstat_output, '')
result = l._get_cpu_usage_mpstat()
expected_result = \
@@ -175,12 +175,12 @@ class CPULoadTestCase(unittest.TestCase):
args = {'options': options}
l = cpuload.CPULoad(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
l.setup()
l.interval = 0
output = self._read_file("cpuload_sample_output2.txt")
- mock_ssh.SSH().execute.return_value = (0, output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, output, '')
result = l._get_cpu_usage()
expected_result = \
@@ -219,12 +219,12 @@ class CPULoadTestCase(unittest.TestCase):
args = {'options': options}
l = cpuload.CPULoad(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (1, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
l.setup()
l.interval = 0
stat_output = self._read_file("cpuload_sample_output2.txt")
- mock_ssh.SSH().execute.side_effect = \
+ mock_ssh.SSH.from_node().execute.side_effect = \
[(0, '1.50 1.45 1.51 3/813 14322', ''), (0, stat_output, '')]
l.run(self.result)
diff --git a/tests/unit/benchmark/scenarios/compute/test_cyclictest.py b/tests/unit/benchmark/scenarios/compute/test_cyclictest.py
index 04ca2abf9..dc52a80c7 100644
--- a/tests/unit/benchmark/scenarios/compute/test_cyclictest.py
+++ b/tests/unit/benchmark/scenarios/compute/test_cyclictest.py
@@ -69,7 +69,7 @@ class CyclictestTestCase(unittest.TestCase):
def test_cyclictest_successful_setup(self, mock_ssh):
c = cyclictest.Cyclictest(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
c.setup()
self.assertIsNotNone(c.guest)
@@ -80,12 +80,12 @@ class CyclictestTestCase(unittest.TestCase):
result = {}
self.scenario_cfg.pop("sla", None)
c = cyclictest.Cyclictest(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
c.setup()
- c.guest = mock_ssh.SSH()
+ c.guest = mock_ssh.SSH.from_node()
sample_output = '{"min": 100, "avg": 500, "max": 1000}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
c.run(result)
expected_result = jsonutils.loads(sample_output)
@@ -101,12 +101,12 @@ class CyclictestTestCase(unittest.TestCase):
}
})
c = cyclictest.Cyclictest(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
c.setup()
- c.guest = mock_ssh.SSH()
+ c.guest = mock_ssh.SSH.from_node()
sample_output = '{"min": 100, "avg": 500, "max": 1000}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
c.run(result)
expected_result = jsonutils.loads(sample_output)
@@ -117,13 +117,13 @@ class CyclictestTestCase(unittest.TestCase):
result = {}
self.scenario_cfg.update({"sla": {"max_min_latency": 10}})
c = cyclictest.Cyclictest(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
c.setup()
- c.guest = mock_ssh.SSH()
+ c.guest = mock_ssh.SSH.from_node()
sample_output = '{"min": 100, "avg": 500, "max": 1000}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, c.run, result)
def test_cyclictest_unsuccessful_sla_avg_latency(self, mock_ssh):
@@ -131,13 +131,13 @@ class CyclictestTestCase(unittest.TestCase):
result = {}
self.scenario_cfg.update({"sla": {"max_avg_latency": 10}})
c = cyclictest.Cyclictest(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
c.setup()
- c.guest = mock_ssh.SSH()
+ c.guest = mock_ssh.SSH.from_node()
sample_output = '{"min": 100, "avg": 500, "max": 1000}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, c.run, result)
def test_cyclictest_unsuccessful_sla_max_latency(self, mock_ssh):
@@ -145,13 +145,13 @@ class CyclictestTestCase(unittest.TestCase):
result = {}
self.scenario_cfg.update({"sla": {"max_max_latency": 10}})
c = cyclictest.Cyclictest(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
c.setup()
- c.guest = mock_ssh.SSH()
+ c.guest = mock_ssh.SSH.from_node()
sample_output = '{"min": 100, "avg": 500, "max": 1000}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, c.run, result)
def test_cyclictest_unsuccessful_script_error(self, mock_ssh):
@@ -159,12 +159,12 @@ class CyclictestTestCase(unittest.TestCase):
result = {}
self.scenario_cfg.update({"sla": {"max_max_latency": 10}})
c = cyclictest.Cyclictest(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
c.setup()
- c.guest = mock_ssh.SSH()
+ c.guest = mock_ssh.SSH.from_node()
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, c.run, result)
diff --git a/tests/unit/benchmark/scenarios/compute/test_lmbench.py b/tests/unit/benchmark/scenarios/compute/test_lmbench.py
index 5b72ef75d..08f5da332 100644
--- a/tests/unit/benchmark/scenarios/compute/test_lmbench.py
+++ b/tests/unit/benchmark/scenarios/compute/test_lmbench.py
@@ -38,7 +38,7 @@ class LmbenchTestCase(unittest.TestCase):
def test_successful_setup(self, mock_ssh):
l = lmbench.Lmbench({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
l.setup()
self.assertIsNotNone(l.client)
@@ -66,7 +66,7 @@ class LmbenchTestCase(unittest.TestCase):
l = lmbench.Lmbench(args, self.ctx)
sample_output = '[{"latency": 4.944, "size": 0.00049}]'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
l.run(self.result)
expected_result = jsonutils.loads(
'{"latencies": ' + sample_output + "}")
@@ -84,7 +84,7 @@ class LmbenchTestCase(unittest.TestCase):
l = lmbench.Lmbench(args, self.ctx)
sample_output = '{"size(MB)": 0.262144, "bandwidth(MBps)": 11025.5}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
l.run(self.result)
expected_result = jsonutils.loads(sample_output)
self.assertEqual(self.result, expected_result)
@@ -103,7 +103,7 @@ class LmbenchTestCase(unittest.TestCase):
l = lmbench.Lmbench(args, self.ctx)
sample_output = '[{"latency": 4.944, "size": 0.00049}]'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
l.run(self.result)
expected_result = jsonutils.loads(
'{"latencies": ' + sample_output + "}")
@@ -124,7 +124,7 @@ class LmbenchTestCase(unittest.TestCase):
l = lmbench.Lmbench(args, self.ctx)
sample_output = '{"size(MB)": 0.262144, "bandwidth(MBps)": 11025.5}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
l.run(self.result)
expected_result = jsonutils.loads(sample_output)
self.assertEqual(self.result, expected_result)
@@ -143,7 +143,7 @@ class LmbenchTestCase(unittest.TestCase):
l = lmbench.Lmbench(args, self.ctx)
sample_output = '[{"latency": 37.5, "size": 0.00049}]'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, l.run, self.result)
def test_unsuccessful_bandwidth_run_sla(self, mock_ssh):
@@ -161,7 +161,7 @@ class LmbenchTestCase(unittest.TestCase):
l = lmbench.Lmbench(args, self.ctx)
sample_output = '{"size(MB)": 0.262144, "bandwidth(MBps)": 9925.5}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, l.run, self.result)
def test_successful_latency_for_cache_run_sla(self, mock_ssh):
@@ -178,7 +178,7 @@ class LmbenchTestCase(unittest.TestCase):
l = lmbench.Lmbench(args, self.ctx)
sample_output = "{\"L1cache\": 1.6}"
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
l.run(self.result)
expected_result = jsonutils.loads(sample_output)
self.assertEqual(self.result, expected_result)
@@ -189,5 +189,5 @@ class LmbenchTestCase(unittest.TestCase):
args = {"options": options}
l = lmbench.Lmbench(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, l.run, self.result)
diff --git a/tests/unit/benchmark/scenarios/compute/test_memload.py b/tests/unit/benchmark/scenarios/compute/test_memload.py
index ede3309c2..ebae9993d 100644
--- a/tests/unit/benchmark/scenarios/compute/test_memload.py
+++ b/tests/unit/benchmark/scenarios/compute/test_memload.py
@@ -35,7 +35,7 @@ class MEMLoadTestCase(unittest.TestCase):
def test_memload_successful_setup(self, mock_ssh):
m = memload.MEMLoad({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
m.setup()
self.assertIsNotNone(m.client)
@@ -43,20 +43,20 @@ class MEMLoadTestCase(unittest.TestCase):
def test_execute_command_success(self, mock_ssh):
m = memload.MEMLoad({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
m.setup()
expected_result = 'abcdefg'
- mock_ssh.SSH().execute.return_value = (0, expected_result, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, expected_result, '')
result = m._execute_command("foo")
self.assertEqual(result, expected_result)
def test_execute_command_failed(self, mock_ssh):
m = memload.MEMLoad({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
m.setup()
- mock_ssh.SSH().execute.return_value = (127, '', 'Failed executing \
+ mock_ssh.SSH.from_node().execute.return_value = (127, '', 'Failed executing \
command')
self.assertRaises(RuntimeError, m._execute_command,
"cat /proc/meminfo")
@@ -68,11 +68,11 @@ class MEMLoadTestCase(unittest.TestCase):
}
args = {"options": options}
m = memload.MEMLoad(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
m.setup()
output = self._read_file("memload_sample_output.txt")
- mock_ssh.SSH().execute.return_value = (0, output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, output, '')
result = m._get_mem_usage()
expected_result = {
"max": {
diff --git a/tests/unit/benchmark/scenarios/compute/test_plugintest.py b/tests/unit/benchmark/scenarios/compute/test_plugintest.py
index a5331caf7..680f6ad65 100644
--- a/tests/unit/benchmark/scenarios/compute/test_plugintest.py
+++ b/tests/unit/benchmark/scenarios/compute/test_plugintest.py
@@ -40,7 +40,7 @@ class PluginTestTestCase(unittest.TestCase):
def test_sample_successful_setup(self, mock_ssh):
s = plugintest.PluginTest({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
s.setup()
self.assertIsNotNone(s.client)
@@ -50,7 +50,7 @@ class PluginTestTestCase(unittest.TestCase):
s = plugintest.PluginTest({}, self.ctx)
sample_output = '{"Test Output": "Hello world!"}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
s.run(self.result)
expected_result = jsonutils.loads(sample_output)
self.assertEqual(self.result, expected_result)
@@ -58,5 +58,5 @@ class PluginTestTestCase(unittest.TestCase):
def test_sample_unsuccessful_script_error(self, mock_ssh):
s = plugintest.PluginTest({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, s.run, self.result)
diff --git a/tests/unit/benchmark/scenarios/compute/test_ramspeed.py b/tests/unit/benchmark/scenarios/compute/test_ramspeed.py
index 82cc93870..85d49641e 100644
--- a/tests/unit/benchmark/scenarios/compute/test_ramspeed.py
+++ b/tests/unit/benchmark/scenarios/compute/test_ramspeed.py
@@ -38,7 +38,7 @@ class RamspeedTestCase(unittest.TestCase):
def test_ramspeed_successful_setup(self, mock_ssh):
r = ramspeed.Ramspeed({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
r.setup()
self.assertIsNotNone(r.client)
@@ -75,7 +75,7 @@ class RamspeedTestCase(unittest.TestCase):
{"Test_type": "INTEGER & WRITING", "Block_size(kb)": 16384,\
"Bandwidth(MBps)": 14128.94}, {"Test_type": "INTEGER & WRITING",\
"Block_size(kb)": 32768, "Bandwidth(MBps)": 8340.85}]}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
r.run(self.result)
expected_result = jsonutils.loads(sample_output)
self.assertEqual(self.result, expected_result)
@@ -111,7 +111,7 @@ class RamspeedTestCase(unittest.TestCase):
{"Test_type": "INTEGER & WRITING", "Block_size(kb)": 16384,\
"Bandwidth(MBps)": 14128.94}, {"Test_type": "INTEGER & WRITING",\
"Block_size(kb)": 32768, "Bandwidth(MBps)": 8340.85}]}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
r.run(self.result)
expected_result = jsonutils.loads(sample_output)
self.assertEqual(self.result, expected_result)
@@ -146,7 +146,7 @@ class RamspeedTestCase(unittest.TestCase):
"Bandwidth(MBps)": 14159.86}, {"Test_type": "INTEGER & WRITING",\
"Block_size(kb)": 16384, "Bandwidth(MBps)": 14128.94}, {"Test_type":\
"INTEGER & WRITING", "Block_size(kb)": 32768, "Bandwidth(MBps)": 8340.85}]}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, r.run, self.result)
def test_ramspeed_unsuccessful_script_error(self, mock_ssh):
@@ -158,7 +158,7 @@ class RamspeedTestCase(unittest.TestCase):
args = {"options": options}
r = ramspeed.Ramspeed(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, r.run, self.result)
def test_ramspeed_mem_successful_run_no_sla(self, mock_ssh):
@@ -177,7 +177,7 @@ class RamspeedTestCase(unittest.TestCase):
"Bandwidth(MBps)": 10057.48}, {"Test_type": "INTEGER Triad:",\
"Bandwidth(MBps)": 10116.27}, {"Test_type": "INTEGER AVERAGE:",\
"Bandwidth(MBps)": 9401.58}]}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
r.run(self.result)
expected_result = jsonutils.loads(sample_output)
self.assertEqual(self.result, expected_result)
@@ -198,7 +198,7 @@ class RamspeedTestCase(unittest.TestCase):
"Bandwidth(MBps)": 10057.48}, {"Test_type": "INTEGER Triad:",\
"Bandwidth(MBps)": 10116.27}, {"Test_type": "INTEGER AVERAGE:",\
"Bandwidth(MBps)": 9401.58}]}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
r.run(self.result)
expected_result = jsonutils.loads(sample_output)
self.assertEqual(self.result, expected_result)
@@ -219,7 +219,7 @@ class RamspeedTestCase(unittest.TestCase):
"Bandwidth(MBps)": 4300.48}, {"Test_type": "INTEGER Triad:",\
"Bandwidth(MBps)": 1300.27}, {"Test_type": "INTEGER AVERAGE:",\
"Bandwidth(MBps)": 2401.58}]}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, r.run, self.result)
def test_ramspeed_unsuccessful_unknown_type_run(self, mock_ssh):
@@ -231,7 +231,7 @@ class RamspeedTestCase(unittest.TestCase):
args = {'options': options}
r = ramspeed.Ramspeed(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (1, '', 'No such type_id: 30 for \
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'No such type_id: 30 for \
Ramspeed scenario')
self.assertRaises(RuntimeError, r.run, self.result)
diff --git a/tests/unit/benchmark/scenarios/compute/test_unixbench.py b/tests/unit/benchmark/scenarios/compute/test_unixbench.py
index 747bda1ed..7d071e91c 100644
--- a/tests/unit/benchmark/scenarios/compute/test_unixbench.py
+++ b/tests/unit/benchmark/scenarios/compute/test_unixbench.py
@@ -38,7 +38,7 @@ class UnixbenchTestCase(unittest.TestCase):
u = unixbench.Unixbench({}, self.ctx)
u.setup()
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
self.assertIsNotNone(u.client)
self.assertEqual(u.setup_done, True)
@@ -54,10 +54,10 @@ class UnixbenchTestCase(unittest.TestCase):
u = unixbench.Unixbench(args, self.ctx)
result = {}
- u.server = mock_ssh.SSH()
+ u.server = mock_ssh.SSH.from_node()
sample_output = '{"Score":"4425.4"}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
u.run(result)
expected_result = jsonutils.loads(sample_output)
@@ -76,10 +76,10 @@ class UnixbenchTestCase(unittest.TestCase):
u = unixbench.Unixbench(args, self.ctx)
result = {}
- u.server = mock_ssh.SSH()
+ u.server = mock_ssh.SSH.from_node()
sample_output = '{"Score":"4425.4"}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
u.run(result)
expected_result = jsonutils.loads(sample_output)
@@ -102,10 +102,10 @@ class UnixbenchTestCase(unittest.TestCase):
u = unixbench.Unixbench(args, self.ctx)
result = {}
- u.server = mock_ssh.SSH()
+ u.server = mock_ssh.SSH.from_node()
sample_output = '{"signle_score":"2251.7","parallel_score":"4395.9"}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
u.run(result)
expected_result = jsonutils.loads(sample_output)
@@ -120,10 +120,10 @@ class UnixbenchTestCase(unittest.TestCase):
u = unixbench.Unixbench(args, self.ctx)
result = {}
- u.server = mock_ssh.SSH()
+ u.server = mock_ssh.SSH.from_node()
sample_output = '{"single_score":"200.7","parallel_score":"4395.9"}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, u.run, result)
def test_unixbench_unsuccessful_sla_parallel_score(self, mock_ssh):
@@ -135,10 +135,10 @@ class UnixbenchTestCase(unittest.TestCase):
u = unixbench.Unixbench(args, self.ctx)
result = {}
- u.server = mock_ssh.SSH()
+ u.server = mock_ssh.SSH.from_node()
sample_output = '{"signle_score":"2251.7","parallel_score":"3395.9"}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, u.run, result)
def test_unixbench_unsuccessful_script_error(self, mock_ssh):
@@ -158,9 +158,9 @@ class UnixbenchTestCase(unittest.TestCase):
u = unixbench.Unixbench(args, self.ctx)
result = {}
- u.server = mock_ssh.SSH()
+ u.server = mock_ssh.SSH.from_node()
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, u.run, result)
diff --git a/tests/unit/benchmark/scenarios/networking/test_iperf3.py b/tests/unit/benchmark/scenarios/networking/test_iperf3.py
index ea53cb9ab..45ff1b779 100644
--- a/tests/unit/benchmark/scenarios/networking/test_iperf3.py
+++ b/tests/unit/benchmark/scenarios/networking/test_iperf3.py
@@ -45,29 +45,29 @@ class IperfTestCase(unittest.TestCase):
def test_iperf_successful_setup(self, mock_ssh):
p = iperf3.Iperf({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
p.setup()
self.assertIsNotNone(p.target)
self.assertIsNotNone(p.host)
- mock_ssh.SSH().execute.assert_called_with("iperf3 -s -D")
+ mock_ssh.SSH.from_node().execute.assert_called_with("iperf3 -s -D")
def test_iperf_unsuccessful_setup(self, mock_ssh):
p = iperf3.Iperf({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, p.setup)
def test_iperf_successful_teardown(self, mock_ssh):
p = iperf3.Iperf({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH()
- p.target = mock_ssh.SSH()
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ p.host = mock_ssh.SSH.from_node()
+ p.target = mock_ssh.SSH.from_node()
p.teardown()
- self.assertTrue(mock_ssh.SSH().close.called)
- mock_ssh.SSH().execute.assert_called_with("pkill iperf3")
+ self.assertTrue(mock_ssh.SSH.from_node().close.called)
+ mock_ssh.SSH.from_node().execute.assert_called_with("pkill iperf3")
def test_iperf_successful_no_sla(self, mock_ssh):
@@ -76,11 +76,11 @@ class IperfTestCase(unittest.TestCase):
result = {}
p = iperf3.Iperf(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH()
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ p.host = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output(self.output_name_tcp)
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
expected_result = jsonutils.loads(sample_output)
p.run(result)
self.assertEqual(result, expected_result)
@@ -95,11 +95,11 @@ class IperfTestCase(unittest.TestCase):
result = {}
p = iperf3.Iperf(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH()
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ p.host = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output(self.output_name_tcp)
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
expected_result = jsonutils.loads(sample_output)
p.run(result)
self.assertEqual(result, expected_result)
@@ -114,11 +114,11 @@ class IperfTestCase(unittest.TestCase):
result = {}
p = iperf3.Iperf(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH()
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ p.host = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output(self.output_name_tcp)
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, p.run, result)
def test_iperf_successful_sla_jitter(self, mock_ssh):
@@ -130,11 +130,11 @@ class IperfTestCase(unittest.TestCase):
result = {}
p = iperf3.Iperf(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH()
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ p.host = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output(self.output_name_udp)
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
expected_result = jsonutils.loads(sample_output)
p.run(result)
self.assertEqual(result, expected_result)
@@ -148,11 +148,11 @@ class IperfTestCase(unittest.TestCase):
result = {}
p = iperf3.Iperf(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH()
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ p.host = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output(self.output_name_udp)
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, p.run, result)
def test_iperf_unsuccessful_script_error(self, mock_ssh):
@@ -162,10 +162,10 @@ class IperfTestCase(unittest.TestCase):
result = {}
p = iperf3.Iperf(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH()
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ p.host = mock_ssh.SSH.from_node()
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, p.run, result)
def _read_sample_output(self, filename):
diff --git a/tests/unit/benchmark/scenarios/networking/test_netperf.py b/tests/unit/benchmark/scenarios/networking/test_netperf.py
index 1b5dd6472..d0f862fb5 100755
--- a/tests/unit/benchmark/scenarios/networking/test_netperf.py
+++ b/tests/unit/benchmark/scenarios/networking/test_netperf.py
@@ -43,7 +43,7 @@ class NetperfTestCase(unittest.TestCase):
def test_netperf_successful_setup(self, mock_ssh):
p = netperf.Netperf({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
p.setup()
self.assertIsNotNone(p.server)
@@ -57,11 +57,11 @@ class NetperfTestCase(unittest.TestCase):
result = {}
p = netperf.Netperf(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH()
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ p.host = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output()
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
expected_result = jsonutils.loads(sample_output)
p.run(result)
self.assertEqual(result, expected_result)
@@ -76,11 +76,11 @@ class NetperfTestCase(unittest.TestCase):
result = {}
p = netperf.Netperf(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH()
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ p.host = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output()
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
expected_result = jsonutils.loads(sample_output)
p.run(result)
self.assertEqual(result, expected_result)
@@ -95,11 +95,11 @@ class NetperfTestCase(unittest.TestCase):
result = {}
p = netperf.Netperf(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH()
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ p.host = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output()
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, p.run, result)
def test_netperf_unsuccessful_script_error(self, mock_ssh):
@@ -109,10 +109,10 @@ class NetperfTestCase(unittest.TestCase):
result = {}
p = netperf.Netperf(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH()
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ p.host = mock_ssh.SSH.from_node()
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, p.run, result)
def _read_sample_output(self):
diff --git a/tests/unit/benchmark/scenarios/networking/test_netperf_node.py b/tests/unit/benchmark/scenarios/networking/test_netperf_node.py
index 29a7edf67..62874cc44 100755
--- a/tests/unit/benchmark/scenarios/networking/test_netperf_node.py
+++ b/tests/unit/benchmark/scenarios/networking/test_netperf_node.py
@@ -43,7 +43,7 @@ class NetperfNodeTestCase(unittest.TestCase):
def test_netperf_node_successful_setup(self, mock_ssh):
p = netperf_node.NetperfNode({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
p.setup()
self.assertIsNotNone(p.server)
@@ -57,11 +57,11 @@ class NetperfNodeTestCase(unittest.TestCase):
result = {}
p = netperf_node.NetperfNode(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH()
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ p.host = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output()
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
expected_result = jsonutils.loads(sample_output)
p.run(result)
self.assertEqual(result, expected_result)
@@ -76,11 +76,11 @@ class NetperfNodeTestCase(unittest.TestCase):
result = {}
p = netperf_node.NetperfNode(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH()
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ p.host = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output()
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
expected_result = jsonutils.loads(sample_output)
p.run(result)
self.assertEqual(result, expected_result)
@@ -95,11 +95,11 @@ class NetperfNodeTestCase(unittest.TestCase):
result = {}
p = netperf_node.NetperfNode(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH()
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ p.host = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output()
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, p.run, result)
def test_netperf_node_unsuccessful_script_error(self, mock_ssh):
@@ -109,10 +109,10 @@ class NetperfNodeTestCase(unittest.TestCase):
result = {}
p = netperf_node.NetperfNode(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH()
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ p.host = mock_ssh.SSH.from_node()
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, p.run, result)
def _read_sample_output(self):
diff --git a/tests/unit/benchmark/scenarios/networking/test_netutilization.py b/tests/unit/benchmark/scenarios/networking/test_netutilization.py
index 7c04f5e9a..1227e056e 100644
--- a/tests/unit/benchmark/scenarios/networking/test_netutilization.py
+++ b/tests/unit/benchmark/scenarios/networking/test_netutilization.py
@@ -42,7 +42,7 @@ class NetUtilizationTestCase(unittest.TestCase):
args = {'options': options}
n = netutilization.NetUtilization(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
n.setup()
self.assertIsNotNone(n.client)
@@ -56,11 +56,11 @@ class NetUtilizationTestCase(unittest.TestCase):
args = {'options': options}
n = netutilization.NetUtilization(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
n.setup()
expected_result = 'abcdefg'
- mock_ssh.SSH().execute.return_value = (0, expected_result, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, expected_result, '')
result = n._execute_command("foo")
self.assertEqual(result, expected_result)
@@ -72,10 +72,10 @@ class NetUtilizationTestCase(unittest.TestCase):
args = {'options': options}
n = netutilization.NetUtilization(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
n.setup()
- mock_ssh.SSH().execute.return_value = (127, '', 'abcdefg')
+ mock_ssh.SSH.from_node().execute.return_value = (127, '', 'abcdefg')
self.assertRaises(RuntimeError, n._execute_command,
"failed")
@@ -87,11 +87,11 @@ class NetUtilizationTestCase(unittest.TestCase):
args = {'options': options}
n = netutilization.NetUtilization(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
n.setup()
mpstat_output = self._read_file("netutilization_sample_output1.txt")
- mock_ssh.SSH().execute.return_value = (0, mpstat_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, mpstat_output, '')
result = n._get_network_utilization()
expected_result = \
@@ -157,11 +157,11 @@ class NetUtilizationTestCase(unittest.TestCase):
args = {'options': options}
n = netutilization.NetUtilization(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
n.setup()
mpstat_output = self._read_file("netutilization_sample_output2.txt")
- mock_ssh.SSH().execute.return_value = (0, mpstat_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, mpstat_output, '')
result = n._get_network_utilization()
expected_result = \
diff --git a/tests/unit/benchmark/scenarios/networking/test_networkcapacity.py b/tests/unit/benchmark/scenarios/networking/test_networkcapacity.py
index 3f8d84e54..3e7a3c5ee 100644
--- a/tests/unit/benchmark/scenarios/networking/test_networkcapacity.py
+++ b/tests/unit/benchmark/scenarios/networking/test_networkcapacity.py
@@ -41,7 +41,7 @@ class NetworkCapacityTestCase(unittest.TestCase):
def test_capacity_successful_setup(self, mock_ssh):
c = networkcapacity.NetworkCapacity({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
c.setup()
self.assertIsNotNone(c.client)
self.assertTrue(c.setup_done)
@@ -49,7 +49,7 @@ class NetworkCapacityTestCase(unittest.TestCase):
def test_capacity_successful(self, mock_ssh):
c = networkcapacity.NetworkCapacity({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, SAMPLE_OUTPUT, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, SAMPLE_OUTPUT, '')
c.run(self.result)
expected_result = jsonutils.loads(SAMPLE_OUTPUT)
self.assertEqual(self.result, expected_result)
@@ -57,5 +57,5 @@ class NetworkCapacityTestCase(unittest.TestCase):
def test_capacity_unsuccessful_script_error(self, mock_ssh):
c = networkcapacity.NetworkCapacity({}, self.ctx)
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, c.run, self.result)
diff --git a/tests/unit/benchmark/scenarios/networking/test_nstat.py b/tests/unit/benchmark/scenarios/networking/test_nstat.py
index 87a766302..131716727 100644
--- a/tests/unit/benchmark/scenarios/networking/test_nstat.py
+++ b/tests/unit/benchmark/scenarios/networking/test_nstat.py
@@ -36,7 +36,7 @@ class NstatTestCase(unittest.TestCase):
n = nstat.Nstat({}, self.ctx)
n.setup()
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
self.assertIsNotNone(n.client)
self.assertEqual(n.setup_done, True)
@@ -53,7 +53,7 @@ class NstatTestCase(unittest.TestCase):
sample_output = '#kernel\nIpInReceives 1837 0.0\nIpInHdrErrors 0 0.0\nIpInAddrErrors 2 0.0\nIcmpInMsgs 319 0.0\nIcmpInErrors 0 0.0\nTcpInSegs 36 0.0\nTcpInErrs 0 0.0\nUdpInDatagrams 1318 0.0\nUdpInErrors 0 0.0\n'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
n.run(result)
expected_result = {"TcpInErrs": 0, "UdpInDatagrams": 1318,
@@ -81,7 +81,7 @@ class NstatTestCase(unittest.TestCase):
sample_output = '#kernel\nIpInReceives 1837 0.0\nIpInHdrErrors 0 0.0\nIpInAddrErrors 2 0.0\nIcmpInMsgs 319 0.0\nIcmpInErrors 0 0.0\nTcpInSegs 36 0.0\nTcpInErrs 0 0.0\nUdpInDatagrams 1318 0.0\nUdpInErrors 0 0.0\n'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
n.run(result)
expected_result = {"TcpInErrs": 0, "UdpInDatagrams": 1318,
@@ -107,7 +107,7 @@ class NstatTestCase(unittest.TestCase):
n = nstat.Nstat(args, self.ctx)
result = {}
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, n.run, result)
diff --git a/tests/unit/benchmark/scenarios/networking/test_ping.py b/tests/unit/benchmark/scenarios/networking/test_ping.py
index 5535a79a9..5269309c2 100644
--- a/tests/unit/benchmark/scenarios/networking/test_ping.py
+++ b/tests/unit/benchmark/scenarios/networking/test_ping.py
@@ -43,7 +43,7 @@ class PingTestCase(unittest.TestCase):
p = ping.Ping(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '100', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '100', '')
p.run(result)
self.assertEqual(result, {'rtt': {'ares': 100.0}})
@@ -59,7 +59,7 @@ class PingTestCase(unittest.TestCase):
p = ping.Ping(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '100', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '100', '')
p.run(result)
self.assertEqual(result, {'rtt': {'ares': 100.0}})
@@ -75,7 +75,7 @@ class PingTestCase(unittest.TestCase):
p = ping.Ping(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '100', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '100', '')
self.assertRaises(AssertionError, p.run, result)
@mock.patch('yardstick.benchmark.scenarios.networking.ping.ssh')
@@ -90,7 +90,7 @@ class PingTestCase(unittest.TestCase):
p = ping.Ping(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, p.run, result)
diff --git a/tests/unit/benchmark/scenarios/networking/test_ping6.py b/tests/unit/benchmark/scenarios/networking/test_ping6.py
index e22cacb36..ecce7cee5 100644
--- a/tests/unit/benchmark/scenarios/networking/test_ping6.py
+++ b/tests/unit/benchmark/scenarios/networking/test_ping6.py
@@ -56,7 +56,7 @@ class PingTestCase(unittest.TestCase):
'sla': {'max_rtt': 50}
}
p = ping6.Ping6(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '0', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '0', '')
p.setup()
self.assertEqual(p.setup_done, True)
@@ -70,8 +70,8 @@ class PingTestCase(unittest.TestCase):
result = {}
p = ping6.Ping6(args, self.ctx)
- p.client = mock_ssh.SSH()
- mock_ssh.SSH().execute.side_effect = [(0, 'host1', ''), (0, 100, '')]
+ p.client = mock_ssh.SSH.from_node()
+ mock_ssh.SSH.from_node().execute.side_effect = [(0, 'host1', ''), (0, 100, '')]
p.run(result)
self.assertEqual(result, {'rtt': 100.0})
@@ -84,8 +84,8 @@ class PingTestCase(unittest.TestCase):
result = {}
p = ping6.Ping6(args, self.ctx)
- p.client = mock_ssh.SSH()
- mock_ssh.SSH().execute.side_effect = [(0, 'host1', ''), (0, 100, '')]
+ p.client = mock_ssh.SSH.from_node()
+ mock_ssh.SSH.from_node().execute.side_effect = [(0, 'host1', ''), (0, 100, '')]
p.run(result)
self.assertEqual(result, {'rtt': 100.0})
@@ -98,8 +98,8 @@ class PingTestCase(unittest.TestCase):
result = {}
p = ping6.Ping6(args, self.ctx)
- p.client = mock_ssh.SSH()
- mock_ssh.SSH().execute.side_effect = [(0, 'host1', ''), (0, 100, '')]
+ p.client = mock_ssh.SSH.from_node()
+ mock_ssh.SSH.from_node().execute.side_effect = [(0, 'host1', ''), (0, 100, '')]
self.assertRaises(AssertionError, p.run, result)
@mock.patch('yardstick.benchmark.scenarios.networking.ping6.ssh')
@@ -112,8 +112,8 @@ class PingTestCase(unittest.TestCase):
result = {}
p = ping6.Ping6(args, self.ctx)
- p.client = mock_ssh.SSH()
- mock_ssh.SSH().execute.side_effect = [
+ p.client = mock_ssh.SSH.from_node()
+ mock_ssh.SSH.from_node().execute.side_effect = [
(0, 'host1', ''), (1, '', 'FOOBAR')]
self.assertRaises(RuntimeError, p.run, result)
diff --git a/tests/unit/benchmark/scenarios/networking/test_pktgen.py b/tests/unit/benchmark/scenarios/networking/test_pktgen.py
index 989c5b712..d4eb1246f 100644
--- a/tests/unit/benchmark/scenarios/networking/test_pktgen.py
+++ b/tests/unit/benchmark/scenarios/networking/test_pktgen.py
@@ -47,7 +47,7 @@ class PktgenTestCase(unittest.TestCase):
p = pktgen.Pktgen(args, self.ctx)
p.setup()
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
self.assertIsNotNone(p.server)
self.assertIsNotNone(p.client)
self.assertEqual(p.setup_done, True)
@@ -58,14 +58,14 @@ class PktgenTestCase(unittest.TestCase):
'options': {'packetsize': 60, 'number_of_ports': 10},
}
p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH()
+ p.server = mock_ssh.SSH.from_node()
p.number_of_ports = args['options']['number_of_ports']
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
p._iptables_setup()
- mock_ssh.SSH().execute.assert_called_with(
+ mock_ssh.SSH.from_node().execute.assert_called_with(
"sudo iptables -F; "
"sudo iptables -A INPUT -p udp --dport 1000:%s -j DROP"
% 1010)
@@ -77,10 +77,10 @@ class PktgenTestCase(unittest.TestCase):
}
p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH()
+ p.server = mock_ssh.SSH.from_node()
p.number_of_ports = args['options']['number_of_ports']
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, p._iptables_setup)
def test_pktgen_successful_iptables_get_result(self, mock_ssh):
@@ -90,13 +90,13 @@ class PktgenTestCase(unittest.TestCase):
}
p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH()
+ p.server = mock_ssh.SSH.from_node()
p.number_of_ports = args['options']['number_of_ports']
- mock_ssh.SSH().execute.return_value = (0, '150000', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '150000', '')
p._iptables_get_result()
- mock_ssh.SSH().execute.assert_called_with(
+ mock_ssh.SSH.from_node().execute.assert_called_with(
"sudo iptables -L INPUT -vnx |"
"awk '/dpts:1000:%s/ {{printf \"%%s\", $1}}'"
% 1010)
@@ -109,10 +109,10 @@ class PktgenTestCase(unittest.TestCase):
p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH()
+ p.server = mock_ssh.SSH.from_node()
p.number_of_ports = args['options']['number_of_ports']
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, p._iptables_get_result)
def test_pktgen_successful_no_sla(self, mock_ssh):
@@ -124,8 +124,8 @@ class PktgenTestCase(unittest.TestCase):
p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH()
- p.client = mock_ssh.SSH()
+ p.server = mock_ssh.SSH.from_node()
+ p.client = mock_ssh.SSH.from_node()
mock_iptables_result = mock.Mock()
mock_iptables_result.return_value = 149300
@@ -133,7 +133,7 @@ class PktgenTestCase(unittest.TestCase):
sample_output = '{"packets_per_second": 9753, "errors": 0, \
"packets_sent": 149776, "packetsize": 60, "flows": 110}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
p.run(result)
expected_result = jsonutils.loads(sample_output)
@@ -150,8 +150,8 @@ class PktgenTestCase(unittest.TestCase):
p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH()
- p.client = mock_ssh.SSH()
+ p.server = mock_ssh.SSH.from_node()
+ p.client = mock_ssh.SSH.from_node()
mock_iptables_result = mock.Mock()
mock_iptables_result.return_value = 149300
@@ -159,7 +159,7 @@ class PktgenTestCase(unittest.TestCase):
sample_output = '{"packets_per_second": 9753, "errors": 0, \
"packets_sent": 149776, "packetsize": 60, "flows": 110}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
p.run(result)
expected_result = jsonutils.loads(sample_output)
@@ -176,8 +176,8 @@ class PktgenTestCase(unittest.TestCase):
p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH()
- p.client = mock_ssh.SSH()
+ p.server = mock_ssh.SSH.from_node()
+ p.client = mock_ssh.SSH.from_node()
mock_iptables_result = mock.Mock()
mock_iptables_result.return_value = 149300
@@ -185,7 +185,7 @@ class PktgenTestCase(unittest.TestCase):
sample_output = '{"packets_per_second": 9753, "errors": 0, \
"packets_sent": 149776, "packetsize": 60, "flows": 110}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, p.run, result)
def test_pktgen_unsuccessful_script_error(self, mock_ssh):
@@ -198,10 +198,10 @@ class PktgenTestCase(unittest.TestCase):
p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH()
- p.client = mock_ssh.SSH()
+ p.server = mock_ssh.SSH.from_node()
+ p.client = mock_ssh.SSH.from_node()
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, p.run, result)
diff --git a/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py b/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py
index 7ba4db9d9..e6998e443 100644
--- a/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py
+++ b/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py
@@ -16,6 +16,7 @@ import unittest
import mock
+import yardstick.common.utils as utils
from yardstick.benchmark.scenarios.networking import pktgen_dpdk
@@ -45,7 +46,7 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
p.setup()
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
self.assertIsNotNone(p.server)
self.assertIsNotNone(p.client)
self.assertEqual(p.setup_done, True)
@@ -56,15 +57,14 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
'options': {'packetsize': 60},
}
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- p.server = mock_ssh.SSH()
+ p.server = mock_ssh.SSH.from_node()
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.get_port_ip(p.server, "eth1")
+ utils.get_port_ip(p.server, "eth1")
- mock_ssh.SSH().execute.assert_called_with(
- "ifconfig eth1 |grep 'inet addr' |awk '{print $2}' \
- |cut -d ':' -f2 ")
+ mock_ssh.SSH.from_node().execute.assert_called_with(
+ "ifconfig eth1 |grep 'inet addr' |awk '{print $2}' |cut -d ':' -f2 ")
def test_pktgen_dpdk_unsuccessful_get_port_ip(self, mock_ssh):
@@ -73,10 +73,10 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
}
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- p.server = mock_ssh.SSH()
+ p.server = mock_ssh.SSH.from_node()
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, p.get_port_ip, p.server, "eth1")
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
+ self.assertRaises(RuntimeError, utils.get_port_ip, p.server, "eth1")
def test_pktgen_dpdk_successful_get_port_mac(self, mock_ssh):
@@ -84,13 +84,13 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
'options': {'packetsize': 60},
}
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- p.server = mock_ssh.SSH()
+ p.server = mock_ssh.SSH.from_node()
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.get_port_mac(p.server, "eth1")
+ utils.get_port_mac(p.server, "eth1")
- mock_ssh.SSH().execute.assert_called_with(
+ mock_ssh.SSH.from_node().execute.assert_called_with(
"ifconfig |grep HWaddr |grep eth1 |awk '{print $5}' ")
def test_pktgen_dpdk_unsuccessful_get_port_mac(self, mock_ssh):
@@ -100,10 +100,10 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
}
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- p.server = mock_ssh.SSH()
+ p.server = mock_ssh.SSH.from_node()
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, p.get_port_mac, p.server, "eth1")
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
+ self.assertRaises(RuntimeError, utils.get_port_mac, p.server, "eth1")
def test_pktgen_dpdk_successful_no_sla(self, mock_ssh):
@@ -115,7 +115,7 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
sample_output = '100\n110\n112\n130\n149\n150\n90\n150\n200\n162\n'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
p.run(result)
# with python 3 we get float, might be due python division changes
@@ -135,7 +135,7 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
sample_output = '100\n100\n100\n100\n100\n100\n100\n100\n100\n100\n'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
p.run(result)
@@ -151,11 +151,11 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- p.server = mock_ssh.SSH()
- p.client = mock_ssh.SSH()
+ p.server = mock_ssh.SSH.from_node()
+ p.client = mock_ssh.SSH.from_node()
sample_output = '100\n110\n112\n130\n149\n150\n90\n150\n200\n162\n'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, p.run, result)
def test_pktgen_dpdk_unsuccessful_script_error(self, mock_ssh):
@@ -168,7 +168,7 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, p.run, result)
diff --git a/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py b/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py
new file mode 100644
index 000000000..0178165f8
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py
@@ -0,0 +1,186 @@
+##############################################################################
+# Copyright (c) 2017 Nokia and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+#!/usr/bin/env python
+
+# Unittest for yardstick.benchmark.scenarios.networking.pktgen.PktgenDPDK
+
+from __future__ import absolute_import
+import unittest
+
+from oslo_serialization import jsonutils
+import mock
+
+from yardstick.benchmark.scenarios.networking import pktgen_dpdk_throughput
+
+
+@mock.patch('yardstick.benchmark.scenarios.networking.pktgen_dpdk_throughput.ssh')
+class PktgenDPDKTestCase(unittest.TestCase):
+
+ def setUp(self):
+ self.ctx = {
+ 'host': {
+ 'ip': '172.16.0.137',
+ 'user': 'root',
+ 'key_filename': 'mykey.key'
+ },
+ 'target': {
+ 'ip': '172.16.0.138',
+ 'user': 'root',
+ 'key_filename': 'mykey.key',
+ }
+ }
+
+ def test_pktgen_dpdk_throughput_successful_setup(self, mock_ssh):
+ args = {
+ 'options': {'packetsize': 60},
+ }
+ p = pktgen_dpdk_throughput.PktgenDPDK(args, self.ctx)
+ p.setup()
+
+ mock_ssh.SSH().execute.return_value = (0, '', '')
+ self.assertIsNotNone(p.server)
+ self.assertIsNotNone(p.client)
+ self.assertEqual(p.setup_done, True)
+
+ def test_pktgen_dpdk_throughput_successful_no_sla(self, mock_ssh):
+ args = {
+ 'options': {'packetsize': 60, 'number_of_ports': 10},
+ }
+
+ result = {}
+
+ p = pktgen_dpdk_throughput.PktgenDPDK(args, self.ctx)
+
+ p.server = mock_ssh.SSH()
+ p.client = mock_ssh.SSH()
+
+ mock_dpdk_result = mock.Mock()
+ mock_dpdk_result.return_value = 149300
+ p._dpdk_get_result = mock_dpdk_result
+
+ sample_output = '{"packets_per_second": 9753, "errors": 0, \
+ "packets_sent": 149776, "flows": 110}'
+ mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+
+ p.run(result)
+ expected_result = jsonutils.loads(sample_output)
+ expected_result["packets_received"] = 149300
+ expected_result["packetsize"] = 60
+ self.assertEqual(result, expected_result)
+
+ def test_pktgen_dpdk_throughput_successful_sla(self, mock_ssh):
+ args = {
+ 'options': {'packetsize': 60, 'number_of_ports': 10},
+ 'sla': {'max_ppm': 10000}
+ }
+ result = {}
+
+ p = pktgen_dpdk_throughput.PktgenDPDK(args, self.ctx)
+
+ p.server = mock_ssh.SSH()
+ p.client = mock_ssh.SSH()
+
+ mock_dpdk_result = mock.Mock()
+ mock_dpdk_result.return_value = 149300
+ p._dpdk_get_result = mock_dpdk_result
+
+ sample_output = '{"packets_per_second": 9753, "errors": 0, \
+ "packets_sent": 149776, "flows": 110}'
+ mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+
+ p.run(result)
+ expected_result = jsonutils.loads(sample_output)
+ expected_result["packets_received"] = 149300
+ expected_result["packetsize"] = 60
+ self.assertEqual(result, expected_result)
+
+ def test_pktgen_dpdk_throughput_unsuccessful_sla(self, mock_ssh):
+ args = {
+ 'options': {'packetsize': 60, 'number_of_ports': 10},
+ 'sla': {'max_ppm': 1000}
+ }
+ result = {}
+
+ p = pktgen_dpdk_throughput.PktgenDPDK(args, self.ctx)
+
+ p.server = mock_ssh.SSH()
+ p.client = mock_ssh.SSH()
+
+ mock_dpdk_result = mock.Mock()
+ mock_dpdk_result.return_value = 149300
+ p._dpdk_get_result = mock_dpdk_result
+
+ sample_output = '{"packets_per_second": 9753, "errors": 0, \
+ "packets_sent": 149776, "flows": 110}'
+ mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ self.assertRaises(AssertionError, p.run, result)
+
+ def test_pktgen_dpdk_throughput_unsuccessful_script_error(self, mock_ssh):
+ args = {
+ 'options': {'packetsize': 60, 'number_of_ports': 10},
+ 'sla': {'max_ppm': 1000}
+ }
+ result = {}
+
+ p = pktgen_dpdk_throughput.PktgenDPDK(args, self.ctx)
+
+ p.server = mock_ssh.SSH()
+ p.client = mock_ssh.SSH()
+
+ mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ self.assertRaises(RuntimeError, p.run, result)
+
+ def test_pktgen_dpdk_throughput_is_dpdk_setup(self, mock_ssh):
+ args = {
+ 'options': {'packetsize': 60},
+ }
+ p = pktgen_dpdk_throughput.PktgenDPDK(args, self.ctx)
+ p.server = mock_ssh.SSH()
+
+ mock_ssh.SSH().execute.return_value = (0, '', '')
+
+ p._is_dpdk_setup("server")
+
+ mock_ssh.SSH().execute.assert_called_with(
+ "ip a | grep eth1 2>/dev/null")
+
+ def test_pktgen_dpdk_throughput_dpdk_setup(self, mock_ssh):
+ args = {
+ 'options': {'packetsize': 60},
+ }
+ p = pktgen_dpdk_throughput.PktgenDPDK(args, self.ctx)
+ p.server = mock_ssh.SSH()
+ p.client = mock_ssh.SSH()
+
+ mock_ssh.SSH().execute.return_value = (0, '', '')
+
+ p.dpdk_setup()
+
+ self.assertEqual(p.dpdk_setup_done, True)
+
+ def test_pktgen_dpdk_throughput_dpdk_get_result(self, mock_ssh):
+ args = {
+ 'options': {'packetsize': 60},
+ }
+ p = pktgen_dpdk_throughput.PktgenDPDK(args, self.ctx)
+ p.server = mock_ssh.SSH()
+ p.client = mock_ssh.SSH()
+
+ mock_ssh.SSH().execute.return_value = (0, '10000', '')
+
+ p._dpdk_get_result()
+
+ mock_ssh.SSH().execute.assert_called_with(
+ "sudo /dpdk/destdir/bin/dpdk-procinfo -- --stats-reset > /dev/null 2>&1")
+
+def main():
+ unittest.main()
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/unit/benchmark/scenarios/networking/test_sfc.py b/tests/unit/benchmark/scenarios/networking/test_sfc.py
index 224a43bd8..78c0352dd 100644
--- a/tests/unit/benchmark/scenarios/networking/test_sfc.py
+++ b/tests/unit/benchmark/scenarios/networking/test_sfc.py
@@ -21,22 +21,22 @@ from yardstick.benchmark.scenarios.networking import sfc
class SfcTestCase(unittest.TestCase):
def setUp(self):
- scenario_cfg = dict()
- context_cfg = dict()
-
- # Used in Sfc.setup()
- context_cfg['target'] = dict()
- context_cfg['target']['user'] = 'root'
- context_cfg['target']['password'] = 'opnfv'
- context_cfg['target']['ip'] = '127.0.0.1'
-
- # Used in Sfc.run()
- context_cfg['host'] = dict()
- context_cfg['host']['user'] = 'root'
- context_cfg['host']['password'] = 'opnfv'
- context_cfg['host']['ip'] = None
- context_cfg['target'] = dict()
- context_cfg['target']['ip'] = '127.0.0.1'
+ scenario_cfg = {}
+ context_cfg = {
+ # Used in Sfc.setup()
+ 'target': {
+ 'user': 'root',
+ 'password': 'opnfv',
+ 'ip': '127.0.0.1',
+ },
+
+ # Used in Sfc.run()
+ 'host': {
+ 'user': 'root',
+ 'password': 'opnfv',
+ 'ip': None,
+ }
+ }
self.sfc = sfc.Sfc(scenario_cfg=scenario_cfg, context_cfg=context_cfg)
@@ -45,7 +45,7 @@ class SfcTestCase(unittest.TestCase):
@mock.patch('yardstick.benchmark.scenarios.networking.sfc.subprocess')
def test_run_for_success(self, mock_subprocess, mock_openstack, mock_ssh):
# Mock a successfull SSH in Sfc.setup() and Sfc.run()
- mock_ssh.SSH().execute.return_value = (0, '100', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '100', '')
mock_openstack.get_an_IP.return_value = "127.0.0.1"
mock_subprocess.call.return_value = 'mocked!'
@@ -59,7 +59,7 @@ class SfcTestCase(unittest.TestCase):
@mock.patch('yardstick.benchmark.scenarios.networking.sfc.subprocess')
def test2_run_for_success(self, mock_subprocess, mock_openstack, mock_ssh):
# Mock a successfull SSH in Sfc.setup() and Sfc.run()
- mock_ssh.SSH().execute.return_value = (
+ mock_ssh.SSH.from_node().execute.return_value = (
0, 'vxlan_tool.py', 'succeeded timed out')
mock_openstack.get_an_IP.return_value = "127.0.0.1"
mock_subprocess.call.return_value = 'mocked!'
diff --git a/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py b/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py
index 1b02b6eff..4167d6f3b 100644
--- a/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py
+++ b/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py
@@ -316,7 +316,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
for node, node_dict in self.context_cfg["nodes"].items():
with SshManager(node_dict) as conn:
self.assertIsNotNone(conn)
@@ -357,7 +357,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
self.s.map_topology_to_infrastructure(self.context_cfg,
self.topology)
self.assertEqual("tg_trex_tpl.yaml",
@@ -371,7 +371,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(1, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
self.assertRaises(IncorrectSetup,
self.s.map_topology_to_infrastructure,
@@ -384,7 +384,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
self.assertRaises(IncorrectConfig,
self.s.map_topology_to_infrastructure,
@@ -395,7 +395,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
del self.context_cfg['nodes']
self.assertRaises(IncorrectConfig, self.s._resolve_topology,
@@ -428,7 +428,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
tgen = mock.Mock(autospec=GenericTrafficGen)
tgen.traffic_finished = True
diff --git a/tests/unit/benchmark/scenarios/networking/test_vsperf.py b/tests/unit/benchmark/scenarios/networking/test_vsperf.py
index 76d2afdc0..348aa4a63 100644
--- a/tests/unit/benchmark/scenarios/networking/test_vsperf.py
+++ b/tests/unit/benchmark/scenarios/networking/test_vsperf.py
@@ -63,7 +63,7 @@ class VsperfTestCase(unittest.TestCase):
def test_vsperf_setup(self, mock_ssh, mock_subprocess):
p = vsperf.Vsperf(self.args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
mock_subprocess.call().execute.return_value = None
p.setup()
@@ -74,7 +74,7 @@ class VsperfTestCase(unittest.TestCase):
p = vsperf.Vsperf(self.args, self.ctx)
# setup() specific mocks
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
mock_subprocess.call().execute.return_value = None
p.setup()
@@ -88,12 +88,12 @@ class VsperfTestCase(unittest.TestCase):
p = vsperf.Vsperf(self.args, self.ctx)
# setup() specific mocks
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
mock_subprocess.call().execute.return_value = None
# run() specific mocks
- mock_ssh.SSH().execute.return_value = (0, '', '')
- mock_ssh.SSH().execute.return_value = (
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (
0, 'throughput_rx_fps\r\n14797660.000\r\n', '')
result = {}
@@ -106,11 +106,11 @@ class VsperfTestCase(unittest.TestCase):
p = vsperf.Vsperf(self.args, self.ctx)
# setup() specific mocks
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
mock_subprocess.call().execute.return_value = None
# run() specific mocks
- mock_ssh.SSH().execute.return_value = (1, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
result = {}
self.assertRaises(RuntimeError, p.run, result)
@@ -119,12 +119,12 @@ class VsperfTestCase(unittest.TestCase):
p = vsperf.Vsperf(self.args, self.ctx)
# setup() specific mocks
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
mock_subprocess.call().execute.return_value = None
# run() specific mocks
- mock_ssh.SSH().execute.return_value = (0, '', '')
- mock_ssh.SSH().execute.return_value = (1, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
result = {}
self.assertRaises(RuntimeError, p.run, result)
diff --git a/tests/unit/benchmark/scenarios/storage/test_fio.py b/tests/unit/benchmark/scenarios/storage/test_fio.py
index 603ff389e..55e443885 100644
--- a/tests/unit/benchmark/scenarios/storage/test_fio.py
+++ b/tests/unit/benchmark/scenarios/storage/test_fio.py
@@ -51,7 +51,7 @@ class FioTestCase(unittest.TestCase):
p = fio.Fio(args, self.ctx)
p.setup()
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
self.assertIsNotNone(p.client)
self.assertEqual(p.setup_done, True)
@@ -67,10 +67,10 @@ class FioTestCase(unittest.TestCase):
p = fio.Fio(args, self.ctx)
result = {}
- p.client = mock_ssh.SSH()
+ p.client = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output(self.sample_output['rw'])
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
p.run(result)
@@ -92,10 +92,10 @@ class FioTestCase(unittest.TestCase):
p = fio.Fio(args, self.ctx)
result = {}
- p.client = mock_ssh.SSH()
+ p.client = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output(self.sample_output['read'])
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
p.run(result)
@@ -116,10 +116,10 @@ class FioTestCase(unittest.TestCase):
p = fio.Fio(args, self.ctx)
result = {}
- p.client = mock_ssh.SSH()
+ p.client = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output(self.sample_output['write'])
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
p.run(result)
@@ -143,10 +143,10 @@ class FioTestCase(unittest.TestCase):
p = fio.Fio(args, self.ctx)
result = {}
- p.client = mock_ssh.SSH()
+ p.client = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output(self.sample_output['rw'])
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
p.run(result)
@@ -171,10 +171,10 @@ class FioTestCase(unittest.TestCase):
p = fio.Fio(args, self.ctx)
result = {}
- p.client = mock_ssh.SSH()
+ p.client = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output(self.sample_output['rw'])
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, p.run, result)
def test_fio_successful_bw_iops_sla(self, mock_ssh):
@@ -192,10 +192,10 @@ class FioTestCase(unittest.TestCase):
p = fio.Fio(args, self.ctx)
result = {}
- p.client = mock_ssh.SSH()
+ p.client = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output(self.sample_output['rw'])
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
p.run(result)
@@ -220,10 +220,10 @@ class FioTestCase(unittest.TestCase):
p = fio.Fio(args, self.ctx)
result = {}
- p.client = mock_ssh.SSH()
+ p.client = mock_ssh.SSH.from_node()
sample_output = self._read_sample_output(self.sample_output['rw'])
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, p.run, result)
def test_fio_unsuccessful_script_error(self, mock_ssh):
@@ -238,9 +238,9 @@ class FioTestCase(unittest.TestCase):
p = fio.Fio(args, self.ctx)
result = {}
- p.client = mock_ssh.SSH()
+ p.client = mock_ssh.SSH.from_node()
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, p.run, result)
def _read_sample_output(self, file_name):
diff --git a/tests/unit/benchmark/scenarios/storage/test_storagecapacity.py b/tests/unit/benchmark/scenarios/storage/test_storagecapacity.py
index 6fb5f5686..095674f72 100644
--- a/tests/unit/benchmark/scenarios/storage/test_storagecapacity.py
+++ b/tests/unit/benchmark/scenarios/storage/test_storagecapacity.py
@@ -50,7 +50,7 @@ class StorageCapacityTestCase(unittest.TestCase):
def test_capacity_successful_setup(self, mock_ssh):
c = storagecapacity.StorageCapacity(self.scn, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
c.setup()
self.assertIsNotNone(c.client)
self.assertTrue(c.setup_done)
@@ -58,7 +58,7 @@ class StorageCapacityTestCase(unittest.TestCase):
def test_capacity_disk_size_successful(self, mock_ssh):
c = storagecapacity.StorageCapacity(self.scn, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, DISK_SIZE_SAMPLE_OUTPUT, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, DISK_SIZE_SAMPLE_OUTPUT, '')
c.run(self.result)
expected_result = jsonutils.loads(
DISK_SIZE_SAMPLE_OUTPUT)
@@ -72,7 +72,7 @@ class StorageCapacityTestCase(unittest.TestCase):
}
c = storagecapacity.StorageCapacity(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, BLOCK_SIZE_SAMPLE_OUTPUT, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, BLOCK_SIZE_SAMPLE_OUTPUT, '')
c.run(self.result)
expected_result = jsonutils.loads(
BLOCK_SIZE_SAMPLE_OUTPUT)
@@ -88,7 +88,7 @@ class StorageCapacityTestCase(unittest.TestCase):
}
c = storagecapacity.StorageCapacity(args, self.ctx)
- mock_ssh.SSH().execute.return_value = (0, DISK_UTIL_RAW_OUTPUT, '')
+ mock_ssh.SSH.from_node().execute.return_value = (0, DISK_UTIL_RAW_OUTPUT, '')
c.run(self.result)
expected_result = jsonutils.loads(
DISK_UTIL_SAMPLE_OUTPUT)
@@ -97,7 +97,7 @@ class StorageCapacityTestCase(unittest.TestCase):
def test_capacity_unsuccessful_script_error(self, mock_ssh):
c = storagecapacity.StorageCapacity(self.scn, self.ctx)
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, c.run, self.result)
diff --git a/tests/unit/network_services/nfvi/test_resource.py b/tests/unit/network_services/nfvi/test_resource.py
index 26d18838b..e2640ac74 100644
--- a/tests/unit/network_services/nfvi/test_resource.py
+++ b/tests/unit/network_services/nfvi/test_resource.py
@@ -90,7 +90,7 @@ class TestResourceProfile(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, {}, ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
self.resource_profile = \
ResourceProfile(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0],
@@ -120,7 +120,7 @@ class TestResourceProfile(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
resource_profile = \
ResourceProfile(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0],
[1, 2, 3])
@@ -132,7 +132,7 @@ class TestResourceProfile(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
resource_profile = \
ResourceProfile(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0],
[1, 2, 3])
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py
index 4f0855543..88df7788b 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py
@@ -141,7 +141,7 @@ class TestPingTrafficGen(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
ping_traffic_gen = PingTrafficGen(vnfd)
self.assertEqual(ping_traffic_gen._queue, None)
@@ -152,7 +152,7 @@ class TestPingTrafficGen(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
ping_traffic_gen = PingTrafficGen(vnfd)
ping_traffic_gen._queue = Queue()
ping_traffic_gen._queue.put({})
@@ -165,7 +165,7 @@ class TestPingTrafficGen(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
ping_traffic_gen = PingTrafficGen(vnfd)
self.assertEqual(None, ping_traffic_gen.instantiate({}, {}))
@@ -176,7 +176,7 @@ class TestPingTrafficGen(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
ping_traffic_gen = PingTrafficGen(vnfd)
self.assertEqual(None, ping_traffic_gen.listen_traffic({}))
@@ -191,7 +191,7 @@ class TestPingTrafficGen(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
self.sut = PingTrafficGen(vnfd)
self.sut.connection = mock.Mock()
@@ -210,7 +210,7 @@ class TestPingTrafficGen(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
self.sut = PingTrafficGen(vnfd)
self.sut.connection = mock.Mock()
@@ -228,7 +228,7 @@ class TestPingTrafficGen(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
flavor = ""
ping_traffic_gen = PingTrafficGen(vnfd)
@@ -241,7 +241,7 @@ class TestPingTrafficGen(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
ping_traffic_gen = PingTrafficGen(vnfd)
self.assertEqual(None, ping_traffic_gen.terminate())
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py
index eda5cea84..4ea180851 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py
@@ -195,7 +195,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGenRFC(vnfd)
self.assertIsNotNone(trex_traffic_gen._terminated)
@@ -206,7 +206,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGenRFC(vnfd)
restult = trex_traffic_gen.collect_kpi()
@@ -218,7 +218,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGenRFC(vnfd)
self.assertEqual(None, trex_traffic_gen.listen_traffic({}))
@@ -233,7 +233,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGenRFC(vnfd)
trex_traffic_gen._start_server = mock.Mock(return_value=0)
@@ -251,7 +251,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
mock.Mock(return_value=(1, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGenRFC(vnfd)
scenario_cfg = {"tc": "tc_baremetal_rfc2544_ipv4_1flow_64B"}
@@ -265,7 +265,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGenRFC(vnfd)
self.assertEqual([0.8, 1.0],
@@ -282,7 +282,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGenRFC(vnfd)
self.assertEqual(None, trex_traffic_gen._start_server())
@@ -304,7 +304,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
self.sut = TrexTrafficGenRFC(vnfd)
self.sut.connection = mock.Mock()
@@ -327,7 +327,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGenRFC(vnfd)
result = ['0x00', '0x00', '0x00', '0x00', '0x00', '0x01']
@@ -342,7 +342,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGenRFC(vnfd)
tg_rfc2544_trex.WAIT_TIME = 1
@@ -358,7 +358,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
self.sut = TrexTrafficGenRFC(vnfd)
self.sut.connection = mock.Mock()
@@ -376,7 +376,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
flavor = ""
trex_traffic_gen = TrexTrafficGenRFC(vnfd)
@@ -389,7 +389,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
trex_traffic_gen = TrexTrafficGenRFC(vnfd)
self.assertEqual(None, trex_traffic_gen.terminate())
@@ -399,7 +399,7 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
trex_traffic_gen = TrexTrafficGenRFC(vnfd)
client = mock.Mock(autospec=STLClient)
client.connect = mock.Mock(return_value=0)
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py
index a76fbbd2a..ca8421919 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py
@@ -176,7 +176,7 @@ class TestTrexTrafficGen(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGen(vnfd)
self.assertIsNotNone(trex_traffic_gen._terminated)
@@ -187,7 +187,7 @@ class TestTrexTrafficGen(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGen(vnfd)
trex_traffic_gen._queue.put({})
@@ -200,7 +200,7 @@ class TestTrexTrafficGen(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGen(vnfd)
self.assertEqual(None, trex_traffic_gen.listen_traffic({}))
@@ -215,7 +215,7 @@ class TestTrexTrafficGen(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGen(vnfd)
self.assertEqual(0, trex_traffic_gen.instantiate({}, {}))
@@ -230,7 +230,7 @@ class TestTrexTrafficGen(unittest.TestCase):
mock.Mock(return_value=(1, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGen(vnfd)
self.assertRaises(RuntimeError,
@@ -243,7 +243,7 @@ class TestTrexTrafficGen(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGen(vnfd)
self.assertEqual(None, trex_traffic_gen._start_server())
@@ -259,7 +259,7 @@ class TestTrexTrafficGen(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
self.sut = TrexTrafficGen(vnfd)
self.sut.connection = mock.Mock()
@@ -279,7 +279,7 @@ class TestTrexTrafficGen(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGen(vnfd)
self.assertEqual(None, trex_traffic_gen._generate_trex_cfg(vnfd))
@@ -291,7 +291,7 @@ class TestTrexTrafficGen(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGen(vnfd)
result = ['0x00', '0x00', '0x00', '0x00', '0x00', '0x01']
@@ -309,7 +309,7 @@ class TestTrexTrafficGen(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
self.sut = TrexTrafficGen(vnfd)
self.sut.connection = mock.Mock()
@@ -326,7 +326,7 @@ class TestTrexTrafficGen(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(1, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
flavor = ""
trex_traffic_gen = TrexTrafficGen(vnfd)
@@ -339,7 +339,7 @@ class TestTrexTrafficGen(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(1, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
trex_traffic_gen = TrexTrafficGen(vnfd)
self.assertEqual(
None, trex_traffic_gen.setup_vnf_environment(ssh_mock))
@@ -350,7 +350,7 @@ class TestTrexTrafficGen(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
trex_traffic_gen = TrexTrafficGen(vnfd)
self.assertEqual(None, trex_traffic_gen.terminate())
@@ -360,7 +360,7 @@ class TestTrexTrafficGen(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
trex_traffic_gen = TrexTrafficGen(vnfd)
client = mock.Mock(autospec=STLClient)
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py
index 36b8c2a22..b69e537aa 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py
@@ -229,7 +229,7 @@ class TestVpeApproxVnf(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
vpe_approx_vnf = VpeApproxVnf(vnfd)
vpe_approx_vnf.resource = mock.Mock(autospec=ResourceProfile)
@@ -249,7 +249,7 @@ class TestVpeApproxVnf(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
vpe_approx_vnf = VpeApproxVnf(vnfd)
cmd = "quit"
@@ -261,7 +261,7 @@ class TestVpeApproxVnf(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
vpe_approx_vnf = VpeApproxVnf(vnfd)
vpe_approx_vnf.execute_command = \
@@ -277,7 +277,7 @@ class TestVpeApproxVnf(unittest.TestCase):
mock.Mock(return_value=(0, "", ""))
ssh_mock.run = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
vpe_approx_vnf = VpeApproxVnf(vnfd)
curr_path = os.path.dirname(os.path.abspath(__file__))
@@ -294,7 +294,7 @@ class TestVpeApproxVnf(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
vpe_approx_vnf = VpeApproxVnf(vnfd)
self.scenario_cfg['vnf_options'] = {'vpe': {'cfg': ""}}
@@ -311,7 +311,7 @@ class TestVpeApproxVnf(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(1, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
vpe_approx_vnf = VpeApproxVnf(vnfd)
self.scenario_cfg['vnf_options'] = {'vpe': {'cfg': ""}}
@@ -332,7 +332,7 @@ class TestVpeApproxVnf(unittest.TestCase):
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
- ssh.return_value = ssh_mock
+ ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
vpe_approx_vnf = VpeApproxVnf(vnfd)
self.assertEqual(None,
diff --git a/tests/unit/orchestrator/__init__.py b/tests/unit/orchestrator/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/unit/orchestrator/__init__.py
diff --git a/tests/unit/orchestrator/test_heat.py b/tests/unit/orchestrator/test_heat.py
index 97314c275..4892f98f8 100644
--- a/tests/unit/orchestrator/test_heat.py
+++ b/tests/unit/orchestrator/test_heat.py
@@ -11,9 +11,12 @@
# Unittest for yardstick.benchmark.orchestrator.heat
+from tempfile import NamedTemporaryFile
import unittest
import uuid
+import mock
+from yardstick.benchmark.contexts import node
from yardstick.orchestrator import heat
@@ -24,3 +27,146 @@ class HeatContextTestCase(unittest.TestCase):
k = heat.get_short_key_uuid(u)
self.assertEqual(heat.HEAT_KEY_UUID_LENGTH, len(k))
self.assertIn(k, str(u))
+
+class HeatTemplateTestCase(unittest.TestCase):
+
+ def setUp(self):
+ self.template = heat.HeatTemplate('test')
+
+ def test_add_tenant_network(self):
+ self.template.add_network('some-network')
+
+ self.assertEqual(self.template.resources['some-network']['type'], 'OS::Neutron::Net')
+
+ def test_add_provider_network(self):
+ self.template.add_network('some-network', 'physnet2', 'sriov')
+
+ self.assertEqual(self.template.resources['some-network']['type'], 'OS::Neutron::ProviderNet')
+ self.assertEqual(self.template.resources['some-network']['properties']['physical_network'], 'physnet2')
+
+ def test_add_subnet(self):
+ netattrs = {'cidr': '10.0.0.0/24', 'provider': None, 'external_network': 'ext_net'}
+ self.template.add_subnet('some-subnet', "some-network", netattrs['cidr'])
+
+ self.assertEqual(self.template.resources['some-subnet']['type'], 'OS::Neutron::Subnet')
+ self.assertEqual(self.template.resources['some-subnet']['properties']['cidr'], '10.0.0.0/24')
+
+ def test_add_router(self):
+ self.template.add_router('some-router', 'ext-net', 'some-subnet')
+
+ self.assertEqual(self.template.resources['some-router']['type'], 'OS::Neutron::Router')
+ self.assertIn('some-subnet', self.template.resources['some-router']['depends_on'])
+
+ def test_add_router_interface(self):
+ self.template.add_router_interface('some-router-if', 'some-router', 'some-subnet')
+
+ self.assertEqual(self.template.resources['some-router-if']['type'], 'OS::Neutron::RouterInterface')
+ self.assertIn('some-subnet', self.template.resources['some-router-if']['depends_on'])
+
+ def test_add_servergroup(self):
+ self.template.add_servergroup('some-server-group', 'anti-affinity')
+
+ self.assertEqual(self.template.resources['some-server-group']['type'], 'OS::Nova::ServerGroup')
+ self.assertEqual(self.template.resources['some-server-group']['properties']['policies'], ['anti-affinity'])
+
+ def test__add_resources_to_template_raw(self):
+
+ self.test_context = node.NodeContext()
+ self.test_context.name = 'foo'
+ self.test_context.template_file = '/tmp/some-heat-file'
+ self.test_context.heat_parameters = {'image': 'cirros'}
+ self.test_context.key_filename = "/tmp/1234"
+ self.test_context.keypair_name = "foo-key"
+ self.test_context.secgroup_name = "foo-secgroup"
+ self.test_context.key_uuid = "2f2e4997-0a8e-4eb7-9fa4-f3f8fbbc393b"
+ self._template = {
+ 'outputs' : {},
+ 'resources' : {}
+ }
+
+ self.heat_object = heat.HeatObject()
+ self.heat_tmp_object = heat.HeatObject()
+
+ self.heat_stack = heat.HeatStack("tmpStack")
+ self.heat_stack.stacks_exist()
+
+ self.test_context.tmpfile = NamedTemporaryFile(delete=True, mode='w+t')
+ self.test_context.tmpfile.write("heat_template_version: 2015-04-30")
+ self.test_context.tmpfile.flush()
+ self.test_context.tmpfile.seek(0)
+ self.heat_tmp_template = heat.HeatTemplate(self.heat_tmp_object, self.test_context.tmpfile.name,
+ heat_parameters= {"dict1": 1, "dict2": 2})
+
+ self.heat_template = heat.HeatTemplate(self.heat_object)
+ self.heat_template.resources = {}
+
+ self.heat_template.add_network("network1")
+ self.heat_template.add_network("network2")
+ self.heat_template.add_security_group("sec_group1")
+ self.heat_template.add_security_group("sec_group2")
+ self.heat_template.add_subnet("subnet1", "network1", "cidr1")
+ self.heat_template.add_subnet("subnet2", "network2", "cidr2")
+ self.heat_template.add_router("router1", "gw1", "subnet1")
+ self.heat_template.add_router_interface("router_if1", "router1", "subnet1")
+ self.heat_template.add_port("port1", "network1", "subnet1")
+ self.heat_template.add_port("port2", "network2", "subnet2", sec_group_id="sec_group1",provider="not-sriov")
+ self.heat_template.add_port("port3", "network2", "subnet2", sec_group_id="sec_group1",provider="sriov")
+ self.heat_template.add_floating_ip("floating_ip1", "network1", "port1", "router_if1")
+ self.heat_template.add_floating_ip("floating_ip2", "network2", "port2", "router_if2", "foo-secgroup")
+ self.heat_template.add_floating_ip_association("floating_ip1_association", "floating_ip1", "port1")
+ self.heat_template.add_servergroup("server_grp2", "affinity")
+ self.heat_template.add_servergroup("server_grp3", "anti-affinity")
+ self.heat_template.add_security_group("security_group")
+ self.heat_template.add_server(name="server1", image="image1", flavor="flavor1", flavors=[])
+ self.heat_template.add_server_group(name="servergroup", policies=["policy1","policy2"])
+ self.heat_template.add_server_group(name="servergroup", policies="policy1")
+ self.heat_template.add_server(name="server2", image="image1", flavor="flavor1", flavors=[], ports=["port1", "port2"],
+ networks=["network1", "network2"], scheduler_hints="hints1", user="user1",
+ key_name="foo-key", user_data="user", metadata={"cat": 1, "doc": 2},
+ additional_properties={"prop1": 1, "prop2": 2})
+ self.heat_template.add_server(name="server2", image="image1", flavor="flavor1", flavors=["flavor1", "flavor2"],
+ ports=["port1", "port2"],
+ networks=["network1", "network2"], scheduler_hints="hints1", user="user1",
+ key_name="foo-key", user_data="user", metadata={"cat": 1, "doc": 2},
+ additional_properties={"prop1": 1, "prop2": 2} )
+ self.heat_template.add_server(name="server2", image="image1", flavor="flavor1", flavors=["flavor3", "flavor4"],
+ ports=["port1", "port2"],
+ networks=["network1", "network2"], scheduler_hints="hints1", user="user1",
+ key_name="foo-key", user_data="user", metadata={"cat": 1, "doc": 2},
+ additional_properties={"prop1": 1, "prop2": 2})
+ self.heat_template.add_flavor(name="flavor1", vcpus=1, ram=2048, disk=1,extra_specs={"cat": 1, "dog": 2})
+ self.heat_template.add_flavor(name=None, vcpus=1, ram=2048)
+ self.heat_template.add_server(name="server1",
+ image="image1",
+ flavor="flavor1",
+ flavors=[],
+ ports=["port1", "port2"],
+ networks=["network1", "network2"],
+ scheduler_hints="hints1",
+ user="user1",
+ key_name="foo-key",
+ user_data="user",
+ metadata={"cat": 1, "doc": 2},
+ additional_properties= {"prop1": 1, "prop2": 2} )
+ self.heat_template.add_network("network1")
+
+ self.heat_template.add_flavor("test")
+ self.assertEqual(self.heat_template.resources['test']['type'], 'OS::Nova::Flavor')
+
+
+class HeatStackTestCase(unittest.TestCase):
+
+ def test_delete_calls__delete_multiple_times(self):
+ stack = heat.HeatStack('test')
+ stack.uuid = 1
+ with mock.patch.object(stack, "_delete") as delete_mock:
+ stack.delete()
+ # call once and then call again if uuid is not none
+ self.assertGreater(delete_mock.call_count, 1)
+
+ def test_delete_all_calls_delete(self):
+ stack = heat.HeatStack('test')
+ stack.uuid = 1
+ with mock.patch.object(stack, "delete") as delete_mock:
+ stack.delete_all()
+ self.assertGreater(delete_mock.call_count, 0)
diff --git a/tests/unit/test_ssh.py b/tests/unit/test_ssh.py
index 1c63c00a3..236736baa 100644
--- a/tests/unit/test_ssh.py
+++ b/tests/unit/test_ssh.py
@@ -52,6 +52,62 @@ class SSHTestCase(unittest.TestCase):
self.assertEqual("kf", test_ssh.key_filename)
self.assertEqual("secret", test_ssh.password)
+ @mock.patch("yardstick.ssh.SSH._get_pkey")
+ def test_ssh_from_node(self, mock_ssh__get_pkey):
+ mock_ssh__get_pkey.return_value = "pkey"
+ node = {
+ "user": "root", "ip": "example.net", "ssh_port": 33,
+ "key_filename": "kf", "password": "secret"
+ }
+ test_ssh = ssh.SSH.from_node(node)
+ self.assertEqual("root", test_ssh.user)
+ self.assertEqual("example.net", test_ssh.host)
+ self.assertEqual(33, test_ssh.port)
+ self.assertEqual("kf", test_ssh.key_filename)
+ self.assertEqual("secret", test_ssh.password)
+
+ @mock.patch("yardstick.ssh.SSH._get_pkey")
+ def test_ssh_from_node_password_default(self, mock_ssh__get_pkey):
+ mock_ssh__get_pkey.return_value = "pkey"
+ node = {
+ "user": "root", "ip": "example.net", "ssh_port": 33,
+ "key_filename": "kf"
+ }
+ test_ssh = ssh.SSH.from_node(node)
+ self.assertEqual("root", test_ssh.user)
+ self.assertEqual("example.net", test_ssh.host)
+ self.assertEqual(33, test_ssh.port)
+ self.assertEqual("kf", test_ssh.key_filename)
+ self.assertIsNone(test_ssh.password)
+
+ @mock.patch("yardstick.ssh.SSH._get_pkey")
+ def test_ssh_from_node_ssh_port_default(self, mock_ssh__get_pkey):
+ mock_ssh__get_pkey.return_value = "pkey"
+ node = {
+ "user": "root", "ip": "example.net",
+ "key_filename": "kf", "password": "secret"
+ }
+ test_ssh = ssh.SSH.from_node(node)
+ self.assertEqual("root", test_ssh.user)
+ self.assertEqual("example.net", test_ssh.host)
+ self.assertEqual(ssh.SSH_PORT, test_ssh.port)
+ self.assertEqual("kf", test_ssh.key_filename)
+ self.assertEqual("secret", test_ssh.password)
+
+ @mock.patch("yardstick.ssh.SSH._get_pkey")
+ def test_ssh_from_node_key_filename_default(self, mock_ssh__get_pkey):
+ mock_ssh__get_pkey.return_value = "pkey"
+ node = {
+ "user": "root", "ip": "example.net", "ssh_port": 33,
+ "password": "secret"
+ }
+ test_ssh = ssh.SSH.from_node(node)
+ self.assertEqual("root", test_ssh.user)
+ self.assertEqual("example.net", test_ssh.host)
+ self.assertEqual(33, test_ssh.port)
+ self.assertIsNone(test_ssh.key_filename)
+ self.assertEqual("secret", test_ssh.password)
+
def test_construct_default(self):
self.assertEqual("root", self.test_client.user)
self.assertEqual("example.net", self.test_client.host)
diff --git a/yardstick/benchmark/contexts/heat.py b/yardstick/benchmark/contexts/heat.py
index 604df80d1..b689ac09c 100644
--- a/yardstick/benchmark/contexts/heat.py
+++ b/yardstick/benchmark/contexts/heat.py
@@ -47,6 +47,7 @@ class HeatContext(Context):
self._server_map = {}
self._image = None
self._flavor = None
+ self.flavors = set()
self._user = None
self.template_file = None
self.heat_parameters = None
@@ -129,11 +130,20 @@ class HeatContext(Context):
def _add_resources_to_template(self, template):
"""add to the template the resources represented by this context"""
+
+ if self.flavor:
+ if isinstance(self.flavor, dict):
+ flavor = self.flavor.setdefault("name", self.name + "-flavor")
+ template.add_flavor(**self.flavor)
+ self.flavors.add(flavor)
+
template.add_keypair(self.keypair_name, self.key_uuid)
template.add_security_group(self.secgroup_name)
for network in self.networks:
- template.add_network(network.stack_name)
+ template.add_network(network.stack_name,
+ network.physical_network,
+ network.provider)
template.add_subnet(network.subnet_stack_name, network.stack_name,
network.subnet_cidr)
@@ -161,6 +171,13 @@ class HeatContext(Context):
availability_servers.append(server)
break
+ for server in availability_servers:
+ if isinstance(server.flavor, dict):
+ try:
+ self.flavors.add(server.flavor["name"])
+ except KeyError:
+ self.flavors.add(server.stack_name + "-flavor")
+
# add servers with availability policy
added_servers = []
for server in availability_servers:
diff --git a/yardstick/benchmark/contexts/model.py b/yardstick/benchmark/contexts/model.py
index 4873afde3..546201e9b 100644
--- a/yardstick/benchmark/contexts/model.py
+++ b/yardstick/benchmark/contexts/model.py
@@ -105,6 +105,8 @@ class Network(Object):
self.subnet_stack_name = self.stack_name + "-subnet"
self.subnet_cidr = attrs.get('cidr', '10.0.1.0/24')
self.router = None
+ self.physical_network = attrs.get('physical_network', 'physnet1')
+ self.provider = attrs.get('provider', None)
if "external_network" in attrs:
self.router = Router("router", self.name,
@@ -128,7 +130,8 @@ class Network(Object):
@staticmethod
def find_external_network():
"""return the name of an external network some network in this
- context has a route to"""
+ context has a route to
+ """
for network in Network.list:
if network.router:
return network.router.external_gateway_info
@@ -148,6 +151,7 @@ class Server(Object): # pragma: no cover
self.context = context
self.public_ip = None
self.private_ip = None
+ self.user_data = ''
if attrs is None:
attrs = {}
@@ -200,6 +204,8 @@ class Server(Object): # pragma: no cover
if "flavor" in attrs:
self._flavor = attrs["flavor"]
+ self.user_data = attrs.get('user_data', '')
+
Server.list.append(self)
@property
@@ -226,7 +232,8 @@ class Server(Object): # pragma: no cover
self.ports[network.name] = {"stack_name": port_name}
template.add_port(port_name, network.stack_name,
network.subnet_stack_name,
- sec_group_id=self.secgroup_name)
+ sec_group_id=self.secgroup_name,
+ provider=network.provider)
port_name_list.append(port_name)
if self.floating_ip:
@@ -244,11 +251,21 @@ class Server(Object): # pragma: no cover
self.floating_ip_assoc["stack_name"],
self.floating_ip["stack_name"],
port_name)
-
- template.add_server(server_name, self.image, self.flavor,
+ if self.flavor:
+ if isinstance(self.flavor, dict):
+ self.flavor["name"] = \
+ self.flavor.setdefault("name", self.stack_name + "-flavor")
+ template.add_flavor(**self.flavor)
+ self.flavor_name = self.flavor["name"]
+ else:
+ self.flavor_name = self.flavor
+
+ template.add_server(server_name, self.image, flavor=self.flavor_name,
+ flavors=self.context.flavors,
ports=port_name_list,
user=self.user,
key_name=self.keypair_name,
+ user_data=self.user_data,
scheduler_hints=scheduler_hints)
def add_to_template(self, template, networks, scheduler_hints=None):
@@ -266,7 +283,7 @@ class Server(Object): # pragma: no cover
def update_scheduler_hints(scheduler_hints, added_servers, placement_group):
- """ update scheduler hints from server's placement configuration
+ """update scheduler hints from server's placement configuration
TODO: this code is openstack specific and should move somewhere else
"""
if placement_group.policy == "affinity":
diff --git a/yardstick/benchmark/contexts/node.py b/yardstick/benchmark/contexts/node.py
index a4a2cfc57..baa1cf5d6 100644
--- a/yardstick/benchmark/contexts/node.py
+++ b/yardstick/benchmark/contexts/node.py
@@ -178,21 +178,7 @@ class NodeContext(Context):
if node is None:
raise SystemExit('No such node')
- user = node.get('user', 'ubuntu')
- ssh_port = node.get("ssh_port", ssh.DEFAULT_PORT)
- ip = node.get('ip')
- pwd = node.get('password')
- key_fname = node.get('key_filename', '/root/.ssh/id_rsa')
-
- if pwd is not None:
- LOG.debug("Log in via pw, user:%s, host:%s, password:%s",
- user, ip, pwd)
- self.client = ssh.SSH(user, ip, password=pwd, port=ssh_port)
- else:
- LOG.debug("Log in via key, user:%s, host:%s, key_filename:%s",
- user, ip, key_fname)
- self.client = ssh.SSH(user, ip, key_filename=key_fname,
- port=ssh_port)
+ self.client = ssh.SSH.from_node(node, defaults={'user': 'ubuntu'})
self.client.wait(timeout=600)
diff --git a/yardstick/benchmark/core/plugin.py b/yardstick/benchmark/core/plugin.py
index 3080f5dd9..7f67a04b3 100644
--- a/yardstick/benchmark/core/plugin.py
+++ b/yardstick/benchmark/core/plugin.py
@@ -80,33 +80,17 @@ class Plugin(object):
self.script = pkg_resources.resource_filename(
'yardstick.resources', 'scripts/install/' + target_script)
- deployment_user = deployment.get("user")
- deployment_ssh_port = deployment.get("ssh_port", ssh.DEFAULT_PORT)
deployment_ip = deployment.get("ip", None)
- deployment_password = deployment.get("password", None)
- deployment_key_filename = deployment.get("key_filename",
- "/root/.ssh/id_rsa")
if deployment_ip == "local":
- installer_ip = os.environ.get("INSTALLER_IP", None)
-
- if deployment_password is not None:
- self._login_via_password(deployment_user, installer_ip,
- deployment_password,
- deployment_ssh_port)
- else:
- self._login_via_key(self, deployment_user, installer_ip,
- deployment_key_filename,
- deployment_ssh_port)
+ self.client = ssh.SSH.from_node(deployment, overrides={
+ # host can't be None, fail if no INSTALLER_IP
+ 'ip': os.environ["INSTALLER_IP"],
+ })
else:
- if deployment_password is not None:
- self._login_via_password(deployment_user, deployment_ip,
- deployment_password,
- deployment_ssh_port)
- else:
- self._login_via_key(self, deployment_user, deployment_ip,
- deployment_key_filename,
- deployment_ssh_port)
+ self.client = ssh.SSH.from_node(deployment)
+ self.client.wait(timeout=600)
+
# copy script to host
remotepath = '~/%s.sh' % plugin_name
@@ -119,33 +103,16 @@ class Plugin(object):
self.script = pkg_resources.resource_filename(
'yardstick.resources', 'scripts/remove/' + target_script)
- deployment_user = deployment.get("user")
- deployment_ssh_port = deployment.get("ssh_port", ssh.DEFAULT_PORT)
deployment_ip = deployment.get("ip", None)
- deployment_password = deployment.get("password", None)
- deployment_key_filename = deployment.get("key_filename",
- "/root/.ssh/id_rsa")
if deployment_ip == "local":
- installer_ip = os.environ.get("INSTALLER_IP", None)
-
- if deployment_password is not None:
- self._login_via_password(deployment_user, installer_ip,
- deployment_password,
- deployment_ssh_port)
- else:
- self._login_via_key(self, deployment_user, installer_ip,
- deployment_key_filename,
- deployment_ssh_port)
+ self.client = ssh.SSH.from_node(deployment, overrides={
+ # host can't be None, fail if no INSTALLER_IP
+ 'ip': os.environ["INSTALLER_IP"],
+ })
else:
- if deployment_password is not None:
- self._login_via_password(deployment_user, deployment_ip,
- deployment_password,
- deployment_ssh_port)
- else:
- self._login_via_key(self, deployment_user, deployment_ip,
- deployment_key_filename,
- deployment_ssh_port)
+ self.client = ssh.SSH.from_node(deployment)
+ self.client.wait(timeout=600)
# copy script to host
remotepath = '~/%s.sh' % plugin_name
@@ -153,23 +120,12 @@ class Plugin(object):
LOG.info("copying script to host: %s", remotepath)
self.client._put_file_shell(self.script, remotepath)
- def _login_via_password(self, user, ip, password, ssh_port):
- LOG.info("Log in via pw, user:%s, host:%s", user, ip)
- self.client = ssh.SSH(user, ip, password=password, port=ssh_port)
- self.client.wait(timeout=600)
-
- def _login_via_key(self, user, ip, key_filename, ssh_port):
- LOG.info("Log in via key, user:%s, host:%s", user, ip)
- self.client = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
- self.client.wait(timeout=600)
-
def _run(self, plugin_name):
"""Run installation script """
cmd = "sudo bash %s" % plugin_name + ".sh"
LOG.info("Executing command: %s", cmd)
- status, stdout, stderr = self.client.execute(cmd)
+ self.client.execute(cmd)
class PluginParser(object):
diff --git a/yardstick/benchmark/runners/base.py b/yardstick/benchmark/runners/base.py
index 7c76e42df..b48ed973a 100755
--- a/yardstick/benchmark/runners/base.py
+++ b/yardstick/benchmark/runners/base.py
@@ -22,6 +22,7 @@ import logging
import multiprocessing
import subprocess
import time
+import os
import traceback
from oslo_config import cfg
@@ -40,7 +41,11 @@ def _output_serializer_main(filename, queue, config):
Use of this process enables multiple instances of a scenario without
messing up the output file.
"""
- out_type = config['yardstick'].get('DEFAULT', {}).get('dispatcher', 'file')
+ try:
+ out_type = config['yardstick'].get('DEFAULT', {})['dispatcher']
+ except KeyError:
+ out_type = os.environ.get('DISPATCHER', 'file')
+
conf = {
'type': out_type.capitalize(),
'file_path': filename
diff --git a/yardstick/benchmark/runners/iteration.py b/yardstick/benchmark/runners/iteration.py
index c2376af48..29daa0d42 100644
--- a/yardstick/benchmark/runners/iteration.py
+++ b/yardstick/benchmark/runners/iteration.py
@@ -41,6 +41,10 @@ def _worker_process(queue, cls, method_name, scenario_cfg,
interval = runner_cfg.get("interval", 1)
iterations = runner_cfg.get("iterations", 1)
run_step = runner_cfg.get("run_step", "setup,run,teardown")
+ delta = runner_cfg.get("delta", 2)
+ options_cfg = scenario_cfg['options']
+ initial_rate = options_cfg.get("rate", 100)
+ scenario_cfg['options']['rate'] = initial_rate
LOG.info("worker START, iterations %d times, class %s", iterations, cls)
runner_cfg['runner_id'] = os.getpid()
@@ -77,6 +81,10 @@ def _worker_process(queue, cls, method_name, scenario_cfg,
elif sla_action == "monitor":
LOG.warning("SLA validation failed: %s", assertion.args)
errors = assertion.args
+ elif sla_action == "rate-control":
+ scenario_cfg['options']['rate'] -= delta
+ sequence = 1
+ continue
except Exception as e:
errors = traceback.format_exc()
LOG.exception(e)
diff --git a/yardstick/benchmark/scenarios/availability/attacker/attacker_baremetal.py b/yardstick/benchmark/scenarios/availability/attacker/attacker_baremetal.py
index 1d632799d..22de0b645 100644
--- a/yardstick/benchmark/scenarios/availability/attacker/attacker_baremetal.py
+++ b/yardstick/benchmark/scenarios/availability/attacker/attacker_baremetal.py
@@ -39,16 +39,11 @@ class BaremetalAttacker(BaseAttacker):
def setup(self):
LOG.debug("config:%s context:%s", self._config, self._context)
host = self._context.get(self._config['host'], None)
- ip = host.get("ip", None)
- user = host.get("user", "root")
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- key_filename = host.get("key_filename", "~/.ssh/id_rsa")
- self.connection = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+ self.connection = ssh.SSH.from_node(host, defaults={"user": "root"})
self.connection.wait(timeout=600)
LOG.debug("ssh host success!")
- self.host_ip = ip
+ self.host_ip = host['ip']
self.ipmi_ip = host.get("ipmi_ip", None)
self.ipmi_user = host.get("ipmi_user", "root")
@@ -66,7 +61,7 @@ class BaremetalAttacker(BaseAttacker):
def check(self):
with open(self.check_script, "r") as stdin_file:
exit_status, stdout, stderr = self.connection.execute(
- "/bin/sh -s {0} -W 10".format(self.host_ip),
+ "sudo /bin/sh -s {0} -W 10".format(self.host_ip),
stdin=stdin_file)
LOG.debug("check ret: %s out:%s err:%s",
@@ -79,7 +74,7 @@ class BaremetalAttacker(BaseAttacker):
def inject_fault(self):
exit_status, stdout, stderr = self.connection.execute(
- "shutdown -h now")
+ "sudo shutdown -h now")
LOG.debug("inject fault ret: %s out:%s err:%s",
exit_status, stdout, stderr)
if not exit_status:
@@ -90,26 +85,25 @@ class BaremetalAttacker(BaseAttacker):
self.jump_connection = None
if jump_host_name is not None:
host = self._context.get(jump_host_name, None)
- ip = host.get("ip", None)
- user = host.get("user", "root")
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- pwd = host.get("pwd", None)
-
- LOG.debug("jump_host ip:%s user:%s", ip, user)
- self.jump_connection = ssh.SSH(user, ip, password=pwd,
- port=ssh_port)
+
+ LOG.debug("jump_host ip:%s user:%s", host['ip'], host['user'])
+ self.jump_connection = ssh.SSH.from_node(
+ host,
+ # why do we allow pwd for password?
+ defaults={"user": "root", "password": host.get("pwd")}
+ )
self.jump_connection.wait(timeout=600)
LOG.debug("ssh jump host success!")
if self.jump_connection is not None:
with open(self.recovery_script, "r") as stdin_file:
- exit_status, stdout, stderr = self.jump_connection.execute(
- "/bin/bash -s {0} {1} {2} {3}".format(
+ self.jump_connection.execute(
+ "sudo /bin/bash -s {0} {1} {2} {3}".format(
self.ipmi_ip, self.ipmi_user, self.ipmi_pwd, "on"),
stdin=stdin_file)
else:
- exit_status, stdout = _execute_shell_command(
- "/bin/bash -s {0} {1} {2} {3}".format(
+ _execute_shell_command(
+ "sudo /bin/bash -s {0} {1} {2} {3}".format(
self.ipmi_ip, self.ipmi_user, self.ipmi_pwd, "on"),
stdin=open(self.recovery_script, "r"))
diff --git a/yardstick/benchmark/scenarios/availability/attacker/attacker_general.py b/yardstick/benchmark/scenarios/availability/attacker/attacker_general.py
index ab5e99860..48863af93 100644
--- a/yardstick/benchmark/scenarios/availability/attacker/attacker_general.py
+++ b/yardstick/benchmark/scenarios/availability/attacker/attacker_general.py
@@ -24,13 +24,8 @@ class GeneralAttacker(BaseAttacker):
def setup(self):
LOG.debug("config:%s context:%s", self._config, self._context)
host = self._context.get(self._config['host'], None)
- ip = host.get("ip", None)
- user = host.get("user", "root")
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- key_filename = host.get("key_filename", "~/.ssh/id_rsa")
- self.connection = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+ self.connection = ssh.SSH.from_node(host, defaults={"user": "root"})
self.connection.wait(timeout=600)
LOG.debug("ssh host success!")
@@ -69,12 +64,12 @@ class GeneralAttacker(BaseAttacker):
LOG.debug("the shell command is: %s", self.action_param)
with open(self.inject_script, "r") as stdin_file:
exit_status, stdout, stderr = self.connection.execute(
- self.action_param,
+ "sudo {}".format(self.action_param),
stdin=stdin_file)
else:
with open(self.inject_script, "r") as stdin_file:
exit_status, stdout, stderr = self.connection.execute(
- "/bin/bash -s ",
+ "sudo /bin/bash -s ",
stdin=stdin_file)
LOG.debug("the inject_fault's exit status is: %s", exit_status)
@@ -90,10 +85,10 @@ class GeneralAttacker(BaseAttacker):
LOG.debug("the shell command is: %s", self.rollback_param)
with open(self.recovery_script, "r") as stdin_file:
exit_status, stdout, stderr = self.connection.execute(
- self.rollback_param,
+ "sudo {}".format(self.rollback_param),
stdin=stdin_file)
else:
with open(self.recovery_script, "r") as stdin_file:
exit_status, stdout, stderr = self.connection.execute(
- "/bin/bash -s ",
+ "sudo /bin/bash -s ",
stdin=stdin_file)
diff --git a/yardstick/benchmark/scenarios/availability/attacker/attacker_process.py b/yardstick/benchmark/scenarios/availability/attacker/attacker_process.py
index 521c57931..bff4a6dc3 100644
--- a/yardstick/benchmark/scenarios/availability/attacker/attacker_process.py
+++ b/yardstick/benchmark/scenarios/availability/attacker/attacker_process.py
@@ -23,13 +23,8 @@ class ProcessAttacker(BaseAttacker):
def setup(self):
LOG.debug("config:%s context:%s", self._config, self._context)
host = self._context.get(self._config['host'], None)
- ip = host.get("ip", None)
- user = host.get("user", "root")
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- key_filename = host.get("key_filename", "~/.ssh/id_rsa")
- self.connection = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+ self.connection = ssh.SSH.from_node(host, defaults={"user": "root"})
self.connection.wait(timeout=600)
LOG.debug("ssh host success!")
@@ -49,10 +44,10 @@ class ProcessAttacker(BaseAttacker):
def check(self):
with open(self.check_script, "r") as stdin_file:
exit_status, stdout, stderr = self.connection.execute(
- "/bin/sh -s {0}".format(self.service_name),
+ "sudo /bin/sh -s {0}".format(self.service_name),
stdin=stdin_file)
- if stdout and "running" in stdout:
+ if stdout:
LOG.info("check the envrioment success!")
return True
else:
@@ -64,11 +59,11 @@ class ProcessAttacker(BaseAttacker):
def inject_fault(self):
with open(self.inject_script, "r") as stdin_file:
exit_status, stdout, stderr = self.connection.execute(
- "/bin/sh -s {0}".format(self.service_name),
+ "sudo /bin/sh -s {0}".format(self.service_name),
stdin=stdin_file)
def recover(self):
with open(self.recovery_script, "r") as stdin_file:
exit_status, stdout, stderr = self.connection.execute(
- "/bin/sh -s {0} ".format(self.service_name),
+ "sudo /bin/bash -s {0} ".format(self.service_name),
stdin=stdin_file)
diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/check_process_python.bash b/yardstick/benchmark/scenarios/availability/ha_tools/check_process_python.bash
index 88baed7d9..96257804f 100755
--- a/yardstick/benchmark/scenarios/availability/ha_tools/check_process_python.bash
+++ b/yardstick/benchmark/scenarios/availability/ha_tools/check_process_python.bash
@@ -15,4 +15,4 @@ set -e
process_name=$1
-ps aux | grep -e .*python.*$process_name.* | grep -v grep | wc -l
+ps aux | grep -e $process_name | grep -v grep | grep -v /bin/sh | wc -l
diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/fault_process_kill.bash b/yardstick/benchmark/scenarios/availability/ha_tools/fault_process_kill.bash
index d0e2f1683..e0491b0d5 100755
--- a/yardstick/benchmark/scenarios/availability/ha_tools/fault_process_kill.bash
+++ b/yardstick/benchmark/scenarios/availability/ha_tools/fault_process_kill.bash
@@ -15,4 +15,8 @@ set -e
process_name=$1
-killall -9 $process_name
+if [ "$process_name" = "keystone" ]; then
+ killall -9 -u $process_name
+else
+ killall -9 $process_name
+fi
diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/nova/create_flavor.bash b/yardstick/benchmark/scenarios/availability/ha_tools/nova/create_flavor.bash
index 38dbe0cee..941563e7c 100644
--- a/yardstick/benchmark/scenarios/availability/ha_tools/nova/create_flavor.bash
+++ b/yardstick/benchmark/scenarios/availability/ha_tools/nova/create_flavor.bash
@@ -14,6 +14,4 @@
set -e
-source /root/openrc
-
openstack flavor create $1 --id $2 --ram $3 --disk $4 --vcpus $5
diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/nova/delete_flavor.bash b/yardstick/benchmark/scenarios/availability/ha_tools/nova/delete_flavor.bash
index 37d2cf6c0..e998464c7 100644
--- a/yardstick/benchmark/scenarios/availability/ha_tools/nova/delete_flavor.bash
+++ b/yardstick/benchmark/scenarios/availability/ha_tools/nova/delete_flavor.bash
@@ -14,6 +14,4 @@
set -e
-source /root/openrc
-
openstack flavor delete $1
diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/nova/show_flavors.bash b/yardstick/benchmark/scenarios/availability/ha_tools/nova/show_flavors.bash
index 0b1a9f056..1b0739602 100644
--- a/yardstick/benchmark/scenarios/availability/ha_tools/nova/show_flavors.bash
+++ b/yardstick/benchmark/scenarios/availability/ha_tools/nova/show_flavors.bash
@@ -13,6 +13,4 @@
set -e
-source /root/openrc
-
nova flavor-list \ No newline at end of file
diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/start_service.bash b/yardstick/benchmark/scenarios/availability/ha_tools/start_service.bash
index c1bf8b7eb..858d86ca0 100755
--- a/yardstick/benchmark/scenarios/availability/ha_tools/start_service.bash
+++ b/yardstick/benchmark/scenarios/availability/ha_tools/start_service.bash
@@ -15,4 +15,18 @@ set -e
service_name=$1
-service $service_name start
+Distributor=$(lsb_release -a | grep "Distributor ID" | awk '{print $3}')
+
+if [ "$Distributor" != "Ubuntu" -a "$service_name" != "keystone" -a "$service_name" != "neutron-server" -a "$service_name" != "haproxy" ]; then
+ service_name="openstack-"${service_name}
+elif [ "$Distributor" = "Ubuntu" -a "$service_name" = "keystone" ]; then
+ service_name="apache2"
+elif [ "$service_name" = "keystone" ]; then
+ service_name="httpd"
+fi
+
+if which systemctl 2>/dev/null; then
+ systemctl start $service_name
+else
+ service $service_name start
+fi
diff --git a/yardstick/benchmark/scenarios/availability/ha_tools/stop_service.bash b/yardstick/benchmark/scenarios/availability/ha_tools/stop_service.bash
index a8901784e..fd8534e24 100755
--- a/yardstick/benchmark/scenarios/availability/ha_tools/stop_service.bash
+++ b/yardstick/benchmark/scenarios/availability/ha_tools/stop_service.bash
@@ -15,7 +15,22 @@ set -e
service_name=$1
-service $service_name stop
+Distributor=$(lsb_release -a | grep "Distributor ID" | awk '{print $3}')
+
+if [ "$Distributor" != "Ubuntu" -a "$service_name" != "keystone" -a "$service_name" != "neutron-server" -a "$service_name" != "haproxy" ]; then
+ service_name="openstack-"${service_name}
+elif [ "$Distributor" = "Ubuntu" -a "$service_name" = "keystone" ]; then
+ service_name="apache2"
+elif [ "$service_name" = "keystone" ]; then
+ service_name="httpd"
+fi
+
+if which systemctl 2>/dev/null; then
+ systemctl stop $service_name
+else
+ service $service_name stop
+fi
+
# TODO
# check the service status
diff --git a/yardstick/benchmark/scenarios/availability/monitor/monitor_command.py b/yardstick/benchmark/scenarios/availability/monitor/monitor_command.py
index aae2daa86..033a2d721 100644
--- a/yardstick/benchmark/scenarios/availability/monitor/monitor_command.py
+++ b/yardstick/benchmark/scenarios/availability/monitor/monitor_command.py
@@ -42,13 +42,9 @@ class MonitorOpenstackCmd(basemonitor.BaseMonitor):
node_name = self._config.get("host", None)
if node_name:
host = self._context[node_name]
- ip = host.get("ip", None)
- user = host.get("user", "root")
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- key_filename = host.get("key_filename", "~/.ssh/id_rsa")
- self.connection = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+ self.connection = ssh.SSH.from_node(host,
+ defaults={"user": "root"})
self.connection.wait(timeout=600)
LOG.debug("ssh host success!")
@@ -59,16 +55,7 @@ class MonitorOpenstackCmd(basemonitor.BaseMonitor):
def monitor_func(self):
exit_status = 0
- if self.connection:
- with open(self.check_script, "r") as stdin_file:
- exit_status, stdout, stderr = self.connection.execute(
- "/bin/bash -s '{0}'".format(self.cmd),
- stdin=stdin_file)
-
- LOG.debug("the ret stats: %s stdout: %s stderr: %s",
- exit_status, stdout, stderr)
- else:
- exit_status, stdout = _execute_shell_command(self.cmd)
+ exit_status, stdout = _execute_shell_command(self.cmd)
if exit_status:
return False
return True
diff --git a/yardstick/benchmark/scenarios/availability/monitor/monitor_general.py b/yardstick/benchmark/scenarios/availability/monitor/monitor_general.py
index 78a603193..c16765fe0 100644
--- a/yardstick/benchmark/scenarios/availability/monitor/monitor_general.py
+++ b/yardstick/benchmark/scenarios/availability/monitor/monitor_general.py
@@ -24,10 +24,6 @@ class GeneralMonitor(basemonitor.BaseMonitor):
def setup(self):
host = self._context[self._config["host"]]
- ip = host.get("ip", None)
- user = host.get("user", "root")
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- key_filename = host.get("key_filename", "~/.ssh/id_rsa")
self.key = self._config["key"]
self.monitor_key = self._config["monitor_key"]
self.monitor_type = self._config["monitor_type"]
@@ -42,8 +38,7 @@ class GeneralMonitor(basemonitor.BaseMonitor):
self.monitor_key)
self.monitor_script = self.get_script_fullpath(
self.monitor_cfg['monitor_script'])
- self.connection = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+ self.connection = ssh.SSH.from_node(host, defaults={"user": "root"})
self.connection.wait(timeout=600)
LOG.debug("ssh host success!")
@@ -51,12 +46,12 @@ class GeneralMonitor(basemonitor.BaseMonitor):
if "parameter" in self._config:
with open(self.monitor_script, "r") as stdin_file:
exit_status, stdout, stderr = self.connection.execute(
- self.cmd_param,
+ "sudo {}".format(self.cmd_param),
stdin=stdin_file)
else:
with open(self.monitor_script, "r") as stdin_file:
exit_status, stdout, stderr = self.connection.execute(
- "/bin/bash -s ",
+ "sudo /bin/bash -s ",
stdin=stdin_file)
if exit_status:
diff --git a/yardstick/benchmark/scenarios/availability/monitor/monitor_process.py b/yardstick/benchmark/scenarios/availability/monitor/monitor_process.py
index 10b398e9b..31526b011 100644
--- a/yardstick/benchmark/scenarios/availability/monitor/monitor_process.py
+++ b/yardstick/benchmark/scenarios/availability/monitor/monitor_process.py
@@ -22,13 +22,8 @@ class MonitorProcess(basemonitor.BaseMonitor):
def setup(self):
host = self._context[self._config["host"]]
- ip = host.get("ip", None)
- user = host.get("user", "root")
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- key_filename = host.get("key_filename", "~/.ssh/id_rsa")
- self.connection = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+ self.connection = ssh.SSH.from_node(host, defaults={"user": "root"})
self.connection.wait(timeout=600)
LOG.debug("ssh host success!")
self.check_script = self.get_script_fullpath(
@@ -38,7 +33,7 @@ class MonitorProcess(basemonitor.BaseMonitor):
def monitor_func(self):
with open(self.check_script, "r") as stdin_file:
exit_status, stdout, stderr = self.connection.execute(
- "/bin/sh -s {0}".format(self.process_name),
+ "sudo /bin/sh -s {0}".format(self.process_name),
stdin=stdin_file)
if not stdout or int(stdout) <= 0:
LOG.info("the process (%s) is not running!", self.process_name)
@@ -54,6 +49,7 @@ class MonitorProcess(basemonitor.BaseMonitor):
LOG.error("SLA failure: %f > %f", outage_time, max_outage_time)
return False
else:
+ LOG.info("the sla is passed")
return True
diff --git a/yardstick/benchmark/scenarios/availability/operation/operation_general.py b/yardstick/benchmark/scenarios/availability/operation/operation_general.py
index 42d70f4da..8fd387e47 100644
--- a/yardstick/benchmark/scenarios/availability/operation/operation_general.py
+++ b/yardstick/benchmark/scenarios/availability/operation/operation_general.py
@@ -14,7 +14,8 @@ from yardstick.benchmark.scenarios.availability.operation.baseoperation \
BaseOperation
import yardstick.ssh as ssh
-from yardstick.benchmark.scenarios.availability.util import buildshellparams
+from yardstick.benchmark.scenarios.availability.util \
+ import buildshellparams, execute_shell_command
LOG = logging.getLogger(__name__)
@@ -25,29 +26,29 @@ class GeneralOperaion(BaseOperation):
def setup(self):
LOG.debug("config:%s context:%s", self._config, self._context)
- host = self._context.get(self._config['host'], None)
- ip = host.get("ip", None)
- user = host.get("user", "root")
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- key_filename = host.get("key_filename", "~/.ssh/id_rsa")
+ host = self._context.get(self._config.get('host', None), None)
- self.connection = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
- self.connection.wait(timeout=600)
- LOG.debug("ssh host success!")
+ self.connection = None
+ if host:
+ self.connection = ssh.SSH.from_node(
+ host, defaults={"user": "root"})
+ self.connection.wait(timeout=600)
+ LOG.debug("ssh host success!")
self.key = self._config['key']
self.operation_key = self._config['operation_key']
if "action_parameter" in self._config:
actionParameter = self._config['action_parameter']
- str = buildshellparams(actionParameter)
+ str = buildshellparams(
+ actionParameter, True if self.connection else False)
l = list(item for item in actionParameter.values())
self.action_param = str.format(*l)
if "rollback_parameter" in self._config:
rollbackParameter = self._config['rollback_parameter']
- str = buildshellparams(rollbackParameter)
+ str = buildshellparams(
+ rollbackParameter, True if self.connection else False)
l = list(item for item in rollbackParameter.values())
self.rollback_param = str.format(*l)
@@ -60,18 +61,28 @@ class GeneralOperaion(BaseOperation):
def run(self):
if "action_parameter" in self._config:
- with open(self.action_script, "r") as stdin_file:
- exit_status, stdout, stderr = self.connection.execute(
- self.action_param,
- stdin=stdin_file)
+ if self.connection:
+ with open(self.action_script, "r") as stdin_file:
+ exit_status, stdout, stderr = self.connection.execute(
+ "sudo {}".format(self.action_param),
+ stdin=stdin_file)
+ else:
+ exit_status, stdout = \
+ execute_shell_command(
+ "/bin/bash {0} {1}".format(
+ self.action_script, self.action_param))
else:
- with open(self.action_script, "r") as stdin_file:
- exit_status, stdout, stderr = self.connection.execute(
- "/bin/sh -s ",
- stdin=stdin_file)
+ if self.connection:
+ with open(self.action_script, "r") as stdin_file:
+ exit_status, stdout, stderr = self.connection.execute(
+ "sudo /bin/sh -s ",
+ stdin=stdin_file)
+ else:
+ exit_status, stdout = execute_shell_command(
+ "/bin/bash {0}".format(self.action_script))
if exit_status == 0:
- LOG.debug("success,the operation's output is: {0}".format(stdout))
+ LOG.debug("success,the operation's output is: %s", stdout)
else:
LOG.error(
"the operation's error, stdout:%s, stderr:%s",
@@ -79,12 +90,22 @@ class GeneralOperaion(BaseOperation):
def rollback(self):
if "rollback_parameter" in self._config:
- with open(self.rollback_script, "r") as stdin_file:
- exit_status, stdout, stderr = self.connection.execute(
- self.rollback_param,
- stdin=stdin_file)
+ if self.connection:
+ with open(self.rollback_script, "r") as stdin_file:
+ exit_status, stdout, stderr = self.connection.execute(
+ "sudo {}".format(self.rollback_param),
+ stdin=stdin_file)
+ else:
+ exit_status, stdout = \
+ execute_shell_command(
+ "/bin/bash {0} {1}".format(
+ self.rollback_script, self.rollback_param))
else:
- with open(self.rollback_script, "r") as stdin_file:
- exit_status, stdout, stderr = self.connection.execute(
- "/bin/sh -s ",
- stdin=stdin_file)
+ if self.connection:
+ with open(self.rollback_script, "r") as stdin_file:
+ exit_status, stdout, stderr = self.connection.execute(
+ "sudo /bin/sh -s ",
+ stdin=stdin_file)
+ else:
+ exit_status, stdout = execute_shell_command(
+ "/bin/bash {0}".format(self.rollback_script))
diff --git a/yardstick/benchmark/scenarios/availability/result_checker/result_checker_general.py b/yardstick/benchmark/scenarios/availability/result_checker/result_checker_general.py
index 8f987a647..454338175 100644
--- a/yardstick/benchmark/scenarios/availability/result_checker/result_checker_general.py
+++ b/yardstick/benchmark/scenarios/availability/result_checker/result_checker_general.py
@@ -9,13 +9,13 @@
from __future__ import absolute_import
import logging
-
from yardstick.benchmark.scenarios.availability.result_checker \
.baseresultchecker import \
BaseResultChecker
from yardstick.benchmark.scenarios.availability import Condition
import yardstick.ssh as ssh
-from yardstick.benchmark.scenarios.availability.util import buildshellparams
+from yardstick.benchmark.scenarios.availability.util \
+ import buildshellparams, execute_shell_command
LOG = logging.getLogger(__name__)
@@ -25,16 +25,14 @@ class GeneralResultChecker(BaseResultChecker):
def setup(self):
LOG.debug("config:%s context:%s", self._config, self._context)
- host = self._context.get(self._config['host'], None)
- ip = host.get("ip", None)
- user = host.get("user", "root")
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- key_filename = host.get("key_filename", "~/.ssh/id_rsa")
+ host = self._context.get(self._config.get('host', None), None)
- self.connection = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
- self.connection.wait(timeout=600)
- LOG.debug("ssh host success!")
+ self.connection = None
+ if host:
+ self.connection = ssh.SSH.from_node(
+ host, defaults={"user": "root"})
+ self.connection.wait(timeout=600)
+ LOG.debug("ssh host success!")
self.key = self._config['key']
self.resultchecker_key = self._config['checker_key']
@@ -46,7 +44,8 @@ class GeneralResultChecker(BaseResultChecker):
self.key = self._config['key']
if "parameter" in self._config:
parameter = self._config['parameter']
- str = buildshellparams(parameter)
+ str = buildshellparams(
+ parameter, True if self.connection else False)
l = list(item for item in parameter.values())
self.shell_cmd = str.format(*l)
@@ -57,19 +56,32 @@ class GeneralResultChecker(BaseResultChecker):
def verify(self):
if "parameter" in self._config:
- with open(self.verify_script, "r") as stdin_file:
- exit_status, stdout, stderr = self.connection.execute(
- self.shell_cmd,
- stdin=stdin_file)
+ if self.connection:
+ with open(self.verify_script, "r") as stdin_file:
+ exit_status, stdout, stderr = self.connection.execute(
+ "sudo {}".format(self.shell_cmd),
+ stdin=stdin_file)
+ else:
+ exit_status, stdout = \
+ execute_shell_command(
+ "/bin/bash {0} {1}".format(
+ self.verify_script,
+ self.rollback_param))
+
LOG.debug("action script of the operation is: %s",
self.verify_script)
LOG.debug("action parameter the of operation is: %s",
self.shell_cmd)
else:
- with open(self.verify_script, "r") as stdin_file:
- exit_status, stdout, stderr = self.connection.execute(
- "/bin/bash -s ",
- stdin=stdin_file)
+ if self.connection:
+ with open(self.verify_script, "r") as stdin_file:
+ exit_status, stdout, stderr = self.connection.execute(
+ "sudo /bin/bash -s ",
+ stdin=stdin_file)
+ else:
+ exit_status, stdout = execute_shell_command(
+ "/bin/bash {0}".format(self.verify_script))
+
LOG.debug("action script of the operation is: %s",
self.verify_script)
diff --git a/yardstick/benchmark/scenarios/availability/scenario_general.py b/yardstick/benchmark/scenarios/availability/scenario_general.py
index a950ef933..689d33a34 100644
--- a/yardstick/benchmark/scenarios/availability/scenario_general.py
+++ b/yardstick/benchmark/scenarios/availability/scenario_general.py
@@ -29,7 +29,7 @@ class ScenarioGeneral(base.Scenario):
def setup(self):
self.director = Director(self.scenario_cfg, self.context_cfg)
- def run(self, args):
+ def run(self, result):
steps = self.scenario_cfg["options"]["steps"]
orderedSteps = sorted(steps, key=lambda x: x['index'])
for step in orderedSteps:
@@ -55,12 +55,14 @@ class ScenarioGeneral(base.Scenario):
self.director.stopMonitors()
if self.director.verify():
- LOG.debug(
- "\033[92m congratulations, "
- "the test cases scenario is pass! \033[0m")
+ result['sla_pass'] = 1
+ LOG.info(
+ "\033[92m Congratulations, "
+ "the HA test case PASS! \033[0m")
else:
- LOG.debug(
- "\033[91m aoh,the test cases scenario failed,"
+ result['sla_pass'] = 0
+ LOG.info(
+ "\033[91m Aoh, the HA test case FAIL,"
"please check the detail debug information! \033[0m")
def teardown(self):
diff --git a/yardstick/benchmark/scenarios/availability/serviceha.py b/yardstick/benchmark/scenarios/availability/serviceha.py
index e82e69b7d..69727de2b 100755
--- a/yardstick/benchmark/scenarios/availability/serviceha.py
+++ b/yardstick/benchmark/scenarios/availability/serviceha.py
@@ -59,20 +59,21 @@ class ServiceHA(base.Scenario):
return
self.monitorMgr.start_monitors()
- LOG.info("monitor start!")
+ LOG.info("HA monitor start!")
for attacker in self.attackers:
attacker.inject_fault()
self.monitorMgr.wait_monitors()
- LOG.info("monitor stop!")
+ LOG.info("HA monitor stop!")
sla_pass = self.monitorMgr.verify_SLA()
if sla_pass:
result['sla_pass'] = 1
+ LOG.info("The HA test case PASS the SLA")
else:
result['sla_pass'] = 0
- assert sla_pass is True, "the test cases is not pass the SLA"
+ assert sla_pass is True, "The HA test case NOT pass the SLA"
return
diff --git a/yardstick/benchmark/scenarios/availability/util.py b/yardstick/benchmark/scenarios/availability/util.py
index 2addef8ef..eadbfa53b 100644
--- a/yardstick/benchmark/scenarios/availability/util.py
+++ b/yardstick/benchmark/scenarios/availability/util.py
@@ -6,14 +6,35 @@
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+import logging
+import subprocess
+import traceback
+LOG = logging.getLogger(__name__)
-def buildshellparams(param):
+
+def buildshellparams(param, remote=True):
i = 0
values = []
- result = '/bin/bash -s'
+ result = '/bin/bash -s' if remote else ''
for key in param.keys():
values.append(param[key])
result += " {%d}" % i
i = i + 1
return result
+
+
+def execute_shell_command(command):
+ """execute shell script with error handling"""
+ exitcode = 0
+ output = []
+ try:
+ LOG.debug("the command is: %s", command)
+ output = subprocess.check_output(command, shell=True)
+ except Exception:
+ exitcode = -1
+ output = traceback.format_exc()
+ LOG.error("exec command '%s' error:\n ", command)
+ LOG.error(traceback.format_exc())
+
+ return exitcode, output
diff --git a/yardstick/benchmark/scenarios/compute/cachestat.py b/yardstick/benchmark/scenarios/compute/cachestat.py
index b4c3463e5..40f6ed773 100644
--- a/yardstick/benchmark/scenarios/compute/cachestat.py
+++ b/yardstick/benchmark/scenarios/compute/cachestat.py
@@ -76,14 +76,8 @@ class CACHEstat(base.Scenario):
CACHEstat.TARGET_SCRIPT)
host = self.context_cfg['host']
- user = host.get('user', 'ubuntu')
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- ip = host.get('ip', None)
- key_filename = host.get('key_filename', '~/.ssh/id_rsa')
-
- LOG.info("user:%s, host:%s", user, ip)
- self.client = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+
+ self.client = ssh.SSH.from_node(host, defaults={"user": "ubuntu"})
self.client.wait(timeout=600)
# copy scripts to host
@@ -103,7 +97,7 @@ class CACHEstat(base.Scenario):
def _filtrate_result(self, result):
fields = []
cachestat = {}
- data_marker = re.compile("\d+")
+ data_marker = re.compile(r"\d+")
ite = 0
average = {'HITS': 0, 'MISSES': 0, 'DIRTIES': 0, 'RATIO': 0,
'BUFFERS_MB': 0, 'CACHE_MB': 0}
diff --git a/yardstick/benchmark/scenarios/compute/computecapacity.py b/yardstick/benchmark/scenarios/compute/computecapacity.py
index 9d518f7a0..688661c5f 100644
--- a/yardstick/benchmark/scenarios/compute/computecapacity.py
+++ b/yardstick/benchmark/scenarios/compute/computecapacity.py
@@ -42,13 +42,9 @@ class ComputeCapacity(base.Scenario):
nodes = self.context_cfg['nodes']
node = nodes.get('host', None)
- host_user = node.get('user', 'ubuntu')
- ssh_port = node.get('ssh_port', ssh.DEFAULT_PORT)
- host_ip = node.get('ip', None)
- host_pwd = node.get('password', 'root')
- LOG.debug("user:%s, host:%s", host_user, host_ip)
- self.client = ssh.SSH(host_user, host_ip, password=host_pwd,
- port=ssh_port)
+ self.client = ssh.SSH.from_node(node, defaults={
+ "user": "ubuntu", "password": "root"
+ })
self.client.wait(timeout=600)
# copy script to host
diff --git a/yardstick/benchmark/scenarios/compute/cpuload.py b/yardstick/benchmark/scenarios/compute/cpuload.py
index 121d5a75d..c65396185 100644
--- a/yardstick/benchmark/scenarios/compute/cpuload.py
+++ b/yardstick/benchmark/scenarios/compute/cpuload.py
@@ -68,14 +68,8 @@ class CPULoad(base.Scenario):
def setup(self):
"""Scenario setup."""
host = self.context_cfg['host']
- user = host.get('user', 'ubuntu')
- ip = host.get('ip', None)
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- key_filename = host.get('key_filename', '~/.ssh/id_rsa')
-
- LOG.info("user:%s, host:%s", user, ip)
- self.client = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+
+ self.client = ssh.SSH.from_node(host, defaults={"user": "ubuntu"})
self.client.wait(timeout=600)
# Check if mpstat prog is installed
diff --git a/yardstick/benchmark/scenarios/compute/cyclictest.py b/yardstick/benchmark/scenarios/compute/cyclictest.py
index ae1d37324..998463ef6 100644
--- a/yardstick/benchmark/scenarios/compute/cyclictest.py
+++ b/yardstick/benchmark/scenarios/compute/cyclictest.py
@@ -85,24 +85,17 @@ class Cyclictest(base.Scenario):
def _connect_host(self):
host = self.context_cfg["host"]
- user = host.get("user", "root")
- ip = host.get("ip", None)
- key_filename = host.get("key_filename", "~/.ssh/id_rsa")
- LOG.debug("user:%s, host:%s", user, ip)
- self.host = ssh.SSH(user, ip, key_filename=key_filename)
+ self.host = ssh.SSH.from_node(host, defaults={"user": "root"})
self.host.wait(timeout=600)
def _connect_guest(self):
host = self.context_cfg["host"]
- user = host.get("user", "root")
- ip = host.get("ip", None)
- ssh_port = host.get("ssh_port", 5555)
- key_filename = host.get("key_filename", "~/.ssh/id_rsa")
-
- LOG.debug("user:%s, host:%s", user, ip)
- self.guest = ssh.SSH(user, ip, port=ssh_port,
- key_filename=key_filename)
+ # why port 5555?
+ self.guest = ssh.SSH.from_node(host,
+ defaults={
+ "user": "root", "ssh_port": 5555
+ })
self.guest.wait(timeout=600)
def _run_setup_cmd(self, client, cmd):
@@ -165,21 +158,22 @@ class Cyclictest(base.Scenario):
def run(self, result):
"""execute the benchmark"""
- default_args = "-m -n -q"
+ default_args = "-m -n -q --notrace"
if not self.setup_done:
self.setup()
options = self.scenario_cfg["options"]
affinity = options.get("affinity", 1)
+ breaktrace = options.get("breaktrace", 1000)
interval = options.get("interval", 1000)
priority = options.get("priority", 99)
loops = options.get("loops", 1000)
threads = options.get("threads", 1)
histogram = options.get("histogram", 90)
- cmd_args = "-a %s -i %s -p %s -l %s -t %s -h %s %s" \
- % (affinity, interval, priority, loops,
+ cmd_args = "-a %s -b %s -i %s -p %s -l %s -t %s -h %s %s" \
+ % (affinity, breaktrace, interval, priority, loops,
threads, histogram, default_args)
cmd = "bash cyclictest_benchmark.sh %s" % (cmd_args)
LOG.debug("Executing command: %s", cmd)
@@ -221,6 +215,7 @@ def _test(): # pragma: no cover
options = {
"affinity": 2,
+ "breaktrace": 1000,
"interval": 100,
"priority": 88,
"loops": 10000,
diff --git a/yardstick/benchmark/scenarios/compute/lmbench.py b/yardstick/benchmark/scenarios/compute/lmbench.py
index 6a17ae8a1..c99fc988d 100644
--- a/yardstick/benchmark/scenarios/compute/lmbench.py
+++ b/yardstick/benchmark/scenarios/compute/lmbench.py
@@ -80,14 +80,8 @@ class Lmbench(base.Scenario):
"yardstick.benchmark.scenarios.compute",
Lmbench.LATENCY_CACHE_SCRIPT)
host = self.context_cfg["host"]
- user = host.get("user", "ubuntu")
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- ip = host.get("ip", None)
- key_filename = host.get('key_filename', "~/.ssh/id_rsa")
-
- LOG.info("user:%s, host:%s", user, ip)
- self.client = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+
+ self.client = ssh.SSH.from_node(host, defaults={"user": "ubuntu"})
self.client.wait(timeout=600)
# copy scripts to host
diff --git a/yardstick/benchmark/scenarios/compute/memload.py b/yardstick/benchmark/scenarios/compute/memload.py
index 2ef5a6302..93d10c0b5 100644
--- a/yardstick/benchmark/scenarios/compute/memload.py
+++ b/yardstick/benchmark/scenarios/compute/memload.py
@@ -49,14 +49,8 @@ class MEMLoad(base.Scenario):
def setup(self):
"""Scenario setup."""
host = self.context_cfg['host']
- user = host.get('user', 'ubuntu')
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- ip = host.get('ip', None)
- key_filename = host.get('key_filename', '~/.ssh/id_rsa')
-
- LOG.info("user:%s, host:%s", user, ip)
- self.client = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+
+ self.client = ssh.SSH.from_node(host, defaults={"user": "ubuntu"})
self.client.wait(timeout=600)
self.setup_done = True
diff --git a/yardstick/benchmark/scenarios/compute/perf.py b/yardstick/benchmark/scenarios/compute/perf.py
index ae4990688..0b8ed9b28 100644
--- a/yardstick/benchmark/scenarios/compute/perf.py
+++ b/yardstick/benchmark/scenarios/compute/perf.py
@@ -50,14 +50,8 @@ class Perf(base.Scenario):
self.target_script = pkg_resources.resource_filename(
'yardstick.benchmark.scenarios.compute', Perf.TARGET_SCRIPT)
host = self.context_cfg['host']
- user = host.get('user', 'ubuntu')
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- ip = host.get('ip', None)
- key_filename = host.get('key_filename', '~/.ssh/id_rsa')
-
- LOG.info("user:%s, host:%s", user, ip)
- self.client = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+
+ self.client = ssh.SSH.from_node(host, defaults={"user": "ubuntu"})
self.client.wait(timeout=600)
# copy script to host
diff --git a/yardstick/benchmark/scenarios/compute/plugintest.py b/yardstick/benchmark/scenarios/compute/plugintest.py
index c9d025964..0ddf6b4a2 100644
--- a/yardstick/benchmark/scenarios/compute/plugintest.py
+++ b/yardstick/benchmark/scenarios/compute/plugintest.py
@@ -32,13 +32,10 @@ class PluginTest(base.Scenario):
nodes = self.context_cfg['nodes']
node = nodes.get('host1', None)
- host_user = node.get('user', 'ubuntu')
- host_ssh_port = node.get('ssh_port', ssh.DEFAULT_PORT)
- host_ip = node.get('ip', None)
- host_pwd = node.get('password', 'root')
- LOG.debug("user:%s, host:%s", host_user, host_ip)
- self.client = ssh.SSH(host_user, host_ip, password=host_pwd,
- port=host_ssh_port)
+
+ self.client = ssh.SSH.from_node(node, defaults={
+ "user": "ubuntu", "password": "root"
+ })
self.client.wait(timeout=600)
self.setup_done = True
diff --git a/yardstick/benchmark/scenarios/compute/ramspeed.py b/yardstick/benchmark/scenarios/compute/ramspeed.py
index 4330202de..850ee5934 100644
--- a/yardstick/benchmark/scenarios/compute/ramspeed.py
+++ b/yardstick/benchmark/scenarios/compute/ramspeed.py
@@ -89,14 +89,8 @@ class Ramspeed(base.Scenario):
Ramspeed.RAMSPEED_MEM_SCRIPT)
host = self.context_cfg["host"]
- user = host.get("user", "ubuntu")
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- ip = host.get("ip", None)
- key_filename = host.get('key_filename', "~/.ssh/id_rsa")
-
- LOG.info("user:%s, host:%s", user, ip)
- self.client = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+
+ self.client = ssh.SSH.from_node(host, defaults={"user": "ubuntu"})
self.client.wait(timeout=600)
# copy scripts to host
diff --git a/yardstick/benchmark/scenarios/compute/unixbench.py b/yardstick/benchmark/scenarios/compute/unixbench.py
index 4a2eb9766..cdb345717 100644
--- a/yardstick/benchmark/scenarios/compute/unixbench.py
+++ b/yardstick/benchmark/scenarios/compute/unixbench.py
@@ -70,14 +70,8 @@ class Unixbench(base.Scenario):
Unixbench.TARGET_SCRIPT)
host = self.context_cfg["host"]
- user = host.get("user", "ubuntu")
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- ip = host.get("ip", None)
- key_filename = host.get('key_filename', "~/.ssh/id_rsa")
-
- LOG.info("user:%s, host:%s", user, ip)
- self.client = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+
+ self.client = ssh.SSH.from_node(host, defaults={"user": "ubuntu"})
self.client.wait(timeout=600)
# copy scripts to host
diff --git a/yardstick/benchmark/scenarios/networking/iperf3.py b/yardstick/benchmark/scenarios/networking/iperf3.py
index 4d4c7e7ee..334f3a920 100644
--- a/yardstick/benchmark/scenarios/networking/iperf3.py
+++ b/yardstick/benchmark/scenarios/networking/iperf3.py
@@ -59,25 +59,14 @@ For more info see http://software.es.net/iperf
def setup(self):
host = self.context_cfg['host']
- host_user = host.get('user', 'ubuntu')
- host_ssh_port = host.get('ssh_port', ssh.DEFAULT_PORT)
- host_ip = host.get('ip', None)
- host_key_filename = host.get('key_filename', '~/.ssh/id_rsa')
target = self.context_cfg['target']
- target_user = target.get('user', 'ubuntu')
- target_ssh_port = target.get('ssh_port', ssh.DEFAULT_PORT)
- target_ip = target.get('ip', None)
- target_key_filename = target.get('key_filename', '~/.ssh/id_rsa')
-
- LOG.info("user:%s, target:%s", target_user, target_ip)
- self.target = ssh.SSH(target_user, target_ip,
- key_filename=target_key_filename,
- port=target_ssh_port)
+
+ LOG.info("user:%s, target:%s", target['user'], target['ip'])
+ self.target = ssh.SSH.from_node(target, defaults={"user": "ubuntu"})
self.target.wait(timeout=600)
- LOG.info("user:%s, host:%s", host_user, host_ip)
- self.host = ssh.SSH(host_user, host_ip,
- key_filename=host_key_filename, port=host_ssh_port)
+ LOG.info("user:%s, host:%s", host['user'], host['ip'])
+ self.host = ssh.SSH.from_node(host, defaults={"user": "ubuntu"})
self.host.wait(timeout=600)
cmd = "iperf3 -s -D"
diff --git a/yardstick/benchmark/scenarios/networking/netperf.py b/yardstick/benchmark/scenarios/networking/netperf.py
index d0528826f..08d5dd166 100755
--- a/yardstick/benchmark/scenarios/networking/netperf.py
+++ b/yardstick/benchmark/scenarios/networking/netperf.py
@@ -65,27 +65,15 @@ class Netperf(base.Scenario):
'yardstick.benchmark.scenarios.networking',
Netperf.TARGET_SCRIPT)
host = self.context_cfg['host']
- host_user = host.get('user', 'ubuntu')
- host_ssh_port = host.get('ssh_port', ssh.DEFAULT_PORT)
- host_ip = host.get('ip', None)
- host_key_filename = host.get('key_filename', '~/.ssh/id_rsa')
target = self.context_cfg['target']
- target_user = target.get('user', 'ubuntu')
- target_ssh_port = target.get('ssh_port', ssh.DEFAULT_PORT)
- target_ip = target.get('ip', None)
- target_key_filename = target.get('key_filename', '~/.ssh/id_rsa')
# netserver start automatically during the vm boot
- LOG.info("user:%s, target:%s", target_user, target_ip)
- self.server = ssh.SSH(target_user, target_ip,
- key_filename=target_key_filename,
- port=target_ssh_port)
+ LOG.info("user:%s, target:%s", target['user'], target['ip'])
+ self.server = ssh.SSH.from_node(target, defaults={"user": "ubuntu"})
self.server.wait(timeout=600)
- LOG.info("user:%s, host:%s", host_user, host_ip)
- self.client = ssh.SSH(host_user, host_ip,
- key_filename=host_key_filename,
- port=host_ssh_port)
+ LOG.info("user:%s, host:%s", host['user'], host['ip'])
+ self.client = ssh.SSH.from_node(host, defaults={"user": "ubuntu"})
self.client.wait(timeout=600)
# copy script to host
diff --git a/yardstick/benchmark/scenarios/networking/netperf_node.py b/yardstick/benchmark/scenarios/networking/netperf_node.py
index fd9fa0a50..d52e6b9e1 100755
--- a/yardstick/benchmark/scenarios/networking/netperf_node.py
+++ b/yardstick/benchmark/scenarios/networking/netperf_node.py
@@ -66,27 +66,16 @@ class NetperfNode(base.Scenario):
'yardstick.benchmark.scenarios.networking',
NetperfNode.TARGET_SCRIPT)
host = self.context_cfg['host']
- host_user = host.get('user', 'ubuntu')
- host_ssh_port = host.get('ssh_port', ssh.DEFAULT_PORT)
- host_ip = host.get('ip', None)
target = self.context_cfg['target']
- target_user = target.get('user', 'ubuntu')
- target_ssh_port = target.get('ssh_port', ssh.DEFAULT_PORT)
- target_ip = target.get('ip', None)
- self.target_ip = target.get('ip', None)
- host_password = host.get('password', None)
- target_password = target.get('password', None)
-
- LOG.info("host_pw:%s, target_pw:%s", host_password, target_password)
+ self.target_ip = target['ip']
+
# netserver start automatically during the vm boot
- LOG.info("user:%s, target:%s", target_user, target_ip)
- self.server = ssh.SSH(target_user, target_ip,
- password=target_password, port=target_ssh_port)
+ LOG.info("user:%s, target:%s", target['user'], target['ip'])
+ self.server = ssh.SSH.from_node(target, defaults={"user": "ubuntu"})
self.server.wait(timeout=600)
- LOG.info("user:%s, host:%s", host_user, host_ip)
- self.client = ssh.SSH(host_user, host_ip,
- password=host_password, port=host_ssh_port)
+ LOG.info("user:%s, host:%s", host['user'], host['ip'])
+ self.client = ssh.SSH.from_node(host, defaults={"user": "ubuntu"})
self.client.wait(timeout=600)
# copy script to host
diff --git a/yardstick/benchmark/scenarios/networking/netutilization.py b/yardstick/benchmark/scenarios/networking/netutilization.py
index 37da7f895..cecb64fa0 100644
--- a/yardstick/benchmark/scenarios/networking/netutilization.py
+++ b/yardstick/benchmark/scenarios/networking/netutilization.py
@@ -71,14 +71,8 @@ class NetUtilization(base.Scenario):
def setup(self):
"""Scenario setup."""
host = self.context_cfg['host']
- user = host.get('user', 'ubuntu')
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- ip = host.get('ip', None)
- key_filename = host.get('key_filename', '~/.ssh/id_rsa')
-
- LOG.info("user:%s, host:%s", user, ip)
- self.client = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+
+ self.client = ssh.SSH.from_node(host, defaults={"user": "ubuntu"})
self.client.wait(timeout=600)
self.setup_done = True
diff --git a/yardstick/benchmark/scenarios/networking/networkcapacity.py b/yardstick/benchmark/scenarios/networking/networkcapacity.py
index e7ce83570..63634061c 100644
--- a/yardstick/benchmark/scenarios/networking/networkcapacity.py
+++ b/yardstick/benchmark/scenarios/networking/networkcapacity.py
@@ -42,14 +42,8 @@ class NetworkCapacity(base.Scenario):
host = self.context_cfg['host']
if host is None:
raise RuntimeError('No right node.please check the configuration')
- host_user = host.get('user', 'ubuntu')
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- host_ip = host.get('ip', None)
- host_pwd = host.get('password', None)
-
- LOG.debug("user:%s, host:%s", host_user, host_ip)
- self.client = ssh.SSH(host_user, host_ip, password=host_pwd,
- port=ssh_port)
+
+ self.client = ssh.SSH.from_node(host, defaults={"user": "ubuntu"})
self.client.wait(timeout=600)
# copy script to host
diff --git a/yardstick/benchmark/scenarios/networking/nstat.py b/yardstick/benchmark/scenarios/networking/nstat.py
index df96dbda7..10c560769 100644
--- a/yardstick/benchmark/scenarios/networking/nstat.py
+++ b/yardstick/benchmark/scenarios/networking/nstat.py
@@ -36,14 +36,8 @@ class Nstat(base.Scenario):
def setup(self):
"""scenario setup"""
host = self.context_cfg["host"]
- user = host.get("user", "ubuntu")
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- ip = host.get("ip", None)
- key_filename = host.get('key_filename', "~/.ssh/id_rsa")
-
- LOG.info("user:%s, host:%s", user, ip)
- self.client = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+
+ self.client = ssh.SSH.from_node(host, defaults={"user": "ubuntu"})
self.client.wait(timeout=600)
self.setup_done = True
diff --git a/yardstick/benchmark/scenarios/networking/ping.py b/yardstick/benchmark/scenarios/networking/ping.py
index d20814697..95367b3bb 100644
--- a/yardstick/benchmark/scenarios/networking/ping.py
+++ b/yardstick/benchmark/scenarios/networking/ping.py
@@ -40,22 +40,8 @@ class Ping(base.Scenario):
self.target_script = pkg_resources.resource_filename(
'yardstick.benchmark.scenarios.networking', Ping.TARGET_SCRIPT)
host = self.context_cfg['host']
- user = host.get('user', 'ubuntu')
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- ip = host.get('ip', None)
- key_filename = host.get('key_filename', '/root/.ssh/id_rsa')
- password = host.get('password', None)
-
- if password is not None:
- LOG.info("Log in via pw, user:%s, host:%s, pw:%s",
- user, ip, password)
- self.connection = ssh.SSH(user, ip, password=password,
- port=ssh_port)
- else:
- LOG.info("Log in via key, user:%s, host:%s, key_filename:%s",
- user, ip, key_filename)
- self.connection = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+
+ self.connection = ssh.SSH.from_node(host, defaults={"user": "ubuntu"})
self.connection.wait(timeout=600)
diff --git a/yardstick/benchmark/scenarios/networking/ping6.py b/yardstick/benchmark/scenarios/networking/ping6.py
index 142a35664..74855a10f 100644
--- a/yardstick/benchmark/scenarios/networking/ping6.py
+++ b/yardstick/benchmark/scenarios/networking/ping6.py
@@ -51,20 +51,7 @@ class Ping6(base.Scenario): # pragma: no cover
def _ssh_host(self, node_name):
# ssh host
node = self.nodes.get(node_name, None)
- user = node.get('user', 'ubuntu')
- ssh_port = node.get("ssh_port", ssh.DEFAULT_PORT)
- ip = node.get('ip', None)
- pwd = node.get('password', None)
- key_fname = node.get('key_filename', '/root/.ssh/id_rsa')
- if pwd is not None:
- LOG.debug("Log in via pw, user:%s, host:%s, password:%s",
- user, ip, pwd)
- self.client = ssh.SSH(user, ip, password=pwd, port=ssh_port)
- else:
- LOG.debug("Log in via key, user:%s, host:%s, key_filename:%s",
- user, ip, key_fname)
- self.client = ssh.SSH(user, ip, key_filename=key_fname,
- port=ssh_port)
+ self.client = ssh.SSH.from_node(node, defaults={"user": "ubuntu"})
self.client.wait(timeout=60)
def _pre_setup(self):
diff --git a/yardstick/benchmark/scenarios/networking/pktgen.py b/yardstick/benchmark/scenarios/networking/pktgen.py
index 9a8725cfd..e6aa7e5fb 100644
--- a/yardstick/benchmark/scenarios/networking/pktgen.py
+++ b/yardstick/benchmark/scenarios/networking/pktgen.py
@@ -52,26 +52,14 @@ class Pktgen(base.Scenario):
'yardstick.benchmark.scenarios.networking',
Pktgen.TARGET_SCRIPT)
host = self.context_cfg['host']
- host_user = host.get('user', 'ubuntu')
- host_ssh_port = host.get('ssh_port', ssh.DEFAULT_PORT)
- host_ip = host.get('ip', None)
- host_key_filename = host.get('key_filename', '~/.ssh/id_rsa')
target = self.context_cfg['target']
- target_user = target.get('user', 'ubuntu')
- target_ssh_port = target.get('ssh_port', ssh.DEFAULT_PORT)
- target_ip = target.get('ip', None)
- target_key_filename = target.get('key_filename', '~/.ssh/id_rsa')
-
- LOG.info("user:%s, target:%s", target_user, target_ip)
- self.server = ssh.SSH(target_user, target_ip,
- key_filename=target_key_filename,
- port=target_ssh_port)
+
+ LOG.info("user:%s, target:%s", target['user'], target['ip'])
+ self.server = ssh.SSH.from_node(target, defaults={"user": "ubuntu"})
self.server.wait(timeout=600)
- LOG.info("user:%s, host:%s", host_user, host_ip)
- self.client = ssh.SSH(host_user, host_ip,
- key_filename=host_key_filename,
- port=host_ssh_port)
+ LOG.info("user:%s, host:%s", host['user'], host['ip'])
+ self.client = ssh.SSH.from_node(host, defaults={"user": "ubuntu"})
self.client.wait(timeout=600)
# copy script to host
diff --git a/yardstick/benchmark/scenarios/networking/pktgen_dpdk.py b/yardstick/benchmark/scenarios/networking/pktgen_dpdk.py
index 7e3044dbb..ce8a7f497 100644
--- a/yardstick/benchmark/scenarios/networking/pktgen_dpdk.py
+++ b/yardstick/benchmark/scenarios/networking/pktgen_dpdk.py
@@ -12,8 +12,10 @@ import logging
import time
import yardstick.ssh as ssh
+import yardstick.common.utils as utils
from yardstick.benchmark.scenarios import base
+
LOG = logging.getLogger(__name__)
@@ -45,28 +47,16 @@ class PktgenDPDKLatency(base.Scenario):
'yardstick.benchmark.scenarios.networking',
PktgenDPDKLatency.TESTPMD_SCRIPT)
host = self.context_cfg['host']
- host_user = host.get('user', 'ubuntu')
- host_ssh_port = host.get('ssh_port', ssh.DEFAULT_PORT)
- host_ip = host.get('ip', None)
- host_key_filename = host.get('key_filename', '~/.ssh/id_rsa')
target = self.context_cfg['target']
- target_user = target.get('user', 'ubuntu')
- target_ssh_port = target.get('ssh_port', ssh.DEFAULT_PORT)
- target_ip = target.get('ip', None)
- target_key_filename = target.get('key_filename', '~/.ssh/id_rsa')
- LOG.info("user:%s, target:%s", target_user, target_ip)
- self.server = ssh.SSH(target_user, target_ip,
- key_filename=target_key_filename,
- port=target_ssh_port)
+ LOG.info("user:%s, target:%s", target['user'], target['ip'])
+ self.server = ssh.SSH.from_node(target, defaults={"user": "ubuntu"})
self.server.wait(timeout=600)
# copy script to host
self.server._put_file_shell(self.testpmd_script, '~/testpmd_fwd.sh')
- LOG.info("user:%s, host:%s", host_user, host_ip)
- self.client = ssh.SSH(host_user, host_ip,
- key_filename=host_key_filename,
- port=host_ssh_port)
+ LOG.info("user:%s, host:%s", host['user'], host['ip'])
+ self.client = ssh.SSH.from_node(host, defaults={"user": "ubuntu"})
self.client.wait(timeout=600)
# copy script to host
@@ -77,29 +67,6 @@ class PktgenDPDKLatency(base.Scenario):
self.testpmd_args = ''
self.pktgen_args = []
- @staticmethod
- def get_port_mac(sshclient, port):
- cmd = "ifconfig |grep HWaddr |grep %s |awk '{print $5}' " % port
- LOG.debug("Executing command: %s", cmd)
- status, stdout, stderr = sshclient.execute(cmd)
-
- if status:
- raise RuntimeError(stderr)
- else:
- return stdout.rstrip()
-
- @staticmethod
- def get_port_ip(sshclient, port):
- cmd = "ifconfig %s |grep 'inet addr' |awk '{print $2}' \
- |cut -d ':' -f2 " % port
- LOG.debug("Executing command: %s", cmd)
- status, stdout, stderr = sshclient.execute(cmd)
-
- if status:
- raise RuntimeError(stderr)
- else:
- return stdout.rstrip()
-
def run(self, result):
"""execute the benchmark"""
@@ -107,13 +74,13 @@ class PktgenDPDKLatency(base.Scenario):
self.setup()
if not self.testpmd_args:
- self.testpmd_args = self.get_port_mac(self.client, 'eth2')
+ self.testpmd_args = utils.get_port_mac(self.client, 'eth2')
if not self.pktgen_args:
- server_rev_mac = self.get_port_mac(self.server, 'eth1')
- server_send_mac = self.get_port_mac(self.server, 'eth2')
- client_src_ip = self.get_port_ip(self.client, 'eth1')
- client_dst_ip = self.get_port_ip(self.client, 'eth2')
+ server_rev_mac = utils.get_port_mac(self.server, 'eth1')
+ server_send_mac = utils.get_port_mac(self.server, 'eth2')
+ client_src_ip = utils.get_port_ip(self.client, 'eth1')
+ client_dst_ip = utils.get_port_ip(self.client, 'eth2')
self.pktgen_args = [client_src_ip, client_dst_ip,
server_rev_mac, server_send_mac]
diff --git a/yardstick/benchmark/scenarios/networking/pktgen_dpdk_benchmark.bash b/yardstick/benchmark/scenarios/networking/pktgen_dpdk_benchmark.bash
new file mode 100644
index 000000000..cb028f005
--- /dev/null
+++ b/yardstick/benchmark/scenarios/networking/pktgen_dpdk_benchmark.bash
@@ -0,0 +1,196 @@
+##############################################################################
+# Copyright (c) 2017 Nokia and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+#!/bin/sh
+
+set -e
+
+# Commandline arguments
+SRC_IP=$1 # source IP address
+DST_IP=$2 # destination IP address
+DST_MAC=$3 # destination MAC address
+NUM_PORTS=$4 # number of source ports
+PKT_SIZE=$5 # packet size
+DURATION=$6 # test duration (seconds)
+RATE=$7 # packet rate in percentage for 10G NIC
+
+MAX_RATE=100
+
+# Configuration
+UDP_SRC_MIN=1000 # UDP source port min
+UDP_SRC_MAX=$(( UDP_SRC_MIN + NUM_PORTS - 1 )) # UDP source port max
+UDP_DST_MIN=1000 # UDP destination port min
+UDP_DST_MAX=$(( UDP_DST_MIN + NUM_PORTS )) # UDP destination port max
+
+load_modules()
+{
+ if ! lsmod | grep "uio" &> /dev/null; then
+ modprobe uio
+ fi
+
+ if ! lsmod | grep "igb_uio" &> /dev/null; then
+ insmod /dpdk/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
+ fi
+
+ if ! lsmod | grep "rte_kni" &> /dev/null; then
+ insmod /dpdk/x86_64-native-linuxapp-gcc/kmod/rte_kni.ko
+ fi
+}
+
+change_permissions()
+{
+ chmod 777 /sys/bus/pci/drivers/virtio-pci/*
+ chmod 777 /sys/bus/pci/drivers/igb_uio/*
+}
+
+add_interface_to_dpdk(){
+ interfaces=$(lspci |grep Eth |tail -n +2 |awk '{print $1}')
+ /dpdk/usertools/dpdk-devbind.py --bind=igb_uio $interfaces &> /dev/null
+}
+
+create_pktgen_config_lua()
+{
+ lua_file="/home/ubuntu/pktgen_tput.lua"
+ touch $lua_file
+ chmod 777 $lua_file
+
+ cat << EOF > "/home/ubuntu/pktgen_tput.lua"
+package.path = package.path ..";?.lua;test/?.lua;app/?.lua;"
+
+ -- require "Pktgen";
+function pktgen_config()
+
+ pktgen.screen("off");
+
+ pktgen.set_ipaddr("0", "src", "$SRC_IP/24");
+ pktgen.set_ipaddr("0", "dst", "$DST_IP");
+ pktgen.set_mac("0", "$DST_MAC");
+ pktgen.set("all", "sport", $UDP_SRC_MIN);
+ pktgen.set("all", "dport", $UDP_DST_MIN);
+ pktgen.set("all", "size", $PKT_SIZE);
+ pktgen.set("all", "rate", $RATE);
+ pktgen.set_type("all", "ipv4");
+ pktgen.set_proto("all", "udp");
+
+ pktgen.src_ip("0", "start", "$SRC_IP");
+ pktgen.src_ip("0", "inc", "0.0.0.0");
+ pktgen.src_ip("0", "min", "$SRC_IP");
+ pktgen.src_ip("0", "max", "$SRC_IP");
+ pktgen.dst_ip("0", "start", "$DST_IP");
+ pktgen.dst_ip("0", "inc", "0.0.0.0");
+ pktgen.dst_ip("0", "min", "$DST_IP");
+ pktgen.dst_ip("0", "max", "$DST_IP");
+
+ pktgen.dst_mac("0", "start", "$DST_MAC");
+
+ pktgen.src_port("all", "start", $UDP_SRC_MIN);
+ pktgen.src_port("all", "inc", 1);
+ pktgen.src_port("all", "min", $UDP_SRC_MIN);
+ pktgen.src_port("all", "max", $UDP_SRC_MAX);
+ pktgen.dst_port("all", "start", $UDP_DST_MIN);
+ pktgen.dst_port("all", "inc", 1);
+ pktgen.dst_port("all", "min", $UDP_DST_MIN);
+ pktgen.dst_port("all", "max", $UDP_DST_MAX);
+
+ pktgen.pkt_size("all", "start", $PKT_SIZE);
+ pktgen.pkt_size("all", "inc",0);
+ pktgen.pkt_size("all", "min", $PKT_SIZE);
+ pktgen.pkt_size("all", "max", $PKT_SIZE);
+ pktgen.ip_proto("all", "udp");
+ pktgen.set_range("all", "on");
+
+ pktgen.start("all");
+ pktgen.sleep($DURATION)
+ pktgen.stop("all");
+ pktgen.sleep(1)
+
+ prints("opackets", pktgen.portStats("all", "port")[0].opackets);
+ prints("oerrors", pktgen.portStats("all", "port")[0].oerrors);
+
+ end
+
+pktgen_config()
+EOF
+}
+
+
+create_expect_file()
+{
+ expect_file="/home/ubuntu/pktgen_tput.exp"
+ touch $expect_file
+ chmod 777 $expect_file
+
+ cat << 'EOF' > "/home/ubuntu/pktgen_tput.exp"
+#!/usr/bin/expect
+
+set blacklist [lindex $argv 0]
+spawn ./app/app/x86_64-native-linuxapp-gcc/pktgen -c 0x0f -n 4 -b $blacklist -- -P -m "{2-3}.0" -f /home/ubuntu/pktgen_tput.lua
+expect "Pktgen"
+send "on\n"
+expect "Pktgen"
+send "page main\n"
+expect "Pktgen"
+sleep 1
+send "quit\n"
+expect "#"
+
+EOF
+
+}
+
+run_pktgen()
+{
+ blacklist=$(lspci |grep Eth |awk '{print $1}'|head -1)
+ cd /pktgen-dpdk
+ result_log="/home/ubuntu/result.log"
+ touch $result_log
+ sudo expect /home/ubuntu/pktgen_tput.exp $blacklist > $result_log 2>&1
+}
+
+# write the result to stdout in json format
+output_json()
+{
+ sent=0
+ result_pps=0
+ errors=0
+
+ sent=$(cat ~/result.log -vT | grep "Tx Pkts" | tail -1 | awk '{match($0,/\[18;20H +[0-9]+/)} {print substr($0,RSTART,RLENGTH)}' | awk '{if ($2 != 0) print $2}')
+ result_pps=$(( sent / DURATION ))
+ errors=$(cat ~/result.log -vT |grep "Errors Rx/Tx" | tail -1 | awk '{match($0,/\[16;20H +[0-9]+\/+[0-9]+/)} {print substr($0,RSTART,RLENGTH)}' | cut -d '/' -f2)
+
+ flows=$(( NUM_PORTS * (NUM_PORTS + 1) ))
+
+ echo '{ "packets_sent"':${sent} , '"packets_per_second"':${result_pps}, '"flows"':${flows}, '"errors"':${errors} '}'
+}
+
+main()
+{
+ if ip a | grep eth2 >/dev/null 2>&1; then
+ ip link set eth2 down
+ fi
+
+ if ip a | grep eth1 >/dev/null 2>&1; then
+ ip link set eth1 down
+ load_modules
+ change_permissions
+ add_interface_to_dpdk
+ fi
+
+ if [ $RATE -gt $MAX_RATE ]; then
+ RATE=$MAX_RATE
+ fi
+
+ create_pktgen_config_lua
+ create_expect_file
+
+ run_pktgen
+
+ output_json
+}
+
+main
diff --git a/yardstick/benchmark/scenarios/networking/pktgen_dpdk_throughput.py b/yardstick/benchmark/scenarios/networking/pktgen_dpdk_throughput.py
new file mode 100644
index 000000000..497e59ee8
--- /dev/null
+++ b/yardstick/benchmark/scenarios/networking/pktgen_dpdk_throughput.py
@@ -0,0 +1,226 @@
+##############################################################################
+# Copyright (c) 2017 Nokia and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+from __future__ import absolute_import
+import pkg_resources
+import logging
+import json
+import time
+
+import yardstick.ssh as ssh
+import yardstick.common.utils as utils
+from yardstick.benchmark.scenarios import base
+
+LOG = logging.getLogger(__name__)
+
+
+class PktgenDPDK(base.Scenario):
+ """Execute pktgen-dpdk on one vm and execute testpmd on the other vm
+ """
+ __scenario_type__ = "PktgenDPDK"
+
+ PKTGEN_DPDK_SCRIPT = 'pktgen_dpdk_benchmark.bash'
+ TESTPMD_SCRIPT = 'testpmd_rev.bash'
+
+ def __init__(self, scenario_cfg, context_cfg):
+ self.scenario_cfg = scenario_cfg
+ self.context_cfg = context_cfg
+ self.source_ipaddr = [None] * 2
+ self.source_ipaddr[0] = \
+ self.context_cfg["host"].get("ipaddr", '127.0.0.1')
+ self.target_ipaddr = [None] * 2
+ self.target_ipaddr[0] = \
+ self.context_cfg["target"].get("ipaddr", '127.0.0.1')
+ self.target_macaddr = [None] * 2
+ self.setup_done = False
+ self.dpdk_setup_done = False
+
+ def setup(self):
+ """scenario setup"""
+
+ self.pktgen_dpdk_script = pkg_resources.resource_filename(
+ 'yardstick.benchmark.scenarios.networking',
+ PktgenDPDK.PKTGEN_DPDK_SCRIPT)
+ self.testpmd_script = pkg_resources.resource_filename(
+ 'yardstick.benchmark.scenarios.networking',
+ PktgenDPDK.TESTPMD_SCRIPT)
+
+ host = self.context_cfg['host']
+ host_user = host.get('user', 'ubuntu')
+ host_ssh_port = host.get('ssh_port', ssh.DEFAULT_PORT)
+ host_ip = host.get('ip', None)
+ host_key_filename = host.get('key_filename', '~/.ssh/id_rsa')
+ target = self.context_cfg['target']
+ target_user = target.get('user', 'ubuntu')
+ target_ssh_port = target.get('ssh_port', ssh.DEFAULT_PORT)
+ target_ip = target.get('ip', None)
+ target_key_filename = target.get('key_filename', '~/.ssh/id_rsa')
+
+ LOG.info("user:%s, target:%s", target_user, target_ip)
+ self.server = ssh.SSH(target_user, target_ip,
+ key_filename=target_key_filename,
+ port=target_ssh_port)
+ self.server.wait(timeout=600)
+
+ # copy script to host
+ self.server._put_file_shell(self.testpmd_script, '~/testpmd_rev.sh')
+
+ LOG.info("user:%s, host:%s", host_user, host_ip)
+ self.client = ssh.SSH(host_user, host_ip,
+ key_filename=host_key_filename,
+ port=host_ssh_port)
+ self.client.wait(timeout=600)
+
+ # copy script to host
+ self.client._put_file_shell(self.pktgen_dpdk_script,
+ '~/pktgen_dpdk.sh')
+
+ self.setup_done = True
+
+ def dpdk_setup(self):
+ """dpdk setup"""
+
+ # disable Address Space Layout Randomization (ASLR)
+ cmd = "echo 0 | sudo tee /proc/sys/kernel/randomize_va_space"
+ self.server.send_command(cmd)
+ self.client.send_command(cmd)
+
+ if not self._is_dpdk_setup("client"):
+ cmd = "sudo ifup eth1"
+ LOG.debug("Executing command: %s", cmd)
+ self.client.send_command(cmd)
+ time.sleep(1)
+ self.source_ipaddr[1] = utils.get_port_ip(self.client, 'eth1')
+ self.client.run("tee ~/.pktgen-dpdk.ipaddr.eth1 > /dev/null",
+ stdin=self.source_ipaddr[1])
+ else:
+ cmd = "cat ~/.pktgen-dpdk.ipaddr.eth1"
+ status, stdout, stderr = self.client.execute(cmd)
+ if status:
+ raise RuntimeError(stderr)
+ self.source_ipaddr[1] = stdout
+
+ if not self._is_dpdk_setup("server"):
+ cmd = "sudo ifup eth1"
+ LOG.debug("Executing command: %s", cmd)
+ self.server.send_command(cmd)
+ time.sleep(1)
+ self.target_ipaddr[1] = utils.get_port_ip(self.server, 'eth1')
+ self.target_macaddr[1] = utils.get_port_mac(self.server, 'eth1')
+ self.server.run("tee ~/.testpmd.ipaddr.eth1 > /dev/null",
+ stdin=self.target_ipaddr[1])
+ self.server.run("tee ~/.testpmd.macaddr.eth1 > /dev/null",
+ stdin=self.target_macaddr[1])
+
+ cmd = "screen sudo -E bash ~/testpmd_rev.sh"
+ LOG.debug("Executing command: %s", cmd)
+ self.server.send_command(cmd)
+
+ time.sleep(1)
+ else:
+ cmd = "cat ~/.testpmd.ipaddr.eth1"
+ status, stdout, stderr = self.server.execute(cmd)
+ if status:
+ raise RuntimeError(stderr)
+ self.target_ipaddr[1] = stdout
+
+ cmd = "cat ~/.testpmd.macaddr.eth1"
+ status, stdout, stderr = self.server.execute(cmd)
+ if status:
+ raise RuntimeError(stderr)
+ self.target_macaddr[1] = stdout
+
+ self.dpdk_setup_done = True
+
+ def _is_dpdk_setup(self, host):
+ """Is dpdk already setup in the host?"""
+ is_run = True
+ cmd = "ip a | grep eth1 2>/dev/null"
+ LOG.debug("Executing command: %s in %s", cmd, host)
+ if "server" in host:
+ status, stdout, stderr = self.server.execute(cmd)
+ if stdout:
+ is_run = False
+ else:
+ status, stdout, stderr = self.client.execute(cmd)
+ if stdout:
+ is_run = False
+
+ return is_run
+
+ def _dpdk_get_result(self):
+ """Get packet statistics from server"""
+ cmd = "sudo /dpdk/destdir/bin/dpdk-procinfo -- --stats 2>/dev/null | \
+ awk '$1 ~ /RX-packets/' | cut -d ':' -f2 | cut -d ' ' -f2 | \
+ head -n 1"
+ LOG.debug("Executing command: %s", cmd)
+ status, stdout, stderr = self.server.execute(cmd)
+ if status:
+ raise RuntimeError(stderr)
+ received = int(stdout)
+
+ cmd = "sudo /dpdk/destdir/bin/dpdk-procinfo -- --stats-reset" \
+ " > /dev/null 2>&1"
+ self.server.execute(cmd)
+ time.sleep(1)
+ self.server.execute(cmd)
+ return received
+
+ def run(self, result):
+ """execute the benchmark"""
+
+ if not self.setup_done:
+ self.setup()
+
+ if not self.dpdk_setup_done:
+ self.dpdk_setup()
+
+ options = self.scenario_cfg['options']
+ packetsize = options.get("packetsize", 60)
+ rate = options.get("rate", 100)
+ self.number_of_ports = options.get("number_of_ports", 10)
+ # if run by a duration runner
+ duration_time = self.scenario_cfg["runner"].get("duration", None) \
+ if "runner" in self.scenario_cfg else None
+ # if run by an arithmetic runner
+ arithmetic_time = options.get("duration", None)
+
+ if duration_time:
+ duration = duration_time
+ elif arithmetic_time:
+ duration = arithmetic_time
+ else:
+ duration = 20
+
+ cmd = "sudo bash pktgen_dpdk.sh %s %s %s %s %s %s %s" \
+ % (self.source_ipaddr[1],
+ self.target_ipaddr[1], self.target_macaddr[1],
+ self.number_of_ports, packetsize, duration, rate)
+
+ LOG.debug("Executing command: %s", cmd)
+ status, stdout, stderr = self.client.execute(cmd)
+
+ if status:
+ raise RuntimeError(stderr)
+
+ result.update(json.loads(stdout))
+
+ result['packets_received'] = self._dpdk_get_result()
+
+ result['packetsize'] = packetsize
+
+ if "sla" in self.scenario_cfg:
+ sent = result['packets_sent']
+ received = result['packets_received']
+ ppm = 1000000 * (sent - received) / sent
+ # Added by Jing
+ ppm += (sent - received) % sent > 0
+ LOG.debug("Lost packets %d - Lost ppm %d", (sent - received), ppm)
+ sla_max_ppm = int(self.scenario_cfg["sla"]["max_ppm"])
+ assert ppm <= sla_max_ppm, "ppm %d > sla_max_ppm %d; " \
+ % (ppm, sla_max_ppm)
diff --git a/yardstick/benchmark/scenarios/networking/sfc.py b/yardstick/benchmark/scenarios/networking/sfc.py
index bf4ed5f7c..c682082d9 100644
--- a/yardstick/benchmark/scenarios/networking/sfc.py
+++ b/yardstick/benchmark/scenarios/networking/sfc.py
@@ -53,15 +53,12 @@ class Sfc(base.Scenario): # pragma: no cover
subprocess.call(cmd_tacker, shell=True)
target = self.context_cfg['target']
- target_user = target.get('user', 'root')
- target_ssh_port = target.get('ssh_port', ssh.DEFAULT_PORT)
- target_pwd = target.get('password', 'opnfv')
- target_ip = target.get('ip', None)
""" webserver start automatically during the vm boot """
- LOG.info("user:%s, target:%s", target_user, target_ip)
- self.server = ssh.SSH(target_user, target_ip, password=target_pwd,
- port=target_ssh_port)
+ LOG.info("user:%s, target:%s", target['user'], target['ip'])
+ self.server = ssh.SSH.from_node(target, defaults={
+ "user": "root", "password": "opnfv"
+ })
self.server.wait(timeout=600)
self.server._put_file_shell(self.server_script, '~/server.sh')
cmd_server = "sudo bash server.sh"
@@ -72,36 +69,35 @@ class Sfc(base.Scenario): # pragma: no cover
ips = sfc_openstack.get_an_IP()
target = self.context_cfg['target']
- SF1_user = target.get('user', 'root')
- SF1_ssh_port = target.get('ssh_port', ssh.DEFAULT_PORT)
- SF1_pwd = target.get('password', 'opnfv')
- SF1_ip = ips[0]
-
- LOG.info("user:%s, host:%s", SF1_user, SF1_ip)
- self.server = ssh.SSH(SF1_user, SF1_ip, password=SF1_pwd,
- port=SF1_ssh_port)
+
+ LOG.info("user:%s, target:%s", target['user'], target['ip'])
+ self.server = ssh.SSH.from_node(
+ target,
+ defaults={"user": "root", "password": "opnfv"},
+ # we must override ip
+ overrides={"ip": ips[0]}
+ )
self.server.wait(timeout=600)
cmd_SF1 = ("nohup python vxlan_tool.py -i eth0 "
"-d forward -v off -b 80 &")
LOG.debug("Starting HTTP firewall in SF1")
- status, stdout, stderr = self.server.execute(cmd_SF1)
+ self.server.execute(cmd_SF1)
result = self.server.execute("ps lax | grep python")
if "vxlan_tool.py" in result[1]: # pragma: no cover
LOG.debug("HTTP firewall started")
- SF2_user = target.get('user', 'root')
- SF2_ssh_port = target.get('ssh_port', ssh.DEFAULT_PORT)
- SF2_pwd = target.get('password', 'opnfv')
- SF2_ip = ips[1]
-
- LOG.info("user:%s, host:%s", SF2_user, SF2_ip)
- self.server = ssh.SSH(SF2_user, SF2_ip, password=SF2_pwd,
- port=SF2_ssh_port)
+ LOG.info("user:%s, target:%s", target['user'], target['ip'])
+ self.server = ssh.SSH.from_node(
+ target,
+ defaults={"user": "root", "password": "opnfv"},
+ # we must override ip
+ overrides={"ip": ips[1]}
+ )
self.server.wait(timeout=600)
cmd_SF2 = ("nohup python vxlan_tool.py -i eth0 "
"-d forward -v off -b 22 &")
LOG.debug("Starting SSH firewall in SF2")
- status, stdout, stderr = self.server.execute(cmd_SF2)
+ self.server.execute(cmd_SF2)
result = self.server.execute("ps lax | grep python")
if "vxlan_tool.py" in result[1]: # pragma: no cover
@@ -112,14 +108,11 @@ class Sfc(base.Scenario): # pragma: no cover
def run(self, result):
""" Creating client and server VMs to perform the test"""
host = self.context_cfg['host']
- host_user = host.get('user', 'root')
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- host_pwd = host.get('password', 'opnfv')
- host_ip = host.get('ip', None)
-
- LOG.info("user:%s, host:%s", host_user, host_ip)
- self.client = ssh.SSH(host_user, host_ip, password=host_pwd,
- port=ssh_port)
+
+ LOG.info("user:%s, host:%s", host['user'], host['ip'])
+ self.client = ssh.SSH.from_node(host, defaults={
+ "user": "root", "password": "opnfv"
+ })
self.client.wait(timeout=600)
if not self.setup_done: # pragma: no cover
diff --git a/yardstick/benchmark/scenarios/networking/testpmd_rev.bash b/yardstick/benchmark/scenarios/networking/testpmd_rev.bash
new file mode 100644
index 000000000..72a8fde3a
--- /dev/null
+++ b/yardstick/benchmark/scenarios/networking/testpmd_rev.bash
@@ -0,0 +1,69 @@
+##############################################################################
+# Copyright (c) 2017 Nokia and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+#!/bin/sh
+
+set -e
+
+# Commandline arguments
+NUM_TRAFFIC_PORTS=${1:-1}
+
+load_modules()
+{
+ if ! lsmod | grep "uio" &> /dev/null; then
+ modprobe uio
+ fi
+
+ if ! lsmod | grep "igb_uio" &> /dev/null; then
+ insmod /dpdk/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
+ fi
+
+ if ! lsmod | grep "rte_kni" &> /dev/null; then
+ insmod /dpdk/x86_64-native-linuxapp-gcc/kmod/rte_kni.ko
+ fi
+}
+
+change_permissions()
+{
+ chmod 777 /sys/bus/pci/drivers/virtio-pci/*
+ chmod 777 /sys/bus/pci/drivers/igb_uio/*
+}
+
+add_interface_to_dpdk(){
+ interfaces=$(lspci |grep Eth |tail -n +2 |awk '{print $1}')
+ /dpdk/usertools/dpdk-devbind.py --bind=igb_uio $interfaces &> /dev/null
+}
+
+run_testpmd()
+{
+ blacklist=$(lspci |grep Eth |awk '{print $1}'|head -1)
+ cd /dpdk
+ if [ $NUM_TRAFFIC_PORTS -gt 1 ]; then
+ sudo ./destdir/bin/testpmd -c 0x3f -n 4 -b $blacklist -- -a --nb-cores=4 --coremask=0x3c --rxq=2 --rxd=4096 --rss-udp --txq=2 --forward-mode=rxonly
+ else
+ sudo ./destdir/bin/testpmd -c 0x0f -n 4 -b $blacklist -- -a --nb-cores=2 --coremask=0x0c --rxq=2 --rxd=4096 --rss-udp --txq=2 --forward-mode=rxonly
+ fi
+}
+
+main()
+{
+ if ip a | grep eth2 >/dev/null 2>&1; then
+ ip link set eth2 down
+ fi
+
+ if ip a | grep eth1 >/dev/null 2>&1; then
+ ip link set eth1 down
+ load_modules
+ change_permissions
+ add_interface_to_dpdk
+ fi
+
+ run_testpmd
+}
+
+main
diff --git a/yardstick/benchmark/scenarios/networking/vnf_generic.py b/yardstick/benchmark/scenarios/networking/vnf_generic.py
index 447c550ed..be179631e 100644
--- a/yardstick/benchmark/scenarios/networking/vnf_generic.py
+++ b/yardstick/benchmark/scenarios/networking/vnf_generic.py
@@ -60,13 +60,9 @@ class SshManager(object):
returns -> ssh connection ready to be used
"""
try:
- ssh_port = self.node.get("ssh_port", ssh.DEFAULT_PORT)
- self.conn = ssh.SSH(user=self.node["user"],
- host=self.node["ip"],
- password=self.node["password"],
- port=ssh_port)
+ self.conn = ssh.SSH.from_node(self.node)
self.conn.wait()
- except (SSHError) as error:
+ except SSHError as error:
LOG.info("connect failed to %s, due to %s", self.node["ip"], error)
# self.conn defaults to None
return self.conn
diff --git a/yardstick/benchmark/scenarios/networking/vsperf.py b/yardstick/benchmark/scenarios/networking/vsperf.py
index f2c2ea9b8..705544c41 100644
--- a/yardstick/benchmark/scenarios/networking/vsperf.py
+++ b/yardstick/benchmark/scenarios/networking/vsperf.py
@@ -114,10 +114,6 @@ class Vsperf(base.Scenario):
def setup(self):
"""scenario setup"""
vsperf = self.context_cfg['host']
- vsperf_user = vsperf.get('user', 'ubuntu')
- vsperf_ssh_port = vsperf.get('ssh_port', ssh.DEFAULT_PORT)
- vsperf_password = vsperf.get('password', 'ubuntu')
- vsperf_ip = vsperf.get('ip', None)
# add trafficgen interfaces to the external bridge
if self.tg_port1:
@@ -128,9 +124,9 @@ class Vsperf(base.Scenario):
(self.br_ex, self.tg_port2), shell=True)
# copy vsperf conf to VM
- LOG.info("user:%s, host:%s", vsperf_user, vsperf_ip)
- self.client = ssh.SSH(vsperf_user, vsperf_ip,
- password=vsperf_password, port=vsperf_ssh_port)
+ self.client = ssh.SSH.from_node(vsperf, defaults={
+ "user": "ubuntu", "password": "ubuntu"
+ })
# traffic generation could last long
self.client.wait(timeout=1800)
diff --git a/yardstick/benchmark/scenarios/storage/fio.py b/yardstick/benchmark/scenarios/storage/fio.py
index e28bd7bcc..ad34817a7 100644
--- a/yardstick/benchmark/scenarios/storage/fio.py
+++ b/yardstick/benchmark/scenarios/storage/fio.py
@@ -63,14 +63,8 @@ class Fio(base.Scenario):
"yardstick.benchmark.scenarios.storage",
Fio.TARGET_SCRIPT)
host = self.context_cfg["host"]
- user = host.get("user", "root")
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- ip = host.get("ip", None)
- key_filename = host.get("key_filename", "~/.ssh/id_rsa")
-
- LOG.info("user:%s, host:%s", user, ip)
- self.client = ssh.SSH(user, ip, key_filename=key_filename,
- port=ssh_port)
+
+ self.client = ssh.SSH.from_node(host, defaults={"user": "root"})
self.client.wait(timeout=600)
# copy script to host
diff --git a/yardstick/benchmark/scenarios/storage/storagecapacity.py b/yardstick/benchmark/scenarios/storage/storagecapacity.py
index c437f22c0..b6c403f47 100644
--- a/yardstick/benchmark/scenarios/storage/storagecapacity.py
+++ b/yardstick/benchmark/scenarios/storage/storagecapacity.py
@@ -57,14 +57,10 @@ class StorageCapacity(base.Scenario):
host = self.context_cfg['host']
if host is None:
raise RuntimeError('No right node.Please check the configuration')
- host_user = host.get('user', 'ubuntu')
- ssh_port = host.get("ssh_port", ssh.DEFAULT_PORT)
- host_ip = host.get('ip', None)
- host_pwd = host.get('password', 'root')
- LOG.debug("user:%s, host:%s", host_user, host_ip)
-
- self.client = ssh.SSH(host_user, host_ip, password=host_pwd,
- port=ssh_port)
+
+ self.client = ssh.SSH.from_node(host, defaults={
+ "user": "ubuntu", "password": "root"
+ })
self.client.wait(timeout=600)
# copy script to host
diff --git a/yardstick/common/constants.py b/yardstick/common/constants.py
index 33266e233..cb98c356d 100644
--- a/yardstick/common/constants.py
+++ b/yardstick/common/constants.py
@@ -41,7 +41,7 @@ TESTCASE_DIR = join(YARDSTICK_ROOT_PATH, 'tests/opnfv/test_cases/')
TESTSUITE_DIR = join(YARDSTICK_ROOT_PATH, 'tests/opnfv/test_suites/')
# file
-OPENRC = get_param('file.openrc', '/etc/yardstick/yardstick.conf')
+OPENRC = get_param('file.openrc', '/etc/yardstick/openstack.creds')
CONF_FILE = join(CONF_DIR, 'yardstick.conf')
CONF_SAMPLE_FILE = join(CONF_SAMPLE_DIR, 'yardstick.conf.sample')
FETCH_SCRIPT = get_param('file.fetch_script', 'utils/fetch_os_creds.sh')
diff --git a/yardstick/common/openstack_utils.py b/yardstick/common/openstack_utils.py
index 788de0de4..1f08344e4 100644
--- a/yardstick/common/openstack_utils.py
+++ b/yardstick/common/openstack_utils.py
@@ -85,9 +85,13 @@ def get_session():
def get_endpoint(service_type, endpoint_type='publicURL'):
auth = get_session_auth()
+ # for multi-region, we need to specify region
+ # when finding the endpoint
return get_session().get_endpoint(auth=auth,
service_type=service_type,
- endpoint_type=endpoint_type)
+ endpoint_type=endpoint_type,
+ region_name=os.environ.get(
+ "OS_REGION_NAME"))
# *********************************************
diff --git a/yardstick/common/utils.py b/yardstick/common/utils.py
index 7035f3374..f4def8533 100644
--- a/yardstick/common/utils.py
+++ b/yardstick/common/utils.py
@@ -167,3 +167,22 @@ def parse_ini_file(path):
s)} for s in parser.sections()})
return config
+
+
+def get_port_mac(sshclient, port):
+ cmd = "ifconfig |grep HWaddr |grep %s |awk '{print $5}' " % port
+ status, stdout, stderr = sshclient.execute(cmd)
+
+ if status:
+ raise RuntimeError(stderr)
+ return stdout.rstrip()
+
+
+def get_port_ip(sshclient, port):
+ cmd = "ifconfig %s |grep 'inet addr' |awk '{print $2}' " \
+ "|cut -d ':' -f2 " % port
+ status, stdout, stderr = sshclient.execute(cmd)
+
+ if status:
+ raise RuntimeError(stderr)
+ return stdout.rstrip()
diff --git a/yardstick/dispatcher/http.py b/yardstick/dispatcher/http.py
index e3bcbc89b..0d8d2a346 100644
--- a/yardstick/dispatcher/http.py
+++ b/yardstick/dispatcher/http.py
@@ -32,7 +32,7 @@ LOG = logging.getLogger(__name__)
CONF = cfg.CONF
http_dispatcher_opts = [
cfg.StrOpt('target',
- default='http://127.0.0.1:8000/results',
+ default=os.getenv('TARGET', 'http://127.0.0.1:8000/results'),
help='The target where the http request will be sent. '
'If this is not set, no data will be posted. For '
'example: target = http://hostname:1234/path'),
@@ -62,7 +62,8 @@ class HttpDispatcher(DispatchBase):
"description": "yardstick test cases result",
"pod_name": os.environ.get('NODE_NAME', 'unknown'),
"installer": os.environ.get('INSTALLER_TYPE', 'unknown'),
- "version": os.environ.get('YARDSTICK_VERSION', 'unknown')
+ "version": os.environ.get('YARDSTICK_VERSION', 'unknown'),
+ "build_tag": os.environ.get('BUILD_TAG')
}
def record_result_data(self, data):
@@ -75,7 +76,7 @@ class HttpDispatcher(DispatchBase):
'be posted.')
return
- self.result["details"] = self.raw_result
+ self.result["details"] = {'results': self.raw_result}
case_name = ""
for v in self.raw_result:
diff --git a/yardstick/network_services/nfvi/resource.py b/yardstick/network_services/nfvi/resource.py
index d71e1e995..18b0d8952 100644
--- a/yardstick/network_services/nfvi/resource.py
+++ b/yardstick/network_services/nfvi/resource.py
@@ -40,13 +40,11 @@ class ResourceProfile(object):
self.cores = cores
mgmt_interface = vnfd.get("mgmt-interface")
- user = mgmt_interface.get("user")
- passwd = mgmt_interface.get("password")
- ip_addr = mgmt_interface.get("ip")
- self.vnfip = mgmt_interface.get("host", ip_addr)
- ssh_port = mgmt_interface.get("ssh_port", ssh.DEFAULT_PORT)
- self.connection = ssh.SSH(user, self.vnfip,
- password=passwd, port=ssh_port)
+ # why the host or ip?
+ self.vnfip = mgmt_interface.get("host", mgmt_interface["ip"])
+ self.connection = ssh.SSH.from_node(mgmt_interface,
+ overrides={"ip": self.vnfip})
+
self.connection.wait()
def check_if_sa_running(self, process):
diff --git a/yardstick/network_services/vnf_generic/vnf/tg_ping.py b/yardstick/network_services/vnf_generic/vnf/tg_ping.py
index 2844a5c01..000a91db4 100644
--- a/yardstick/network_services/vnf_generic/vnf/tg_ping.py
+++ b/yardstick/network_services/vnf_generic/vnf/tg_ping.py
@@ -69,12 +69,7 @@ class PingTrafficGen(GenericTrafficGen):
self._traffic_process = None
mgmt_interface = vnfd["mgmt-interface"]
- ssh_port = mgmt_interface.get("ssh_port", ssh.DEFAULT_PORT)
- LOG.debug("Connecting to %s", mgmt_interface["ip"])
-
- self.connection = ssh.SSH(mgmt_interface["user"], mgmt_interface["ip"],
- password=mgmt_interface["password"],
- port=ssh_port)
+ self.connection = ssh.SSH.from_node(mgmt_interface)
self.connection.wait()
def _bind_device_kernel(self, connection):
@@ -130,10 +125,7 @@ class PingTrafficGen(GenericTrafficGen):
def _traffic_runner(self, traffic_profile, filewrapper):
mgmt_interface = self.vnfd["mgmt-interface"]
- ssh_port = mgmt_interface.get("ssh_port", ssh.DEFAULT_PORT)
- self.connection = ssh.SSH(mgmt_interface["user"], mgmt_interface["ip"],
- password=mgmt_interface["password"],
- port=ssh_port)
+ self.connection = ssh.SSH.from_node(mgmt_interface)
self.connection.wait()
external_interface = self.vnfd["vdu"][0]["external-interface"]
virtual_interface = external_interface[0]["virtual-interface"]
diff --git a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py
index 37c1a7345..7da4b31e9 100644
--- a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py
+++ b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_trex.py
@@ -55,10 +55,8 @@ class TrexTrafficGenRFC(GenericTrafficGen):
self.my_ports = None
mgmt_interface = self.vnfd["mgmt-interface"]
- ssh_port = mgmt_interface.get("ssh_port", ssh.DEFAULT_PORT)
- self.connection = ssh.SSH(mgmt_interface["user"], mgmt_interface["ip"],
- password=mgmt_interface["password"],
- port=ssh_port)
+
+ self.connection = ssh.SSH.from_node(mgmt_interface)
self.connection.wait()
@classmethod
@@ -166,10 +164,8 @@ class TrexTrafficGenRFC(GenericTrafficGen):
def _start_server(self):
mgmt_interface = self.vnfd["mgmt-interface"]
- ssh_port = mgmt_interface.get("ssh_port", ssh.DEFAULT_PORT)
- _server = ssh.SSH(mgmt_interface["user"], mgmt_interface["ip"],
- password=mgmt_interface["password"],
- port=ssh_port)
+
+ _server = ssh.SSH.from_node(mgmt_interface)
_server.wait()
_server.execute("fuser -n tcp %s %s -k > /dev/null 2>&1" %
diff --git a/yardstick/network_services/vnf_generic/vnf/tg_trex.py b/yardstick/network_services/vnf_generic/vnf/tg_trex.py
index 1e751bfce..058b715fe 100644
--- a/yardstick/network_services/vnf_generic/vnf/tg_trex.py
+++ b/yardstick/network_services/vnf_generic/vnf/tg_trex.py
@@ -53,12 +53,9 @@ class TrexTrafficGen(GenericTrafficGen):
self.my_ports = None
self.client_started = multiprocessing.Value('i', 0)
- mgmt_interface = self.vnfd["mgmt-interface"]
- ssh_port = mgmt_interface.get("ssh_port", ssh.DEFAULT_PORT)
- self.connection = ssh.SSH(mgmt_interface["user"],
- mgmt_interface["ip"],
- password=mgmt_interface["password"],
- port=ssh_port)
+ mgmt_interface = vnfd["mgmt-interface"]
+
+ self.connection = ssh.SSH.from_node(mgmt_interface)
self.connection.wait()
@classmethod
@@ -199,10 +196,8 @@ class TrexTrafficGen(GenericTrafficGen):
def _start_server(self):
mgmt_interface = self.vnfd["mgmt-interface"]
- ssh_port = mgmt_interface.get("ssh_port", ssh.DEFAULT_PORT)
- _server = ssh.SSH(mgmt_interface["user"], mgmt_interface["ip"],
- password=mgmt_interface["password"],
- port=ssh_port)
+
+ _server = ssh.SSH.from_node(mgmt_interface)
_server.wait()
_server.execute("fuser -n tcp %s %s -k > /dev/null 2>&1" %
diff --git a/yardstick/network_services/vnf_generic/vnf/vpe_vnf.py b/yardstick/network_services/vnf_generic/vnf/vpe_vnf.py
index 8c766f01e..e9e80bdfb 100644
--- a/yardstick/network_services/vnf_generic/vnf/vpe_vnf.py
+++ b/yardstick/network_services/vnf_generic/vnf/vpe_vnf.py
@@ -120,14 +120,11 @@ class VpeApproxVnf(GenericVNF):
def instantiate(self, scenario_cfg, context_cfg):
vnf_cfg = scenario_cfg['vnf_options']['vpe']['cfg']
- mgmt_interface = self.vnfd["mgmt-interface"]
- ssh_port = mgmt_interface.get("ssh_port", ssh.DEFAULT_PORT)
- self.connection = ssh.SSH(mgmt_interface["user"], mgmt_interface["ip"],
- password=mgmt_interface["password"],
- port=ssh_port)
+ mgmt_interface = self.vnfd["mgmt-interface"]
+ self.connection = ssh.SSH.from_node(mgmt_interface)
- self.connection.wait()
+ self.tc_file_name = '{0}.yaml'.format(scenario_cfg['tc'])
self.setup_vnf_environment(self.connection)
@@ -189,11 +186,10 @@ class VpeApproxVnf(GenericVNF):
def _run_vpe(self, filewrapper, vnf_cfg):
mgmt_interface = self.vnfd["mgmt-interface"]
- ssh_port = mgmt_interface.get("ssh_port", ssh.DEFAULT_PORT)
- self.connection = ssh.SSH(mgmt_interface["user"], mgmt_interface["ip"],
- password=mgmt_interface["password"],
- port=ssh_port)
+
+ self.connection = ssh.SSH.from_node(mgmt_interface)
self.connection.wait()
+
interfaces = self.vnfd["vdu"][0]['external-interface']
port0_ip = ipaddress.ip_interface(six.text_type(
"%s/%s" % (interfaces[0]["virtual-interface"]["local_ip"],
diff --git a/yardstick/network_services/vnf_generic/vnfdgen.py b/yardstick/network_services/vnf_generic/vnfdgen.py
index 64554cdaf..97dd97198 100644
--- a/yardstick/network_services/vnf_generic/vnfdgen.py
+++ b/yardstick/network_services/vnf_generic/vnfdgen.py
@@ -28,7 +28,9 @@ def generate_vnfd(vnf_model, node):
:return: Complete VNF Descriptor that will be taken
as input for GenericVNF.__init__
"""
+ # get is unused as global method inside template
node["get"] = get
+ # Set Node details to default if not defined in pod file
rendered_vnfd = TaskTemplate.render(vnf_model, **node)
# This is done to get rid of issues with serializing node
del node["get"]
diff --git a/yardstick/orchestrator/heat.py b/yardstick/orchestrator/heat.py
index 49126f661..ea9bd1b08 100644
--- a/yardstick/orchestrator/heat.py
+++ b/yardstick/orchestrator/heat.py
@@ -16,11 +16,13 @@ import collections
import datetime
import getpass
import logging
+
import socket
import time
import heatclient
import pkg_resources
+
from oslo_utils import encodeutils
import yardstick.common.openstack_utils as op_utils
@@ -31,13 +33,15 @@ log = logging.getLogger(__name__)
HEAT_KEY_UUID_LENGTH = 8
+PROVIDER_SRIOV = "sriov"
+
def get_short_key_uuid(uuid):
return str(uuid)[:HEAT_KEY_UUID_LENGTH]
class HeatObject(object):
- """ base class for template and stack"""
+ """base class for template and stack"""
def __init__(self):
self._heat_client = None
@@ -63,7 +67,7 @@ class HeatObject(object):
class HeatStack(HeatObject):
- """ Represents a Heat stack (deployed template) """
+ """Represents a Heat stack (deployed template) """
stacks = []
def __init__(self, name):
@@ -188,14 +192,58 @@ class HeatTemplate(HeatObject):
log.debug("template object '%s' created", name)
- def add_network(self, name):
- """add to the template a Neutron Net"""
- log.debug("adding Neutron::Net '%s'", name)
+ def add_flavor(self, name, vcpus=1, ram=1024, disk=1, ephemeral=0,
+ is_public=True, rxtx_factor=1.0, swap=0,
+ extra_specs=None):
+ """add to the template a Flavor description"""
+ if name is None:
+ name = 'auto'
+ log.debug("adding Nova::Flavor '%s' vcpus '%d' ram '%d' disk '%d' " +
+ "ephemeral '%d' is_public '%s' rxtx_factor '%d' " +
+ "swap '%d' extra_specs '%s' ",
+ name, vcpus, ram, disk, ephemeral, is_public,
+ rxtx_factor, swap, str(extra_specs))
+
+ if extra_specs:
+ assert isinstance(extra_specs, collections.Mapping)
+
self.resources[name] = {
- 'type': 'OS::Neutron::Net',
- 'properties': {'name': name}
+ 'type': 'OS::Nova::Flavor',
+ 'properties': {'name': name,
+ 'disk': disk,
+ 'vcpus': vcpus,
+ 'swap': swap,
+ 'flavorid': name,
+ 'rxtx_factor': rxtx_factor,
+ 'ram': ram,
+ 'is_public': is_public,
+ 'ephemeral': ephemeral,
+ 'extra_specs': extra_specs}
}
+ self._template['outputs'][name] = {
+ 'description': 'Flavor %s ID' % name,
+ 'value': {'get_resource': name}
+ }
+
+ def add_network(self, name, physical_network='physnet1', provider=None):
+ """add to the template a Neutron Net"""
+ log.debug("adding Neutron::Net '%s'", name)
+ if provider is None:
+ self.resources[name] = {
+ 'type': 'OS::Neutron::Net',
+ 'properties': {'name': name}
+ }
+ else:
+ self.resources[name] = {
+ 'type': 'OS::Neutron::ProviderNet',
+ 'properties': {
+ 'name': name,
+ 'network_type': 'vlan',
+ 'physical_network': physical_network
+ }
+ }
+
def add_server_group(self, name, policies): # pragma: no cover
"""add to the template a ServerGroup"""
log.debug("adding Nova::ServerGroup '%s'", name)
@@ -228,7 +276,6 @@ class HeatTemplate(HeatObject):
def add_router(self, name, ext_gw_net, subnet_name):
"""add to the template a Neutron Router and interface"""
log.debug("adding Neutron::Router:'%s', gw-net:'%s'", name, ext_gw_net)
-
self.resources[name] = {
'type': 'OS::Neutron::Router',
'depends_on': [subnet_name],
@@ -244,7 +291,6 @@ class HeatTemplate(HeatObject):
"""add to the template a Neutron RouterInterface and interface"""
log.debug("adding Neutron::RouterInterface '%s' router:'%s', "
"subnet:'%s'", name, router_name, subnet_name)
-
self.resources[name] = {
'type': 'OS::Neutron::RouterInterface',
'depends_on': [router_name, subnet_name],
@@ -254,7 +300,8 @@ class HeatTemplate(HeatObject):
}
}
- def add_port(self, name, network_name, subnet_name, sec_group_id=None):
+ def add_port(self, name, network_name, subnet_name, sec_group_id=None,
+ provider=None):
"""add to the template a named Neutron Port"""
log.debug("adding Neutron::Port '%s', network:'%s', subnet:'%s', "
"secgroup:%s", name, network_name, subnet_name, sec_group_id)
@@ -269,6 +316,10 @@ class HeatTemplate(HeatObject):
}
}
+ if provider == PROVIDER_SRIOV:
+ self.resources[name]['properties']['binding:vnic_type'] = \
+ 'direct'
+
if sec_group_id:
self.resources[name]['depends_on'].append(sec_group_id)
self.resources[name]['properties']['security_groups'] = \
@@ -382,34 +433,41 @@ class HeatTemplate(HeatObject):
'value': {'get_resource': name}
}
- def add_server(self, name, image, flavor, ports=None, networks=None,
- scheduler_hints=None, user=None, key_name=None,
- user_data=None, metadata=None, additional_properties=None):
+ def add_server(self, name, image, flavor, flavors, ports=None,
+ networks=None, scheduler_hints=None, user=None,
+ key_name=None, user_data=None, metadata=None,
+ additional_properties=None):
"""add to the template a Nova Server"""
log.debug("adding Nova::Server '%s', image '%s', flavor '%s', "
"ports %s", name, image, flavor, ports)
self.resources[name] = {
- 'type': 'OS::Nova::Server'
+ 'type': 'OS::Nova::Server',
+ 'depends_on': []
}
server_properties = {
'name': name,
'image': image,
- 'flavor': flavor,
+ 'flavor': {},
'networks': [] # list of dictionaries
}
+ if flavor in flavors:
+ self.resources[name]['depends_on'].append(flavor)
+ server_properties["flavor"] = {'get_resource': flavor}
+ else:
+ server_properties["flavor"] = flavor
+
if user:
server_properties['admin_user'] = user
if key_name:
- self.resources[name]['depends_on'] = [key_name]
+ self.resources[name]['depends_on'].append(key_name)
server_properties['key_name'] = {'get_resource': key_name}
if ports:
- self.resources[name]['depends_on'] = ports
-
+ self.resources[name]['depends_on'].extend(ports)
for port in ports:
server_properties['networks'].append(
{'port': {'get_resource': port}}
@@ -445,7 +503,8 @@ class HeatTemplate(HeatObject):
def create(self, block=True):
"""creates a template in the target cloud using heat
- returns a dict with the requested output values from the template"""
+ returns a dict with the requested output values from the template
+ """
log.info("Creating stack '%s'", self.name)
# create stack early to support cleanup, e.g. ctrl-c while waiting
diff --git a/yardstick/ssh.py b/yardstick/ssh.py
index cfbc3ca96..cf9adf0dc 100644
--- a/yardstick/ssh.py
+++ b/yardstick/ssh.py
@@ -70,13 +70,15 @@ import time
import re
import logging
+
import paramiko
+from chainmap import ChainMap
from oslo_utils import encodeutils
from scp import SCPClient
import six
-DEFAULT_PORT = 22
+SSH_PORT = paramiko.config.SSH_PORT
class SSHError(Exception):
@@ -90,7 +92,7 @@ class SSHTimeout(SSHError):
class SSH(object):
"""Represent ssh connection."""
- def __init__(self, user, host, port=DEFAULT_PORT, pkey=None,
+ def __init__(self, user, host, port=SSH_PORT, pkey=None,
key_filename=None, password=None, name=None):
"""Initialize SSH client.
@@ -109,6 +111,9 @@ class SSH(object):
self.user = user
self.host = host
+ # everybody wants to debug this in the caller, do it here instead
+ self.log.debug("user:%s host:%s", user, host)
+
# we may get text port from YAML, convert to int
self.port = int(port)
self.pkey = self._get_pkey(pkey) if pkey else None
@@ -123,6 +128,23 @@ class SSH(object):
else:
logging.getLogger("paramiko").setLevel(logging.WARN)
+ @classmethod
+ def from_node(cls, node, overrides=None, defaults=None):
+ if overrides is None:
+ overrides = {}
+ if defaults is None:
+ defaults = {}
+ params = ChainMap(overrides, node, defaults)
+ return cls(
+ user=params['user'],
+ host=params['ip'],
+ # paramiko doesn't like None default, requires SSH_PORT default
+ port=params.get('ssh_port', SSH_PORT),
+ pkey=params.get('pkey'),
+ key_filename=params.get('key_filename'),
+ password=params.get('password'),
+ name=params.get('name'))
+
def _get_pkey(self, key):
if isinstance(key, six.string_types):
key = six.moves.StringIO(key)