Modify TestCase constructor attributes
[functest.git] / functest / core / feature.py
1 import time
2
3 import testcase as base
4 import functest.utils.functest_utils as ft_utils
5 import functest.utils.functest_logger as ft_logger
6 from functest.utils.constants import CONST
7
8
9 class Feature(base.TestCase):
10
11     def __init__(self, **kwargs):
12         super(Feature, self).__init__(**kwargs)
13         self.cmd = kwargs.get('cmd', '')
14         repo = kwargs.get('repo', '')
15         self.repo = CONST.__getattribute__(repo)
16         self.result_file = self.get_result_file()
17         self.logger = ft_logger.Logger(self.project_name).getLogger()
18
19     def run(self, **kwargs):
20         self.prepare()
21         self.start_time = time.time()
22         ret = self.execute()
23         self.stop_time = time.time()
24         self.post()
25         self.parse_results(ret)
26         self.log_results()
27         self.logger.info("Test result is stored in '%s'" % self.result_file)
28         return base.TestCase.EX_OK
29
30     def execute(self):
31         '''
32         Executer method that can be overwritten
33         By default it executes a shell command.
34         '''
35         return ft_utils.execute_command(self.cmd, output_file=self.result_file)
36
37     def prepare(self, **kwargs):
38         pass
39
40     def post(self, **kwargs):
41         pass
42
43     def parse_results(self, ret):
44         exit_code = base.TestCase.EX_OK
45         if ret == 0:
46             self.logger.info("{} OK".format(self.project_name))
47             self.criteria = 'PASS'
48         else:
49             self.logger.info("{} FAILED".format(self.project_name))
50             exit_code = base.TestCase.EX_RUN_ERROR
51             self.criteria = "FAIL"
52
53         return exit_code
54
55     def get_result_file(self):
56         return "{}/{}.log".format(CONST.dir_results, self.project_name)
57
58     def log_results(self):
59         ft_utils.logger_test_results(self.project_name,
60                                      self.case_name,
61                                      self.criteria,
62                                      self.details)