Fix print when push_results_to_db fails
[functest.git] / utils / functest_utils.py
index 5f790a0..b83309e 100644 (file)
@@ -169,9 +169,18 @@ def logger_test_results(logger, project, case_name, status, details):
     version = get_version(logger)
     build_tag = get_build_tag(logger)
 
-    logger.info("Pushing %(p)s/%(n)s results: TEST_DB_URL=%(db)s "
-                "pod_name=%(pod)s version=%(v)s scenario=%(s)s "
-                "criteria=%(c)s details=%(d)s" % {
+    logger.info("\n"
+                "****************************************\n"
+                "\t %(p)s/%(n)s results \n\n"
+                "****************************************\n"
+                "DB:\t%(db)s\n"
+                "pod:\t%(pod)s\n"
+                "version:\t%(v)s\n"
+                "scenario:\t%(s)s\n"
+                "status:\t%(c)s\n"
+                "build tag:\t%(b)s\n"
+                "details:\t%(d)s\n"
+                % {
                     'p': project,
                     'n': case_name,
                     'db': get_db_url(),
@@ -210,12 +219,13 @@ def push_results_to_db(project, case_name, logger,
         r = requests.post(url, data=json.dumps(params), headers=headers)
         if logger:
             logger.debug(r)
+        r.raise_for_status()
         return True
     except Exception, e:
-        print ("Error [push_results_to_db('%s', '%s', '%s', " +
-               "'%s', '%s', '%s', '%s', '%s', '%s')]:" %
-               (url, project, case_name, pod_name, version,
-                scenario, criteria, build_tag, details)), e
+        print("Error [push_results_to_db('%s', '%s', '%s', '%s',"
+              "'%s', '%s', '%s', '%s', '%s')]:" %
+              (url, project, case_name, pod_name, version,
+               scenario, criteria, build_tag, details)), e
         return False
 
 
@@ -357,16 +367,46 @@ def check_success_rate(case_name, success_rate):
     success_rate = float(success_rate)
     criteria = get_criteria_by_test(case_name)
 
-    def get_value(op):
+    def get_criteria_value(op):
         return float(criteria.split(op)[1].rstrip('%'))
 
     status = 'FAIL'
     ops = ['==', '>=']
     for op in ops:
         if op in criteria:
-            c_value = get_value(op)
+            c_value = get_criteria_value(op)
             if eval("%s %s %s" % (success_rate, op, c_value)):
                 status = 'PASS'
             break
 
     return status
+
+
+def merge_dicts(dict1, dict2):
+    for k in set(dict1.keys()).union(dict2.keys()):
+        if k in dict1 and k in dict2:
+            if isinstance(dict1[k], dict) and isinstance(dict2[k], dict):
+                yield (k, dict(merge_dicts(dict1[k], dict2[k])))
+            else:
+                yield (k, dict2[k])
+        elif k in dict1:
+            yield (k, dict1[k])
+        else:
+            yield (k, dict2[k])
+
+
+def check_test_result(test_name, ret, start_time, stop_time):
+    def get_criteria_value():
+        return get_criteria_by_test(test_name).split('==')[1].strip()
+
+    status = 'FAIL'
+    if str(ret) == get_criteria_value():
+        status = 'PASS'
+
+    details = {
+        'timestart': start_time,
+        'duration': round(stop_time - start_time, 1),
+        'status': status,
+    }
+
+    return status, details