X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=functest%2Fcore%2Ftestcase.py;h=a7dc47c4e08aa040c67c99d3e1bcb05369965cac;hb=82b5b5c13ed5b08ff7191d0d1dcddfc4bd99f0c7;hp=b220a587d245318d265a965d74794e1313e45611;hpb=ce80dec85ee484d5c0cd6ed2a48c60529938a706;p=functest.git diff --git a/functest/core/testcase.py b/functest/core/testcase.py index b220a587d..a7dc47c4e 100644 --- a/functest/core/testcase.py +++ b/functest/core/testcase.py @@ -12,7 +12,11 @@ import logging import os +import prettytable + import functest.utils.functest_utils as ft_utils +import functest.utils.openstack_clean as os_clean +import functest.utils.openstack_snapshot as os_snapshot __author__ = "Cedric Ollivier " @@ -39,9 +43,9 @@ class TestCase(object): self.project_name = kwargs.get('project_name', 'functest') self.case_name = kwargs.get('case_name', '') self.criteria = kwargs.get('criteria', 100) - self.result = "" - self.start_time = "" - self.stop_time = "" + self.result = 0 + self.start_time = 0 + self.stop_time = 0 def __str__(self): try: @@ -49,14 +53,16 @@ class TestCase(object): assert self.case_name result = 'PASS' if(self.is_successful( ) == TestCase.EX_OK) else 'FAIL' - return ('| {0:<23} | {1:<13} | {2:<10} | {3:<13} |' - '\n{4:-<26}{4:-<16}{4:-<13}{4:-<16}{4}'.format( - self.case_name, self.project_name, - self.get_duration(), result, '+')) + msg = prettytable.PrettyTable( + header_style='upper', padding_width=5, + field_names=['test case', 'project', 'duration', + 'result']) + msg.add_row([self.case_name, self.project_name, + self.get_duration(), result]) + return msg.get_string() except AssertionError: self.__logger.error("We cannot print invalid objects") - return '| {0:^68} |\n{1:-<26}{1:-<16}{1:-<13}{1:-<16}{1}'.format( - 'INVALID OBJECT', '+') + return super(TestCase, self).__str__() def get_duration(self): """Return the duration of the test case. @@ -90,7 +96,9 @@ class TestCase(object): """ try: assert self.criteria - if isinstance(self.result, int) and isinstance(self.criteria, int): + assert self.result is not None + if (not isinstance(self.result, str) and + not isinstance(self.criteria, str)): if self.result >= self.criteria: return TestCase.EX_OK else: @@ -170,3 +178,51 @@ class TestCase(object): except Exception: # pylint: disable=broad-except self.__logger.exception("The results cannot be pushed to DB") return TestCase.EX_PUSH_TO_DB_ERROR + + def create_snapshot(self): # pylint: disable=no-self-use + """Save the testing environment before running test. + + It can be overriden if resources must be listed running the + test case. + + Returns: + TestCase.EX_OK + """ + return TestCase.EX_OK + + def clean(self): + """Clean the resources. + + It can be overriden if resources must be deleted after + running the test case. + """ + + +class OSGCTestCase(TestCase): + """Model for single test case which requires an OpenStack Garbage + Collector.""" + + __logger = logging.getLogger(__name__) + + def create_snapshot(self): + """Create a snapshot listing the OpenStack resources. + + Returns: + TestCase.EX_OK if os_snapshot.main() returns 0. + TestCase.EX_RUN_ERROR otherwise. + """ + try: + assert os_snapshot.main() == 0 + self.__logger.info("OpenStack resources snapshot created") + return TestCase.EX_OK + except Exception: # pylint: disable=broad-except + self.__logger.exception("Cannot create the snapshot") + return TestCase.EX_RUN_ERROR + + def clean(self): + """Clean the OpenStack resources.""" + try: + assert os_clean.main() == 0 + self.__logger.info("OpenStack resources cleaned") + except Exception: # pylint: disable=broad-except + self.__logger.exception("Cannot clean the OpenStack resources")