diff options
134 files changed, 3968 insertions, 1152 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 5cc65c959..7632d9da9 100755 --- a/api/api-prepare.sh +++ b/api/api-prepare.sh @@ -8,6 +8,36 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +: ${YARDSTICK_REPO_DIR:='/home/opnfv/repos/yardstick'} + +# generate uwsgi config file +mkdir -p /etc/yardstick +uwsgi_config='/etc/yardstick/yardstick.ini' +if [[ ! -e "${uwsgi_config}" ]];then + + cat << EOF > "${uwsgi_config}" +[uwsgi] +master = true +debug = true +chdir = ${YARDSTICK_REPO_DIR}/api +module = server +plugins = python +processes = 10 +threads = 5 +async = true +max-requests = 5000 +chmod-socket = 666 +callable = app_wrapper +enable-threads = true +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 nginx_config='/etc/nginx/conf.d/yardstick.conf' @@ -24,7 +54,6 @@ server { } } EOF -echo "daemon off;" >> /etc/nginx/nginx.conf fi # nginx service start when boot @@ -42,7 +71,7 @@ autorestart = true [program:yardstick_uwsgi] user = root -directory = /home/opnfv/repos/yardstick/api +directory = /etc/yardstick command = uwsgi -i yardstick.ini autorestart = true EOF diff --git a/api/conf.py b/api/conf.py deleted file mode 100644 index a4f332533..000000000 --- a/api/conf.py +++ /dev/null @@ -1,28 +0,0 @@ -############################################################################## -# Copyright (c) 2016 Huawei Technologies Co.,Ltd and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## -from __future__ import absolute_import -from pyroute2 import IPDB - - -# configuration for influxdb -with IPDB() as ip: - GATEWAY_IP = ip.routes['default'].gateway -PORT = 8086 - -TEST_CASE_PATH = '../tests/opnfv/test_cases/' - -SAMPLE_PATH = '../samples/' - -TEST_CASE_PRE = 'opnfv_yardstick_' - -TEST_SUITE_PATH = '../tests/opnfv/test_suites/' - -TEST_SUITE_PRE = 'opnfv_' - -OUTPUT_CONFIG_FILE_PATH = '/etc/yardstick/yardstick.conf' diff --git a/api/resources/env_action.py b/api/resources/env_action.py index 9d1686a1d..7bfaf27a7 100644 --- a/api/resources/env_action.py +++ b/api/resources/env_action.py @@ -19,17 +19,17 @@ import glob from six.moves import configparser from oslo_serialization import jsonutils +from docker import Client -from api import conf as api_conf from api.database.handler import AsyncTaskHandler from api.utils import influx from api.utils.common import result_handler -from docker import Client -from yardstick.common import constants as config +from yardstick.common import constants as consts from yardstick.common import utils as yardstick_utils from yardstick.common import openstack_utils from yardstick.common.httpClient import HttpClient + logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) @@ -46,12 +46,12 @@ def createGrafanaContainer(args): def _create_grafana(task_id): _create_task(task_id) - client = Client(base_url=config.DOCKER_URL) + client = Client(base_url=consts.DOCKER_URL) try: - if not _check_image_exist(client, '%s:%s' % (config.GRAFANA_IMAGE, - config.GRAFANA_TAGS)): - client.pull(config.GRAFANA_IMAGE, config.GRAFANA_TAGS) + image = '{}:{}'.format(consts.GRAFANA_IMAGE, consts.GRAFANA_TAG) + if not _check_image_exist(client, image): + client.pull(consts.GRAFANA_IMAGE, consts.GRAFANA_TAG) _create_grafana_container(client) @@ -64,13 +64,12 @@ def _create_grafana(task_id): _update_task_status(task_id) except Exception as e: _update_task_error(task_id, str(e)) - logger.debug('Error: %s', e) + logger.exception('Error: %s', e) def _create_dashboard(): - url = 'http://admin:admin@%s:3000/api/dashboards/db' % api_conf.GATEWAY_IP - path = os.path.join(config.YARDSTICK_REPOS_DIR, 'dashboard', - '*dashboard.json') + url = 'http://admin:admin@%s:3000/api/dashboards/db' % consts.GRAFANA_IP + path = os.path.join(consts.REPOS_DIR, 'dashboard', '*dashboard.json') for i in sorted(glob.iglob(path)): with open(i) as f: @@ -79,12 +78,12 @@ def _create_dashboard(): def _create_data_source(): - url = 'http://admin:admin@%s:3000/api/datasources' % api_conf.GATEWAY_IP + url = 'http://admin:admin@%s:3000/api/datasources' % consts.GRAFANA_IP data = { "name": "yardstick", "type": "influxdb", "access": "proxy", - "url": "http://%s:8086" % api_conf.GATEWAY_IP, + "url": "http://%s:8086" % consts.INFLUXDB_IP, "password": "root", "user": "root", "database": "yardstick", @@ -101,8 +100,8 @@ def _create_grafana_container(client): port_bindings = {k: k for k in ports} host_config = client.create_host_config(port_bindings=port_bindings) - container = client.create_container(image='%s:%s' % (config.GRAFANA_IMAGE, - config.GRAFANA_TAGS), + container = client.create_container(image='%s:%s' % (consts.GRAFANA_IMAGE, + consts.GRAFANA_TAG), ports=ports, detach=True, tty=True, @@ -126,14 +125,14 @@ def createInfluxDBContainer(args): def _create_influxdb(task_id): _create_task(task_id) - client = Client(base_url=config.DOCKER_URL) + client = Client(base_url=consts.DOCKER_URL) try: _change_output_to_influxdb() - if not _check_image_exist(client, '%s:%s' % (config.INFLUXDB_IMAGE, - config.INFLUXDB_TAG)): - client.pull(config.INFLUXDB_IMAGE, tag=config.INFLUXDB_TAG) + if not _check_image_exist(client, '%s:%s' % (consts.INFLUXDB_IMAGE, + consts.INFLUXDB_TAG)): + client.pull(consts.INFLUXDB_IMAGE, tag=consts.INFLUXDB_TAG) _create_influxdb_container(client) @@ -153,8 +152,8 @@ def _create_influxdb_container(client): port_bindings = {k: k for k in ports} host_config = client.create_host_config(port_bindings=port_bindings) - container = client.create_container(image='%s:%s' % (config.INFLUXDB_IMAGE, - config.INFLUXDB_TAG), + container = client.create_container(image='%s:%s' % (consts.INFLUXDB_IMAGE, + consts.INFLUXDB_TAG), ports=ports, detach=True, tty=True, @@ -165,24 +164,26 @@ def _create_influxdb_container(client): def _config_influxdb(): try: client = influx.get_data_db_client() - client.create_user(config.USER, config.PASSWORD, config.DATABASE) - client.create_database(config.DATABASE) + client.create_user(consts.INFLUXDB_USER, + consts.INFLUXDB_PASS, + consts.INFLUXDB_DB_NAME) + client.create_database(consts.INFLUXDB_DB_NAME) logger.info('Success to config influxDB') except Exception as e: logger.debug('Failed to config influxDB: %s', e) def _change_output_to_influxdb(): - yardstick_utils.makedirs(config.YARDSTICK_CONFIG_DIR) + yardstick_utils.makedirs(consts.CONF_DIR) parser = configparser.ConfigParser() - parser.read(config.YARDSTICK_CONFIG_SAMPLE_FILE) + parser.read(consts.CONF_SAMPLE_FILE) parser.set('DEFAULT', 'dispatcher', 'influxdb') parser.set('dispatcher_influxdb', 'target', - 'http://%s:8086' % api_conf.GATEWAY_IP) + 'http://%s:8086' % consts.INFLUXDB_IP) - with open(config.YARDSTICK_CONFIG_FILE, 'w') as f: + with open(consts.CONF_FILE, 'w') as f: parser.write(f) @@ -198,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 = config.OPENSTACK_RC_FILE + 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() @@ -233,19 +229,8 @@ 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 config.INSTALLERS: - raise SystemExit('INSTALLER_TYPE is not correct') - - def _create_directories(): - yardstick_utils.makedirs(config.YARDSTICK_CONFIG_DIR) + yardstick_utils.makedirs(consts.CONF_DIR) def _source_file(rc_file): @@ -254,7 +239,7 @@ def _source_file(rc_file): def _get_remote_rc_file(rc_file, installer_ip, installer_type): - os_fetch_script = os.path.join(config.RELENG_DIR, config.OS_FETCH_SCRIPT) + os_fetch_script = os.path.join(consts.RELENG_DIR, consts.FETCH_SCRIPT) try: cmd = [os_fetch_script, '-d', rc_file, '-i', installer_type, @@ -287,17 +272,15 @@ def _append_external_network(rc_file): def _clean_images(): - cmd = [config.CLEAN_IMAGES_SCRIPT] - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, - cwd=config.YARDSTICK_REPOS_DIR) + cmd = [consts.CLEAN_IMAGES_SCRIPT] + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, cwd=consts.REPOS_DIR) output = p.communicate()[0] logger.debug('The result is: %s', output) def _load_images(): - cmd = [config.LOAD_IMAGES_SCRIPT] - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, - cwd=config.YARDSTICK_REPOS_DIR) + cmd = [consts.LOAD_IMAGES_SCRIPT] + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, cwd=consts.REPOS_DIR) output = p.communicate()[0] logger.debug('The result is: %s', output) diff --git a/api/resources/release_action.py b/api/resources/release_action.py index c5aa20afc..9016d4aa2 100644 --- a/api/resources/release_action.py +++ b/api/resources/release_action.py @@ -11,8 +11,8 @@ import uuid import os import logging -from api import conf from api.utils import common as common_utils +from yardstick.common import constants as consts logger = logging.getLogger(__name__) @@ -24,8 +24,8 @@ def runTestCase(args): except KeyError: return common_utils.error_handler('Lack of testcase argument') - testcase_name = conf.TEST_CASE_PRE + testcase - testcase = os.path.join(conf.TEST_CASE_PATH, testcase_name + '.yaml') + testcase_name = consts.TESTCASE_PRE + testcase + testcase = os.path.join(consts.TESTCASE_DIR, testcase_name + '.yaml') task_id = str(uuid.uuid4()) diff --git a/api/resources/samples_action.py b/api/resources/samples_action.py index 490e48b25..3093864e0 100644 --- a/api/resources/samples_action.py +++ b/api/resources/samples_action.py @@ -11,8 +11,8 @@ import uuid import os import logging -from api import conf from api.utils import common as common_utils +from yardstick.common import constants as consts logger = logging.getLogger(__name__) @@ -24,7 +24,7 @@ def runTestCase(args): except KeyError: return common_utils.error_handler('Lack of testcase argument') - testcase = os.path.join(conf.SAMPLE_PATH, testcase_name + '.yaml') + testcase = os.path.join(consts.SAMPLE_CASE_DIR, testcase_name + '.yaml') task_id = str(uuid.uuid4()) diff --git a/api/urls.py b/api/urls.py index 3ccb67dbc..b9ddd4c72 100644 --- a/api/urls.py +++ b/api/urls.py @@ -7,6 +7,7 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## from __future__ import absolute_import + from api import views from api.utils.common import Url diff --git a/api/utils/common.py b/api/utils/common.py index 3e9bf8f8b..f8b0d40ba 100644 --- a/api/utils/common.py +++ b/api/utils/common.py @@ -11,10 +11,10 @@ import collections import logging from flask import jsonify +import six from api.utils.daemonthread import DaemonThread from yardstick.cmd.cli import YardstickCLI -import six logger = logging.getLogger(__name__) diff --git a/api/utils/daemonthread.py b/api/utils/daemonthread.py index 0049834eb..3d5625547 100644 --- a/api/utils/daemonthread.py +++ b/api/utils/daemonthread.py @@ -11,7 +11,7 @@ import threading import os import errno -from api import conf +from yardstick.common import constants as consts from api.database.handlers import TasksHandler @@ -43,7 +43,7 @@ class DaemonThread(threading.Thread): def _handle_testsuite_file(task_id): try: - os.remove(os.path.join(conf.TEST_SUITE_PATH, task_id + '.yaml')) + os.remove(os.path.join(consts.TESTSUITE_DIR, task_id + '.yaml')) except OSError as e: if e.errno != errno.ENOENT: raise diff --git a/api/utils/influx.py b/api/utils/influx.py index 08996b9c9..9bc6e9abe 100644 --- a/api/utils/influx.py +++ b/api/utils/influx.py @@ -14,7 +14,7 @@ import six.moves.configparser as ConfigParser from six.moves.urllib.parse import urlsplit from influxdb import InfluxDBClient -from api import conf +from yardstick.common import constants as consts logger = logging.getLogger(__name__) @@ -22,7 +22,7 @@ logger = logging.getLogger(__name__) def get_data_db_client(): parser = ConfigParser.ConfigParser() try: - parser.read(conf.OUTPUT_CONFIG_FILE_PATH) + parser.read(consts.CONF_FILE) if parser.get('DEFAULT', 'dispatcher') != 'influxdb': raise RuntimeError @@ -35,10 +35,10 @@ def get_data_db_client(): def _get_client(parser): ip = _get_ip(parser.get('dispatcher_influxdb', 'target')) - username = parser.get('dispatcher_influxdb', 'username') + user = parser.get('dispatcher_influxdb', 'username') password = parser.get('dispatcher_influxdb', 'password') db_name = parser.get('dispatcher_influxdb', 'db_name') - return InfluxDBClient(ip, conf.PORT, username, password, db_name) + return InfluxDBClient(ip, consts.INFLUXDB_PORT, user, password, db_name) def _get_ip(url): diff --git a/api/yardstick.ini b/api/yardstick.ini deleted file mode 100644 index d2e8956e2..000000000 --- a/api/yardstick.ini +++ /dev/null @@ -1,16 +0,0 @@ -[uwsgi] -master = true -debug = true -chdir = /home/opnfv/repos/yardstick/api -module = server -plugins = python -processes = 10 -threads = 5 -async = true -max-requests = 5000 -chmod-socket = 666 -callable = app_wrapper -enable-threads = true -close-on-exec = 1 -daemonize= /var/log/yardstick/uwsgi.log -socket = /var/run/yardstick.sock diff --git a/dashboard/KVMFORNFV-Packet-Forwarding b/dashboard/KVMFORNFV-Packet-Forwarding new file mode 100644 index 000000000..41f8c73e4 --- /dev/null +++ b/dashboard/KVMFORNFV-Packet-Forwarding @@ -0,0 +1,2636 @@ +{ + "id": 50, + "title": "KVMFORNFV-Packet-Forwarding", + "originalTitle": "KVMFORNFV-Packet-Forwarding", + "tags": [ + "KVMFORNFV" + ], + "style": "dark", + "timezone": "browser", + "editable": true, + "hideControls": false, + "sharedCrosshair": false, + "rows": [ + { + "collapse": false, + "editable": true, + "height": 35, + "panels": [ + { + "content": "<h5 style=\"font-family:Verdana\"> <a style=\"color:#31A7D3\"><center>OPNFV_KVMFORNFV_Packet_Forwarding - Real time benchmark</center> </a></h5>\n<center>\n<p>Packet forwarding latency tests measures the time taken by a Packet generated by the traffic generator to travel from the originating device through the network to the destination device.\nFor more information see <a style=\"color:#31A7D3\"; href=\"http://artifacts.opnfv.org/kvmfornfv/docs/index.html#document-release/userguide/packet_forwarding.userguide\">Packet_Forwarding</a></p>\n</center>\n\n\n", + "editable": true, + "error": false, + "id": 22, + "links": [], + "mode": "html", + "span": 12, + "style": {}, + "title": "", + "type": "text" + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "About", + "titleSize": "h6" + }, + { + "collapse": false, + "editable": true, + "height": 460, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 2, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "pvp_tput_OVS_with_DPDK_and_vHost_User", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"pvp_tput_OVS_with_DPDK_and_vHost_User\" WHERE \"packet_size\" = '64' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "64" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "pvp_tput 64", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 3, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "pvp_tput_OVS_with_DPDK_and_vHost_User", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"pvp_tput_OVS_with_DPDK_and_vHost_User\" WHERE \"packet_size\" = '128' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "128" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "pvp_tput 128", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 4, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "pvp_tput_OVS_with_DPDK_and_vHost_User", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"pvp_tput_OVS_with_DPDK_and_vHost_User\" WHERE \"packet_size\" = '512' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "512" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "pvp_tput 512", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 5, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "pvp_tput_OVS_with_DPDK_and_vHost_User", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"pvp_tput_OVS_with_DPDK_and_vHost_User\" WHERE \"packet_size\" = '1024' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "1024" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "pvp_tput 1024", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 6, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "pvp_tput_OVS_with_DPDK_and_vHost_User", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"pvp_tput_OVS_with_DPDK_and_vHost_User\" WHERE \"packet_size\" = '1518' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "1518" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "pvp_tput 1518", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "KVM4NFV-pvp-tput-OVS_with_DPDK_and_vHost_User", + "titleSize": "h6" + }, + { + "collapse": false, + "editable": true, + "height": "460", + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 7, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "phy2phy_tput_OVS_with_DPDK_and_vHost_User", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"phy2phy_tput_OVS_with_DPDK_and_vHost_User\" WHERE \"packet_size\" = '64' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "64" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "phy2phy_tput 64", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 8, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "phy2phy_tput_OVS_with_DPDK_and_vHost_User", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"phy2phy_tput_OVS_with_DPDK_and_vHost_User\" WHERE \"packet_size\" = '128' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "128" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "phy2phy_tput 128", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 9, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "phy2phy_tput_OVS_with_DPDK_and_vHost_User", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"phy2phy_tput_OVS_with_DPDK_and_vHost_User\" WHERE \"packet_size\" = '512' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "512" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "phy2phy_tput 512", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 10, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "phy2phy_tput_OVS_with_DPDK_and_vHost_User", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"phy2phy_tput_OVS_with_DPDK_and_vHost_User\" WHERE \"packet_size\" = '1024' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "1024" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "phy2phy_tput 1024", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 11, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "phy2phy_tput_OVS_with_DPDK_and_vHost_User", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"phy2phy_tput_OVS_with_DPDK_and_vHost_User\" WHERE \"packet_size\" = '1518' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "1518" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "phy2phy_tput 1518", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "KVM4NFV-phy2phy-tput-OVS_with_DPDK_and_vHost_User", + "titleSize": "h6" + }, + { + "collapse": false, + "editable": true, + "height": "460", + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 12, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "phy2phy_tput_mod_vlan_OVS_with_DPDK_and_vHost_User", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"phy2phy_tput_mod_vlan_OVS_with_DPDK_and_vHost_User\" WHERE \"packet_size\" = '64' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "64" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "phy2phy_tput_mod_vlan 64", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 13, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "phy2phy_tput_mod_vlan_OVS_with_DPDK_and_vHost_User", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"phy2phy_tput_mod_vlan_OVS_with_DPDK_and_vHost_User\" WHERE \"packet_size\" = '128' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "128" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "phy2phy_tput_mod_vlan 128", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 14, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "phy2phy_tput_mod_vlan_OVS_with_DPDK_and_vHost_User", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"phy2phy_tput_mod_vlan_OVS_with_DPDK_and_vHost_User\" WHERE \"packet_size\" = '512' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "512" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "phy2phy_tput_mod_vlan 512", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 15, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "phy2phy_tput_mod_vlan_OVS_with_DPDK_and_vHost_User", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"phy2phy_tput_mod_vlan_OVS_with_DPDK_and_vHost_User\" WHERE \"packet_size\" = '1024' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "1024" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "phy2phy_tput_mod_vlan 1024", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 16, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "phy2phy_tput_mod_vlan_OVS_with_DPDK_and_vHost_User", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"phy2phy_tput_mod_vlan_OVS_with_DPDK_and_vHost_User\" WHERE \"packet_size\" = '1518' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "1518" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "phy2phy_tput_mod_vlan 1518", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "KVM4NFV-phy2phy-tput-mod_vlan-OVS_with_DPDK_and_vHost_User", + "titleSize": "h6" + }, + { + "collapse": false, + "editable": true, + "height": "460", + "panels": [ + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 17, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "pvp_tput_SRIOV", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"pvp_tput_SRIOV\" WHERE \"packet_size\" = '64' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "64" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "pvp_tput_SRIOV 64", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 18, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "pvp_tput_SRIOV", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"pvp_tput_SRIOV\" WHERE \"packet_size\" = '128' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "128" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "pvp_tput_SRIOV 128", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 19, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "pvp_tput_SRIOV", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"pvp_tput_SRIOV\" WHERE \"packet_size\" = '512' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "512" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "pvp_tput_SRIOV 512", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 20, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "pvp_tput_SRIOV", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"pvp_tput_SRIOV\" WHERE \"packet_size\" = '1024' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "1024" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "pvp_tput_SRIOV 1024", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "datasource": "yardstick-vtc", + "fill": 0, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null, + "threshold1": null, + "threshold1Color": "rgba(216, 200, 27, 0.27)", + "threshold2": null, + "threshold2Color": "rgba(234, 112, 112, 0.22)" + }, + "id": 21, + "leftYAxisLabel": "latency", + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "dsType": "influxdb", + "groupBy": [], + "measurement": "pvp_tput_SRIOV", + "policy": "default", + "query": "SELECT \"min_value\", \"avg_value\", \"max_value\" FROM \"pvp_tput_SRIOV\" WHERE \"packet_size\" = '1518' AND $timeFilter", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "min_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "avg_value" + ], + "type": "field" + } + ], + [ + { + "params": [ + "max_value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "packet_size", + "operator": "=", + "value": "1518" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "pvp_tput_SRIOV 1518", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": [ + "short", + "short" + ], + "yaxes": [ + { + "format": "ns", + "label": "latency", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "KVM4NFV-pvp-tput-SRIOV", + "titleSize": "h6" + } + ], + "time": { + "from": "now-7d", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "templating": { + "list": [] + }, + "annotations": { + "list": [] + }, + "refresh": "1d", + "schemaVersion": 8, + "version": 4, + "links": [] +} diff --git a/docker/Dockerfile b/docker/Dockerfile index 551693554..96a5d774d 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -15,51 +15,17 @@ ARG BRANCH=master # GIT repo directory ENV REPOS_DIR /home/opnfv/repos +ENV IMAGE_DIR /home/opnfv/images/ # Set work directory -WORKDIR /home/opnfv/repos # Yardstick repo ENV YARDSTICK_REPO_DIR ${REPOS_DIR}/yardstick ENV RELENG_REPO_DIR ${REPOS_DIR}/releng -RUN sed -i -e 's/^deb /deb [arch=amd64] /g' /etc/apt/sources.list -RUN sed -i -e 's/^deb-src /# deb-src /g' /etc/apt/sources.list -RUN echo "APT::Default-Release \"trusty\";" > /etc/apt/apt.conf.d/default-distro -RUN echo "\n\ -deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ xenial-updates universe \n\ -deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ trusty main universe multiverse restricted \n\ -deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ trusty-updates main universe multiverse restricted \n\ -deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ trusty-security main universe multiverse restricted \n\ -deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ trusty-proposed main universe multiverse restricted" >> /etc/apt/sources.list -RUN echo "vm.mmap_min_addr = 0" > /etc/sysctl.d/mmap_min_addr.conf -RUN dpkg --add-architecture arm64 -RUN apt-get update && apt-get install -y \ - qemu-user-static/xenial \ - libc6:arm64 \ - wget \ - expect \ - curl \ - git \ - sshpass \ - qemu-utils \ - kpartx \ - libffi-dev \ - libssl-dev \ - libzmq-dev \ - python \ - python-dev \ - libxml2-dev \ - libxslt1-dev \ - nginx \ - uwsgi \ - uwsgi-plugin-python \ - supervisor \ - python-setuptools && \ - easy_install -U setuptools==30.0.0 - -RUN apt-get -y autoremove && \ - apt-get clean +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} @@ -67,17 +33,17 @@ RUN git config --global http.sslVerify false RUN git clone --depth 1 -b $BRANCH https://gerrit.opnfv.org/gerrit/yardstick ${YARDSTICK_REPO_DIR} RUN git clone --depth 1 https://gerrit.opnfv.org/gerrit/releng ${RELENG_REPO_DIR} -# install yardstick + dependencies -RUN cd ${YARDSTICK_REPO_DIR} && easy_install -U pip -RUN cd ${YARDSTICK_REPO_DIR} && pip install -r requirements.txt -RUN cd ${YARDSTICK_REPO_DIR} && pip install . +WORKDIR ${YARDSTICK_REPO_DIR} +RUN ${YARDSTICK_REPO_DIR}/install.sh -RUN ${YARDSTICK_REPO_DIR}/api/api-prepare.sh +RUN echo "daemon off;" >> /etc/nginx/nginx.conf EXPOSE 5000 -ADD http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img /home/opnfv/images/ -ADD http://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img /home/opnfv/images/ +ADD http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img ${IMAGE_DIR} +ADD http://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img ${IMAGE_DIR} COPY ./exec_tests.sh /usr/local/bin/ + +WORKDIR ${REPOS_DIR} CMD ["/usr/bin/supervisord"] diff --git a/docs/testing/user/userguide/04-installation.rst b/docs/testing/user/userguide/04-installation.rst index 7ea40eddd..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 @@ -212,9 +222,9 @@ The created image can be added to OpenStack using the ``glance image-create`` or --file /tmp/workspace/yardstick/yardstick-image.img .. _`Cirros 0.3.5`: http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img -.. _`Ubuntu 14.04`: https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img +.. _`Ubuntu 16.04`: https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img -Some Yardstick test cases use a `Cirros 0.3.5`_ image and/or a `Ubuntu 14.04`_ image. Add Cirros and Ubuntu images to OpenStack:: +Some Yardstick test cases use a `Cirros 0.3.5`_ image and/or a `Ubuntu 16.04`_ image. Add Cirros and Ubuntu images to OpenStack:: openstack image create \ --disk-format qcow2 \ @@ -226,7 +236,7 @@ Some Yardstick test cases use a `Cirros 0.3.5`_ image and/or a `Ubuntu 14.04`_ i --disk-format qcow2 \ --container-format bare \ --file $ubuntu_image_file \ - Ubuntu-14.04 + Ubuntu-16.04 The third 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/etc/yardstick/yardstick.yaml b/etc/yardstick/yardstick.yaml new file mode 100644 index 000000000..5b39fa08b --- /dev/null +++ b/etc/yardstick/yardstick.yaml @@ -0,0 +1,33 @@ +dir: + conf: /etc/yardstick + repos: /home/opnfv/repos/yardstick + releng: /home/opnfv/repos/releng + log: /tmp/yardstick + +file: + openrc: /etc/yardstick/openstack.creds + fetch_script: utils/fetch_os_creds.sh + clean_image_script: tests/ci/clean_images.sh + load_image_script: tests/ci/load_images.sh + output_file: /tmp/yardstick.out + html_file: /tmp/yardstick.htm + +influxdb: + ip: 172.17.0.1 + port: 8086 + username: root + password: root + db_name: yardstick + image: tutum/influxdb + tag: 0.13 + +grafana: + ip: 172.17.0.1 + port: 3000 + username: admin + password: admin + image: grafana/grafana + tag: 3.1.1 + +api: + server_ip: 172.17.0.1 diff --git a/install.sh b/install.sh index a918340ca..dc2663628 100755 --- a/install.sh +++ b/install.sh @@ -8,8 +8,26 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +# fit for arm64 +source_file=/etc/apt/sources.list +sed -i -e 's/^deb \([^/[]\)/deb [arch=amd64] \1/g' "${source_file}" +sed -i -e 's/^deb-src /# deb-src /g' "${source_file}" +echo "APT::Default-Release \"trusty\";" > /etc/apt/apt.conf.d/default-distro + +sub_source_file=/etc/apt/sources.list.d/yardstick.list +touch "${sub_source_file}" +echo -e "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ xenial-updates universe +deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ trusty main universe multiverse restricted +deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ trusty-updates main universe multiverse restricted +deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ trusty-security main universe multiverse restricted +deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ trusty-proposed main universe multiverse restricted" > "${sub_source_file}" +echo "vm.mmap_min_addr = 0" > /etc/sysctl.d/mmap_min_addr.conf +dpkg --add-architecture arm64 + # install tools apt-get update && apt-get install -y \ + qemu-user-static/xenial \ + libc6:arm64 \ wget \ expect \ curl \ @@ -19,38 +37,29 @@ apt-get update && apt-get install -y \ kpartx \ libffi-dev \ libssl-dev \ + libzmq-dev \ python \ python-dev \ - python-pip \ - flake8 libxml2-dev \ libxslt1-dev \ nginx \ uwsgi \ uwsgi-plugin-python \ supervisor \ - python-setuptools && \ - easy_install -U setuptools + python-pip \ + vim apt-get -y autoremove && apt-get clean +git config --global http.sslVerify false -# fit for arm64 -source_file=/etc/apt/sources.list -sed -i -e 's/^deb \([^/[]\)/deb [arch=amd64] \1/g' "${source_file}" -sed -i -e 's/^deb-src /# deb-src /g' "${source_file}" - -sub_source_file=/etc/apt/sources.list.d/yardstick.list -touch "${sub_source_file}" -echo -e "deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ trusty main universe multiverse restricted -deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ trusty-updates main universe multiverse restricted -deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ trusty-security main universe multiverse restricted -deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ trusty-proposed main universe multiverse restricted" > "${sub_source_file}" -echo "vm.mmap_min_addr = 0" > /etc/sysctl.d/mmap_min_addr.conf -dpkg --add-architecture arm64 -apt-get install -y qemu-user-static libc6:arm64 # install yardstick + dependencies easy_install -U pip pip install -r requirements.txt -pip install . +pip install -e . + +/bin/bash "$(pwd)/api/api-prepare.sh" + +service nginx restart +uwsgi -i /etc/yardstick/yardstick.ini 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/storperf.yaml b/samples/storperf.yaml index d8641fc0c..5000759e0 100644 --- a/samples/storperf.yaml +++ b/samples/storperf.yaml @@ -17,7 +17,7 @@ scenarios: type: StorPerf options: agent_count: 1 - agent_image: "Ubuntu-14.04" + agent_image: "Ubuntu-16.04" public_network: "ext-net" volume_size: 2 # target: 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/ci/clean_images.sh b/tests/ci/clean_images.sh index 9e5e61edf..27da9e279 100755 --- a/tests/ci/clean_images.sh +++ b/tests/ci/clean_images.sh @@ -19,7 +19,7 @@ cleanup() return fi - for image in $(openstack image list | grep -e cirros-0.3.5 -e yardstick-image -e Ubuntu-14.04 \ + for image in $(openstack image list | grep -e cirros-0.3.5 -e yardstick-image -e Ubuntu-16.04 \ | awk '{print $2}'); do echo "Deleting image $image..." openstack image delete $image || true diff --git a/tests/ci/load_images.sh b/tests/ci/load_images.sh index 87599100b..2e22b83c2 100755 --- a/tests/ci/load_images.sh +++ b/tests/ci/load_images.sh @@ -193,7 +193,7 @@ load_ubuntu_image() echo echo "========== Loading ubuntu cloud image ==========" - local ubuntu_image_file=/home/opnfv/images/trusty-server-cloudimg-amd64-disk1.img + local ubuntu_image_file=/home/opnfv/images/xenial-server-cloudimg-amd64-disk1.img EXTRA_PARAMS="" # VPP requires guest memory to be backed by large pages @@ -206,7 +206,7 @@ load_ubuntu_image() --container-format bare \ $EXTRA_PARAMS \ --file $ubuntu_image_file \ - Ubuntu-14.04) + Ubuntu-16.04) echo "$output" UBUNTU_IMAGE_ID=$(echo "$output" | grep " id " | awk '{print $(NF-1)}') @@ -265,8 +265,6 @@ main() for filename in tests/opnfv/test_cases/*; do sed -i "s/cidr: '10.0.1.0\/24'/cidr: '10.3.1.0\/24'/g" "${filename}" done - # Update file changes - pip install -U . else load_cirros_image load_ubuntu_image diff --git a/tests/ci/yardstick-verify b/tests/ci/yardstick-verify index 2986c9f2f..096ea534f 100755 --- a/tests/ci/yardstick-verify +++ b/tests/ci/yardstick-verify @@ -97,18 +97,6 @@ error_exit() set -o errexit set -o pipefail -install_yardstick() -{ - echo - echo "========== Installing yardstick ==========" - - # uninstall previous version - pip uninstall -y yardstick || true - - # Install yardstick - pip install . -} - install_storperf() { # Install Storper on huawei-pod1 @@ -320,9 +308,6 @@ main() echo " external network: $net" done - # install yardstick - install_yardstick - source $YARDSTICK_REPO_DIR/tests/ci/clean_images.sh trap "error_exit" EXIT SIGTERM 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..a5a89e418 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_virtual/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_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_tc074.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc074.yaml index 14604f844..326fdf53b 100644 --- a/tests/opnfv/test_cases/opnfv_yardstick_tc074.yaml +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc074.yaml @@ -20,7 +20,7 @@ scenarios: type: StorPerf options: agent_count: 1 - agent_image: "Ubuntu-14.04" + agent_image: "Ubuntu-16.04" public_network: {{public_network}} volume_size: 4 block_sizes: "4096" diff --git a/tests/opnfv/test_suites/opnfv_os-ovn-nofeature-noha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-ovn-nofeature-noha_daily.yaml new file mode 100644 index 000000000..9e20186bb --- /dev/null +++ b/tests/opnfv/test_suites/opnfv_os-ovn-nofeature-noha_daily.yaml @@ -0,0 +1,62 @@ +############################################################################## +# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## +--- +# os-ovn-nofeature-noha daily task suite + +schema: "yardstick:suite:0.1" + +name: "os-ovn-nofeature-noha" +test_cases_dir: "tests/opnfv/test_cases/" +test_cases: +- + file_name: opnfv_yardstick_tc002.yaml +- + file_name: opnfv_yardstick_tc005.yaml +- + file_name: opnfv_yardstick_tc010.yaml +- + file_name: opnfv_yardstick_tc011.yaml +- + file_name: opnfv_yardstick_tc012.yaml +- + file_name: opnfv_yardstick_tc014.yaml +- + file_name: opnfv_yardstick_tc037.yaml +- + file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' +- + file_name: opnfv_yardstick_tc063.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC063"}' +- + file_name: opnfv_yardstick_tc069.yaml +- + file_name: opnfv_yardstick_tc070.yaml +- + file_name: opnfv_yardstick_tc071.yaml +- + file_name: opnfv_yardstick_tc072.yaml +- + file_name: opnfv_yardstick_tc075.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node1.LF"}' diff --git a/tests/unit/benchmark/contexts/test_heat.py b/tests/unit/benchmark/contexts/test_heat.py index 8f4852ca8..b56d0c86d 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..4a10761f7 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,16 @@ 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) 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,7 +229,22 @@ 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', 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/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..496ee770c 100644 --- a/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py +++ b/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py @@ -45,7 +45,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,13 +56,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_ip(p.server, "eth1") - mock_ssh.SSH().execute.assert_called_with( + mock_ssh.SSH.from_node().execute.assert_called_with( "ifconfig eth1 |grep 'inet addr' |awk '{print $2}' \ |cut -d ':' -f2 ") @@ -73,9 +73,9 @@ 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') + mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR') self.assertRaises(RuntimeError, p.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") - 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,9 +100,9 @@ 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') + mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR') self.assertRaises(RuntimeError, p.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_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/benchmark/scenarios/storage/test_storperf.py b/tests/unit/benchmark/scenarios/storage/test_storperf.py index adc9d47c6..00054d531 100644 --- a/tests/unit/benchmark/scenarios/storage/test_storperf.py +++ b/tests/unit/benchmark/scenarios/storage/test_storperf.py @@ -55,7 +55,7 @@ def mocked_requests_job_get(*args, **kwargs): self.status_code = status_code return MockResponseJobGet( - '{"status": "completed",\ + '{"Status": "Completed",\ "_ssd_preconditioning.queue-depth.8.block-size.16384.duration": 6}', 200) @@ -171,7 +171,7 @@ class StorPerfTestCase(unittest.TestCase): s = storperf.StorPerf(args, self.ctx) s.setup_done = True - sample_output = '{"status": "completed",\ + sample_output = '{"Status": "Completed",\ "_ssd_preconditioning.queue-depth.8.block-size.16384.duration": 6}' expected_result = jsonutils.loads(sample_output) diff --git a/tests/unit/common/test_utils.py b/tests/unit/common/test_utils.py index 267c71312..8f52b53b0 100644 --- a/tests/unit/common/test_utils.py +++ b/tests/unit/common/test_utils.py @@ -87,24 +87,21 @@ class ImportModulesFromPackageTestCase(unittest.TestCase): class GetParaFromYaml(unittest.TestCase): - def test_get_para_from_yaml_file_not_exist(self): - file_path = '/etc/yardstick/hello.yaml' - args = 'hello.world' - para = utils.get_para_from_yaml(file_path, args) - self.assertIsNone(para) - - def test_get_para_from_yaml_para_not_found(self): + @mock.patch('yardstick.common.utils.os.environ.get') + def test_get_param_para_not_found(self, get_env): file_path = 'config_sample.yaml' - file_path = self._get_file_abspath(file_path) + get_env.return_value = self._get_file_abspath(file_path) args = 'releng.file' - self.assertIsNone(utils.get_para_from_yaml(file_path, args)) + default = 'hello' + self.assertTrue(utils.get_param(args, default), default) - def test_get_para_from_yaml_para_exists(self): + @mock.patch('yardstick.common.utils.os.environ.get') + def test_get_param_para_exists(self, get_env): file_path = 'config_sample.yaml' - file_path = self._get_file_abspath(file_path) + get_env.return_value = self._get_file_abspath(file_path) args = 'releng.dir' para = '/home/opnfv/repos/releng' - self.assertEqual(para, utils.get_para_from_yaml(file_path, args)) + self.assertEqual(para, utils.get_param(args)) def _get_file_abspath(self, filename): curr_path = os.path.dirname(os.path.abspath(__file__)) 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..2f9c800aa 100644 --- a/tests/unit/orchestrator/test_heat.py +++ b/tests/unit/orchestrator/test_heat.py @@ -13,6 +13,7 @@ import unittest import uuid +import mock from yardstick.orchestrator import heat @@ -24,3 +25,61 @@ 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']) + +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/__init__.py b/yardstick/__init__.py index e19be36fd..2f5ae9feb 100644 --- a/yardstick/__init__.py +++ b/yardstick/__init__.py @@ -20,8 +20,8 @@ from yardstick.common import utils as yardstick_utils # without having to install apexlake. sys.path.append(os.path.dirname(apexlake.__file__)) -yardstick_utils.makedirs(constants.YARDSTICK_LOG_DIR) -LOG_FILE = os.path.join(constants.YARDSTICK_LOG_DIR, 'yardstick.log') +yardstick_utils.makedirs(constants.LOG_DIR) +LOG_FILE = os.path.join(constants.LOG_DIR, 'yardstick.log') LOG_FORMATTER = ('%(asctime)s ' '%(name)s %(filename)s:%(lineno)d ' '%(levelname)s %(message)s') diff --git a/yardstick/benchmark/contexts/heat.py b/yardstick/benchmark/contexts/heat.py index 571a769eb..d5dccd2a2 100644 --- a/yardstick/benchmark/contexts/heat.py +++ b/yardstick/benchmark/contexts/heat.py @@ -25,7 +25,7 @@ from yardstick.benchmark.contexts.model import PlacementGroup, ServerGroup from yardstick.benchmark.contexts.model import Server from yardstick.benchmark.contexts.model import update_scheduler_hints from yardstick.orchestrator.heat import HeatTemplate, get_short_key_uuid -from yardstick.definitions import YARDSTICK_ROOT_PATH +from yardstick.common.constants import YARDSTICK_ROOT_PATH LOG = logging.getLogger(__name__) @@ -133,8 +133,11 @@ class HeatContext(Context): template.add_security_group(self.secgroup_name) for network in self.networks: - template.add_network(network.stack_name) - template.add_subnet(network.subnet_stack_name, 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) if network.router: diff --git a/yardstick/benchmark/contexts/model.py b/yardstick/benchmark/contexts/model.py index 4873afde3..71ee1f3c2 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, @@ -226,7 +228,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: diff --git a/yardstick/benchmark/contexts/node.py b/yardstick/benchmark/contexts/node.py index 8bf915609..baa1cf5d6 100644 --- a/yardstick/benchmark/contexts/node.py +++ b/yardstick/benchmark/contexts/node.py @@ -19,7 +19,7 @@ import pkg_resources from yardstick import ssh from yardstick.benchmark.contexts.base import Context -from yardstick.common.constants import YARDSTICK_ROOT_PATH +from yardstick.common import constants as consts LOG = logging.getLogger(__name__) @@ -57,7 +57,7 @@ class NodeContext(Context): except IOError as ioerror: if ioerror.errno == errno.ENOENT: self.file_path = \ - os.path.join(YARDSTICK_ROOT_PATH, self.file_path) + os.path.join(consts.YARDSTICK_ROOT_PATH, self.file_path) cfg = self.read_config_file() else: raise @@ -108,8 +108,7 @@ class NodeContext(Context): def _do_ansible_job(self, path): cmd = 'ansible-playbook -i inventory.ini %s' % path - base = '/home/opnfv/repos/yardstick/ansible' - p = subprocess.Popen(cmd, shell=True, cwd=base) + p = subprocess.Popen(cmd, shell=True, cwd=consts.ANSIBLE_DIR) p.communicate() def _get_server(self, attr_name): @@ -164,7 +163,7 @@ class NodeContext(Context): def _execute_local_script(self, info): script, options = self._get_script(info) - script = os.path.join(YARDSTICK_ROOT_PATH, script) + script = os.path.join(consts.YARDSTICK_ROOT_PATH, script) cmd = ['bash', script, options] p = subprocess.Popen(cmd, stdout=subprocess.PIPE) @@ -179,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/contexts/standalone.py b/yardstick/benchmark/contexts/standalone.py index 674e57f54..78eaac7ee 100644 --- a/yardstick/benchmark/contexts/standalone.py +++ b/yardstick/benchmark/contexts/standalone.py @@ -20,7 +20,7 @@ import collections import yaml from yardstick.benchmark.contexts.base import Context -from yardstick.definitions import YARDSTICK_ROOT_PATH +from yardstick.common.constants import YARDSTICK_ROOT_PATH LOG = logging.getLogger(__name__) 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/core/task.py b/yardstick/benchmark/core/task.py index 40122764c..3a151dbba 100644 --- a/yardstick/benchmark/core/task.py +++ b/yardstick/benchmark/core/task.py @@ -503,7 +503,7 @@ def check_environment(): auth_url = os.environ.get('OS_AUTH_URL', None) if not auth_url: try: - source_env(constants.OPENSTACK_RC_FILE) + source_env(constants.OPENRC) except IOError as e: if e.errno != errno.EEXIST: raise 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..f7683fd84 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") @@ -90,25 +85,24 @@ 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( + self.jump_connection.execute( "/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( + _execute_shell_command( "/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 24888af98..35cbccd6e 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!") @@ -40,19 +35,19 @@ class GeneralAttacker(BaseAttacker): if "action_parameter" in self._config: actionParameter = self._config['action_parameter'] str = util.buildshellparams(actionParameter) - LOG.debug("inject parameter is: {0}".format(actionParameter)) - LOG.debug("inject parameter values are: {0}" - .format(list(actionParameter.values()))) - l = list(item for item in actionParameter.values()) + LOG.debug("inject parameter is: %s", actionParameter) + LOG.debug("inject parameter values are: %s", + list(actionParameter.values())) + l = list(actionParameter.values()) self.action_param = str.format(*l) if "rollback_parameter" in self._config: rollbackParameter = self._config['rollback_parameter'] str = util.buildshellparams(rollbackParameter) - LOG.debug("recover parameter is: {0}".format(rollbackParameter)) - LOG.debug("recover parameter values are: {0}". - format(list(rollbackParameter.values()))) - l = list(item for item in rollbackParameter.values()) + LOG.debug("recover parameter is: %s", rollbackParameter) + LOG.debug("recover parameter values are: %s", + list(rollbackParameter.values())) + l = list(rollbackParameter.values()) self.rollback_param = str.format(*l) self.fault_cfg = BaseAttacker.attacker_cfgs.get(self.attack_key) @@ -77,10 +72,9 @@ class GeneralAttacker(BaseAttacker): "/bin/bash -s ", stdin=stdin_file) - LOG.debug("the inject_fault's exit status is: {0}".format(exit_status)) + LOG.debug("the inject_fault's exit status is: %s", exit_status) if exit_status == 0: - LOG.debug("success,the inject_fault's output is: {0}" - .format(stdout)) + LOG.debug("success,the inject_fault's output is: %s", stdout) else: LOG.error( "the inject_fault's error, stdout:%s, stderr:%s", diff --git a/yardstick/benchmark/scenarios/availability/attacker/attacker_process.py b/yardstick/benchmark/scenarios/availability/attacker/attacker_process.py index 521c57931..93375a6dc 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!") @@ -52,7 +47,7 @@ class ProcessAttacker(BaseAttacker): "/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: 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..7c275f7ce 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 | wc -l 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..c6c5a75a1 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!") diff --git a/yardstick/benchmark/scenarios/availability/monitor/monitor_process.py b/yardstick/benchmark/scenarios/availability/monitor/monitor_process.py index 10b398e9b..ca5cac1ff 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( @@ -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..49c63cc75 100644 --- a/yardstick/benchmark/scenarios/availability/operation/operation_general.py +++ b/yardstick/benchmark/scenarios/availability/operation/operation_general.py @@ -26,13 +26,8 @@ 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") - 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!") @@ -71,7 +66,7 @@ class GeneralOperaion(BaseOperation): stdin=stdin_file) 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", 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..ff6017b88 100644 --- a/yardstick/benchmark/scenarios/availability/result_checker/result_checker_general.py +++ b/yardstick/benchmark/scenarios/availability/result_checker/result_checker_general.py @@ -26,13 +26,8 @@ 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") - 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!") 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..594c6091e 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): @@ -172,14 +165,15 @@ class Cyclictest(base.Scenario): 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 0b70629f8..f57ca843a 100644 --- a/yardstick/benchmark/scenarios/networking/pktgen_dpdk.py +++ b/yardstick/benchmark/scenarios/networking/pktgen_dpdk.py @@ -45,28 +45,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 @@ -137,10 +125,12 @@ class PktgenDPDKLatency(base.Scenario): # wait for finishing test time.sleep(1) - cmd = "cat ~/result.log -vT \ - |awk '{match($0,/\[8;40H +[0-9]+/)} \ - {print substr($0,RSTART,RLENGTH)}' \ - |grep -v ^$ |awk '{if ($2 != 0) print $2}'" + cmd = r"""\ +cat ~/result.log -vT \ +|awk '{match($0,/\[8;40H +[0-9]+/)} \ +{print substr($0,RSTART,RLENGTH)}' \ +|grep -v ^$ |awk '{if ($2 != 0) print $2}'\ +""" client_status, client_stdout, client_stderr = self.client.execute(cmd) if client_status: 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/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/benchmark/scenarios/storage/storperf.py b/yardstick/benchmark/scenarios/storage/storperf.py index 6ea035133..672cfaba2 100644 --- a/yardstick/benchmark/scenarios/storage/storperf.py +++ b/yardstick/benchmark/scenarios/storage/storperf.py @@ -117,7 +117,8 @@ class StorPerf(base.Scenario): """Query the status of the supplied job_id and report on metrics""" LOG.info("Fetching report for %s...", job_id) report_res = requests.get('http://{}:5000/api/v1.0/jobs'.format - (self.target), params={'id': job_id}) + (self.target), + params={'id': job_id, 'type': 'status'}) report_res_content = jsonutils.loads( report_res.content) @@ -126,10 +127,10 @@ class StorPerf(base.Scenario): raise RuntimeError("Failed to fetch report, error message:", report_res_content["message"]) else: - job_status = report_res_content["status"] + job_status = report_res_content["Status"] LOG.debug("Job is: %s...", job_status) - self.job_completed = job_status == "completed" + self.job_completed = job_status == "Completed" # TODO: Support using StorPerf ReST API to read Job ETA. diff --git a/yardstick/common/constants.py b/yardstick/common/constants.py index 6550cc8fd..cb98c356d 100644 --- a/yardstick/common/constants.py +++ b/yardstick/common/constants.py @@ -9,61 +9,78 @@ from __future__ import absolute_import import os -DOCKER_URL = 'unix://var/run/docker.sock' - -# database config -USER = 'root' -PASSWORD = 'root' -DATABASE = 'yardstick' - -INFLUXDB_IMAGE = 'tutum/influxdb' -INFLUXDB_TAG = '0.13' +from yardstick.common.utils import get_param -GRAFANA_IMAGE = 'grafana/grafana' -GRAFANA_TAGS = '3.1.1' dirname = os.path.dirname abspath = os.path.abspath join = os.path.join sep = os.path.sep -INSTALLERS = ['apex', 'compass', 'fuel', 'joid'] - +try: + SERVER_IP = get_param('api.server_ip') +except KeyError: + try: + from pyroute2 import IPDB + except ImportError: + SERVER_IP = '172.17.0.1' + else: + with IPDB() as ip: + SERVER_IP = ip.routes['default'].gateway + +# dir +CONF_DIR = get_param('dir.conf', '/etc/yardstick') +REPOS_DIR = get_param('dir.repos', '/home/opnfv/repos/yardstick') +RELENG_DIR = get_param('dir.releng', '/home/opnfv/repos/releng') +LOG_DIR = get_param('dir.log', '/tmp/yardstick/') YARDSTICK_ROOT_PATH = dirname(dirname(dirname(abspath(__file__)))) + sep - +CONF_SAMPLE_DIR = join(REPOS_DIR, 'etc/yardstick/') +ANSIBLE_DIR = join(REPOS_DIR, 'ansible') +SAMPLE_CASE_DIR = join(REPOS_DIR, 'samples') TESTCASE_DIR = join(YARDSTICK_ROOT_PATH, 'tests/opnfv/test_cases/') - TESTSUITE_DIR = join(YARDSTICK_ROOT_PATH, 'tests/opnfv/test_suites/') -YARDSTICK_REPOS_DIR = '/home/opnfv/repos/yardstick' - -YARDSTICK_LOG_DIR = '/tmp/yardstick/' - -YARDSTICK_CONFIG_DIR = '/etc/yardstick/' - -YARDSTICK_CONFIG_FILE = join(YARDSTICK_CONFIG_DIR, 'yardstick.conf') - -YARDSTICK_CONFIG_SAMPLE_DIR = join(YARDSTICK_ROOT_PATH, 'etc/yardstick/') - -YARDSTICK_CONFIG_SAMPLE_FILE = join(YARDSTICK_CONFIG_SAMPLE_DIR, - 'yardstick.conf.sample') - -RELENG_DIR = '/home/opnfv/repos/releng' - -OS_FETCH_SCRIPT = 'utils/fetch_os_creds.sh' - -CLEAN_IMAGES_SCRIPT = 'tests/ci/clean_images.sh' - -LOAD_IMAGES_SCRIPT = 'tests/ci/load_images.sh' - -OPENSTACK_RC_FILE = join(YARDSTICK_CONFIG_DIR, 'openstack.creds') +# file +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') +FETCH_SCRIPT = join(RELENG_DIR, FETCH_SCRIPT) +CLEAN_IMAGES_SCRIPT = get_param('file.clean_image_script', + 'tests/ci/clean_images.sh') +CLEAN_IMAGES_SCRIPT = join(REPOS_DIR, CLEAN_IMAGES_SCRIPT) +LOAD_IMAGES_SCRIPT = get_param('file.load_image_script', + 'tests/ci/load_images.sh') +LOAD_IMAGES_SCRIPT = join(REPOS_DIR, LOAD_IMAGES_SCRIPT) +DEFAULT_OUTPUT_FILE = get_param('file.output_file', '/tmp/yardstick.out') +DEFAULT_HTML_FILE = get_param('file.html_file', '/tmp/yardstick.htm') + +# influxDB +INFLUXDB_IP = get_param('influxdb.ip', SERVER_IP) +INFLUXDB_PORT = get_param('influxdb.port', 8086) +INFLUXDB_USER = get_param('influxdb.username', 'root') +INFLUXDB_PASS = get_param('influxdb.password', 'root') +INFLUXDB_DB_NAME = get_param('influxdb.db_name', 'yardstick') +INFLUXDB_IMAGE = get_param('influxdb.image', 'tutum/influxdb') +INFLUXDB_TAG = get_param('influxdb.tag', '0.13') + +# grafana +GRAFANA_IP = get_param('grafana.ip', SERVER_IP) +GRAFANA_PORT = get_param('grafana.port', 3000) +GRAFANA_USER = get_param('grafana.username', 'admin') +GRAFANA_PASS = get_param('grafana.password', 'admin') +GRAFANA_IMAGE = get_param('grafana.image', 'grafana/grafana') +GRAFANA_TAG = get_param('grafana.tag', '3.1.1') + +# api +DOCKER_URL = 'unix://var/run/docker.sock' +INSTALLERS = ['apex', 'compass', 'fuel', 'joid'] +SQLITE = 'sqlite:////tmp/yardstick.db' BASE_URL = 'http://localhost:5000' ENV_ACTION_API = BASE_URL + '/yardstick/env/action' ASYNC_TASK_API = BASE_URL + '/yardstick/asynctask' -SQLITE = 'sqlite:////tmp/yardstick.db' - -DEFAULT_OUTPUT_FILE = '/tmp/yardstick.out' - -DEFAULT_HTML_FILE = '/tmp/yardstick.htm' +# general +TESTCASE_PRE = 'opnfv_yardstick_' +TESTSUITE_PRE = 'opnfv_' 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 d2be8000e..7035f3374 100644 --- a/yardstick/common/utils.py +++ b/yardstick/common/utils.py @@ -84,26 +84,30 @@ def import_modules_from_package(package): try_append_module(module_name, sys.modules) -def get_para_from_yaml(file_path, args): - - def func(a, b): - if a is None: - return None - return a.get(b) - - if os.path.exists(file_path): +def parse_yaml(file_path): + try: with open(file_path) as f: value = yaml.safe_load(f) - value = reduce(func, args.split('.'), value) + except IOError: + return {} + except OSError as e: + if e.errno != errno.EEXIST: + raise + else: + return value - if value is None: - print('parameter not found') - return None - return value - else: - print('file not exist') - return None +def get_param(key, default=''): + + conf_file = os.environ.get('CONF_FILE', '/etc/yardstick/yardstick.yaml') + + conf = parse_yaml(conf_file) + try: + return reduce(lambda a, b: a[b], key.split('.'), conf) + except KeyError: + if not default: + raise + return default def makedirs(d): diff --git a/yardstick/definitions.py b/yardstick/definitions.py deleted file mode 100644 index 64a4a80d4..000000000 --- a/yardstick/definitions.py +++ /dev/null @@ -1,14 +0,0 @@ -############################################################################## -# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## -from __future__ import absolute_import -import os - -dirname = os.path.dirname -YARDSTICK_ROOT_PATH = dirname(dirname(os.path.abspath(__file__))) -YARDSTICK_ROOT_PATH += os.path.sep 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..fa2da5e11 100644 --- a/yardstick/orchestrator/heat.py +++ b/yardstick/orchestrator/heat.py @@ -31,6 +31,8 @@ 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] @@ -188,13 +190,23 @@ class HeatTemplate(HeatObject): log.debug("template object '%s' created", name) - def add_network(self, 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) - self.resources[name] = { - 'type': 'OS::Neutron::Net', - 'properties': {'name': 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""" @@ -228,7 +240,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 +255,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 +264,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 +280,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'] = \ 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) |