summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorliyin <liyin11@huawei.com>2017-02-16 12:30:12 +0800
committerAce Lee <liyin11@huawei.com>2017-02-17 06:15:45 +0000
commit58c97253eaaf72f73924837fca4ddcb5cb8a5d94 (patch)
tree506b5cf15b80578433600693434aa54f473a8d26
parentbe6453bb485c720278c5f6a45a5194391e454ce4 (diff)
stress test of ping testcase
JIRA:BOTTLENECK-136 those code will add a new testcase: posca_stress_ping This will use docker python client to realize the fountion of calling yardstick to test. And yardstick will create several VM pairs to test. Because of the limites of quotas, we now create 2,5,10 VM pairs. Change-Id: I096250c547cd598c7c632a884b31d81c2be125f8 Signed-off-by: liyin <liyin11@huawei.com>
-rw-r--r--docker/Dockerfile2
-rw-r--r--docker/bottleneck-compose/docker-compose.yml11
-rw-r--r--requirements.txt1
-rw-r--r--setup.py3
-rwxr-xr-xtestsuites/posca/run_posca.py5
-rw-r--r--testsuites/posca/testcase_cfg/posca_stress_ping.yaml22
-rwxr-xr-xtestsuites/posca/testcase_dashboard/system_bandwidth.py7
-rw-r--r--testsuites/posca/testcase_script/posca_stress_ping.py94
-rw-r--r--utils/logger.py2
9 files changed, 139 insertions, 8 deletions
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 7e7793ee..fc3451ba 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -36,6 +36,7 @@ RUN apt-get update && apt-get install -y \
python \
python-dev \
python-pip \
+ vim \
python-setuptools && \
easy_install -U setuptools==30.0.0
@@ -50,3 +51,4 @@ RUN git clone https://gerrit.opnfv.org/gerrit/releng ${RELENG_REPO_DIR}
RUN easy_install pytz
RUN pip install -r ${REPOS_DIR}/bottlenecks/requirements.txt
+RUN pip install -U /home/opnfv/bottlenecks
diff --git a/docker/bottleneck-compose/docker-compose.yml b/docker/bottleneck-compose/docker-compose.yml
index b6e8b3d0..6dbf8999 100644
--- a/docker/bottleneck-compose/docker-compose.yml
+++ b/docker/bottleneck-compose/docker-compose.yml
@@ -19,9 +19,20 @@ yardstick:
image: opnfv/yardstick:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
+ - /tmp/:/tmp/
ports:
- "8888:5000"
+ privileged: true
+ environment:
+ - INSTALLER_IP=192.168.200.2
+ - INSTALLER_TYPE=compass
bottlenecks:
restart: always
build: bottlenecks/
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ - /tmp/:/tmp/
+ environment:
+ - INSTALLER_IP=192.168.200.2
+ - INSTALLER_TYPE=compass
diff --git a/requirements.txt b/requirements.txt
index f732bcc8..39808c77 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -79,3 +79,4 @@ warlock==1.2.0
wrapt==1.10.6
pyroute2==0.4.10
elasticsearch==5.0.1
+docker
diff --git a/setup.py b/setup.py
index 5e32b238..8ca86175 100644
--- a/setup.py
+++ b/setup.py
@@ -16,7 +16,7 @@ from setuptools import setup, find_packages
setup(
name="bottlenecks",
version="master",
- py_modules=['bottlenecks_cli'],
+ py_modules=['cli/bottlenecks_cli'],
packages=find_packages(),
include_package_data=True,
package_data={
@@ -43,4 +43,3 @@ setup(
],
},
)
-
diff --git a/testsuites/posca/run_posca.py b/testsuites/posca/run_posca.py
index 72a0d4c2..3e23a37a 100755
--- a/testsuites/posca/run_posca.py
+++ b/testsuites/posca/run_posca.py
@@ -16,6 +16,7 @@ and if you run "python run_posca", this will run testcase,
posca_factor_system_bandwidth by default.'''
import importlib
+import sys
import utils.parser as conf_parser
import utils.logger as log
INTERPRETER = "/usr/bin/python"
@@ -47,8 +48,8 @@ def posca_run(test_level, test_name):
def main():
- test_level = "testcase"
- test_name = "posca_factor_system_bandwidth"
+ test_level = sys.argv[1]
+ test_name = sys.argv[2]
posca_run(test_level, test_name)
diff --git a/testsuites/posca/testcase_cfg/posca_stress_ping.yaml b/testsuites/posca/testcase_cfg/posca_stress_ping.yaml
new file mode 100644
index 00000000..a60a8832
--- /dev/null
+++ b/testsuites/posca/testcase_cfg/posca_stress_ping.yaml
@@ -0,0 +1,22 @@
+# Sample stress task config file
+# Three scenarios run in parallel pinging one target vm.
+# Multiple context are used to specify the host and target VMs.
+
+load_manager:
+ scenarios:
+ tool: ping
+ test_times: 100
+ package_size:
+ num_stack: 2, 5, 10
+ package_loss: 10%
+
+ contexts:
+ stack_create: yardstick
+ flavor:
+ yardstick_test_ip:
+ yardstick_test_dir: "samples"
+ yardstick_testcase: "ping_bottlenecks"
+
+dashboard:
+ dashboard: "y"
+ dashboard_ip:
diff --git a/testsuites/posca/testcase_dashboard/system_bandwidth.py b/testsuites/posca/testcase_dashboard/system_bandwidth.py
index e95ff214..155ca2df 100755
--- a/testsuites/posca/testcase_dashboard/system_bandwidth.py
+++ b/testsuites/posca/testcase_dashboard/system_bandwidth.py
@@ -17,9 +17,10 @@ from utils.parser import Parser as conf_parser
LOG = log.Logger(__name__).getLogger()
config = ConfigParser.ConfigParser()
es = Elasticsearch()
-dashboard_dir = os.path.join(conf_parser.test_dir,
- "posca",
- "testcase_dashboard")
+dashboard_path = os.path.join(conf_parser.test_dir,
+ "posca",
+ "testcase_dashboard")
+dashboard_dir = dashboard_path + "/"
def dashboard_send_data(runner_config, test_data):
diff --git a/testsuites/posca/testcase_script/posca_stress_ping.py b/testsuites/posca/testcase_script/posca_stress_ping.py
new file mode 100644
index 00000000..abf8044a
--- /dev/null
+++ b/testsuites/posca/testcase_script/posca_stress_ping.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python
+##############################################################################
+# 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
+##############################################################################
+'''This file realize the function of run posca ping stress test script
+This file contain several part:
+Frist is create a script to realize several threading run'''
+
+import utils.logger as log
+import uuid
+import json
+import os
+import multiprocessing
+import utils.infra_setup.runner.yardstick as Runner
+from utils.parser import Parser as conf_parser
+import docker
+# --------------------------------------------------
+# logging configuration
+# --------------------------------------------------
+LOG = log.Logger(__name__).getLogger()
+
+test_dict = {
+ "action": "runTestCase",
+ "args": {
+ "opts": {
+ "task-args": {}
+ },
+ "testcase": "ping_bottlenecks"
+ }
+}
+
+
+def env_pre(con_dic):
+ Runner.yardstick_env_prepare(con_dic['contexts'])
+
+
+def do_test(test_config, con_dic):
+ out_file = ("/tmp/yardstick_" + str(uuid.uuid4()) + ".out")
+ client = docker.from_env()
+ con = client.containers.get('bottleneckcompose_yardstick_1')
+ cmd = ('yardstick task start /home/opnfv/repos/yardstick/'
+ 'samples/ping_bottlenecks.yaml --output-file ' + out_file)
+ stdout = con.exec_run(cmd)
+ LOG.debug(stdout)
+ with open(out_file) as f:
+ data = json.load(f)
+ if data["status"] == 1:
+ LOG.info("yardstick run success")
+ out_value = 1
+ else:
+ LOG.error("yardstick error exit")
+ out_value = 0
+ os.remove(out_file)
+ return out_value
+
+
+def func_run(condic):
+ test_config = {}
+ test_date = do_test(test_config, condic)
+ return test_date
+
+
+def run(test_config):
+ con_dic = test_config["load_manager"]
+ test_num = con_dic['scenarios']['num_stack'].split(',')
+ if con_dic["contexts"]["yardstick_test_ip"] is None:
+ con_dic["contexts"]["yardstick_test_ip"] =\
+ conf_parser.ip_parser("yardstick_test_ip")
+
+ env_pre(con_dic)
+
+ for num in test_num:
+ result = []
+ out_num = 0
+ pool = multiprocessing.Pool(processes=num)
+ for i in range(0, int(num)):
+ result.append(pool.apply_async(func_run, (con_dic, )))
+ pool.close()
+ pool.join()
+ for res in result:
+ out_num = out_num + float(res.get())
+ LOG.info("%s thread success %d times" % (num, out_num))
+ if out_num < num:
+ success_rate = ('%d/%d' % (out_num, num))
+ LOG.error('error thread: %d '
+ 'the successful rate is %s'
+ % (num - out_num, success_rate))
+ break
+ LOG.info('END POSCA stress ping test')
diff --git a/utils/logger.py b/utils/logger.py
index 5ce64238..9faaea53 100644
--- a/utils/logger.py
+++ b/utils/logger.py
@@ -36,7 +36,7 @@ class Logger:
ch = logging.StreamHandler()
log_formatter = ('%(asctime)s '
- '%(name)s %(filename)s:%(lineno)d '
+ '%(filename)s:%(lineno)d '
'%(levelname)s %(message)s')
formatter = logging.Formatter(log_formatter)