Merge "Delete functest.utils.functest_logger"
[functest.git] / functest / core / testcase.py
index b675a48..0b87f26 100644 (file)
@@ -7,73 +7,85 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 
-"""Define the parent class of Functest TestCase."""
+"""Define the parent class of all Functest TestCases."""
 
+import logging
 import os
 
-import functest.utils.functest_logger as ft_logger
 import functest.utils.functest_utils as ft_utils
 
 __author__ = "Cedric Ollivier <cedric.ollivier@orange.com>"
 
 
 class TestCase(object):
-    """Parent class of Functest TestCase."""
+    """Base model for single test case."""
 
     EX_OK = os.EX_OK
-    """Status code returned when everything is OK"""
+    """everything is OK"""
 
     EX_RUN_ERROR = os.EX_SOFTWARE
-    """Status code returned when run() fails"""
+    """run() failed"""
 
     EX_PUSH_TO_DB_ERROR = os.EX_SOFTWARE - 1
-    """Status code returned when push_to_db() fails"""
+    """push_to_db() failed"""
 
     EX_TESTCASE_FAILED = os.EX_SOFTWARE - 2
-    """Status code returned when results are false"""
+    """results are false"""
 
-    logger = ft_logger.Logger(__name__).getLogger()
+    logger = logging.getLogger(__name__)
 
     def __init__(self, **kwargs):
         self.details = {}
         self.project_name = kwargs.get('project_name', 'functest')
         self.case_name = kwargs.get('case_name', '')
-        self.criteria = ""
+        self.criteria = kwargs.get('criteria', 100)
+        self.result = ""
         self.start_time = ""
         self.stop_time = ""
 
-    def check_criteria(self):
-        """Interpret the results of TestCase.
+    def check_result(self):
+        """Interpret the result of the test case.
 
-        It allows getting the results of TestCase. It completes run()
+        It allows getting the result of TestCase. It completes run()
         which only returns the execution status.
 
-        It can be overriden if checking criteria is not suitable.
+        It can be overriden if checking result is not suitable.
 
         Returns:
-            TestCase.EX_OK if criteria is 'PASS'.
+            TestCase.EX_OK if result is 'PASS'.
             TestCase.EX_TESTCASE_FAILED otherwise.
         """
         try:
             assert self.criteria
-            if self.criteria == 'PASS':
-                return TestCase.EX_OK
+            if isinstance(self.result, int) and isinstance(self.criteria, int):
+                if self.result >= self.criteria:
+                    return TestCase.EX_OK
+            else:
+                # Backward compatibility
+                # It must be removed as soon as TestCase subclasses
+                # stop setting result = 'PASS' or 'FAIL'.
+                # In this case criteria is unread.
+                self.logger.warning(
+                    "Please update result which must be an int!")
+                if self.result == 'PASS':
+                    return TestCase.EX_OK
         except AssertionError:
             self.logger.error("Please run test before checking the results")
         return TestCase.EX_TESTCASE_FAILED
 
     def run(self, **kwargs):
-        """Run TestCase.
+        """Run the test case.
 
         It allows running TestCase and getting its execution
         status.
 
         The subclasses must override the default implementation which
-        is false on purpose. The only prerequisite is to set the
-        following attributes to push the results to DB:
+        is false on purpose.
 
-            * case_name,
-            * criteria,
+        The new implementation must set the following attributes to
+        push the results to DB:
+
+            * result,
             * start_time,
             * stop_time.
 
@@ -88,7 +100,7 @@ class TestCase(object):
         return TestCase.EX_RUN_ERROR
 
     def push_to_db(self):
-        """Push the results of TestCase to the DB.
+        """Push the results of the test case to the DB.
 
         It allows publishing the results and to check the status.
 
@@ -98,7 +110,7 @@ class TestCase(object):
 
             * project_name,
             * case_name,
-            * criteria,
+            * result,
             * start_time,
             * stop_time.
 
@@ -109,12 +121,13 @@ class TestCase(object):
         try:
             assert self.project_name
             assert self.case_name
-            assert self.criteria
             assert self.start_time
             assert self.stop_time
+            pub_result = 'PASS' if self.check_result(
+                ) == TestCase.EX_OK else 'FAIL'
             if ft_utils.push_results_to_db(
                     self.project_name, self.case_name, self.start_time,
-                    self.stop_time, self.criteria, self.details):
+                    self.stop_time, pub_result, self.details):
                 self.logger.info("The results were successfully pushed to DB")
                 return TestCase.EX_OK
             else: