X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Fframework.py;h=6c1ba5e3f339d63435fcb55fd9e08e52d7fefa26;hb=68ebc83e60f91104667b5ee4b4ab13d9716ee860;hp=4c536e062b09448a5b28bc4b6654494e6023ec0a;hpb=5ba9159a157141554e53af9821c8da07a93da7ff;p=vpp.git diff --git a/test/framework.py b/test/framework.py index 4c536e062b0..6c1ba5e3f33 100644 --- a/test/framework.py +++ b/test/framework.py @@ -12,6 +12,7 @@ import faulthandler import random import copy import psutil +import platform from collections import deque from threading import Thread, Event from inspect import getdoc, isclass @@ -133,6 +134,14 @@ def pump_output(testclass): # of properly terminating the loop +def is_skip_aarch64_set(): + return os.getenv('SKIP_AARCH64', 'n').lower() in ('yes', 'y', '1') + + +def is_platform_aarch64(): + return platform.machine() == 'aarch64' + + def running_extended_tests(): s = os.getenv("EXTENDED_TESTS", "n") return True if s.lower() in ("y", "yes", "1") else False @@ -219,8 +228,8 @@ class VppTestCase(unittest.TestCase): else: raise Exception("Unrecognized DEBUG option: '%s'" % d) - @classmethod - def get_least_used_cpu(self): + @staticmethod + def get_least_used_cpu(): cpu_usage_list = [set(range(psutil.cpu_count()))] vpp_processes = [p for p in psutil.process_iter(attrs=['pid', 'name']) if 'vpp_main' == p.info['name']] @@ -248,7 +257,7 @@ class VppTestCase(unittest.TestCase): return random.choice(tuple(min_usage_set)) - @staticmethod + @classmethod def print_header(cls): if not hasattr(cls, '_header_printed'): print(double_line_delim) @@ -265,8 +274,8 @@ class VppTestCase(unittest.TestCase): c = os.getenv("CACHE_OUTPUT", "1") cls.cache_vpp_output = False if c.lower() in ("n", "no", "0") else True cls.set_debug_flags(d) - cls.vpp_bin = os.getenv('VPP_TEST_BIN', "vpp") - cls.plugin_path = os.getenv('VPP_TEST_PLUGIN_PATH') + cls.vpp_bin = os.getenv('VPP_BIN', "vpp") + cls.plugin_path = os.getenv('VPP_PLUGIN_PATH') cls.extern_plugin_path = os.getenv('EXTERN_PLUGINS') plugin_path = None if cls.plugin_path is not None: @@ -348,7 +357,7 @@ class VppTestCase(unittest.TestCase): stdout=subprocess.PIPE, stderr=subprocess.PIPE, bufsize=1) - except Exception as e: + except subprocess.CalledProcessError as e: cls.logger.critical("Couldn't start vpp: %s" % e) raise @@ -375,10 +384,11 @@ class VppTestCase(unittest.TestCase): """ gc.collect() # run garbage collection first random.seed() - cls.print_header(cls) + cls.print_header() cls.logger = get_logger(cls.__name__) if hasattr(cls, 'parallel_handler'): cls.logger.addHandler(cls.parallel_handler) + cls.logger.propagate = False cls.tempdir = tempfile.mkdtemp( prefix='vpp-unittest-%s-' % cls.__name__) cls.stats_sock = "%s/stats.sock" % cls.tempdir @@ -1019,7 +1029,7 @@ class VppTestResult(unittest.TestResult): core_crash_test_cases_info = set() current_test_case_info = None - def __init__(self, stream, descriptions, verbosity): + def __init__(self, stream, descriptions, verbosity, runner): """ :param stream File descriptor to store where to report test results. Set to the standard error stream by default. @@ -1032,6 +1042,7 @@ class VppTestResult(unittest.TestResult): self.descriptions = descriptions self.verbosity = verbosity self.result_string = None + self.runner = runner def addSuccess(self, test): """ @@ -1071,7 +1082,7 @@ class VppTestResult(unittest.TestResult): def symlink_failed(self): if self.current_test_case_info: try: - failed_dir = os.getenv('VPP_TEST_FAILED_DIR') + failed_dir = os.getenv('FAILED_DIR') link_path = os.path.join( failed_dir, '%s-FAILED' % @@ -1184,7 +1195,7 @@ class VppTestResult(unittest.TestResult): :param test: """ - test.print_header(test.__class__) + test.print_header() unittest.TestResult.startTest(self, test) if self.verbosity > 0: @@ -1215,9 +1226,16 @@ class VppTestResult(unittest.TestResult): """ Print errors from running the test case """ - self.stream.writeln() - self.printErrorList('ERROR', self.errors) - self.printErrorList('FAIL', self.failures) + if len(self.errors) > 0 or len(self.failures) > 0: + self.stream.writeln() + self.printErrorList('ERROR', self.errors) + self.printErrorList('FAIL', self.failures) + + # ^^ that is the last output from unittest before summary + if not self.runner.print_summary: + devnull = unittest.runner._WritelnDecorator(open(os.devnull, 'w')) + self.stream = devnull + self.runner.stream = devnull def printErrorList(self, flavour, errors): """ @@ -1247,17 +1265,25 @@ class VppTestRunner(unittest.TextTestRunner): def __init__(self, keep_alive_pipe=None, descriptions=True, verbosity=1, result_pipe=None, failfast=False, buffer=False, - resultclass=None): + resultclass=None, print_summary=True): # ignore stream setting here, use hard-coded stdout to be in sync # with prints from VppTestCase methods ... super(VppTestRunner, self).__init__(sys.stdout, descriptions, verbosity, failfast, buffer, resultclass) - reporter = KeepAliveReporter() - reporter.pipe = keep_alive_pipe + KeepAliveReporter.pipe = keep_alive_pipe + + self.orig_stream = self.stream + self.resultclass.test_framework_result_pipe = result_pipe + + self.print_summary = print_summary - VppTestResult.test_framework_result_pipe = result_pipe + def _makeResult(self): + return self.resultclass(self.stream, + self.descriptions, + self.verbosity, + self) def run(self, test): """ @@ -1269,6 +1295,9 @@ class VppTestRunner(unittest.TextTestRunner): faulthandler.enable() # emit stack trace to stderr if killed by signal result = super(VppTestRunner, self).run(test) + if not self.print_summary: + self.stream = self.orig_stream + result.stream = self.orig_stream return result