Modify TestCase constructor attributes
[functest.git] / functest / utils / functest_utils.py
index 0405546..ef9d3da 100644 (file)
@@ -23,10 +23,9 @@ import requests
 import yaml
 from git import Repo
 
-from functest.utils.constants import CONST
+from functest.utils import decorators
 import functest.utils.functest_logger as ft_logger
 
-
 logger = ft_logger.Logger("functest_utils").getLogger()
 
 
@@ -112,12 +111,13 @@ def get_version():
     # if launched through CI the build tag has the following format
     # jenkins-<project>-<installer>-<pod>-<job>-<branch>-<id>
     # e.g. jenkins-functest-fuel-opnfv-jump-2-daily-master-190
+    # jenkins-functest-fuel-baremetal-weekly-master-8
     # use regex to match branch info
-    rule = "daily-(.+?)-[0-9]*"
+    rule = "(dai|week)ly-(.+?)-[0-9]*"
     build_tag = get_build_tag()
     m = re.search(rule, build_tag)
     if m:
-        return m.group(1)
+        return m.group(2)
     else:
         return "unknown"
 
@@ -152,7 +152,13 @@ def get_db_url():
     """
     Returns DB URL
     """
-    return get_functest_config('results.test_db_url')
+    # TODO use CONST mechanism
+    try:
+        # if TEST_DB_URL declared in env variable, use it!
+        db_url = os.environ['TEST_DB_URL']
+    except KeyError:
+        db_url = get_functest_config('results.test_db_url')
+    return db_url
 
 
 def logger_test_results(project, case_name, status, details):
@@ -184,43 +190,14 @@ def logger_test_results(project, case_name, status, details):
             'd': details})
 
 
-def write_results_to_file(project, case_name, start_date,
-                          stop_date, criteria, details):
-    file_path = re.split(r'://', CONST.results_test_db_url)[1]
-
-    try:
-        installer = os.environ['INSTALLER_TYPE']
-        scenario = os.environ['DEPLOY_SCENARIO']
-        pod_name = os.environ['NODE_NAME']
-    except KeyError as e:
-        logger.error("Please set env var: " + str(e))
-        return False
-
-    test_start = dt.fromtimestamp(start_date).strftime('%Y-%m-%d %H:%M:%S')
-    test_stop = dt.fromtimestamp(stop_date).strftime('%Y-%m-%d %H:%M:%S')
-
-    params = {"project_name": project, "case_name": case_name,
-              "pod_name": pod_name, "installer": installer,
-              "scenario": scenario, "criteria": criteria,
-              "start_date": test_start, "stop_date": test_stop,
-              "details": details}
-    try:
-        with open(file_path, "a+w") as outfile:
-            json.dump(params, outfile)
-            outfile.write("\n")
-        return True
-    except Exception as e:
-        logger.error("write result data into a file failed: %s" % e)
-        return False
-
-
+@decorators.can_dump_request_to_file
 def push_results_to_db(project, case_name,
                        start_date, stop_date, criteria, details):
     """
     POST results to the Result target DB
     """
     # Retrieve params from CI and conf
-    url = CONST.results_test_db_url + "/results"
+    url = get_db_url() + "/results"
 
     try:
         installer = os.environ['INSTALLER_TYPE']
@@ -230,13 +207,7 @@ def push_results_to_db(project, case_name,
     except KeyError as e:
         logger.error("Please set env var: " + str(e))
         return False
-    rule = "daily-(.+?)-[0-9]*"
-    m = re.search(rule, build_tag)
-    if m:
-        version = m.group(1)
-    else:
-        logger.error("Please fix BUILD_TAG env var: " + build_tag)
-        return False
+    version = get_version()
     test_start = dt.fromtimestamp(start_date).strftime('%Y-%m-%d %H:%M:%S')
     test_stop = dt.fromtimestamp(stop_date).strftime('%Y-%m-%d %H:%M:%S')
 
@@ -300,7 +271,7 @@ def get_resolvconf_ns():
     while line:
         ip = re.search(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b", line)
         if ip:
-            resolver.nameservers = [str(ip)]
+            resolver.nameservers = [ip.group(0)]
             try:
                 result = resolver.query('opnfv.org')[0]
                 if result != "":
@@ -321,6 +292,13 @@ def get_ci_envvars():
     return ci_env_var
 
 
+def execute_command_raise(cmd, info=False, error_msg="",
+                          verbose=True, output_file=None):
+    ret = execute_command(cmd, info, error_msg, verbose, output_file)
+    if ret != 0:
+        raise Exception(error_msg)
+
+
 def execute_command(cmd, info=False, error_msg="",
                     verbose=True, output_file=None):
     if not error_msg:
@@ -359,7 +337,7 @@ def get_dict_by_test(testname):
 
     for dic_tier in testcases_yaml.get("tiers"):
         for dic_testcase in dic_tier['testcases']:
-            if dic_testcase['name'] == testname:
+            if dic_testcase['case_name'] == testname:
                 return dic_testcase
 
     logger.error('Project %s is not defined in testcases.yaml' % testname)
@@ -392,7 +370,7 @@ def get_parameter_from_yaml(parameter, file):
         value = value.get(element)
         if value is None:
             raise ValueError("The parameter %s is not defined in"
-                             " config_functest.yaml" % parameter)
+                             " %s" % (parameter, file))
     return value