system bandwidth testcase frame rebuild
[bottlenecks.git] / testsuites / posca / testcase_script / posca_factor_ping.py
index e46a919..3a2277c 100644 (file)
@@ -15,9 +15,11 @@ 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
@@ -41,6 +43,8 @@ test_dict = {
 testfile = os.path.basename(__file__)
 testcase, file_format = os.path.splitext(testfile)
 
+q = Queue.Queue()
+
 
 def env_pre(test_config):
     test_yardstick = False
@@ -49,14 +53,15 @@ def env_pre(test_config):
     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)
         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")
     yardstick_container = docker_env.yardstick_info['container']
     cmd = ('yardstick task start /home/opnfv/repos/yardstick/'
@@ -64,40 +69,39 @@ def do_test(test_config, con_dic):
     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
+                LOG.info("yardstick run success")
+                out_value = 1
                 break
             elif data["status"] == 2:
                 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 +119,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