[ODL-SFC] Add push resulst to DB
[functest.git] / testcases / features / doctor.py
old mode 100644 (file)
new mode 100755 (executable)
index a68c31c..6c26875
 # 0.2: measure test duration and publish results under json format
 #
 #
-
+import argparse
 import os
 import time
-import sys
-import yaml
 
+import functest.utils.functest_logger as ft_logger
+import functest.utils.functest_utils as functest_utils
+
+
+parser = argparse.ArgumentParser()
+parser.add_argument("-r", "--report",
+                    help="Create json result file",
+                    action="store_true")
+args = parser.parse_args()
 
-with open('/home/opnfv/functest/conf/config_functest.yaml') as f:
-    functest_yaml = yaml.safe_load(f)
+functest_yaml = functest_utils.get_functest_yaml()
 
-dirs = functest_yaml.get('general').get('directories')
-FUNCTEST_REPO = dirs.get('dir_repo_functest')
-DOCTOR_REPO = dirs.get('dir_repo_doctor')
-TEST_DB_URL = functest_yaml.get('results').get('test_db_url')
+DOCTOR_REPO = \
+    functest_utils.get_functest_config('general.directories.dir_repo_doctor')
+RESULTS_DIR = \
+    functest_utils.get_functest_config('general.directories.dir_results')
 
-sys.path.append('%s/testcases' % FUNCTEST_REPO)
-import functest_utils
+logger = ft_logger.Logger("doctor").getLogger()
 
 
 def main():
+    exit_code = -1
+
+    # if the image name is explicitly set for the doctor suite, set it as
+    # enviroment variable
+    if 'doctor' in functest_yaml and 'image_name' in functest_yaml['doctor']:
+        os.environ["IMAGE_NAME"] = functest_yaml['doctor']['image_name']
+
     cmd = 'cd %s/tests && ./run.sh' % DOCTOR_REPO
-    start_time_ts = time.time()
+    log_file = RESULTS_DIR + "/doctor.log"
+
+    start_time = time.time()
 
-    ret = functest_utils.execute_command(cmd, exit_on_error=False)
+    ret = functest_utils.execute_command(cmd,
+                                         info=True,
+                                         exit_on_error=False,
+                                         output_file=log_file)
 
-    end_time_ts = time.time()
-    duration = round(end_time_ts - start_time_ts, 1)
-    if ret:
+    stop_time = time.time()
+    duration = round(stop_time - start_time, 1)
+    if ret == 0:
+        logger.info("Doctor test case OK")
         test_status = 'OK'
+        exit_code = 0
     else:
+        logger.info("Doctor test case FAILED")
         test_status = 'NOK'
 
     details = {
-        'timestart': start_time_ts,
+        'timestart': start_time,
         'duration': duration,
         'status': test_status,
     }
-    pod_name = functest_utils.get_pod_name()
-    git_version = functest_utils.get_git_branch(DOCTOR_REPO)
-    functest_utils.push_results_to_db(TEST_DB_URL,
-                                      'doctor-notification',
-                                      None,
-                                      pod_name,
-                                      git_version,
-                                      details)
+    status = "FAIL"
+    if details['status'] == "OK":
+        status = "PASS"
+    functest_utils.logger_test_results("Doctor",
+                                       "doctor-notification",
+                                       status, details)
+    if args.report:
+        functest_utils.push_results_to_db("doctor",
+                                          "doctor-notification",
+                                          start_time,
+                                          stop_time,
+                                          status,
+                                          details)
+        logger.info("Doctor results pushed to DB")
 
+    exit(exit_code)
 
 if __name__ == '__main__':
     main()