From 8048b797f8147b3db5dfcf68caf6bb449b2f2067 Mon Sep 17 00:00:00 2001 From: Morgan Richomme Date: Fri, 18 Nov 2016 15:23:42 +0100 Subject: Adapt Domino to Test Abstraction JIRA: FUNCTEST-547 Change-Id: Iaeb1bb3e6f4529343eacc2f5ceda6d61ca6d96f7 Signed-off-by: Morgan Richomme --- functest/ci/testcases.yaml | 3 + functest/core/TestCasesBase.py | 6 +- functest/opnfv_tests/features/__init__.py | 0 functest/opnfv_tests/features/domino.py | 117 ++++++++++++++---------------- run_unit_tests.sh | 2 +- 5 files changed, 63 insertions(+), 65 deletions(-) create mode 100644 functest/opnfv_tests/features/__init__.py diff --git a/functest/ci/testcases.yaml b/functest/ci/testcases.yaml index afd329868..fc835b938 100644 --- a/functest/ci/testcases.yaml +++ b/functest/ci/testcases.yaml @@ -192,6 +192,9 @@ tiers: dependencies: installer: 'joid' scenario: '' + run: + module: 'functest.opnfv_tests.features.domino' + class: 'DominoCases' - name: odl-sfc criteria: 'status == "PASS"' diff --git a/functest/core/TestCasesBase.py b/functest/core/TestCasesBase.py index 3d6b82d52..777b09f0b 100644 --- a/functest/core/TestCasesBase.py +++ b/functest/core/TestCasesBase.py @@ -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 index 000000000..e69de29bb diff --git a/functest/opnfv_tests/features/domino.py b/functest/opnfv_tests/features/domino.py index 7705c07bd..445a7a640 100755 --- a/functest/opnfv_tests/features/domino.py +++ b/functest/opnfv_tests/features/domino.py @@ -12,76 +12,71 @@ # 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) diff --git a/run_unit_tests.sh b/run_unit_tests.sh index e050418c5..0abf3c279 100755 --- a/run_unit_tests.sh +++ b/run_unit_tests.sh @@ -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 -- cgit 1.2.3-korg