bottlenecks offiline support
[bottlenecks.git] / testsuites / posca / testcase_script / posca_factor_ping.py
index e46a919..ea79d3a 100644 (file)
@@ -15,12 +15,15 @@ import utils.logger as log
 import uuid
 import json
 import os
+import sys
 import time
-import multiprocessing
+import threading
 import datetime
+import Queue
 from utils.parser import Parser as conf_parser
 import utils.env_prepare.quota_prepare as quota_prepare
 import utils.env_prepare.stack_prepare as stack_prepare
+import utils.infra_setup.runner.yardstick as runner_yardstick
 
 import testsuites.posca.testcase_dashboard.posca_stress_ping as DashBoard
 import utils.infra_setup.runner.docker_env as docker_env
@@ -40,6 +43,10 @@ test_dict = {
 }
 testfile = os.path.basename(__file__)
 testcase, file_format = os.path.splitext(testfile)
+cidr = "/home/opnfv/repos/yardstick/samples/storage_bottlenecks.yaml"
+runner_DEBUG = True
+
+q = Queue.Queue()
 
 
 def env_pre(test_config):
@@ -48,56 +55,57 @@ def env_pre(test_config):
         test_yardstick = True
     stack_prepare._prepare_env_daemon(test_yardstick)
     quota_prepare.quota_env_prepare()
-    cmd = ('yardstick env prepare')
-    LOG.info("yardstick envrionment prepare!")
+    LOG.info("yardstick environment prepare!")
     if(test_config["contexts"]['yardstick_envpre']):
-        yardstick_container = docker_env.yardstick_info['container']
-        stdout = docker_env.docker_exec_cmd(yardstick_container, cmd)
+        stdout = runner_yardstick.yardstick_image_prepare()
         LOG.debug(stdout)
 
 
-def do_test(test_config, con_dic):
+def do_test():
+    func_name = sys._getframe().f_code.co_name
     out_file = ("/tmp/yardstick_" + str(uuid.uuid4()) + ".out")
+    parameter_info = {}
     yardstick_container = docker_env.yardstick_info['container']
-    cmd = ('yardstick task start /home/opnfv/repos/yardstick/'
-           'samples/ping_bottlenecks.yaml --output-file ' + out_file)
+    cmd = runner_yardstick.yardstick_command_parser(debug=runner_DEBUG,
+                                                    cidr=cidr,
+                                                    outfile=out_file,
+                                                    parameter=parameter_info)
     stdout = docker_env.docker_exec_cmd(yardstick_container, cmd)
     LOG.info(stdout)
     out_value = 0
-    loop_walue = 0
-    while loop_walue < 150:
+    loop_value = 0
+    while loop_value < 60:
         time.sleep(2)
-        loop_walue = loop_walue + 1
+        loop_value = loop_value + 1
         with open(out_file) as f:
             data = json.load(f)
-            if data["status"] == 1:
-                if data["result"]["criteria"] == "PASS":
-                    LOG.info("yardstick run success")
-                    out_value = 1
-                else:
-                    LOG.error("task error exit")
-                    out_value = 0
+            if data["result"]["criteria"] == "PASS":
+                LOG.info("yardstick run success")
+                out_value = 1
                 break
-            elif data["status"] == 2:
+            else:
                 LOG.error("yardstick error exit")
+                out_value = 0
+                break
+    q.put((out_value, func_name))
     return out_value
 
 
-def config_to_result(num, out_num, during_date):
+def config_to_result(num, out_num, during_date, result):
     testdata = {}
     test_result = {}
-    test_result["number_of_users"] = float(num)
+    test_result["number_of_stacks"] = float(num)
     test_result["success_times"] = out_num
     test_result["success_rate"] = out_num / num
     test_result["duration_time"] = during_date
+    test_result["result"] = result
     testdata["data_body"] = test_result
     testdata["testcase"] = testcase
     return testdata
 
 
 def func_run(condic):
-    test_config = {}
-    test_date = do_test(test_config, condic)
+    test_date = do_test()
     return test_date
 
 
@@ -115,38 +123,46 @@ def run(test_config):
         LOG.info("Create Dashboard data")
         DashBoard.posca_stress_ping(test_config["contexts"])
 
-    LOG.info("bottlenecks envrionment prepare!")
     env_pre(test_config)
-    LOG.info("yardstick envrionment prepare done!")
+    LOG.info("yardstick environment prepare done!")
 
     for value in test_num:
         result = []
         out_num = 0
         num = int(value)
-        pool = multiprocessing.Pool(processes=num)
+        # pool = multiprocessing.Pool(processes=num)
+        threadings = []
         LOG.info("begin to run %s thread" % num)
 
         starttime = datetime.datetime.now()
-        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())
+
+        for i in xrange(0, num):
+            temp_thread = threading.Thread(target=func_run, args=(str(i),))
+            threadings.append(temp_thread)
+            temp_thread.start()
+        for one_thread in threadings:
+            one_thread.join()
+        while not q.empty():
+            result.append(q.get())
+        for item in result:
+            out_num = out_num + float(item[0])
 
         endtime = datetime.datetime.now()
         LOG.info("%s thread success %d times" % (num, out_num))
         during_date = (endtime - starttime).seconds
 
-        data_reply = config_to_result(num, out_num, during_date)
+        if out_num >= con_dic["scenarios"]['threshhold']:
+            criteria_result = "PASS"
+        else:
+            criteria_result = "FAIL"
+
+        data_reply = config_to_result(num, out_num, during_date,
+                                      criteria_result)
         if "dashboard" in test_config["contexts"].keys():
             DashBoard.dashboard_send_data(test_config['contexts'], data_reply)
         conf_parser.result_to_file(data_reply, test_config["out_file"])
 
-        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))
+        if criteria_result is "FAIL":
             break
     LOG.info('END POSCA stress ping test')
+    return criteria_result