Adapt Domino to Test Abstraction 61/24561/1
authorMorgan Richomme <morgan.richomme@orange.com>
Fri, 18 Nov 2016 14:23:42 +0000 (15:23 +0100)
committerMorgan Richomme <morgan.richomme@orange.com>
Fri, 18 Nov 2016 14:26:38 +0000 (15:26 +0100)
JIRA: FUNCTEST-547

Change-Id: Iaeb1bb3e6f4529343eacc2f5ceda6d61ca6d96f7
Signed-off-by: Morgan Richomme <morgan.richomme@orange.com>
functest/ci/testcases.yaml
functest/core/TestCasesBase.py
functest/opnfv_tests/features/__init__.py [new file with mode: 0644]
functest/opnfv_tests/features/domino.py
run_unit_tests.sh

index afd3298..fc835b9 100644 (file)
@@ -192,6 +192,9 @@ tiers:
                 dependencies:
                     installer: 'joid'
                     scenario: ''
+                run:
+                    module: 'functest.opnfv_tests.features.domino'
+                    class: 'DominoCases'
             -
                 name: odl-sfc
                 criteria: 'status == "PASS"'
index 3d6b82d..777b09f 100644 (file)
@@ -21,10 +21,9 @@ class TestCasesBase(object):
 
     logger = ft_logger.Logger(__name__).getLogger()
 
-    project = "functest"
-
     def __init__(self):
         self.details = {}
+        self.project_name = "functest"
         self.case_name = ""
         self.criteria = ""
         self.start_time = ""
@@ -36,12 +35,13 @@ class TestCasesBase(object):
 
     def push_to_db(self):
         try:
+            assert self.project_name
             assert self.case_name
             assert self.criteria
             assert self.start_time
             assert self.stop_time
             if ft_utils.push_results_to_db(
-                    TestCasesBase.project, self.case_name, self.start_time,
+                    self.project_name, self.case_name, self.start_time,
                     self.stop_time, self.criteria, self.details):
                 self.logger.info("The results were successfully pushed to DB")
                 return TestCasesBase.EX_OK
diff --git a/functest/opnfv_tests/features/__init__.py b/functest/opnfv_tests/features/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
index 7705c07..445a7a6 100755 (executable)
 # After successful ping, both the VMs are deleted.
 # 0.2: measure test duration and publish results under json format
 # 0.3: add report flag to push results when needed
-#
+# 0.4: refactoring to match Test abstraction class
 
 import argparse
+import sys
 import time
 
+from functest.core import TestCasesBase
 import functest.utils.functest_logger as ft_logger
 import functest.utils.functest_utils as ft_utils
 
-parser = argparse.ArgumentParser()
-
-parser.add_argument("-r", "--report",
-                    help="Create json result file",
-                    action="store_true")
-args = parser.parse_args()
-
-
-DOMINO_REPO = \
-    ft_utils.get_functest_config('general.directories.dir_repo_domino')
-RESULTS_DIR = \
-    ft_utils.get_functest_config('general.directories.dir_results')
-
-logger = ft_logger.Logger("domino").getLogger()
-
-
-def main():
-    cmd = 'cd %s && ./tests/run_multinode.sh' % DOMINO_REPO
-    log_file = RESULTS_DIR + "/domino.log"
-    start_time = time.time()
-
-    ret = ft_utils.execute_command(cmd,
-                                   output_file=log_file)
-
-    stop_time = time.time()
-    duration = round(stop_time - start_time, 1)
-    if ret == 0 and duration > 1:
-        logger.info("domino OK")
-        test_status = 'OK'
-    elif ret == 0 and duration <= 1:
-        logger.info("domino TEST SKIPPED")
-        test_status = 'SKIPPED'
-    else:
-        logger.info("domino FAILED")
-        test_status = 'NOK'
-
-    details = {
-        'timestart': start_time,
-        'duration': duration,
-        'status': test_status,
-    }
-
-    status = "FAIL"
-    if details['status'] == "OK":
-        status = "PASS"
-    elif details['status'] == "SKIPPED":
-        status = "SKIP"
 
-    ft_utils.logger_test_results("Domino",
-                                 "domino-multinode",
-                                 status,
-                                 details)
-    if args.report:
+class DominoCases(TestCasesBase.TestCasesBase):
+    DOMINO_REPO = \
+        ft_utils.get_functest_config('general.directories.dir_repo_domino')
+    RESULTS_DIR = \
+        ft_utils.get_functest_config('general.directories.dir_results')
+    logger = ft_logger.Logger("domino").getLogger()
+
+    def __init__(self):
+        self.project_name = "domino"
+        self.case_name = "domino-multinode"
+
+    def main(self, **kwargs):
+        cmd = 'cd %s && ./tests/run_multinode.sh' % self.DOMINO_REPO
+        log_file = self.RESULTS_DIR + "/domino.log"
+        start_time = time.time()
+
+        ret = ft_utils.execute_command(cmd,
+                                       output_file=log_file)
+
+        stop_time = time.time()
+        duration = round(stop_time - start_time, 1)
+        if ret == 0 and duration > 1:
+            self.logger.info("domino OK")
+            status = 'PASS'
+        elif ret == 0 and duration <= 1:
+            self.logger.info("domino TEST SKIPPED")
+            status = 'SKIP'
+        else:
+            self.logger.info("domino FAILED")
+            status = "FAIL"
+
+        # report status only if tests run (FAIL OR PASS)
         if status is not "SKIP":
-            ft_utils.push_results_to_db("domino",
-                                        "domino-multinode",
-                                        start_time,
-                                        stop_time,
-                                        status,
-                                        details)
-            logger.info("Domino results pushed to DB")
+            self.criteria = status
+            self.start_time = start_time
+            self.stop_time = stop_time
+            self.details = {}
 
+    def run(self):
+        kwargs = {}
+        return self.main(**kwargs)
 
 if __name__ == '__main__':
-    main()
+    parser = argparse.ArgumentParser()
+    parser.add_argument("-r", "--report",
+                        help="Create json result file",
+                        action="store_true")
+    args = parser.parse_args()
+    domino = DominoCases()
+    try:
+        result = domino.main(**args)
+        if result != TestCasesBase.TestCasesBase.EX_OK:
+            sys.exit(result)
+        if args['report']:
+            sys.exit(domino.push_to_db())
+    except Exception:
+        sys.exit(TestCasesBase.TestCasesBase.EX_RUN_ERROR)
index e050418..0abf3c2 100755 (executable)
@@ -55,7 +55,7 @@ nosetests --with-xunit \
          --with-coverage \
          --cover-erase \
          --cover-package=functest.core.TestCasesBase \
-         --cover-package=functest.testcases.Controllers.ODL.OpenDaylightTesting \
+         --cover-package=functest.opnfv_tests.Controllers.ODL.OpenDaylightTesting \
          --cover-xml \
          --cover-html \
          functest/tests/unit