X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Frun_tests.py;h=66118ca6f41faddf5f2cd221fc9415c565174db9;hb=1135f65586513c7cabb0dca063d1d2f97b07d7cd;hp=d52209d82b37162ef812ceaae59d398fe7578669;hpb=45a95dd782b91e9ae5665b5f95be4b6d7f99b879;p=vpp.git diff --git a/test/run_tests.py b/test/run_tests.py index d52209d82b3..66118ca6f41 100644 --- a/test/run_tests.py +++ b/test/run_tests.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import sys import shutil @@ -324,6 +324,8 @@ def process_finished_testsuite(wrapped_testcase_suite, def run_forked(testcase_suites): wrapped_testcase_suites = set() + solo_testcase_suites = [] + total_test_runners = 0 # suites are unhashable, need to use list results = [] @@ -331,12 +333,29 @@ def run_forked(testcase_suites): finished_unread_testcases = set() manager = StreamQueueManager() manager.start() - for i in range(concurrent_tests): + total_test_runners = 0 + while total_test_runners < concurrent_tests: if testcase_suites: - wrapped_testcase_suite = TestCaseWrapper(testcase_suites.pop(0), + a_suite = testcase_suites.pop(0) + if a_suite.force_solo: + solo_testcase_suites.append(a_suite) + continue + wrapped_testcase_suite = TestCaseWrapper(a_suite, manager) wrapped_testcase_suites.add(wrapped_testcase_suite) unread_testcases.add(wrapped_testcase_suite) + total_test_runners = total_test_runners + 1 + else: + break + + while total_test_runners < 1 and solo_testcase_suites: + if solo_testcase_suites: + a_suite = solo_testcase_suites.pop(0) + wrapped_testcase_suite = TestCaseWrapper(a_suite, + manager) + wrapped_testcase_suites.add(wrapped_testcase_suite) + unread_testcases.add(wrapped_testcase_suite) + total_test_runners = total_test_runners + 1 else: break @@ -448,14 +467,32 @@ def run_forked(testcase_suites): wrapped_testcase_suites.remove(finished_testcase) finished_unread_testcases.add(finished_testcase) finished_testcase.stdouterr_queue.put(None) + total_test_runners = total_test_runners - 1 if stop_run: while testcase_suites: results.append(TestResult(testcase_suites.pop(0))) elif testcase_suites: - new_testcase = TestCaseWrapper(testcase_suites.pop(0), - manager) - wrapped_testcase_suites.add(new_testcase) - unread_testcases.add(new_testcase) + a_testcase = testcase_suites.pop(0) + while a_testcase and a_testcase.force_solo: + solo_testcase_suites.append(a_testcase) + if testcase_suites: + a_testcase = testcase_suites.pop(0) + else: + a_testcase = None + if a_testcase: + new_testcase = TestCaseWrapper(a_testcase, + manager) + wrapped_testcase_suites.add(new_testcase) + total_test_runners = total_test_runners + 1 + unread_testcases.add(new_testcase) + else: + if solo_testcase_suites and total_test_runners == 0: + a_testcase = solo_testcase_suites.pop(0) + new_testcase = TestCaseWrapper(a_testcase, + manager) + wrapped_testcase_suites.add(new_testcase) + total_test_runners = total_test_runners + 1 + unread_testcases.add(new_testcase) time.sleep(0.1) except Exception: for wrapped_testcase_suite in wrapped_testcase_suites: @@ -484,7 +521,10 @@ class SplitToSuitesCallback: self.suite_name = file_name + cls.__name__ if self.suite_name not in self.suites: self.suites[self.suite_name] = unittest.TestSuite() + self.suites[self.suite_name].force_solo = False self.suites[self.suite_name].addTest(test_method) + if test_method.force_solo(): + self.suites[self.suite_name].force_solo = True else: self.filtered.addTest(test_method) @@ -646,7 +686,7 @@ class AllResults(dict): failed_testcase_ids = result[FAIL] errored_testcase_ids = result[ERROR] old_testcase_name = None - if failed_testcase_ids or errored_testcase_ids: + if failed_testcase_ids: for failed_test_id in failed_testcase_ids: new_testcase_name, test_name = \ result.get_testcase_names(failed_test_id) @@ -656,15 +696,16 @@ class AllResults(dict): old_testcase_name = new_testcase_name print(' FAILURE: {} [{}]'.format( colorize(test_name, RED), failed_test_id)) - for failed_test_id in errored_testcase_ids: + if errored_testcase_ids: + for errored_test_id in errored_testcase_ids: new_testcase_name, test_name = \ - result.get_testcase_names(failed_test_id) + result.get_testcase_names(errored_test_id) if new_testcase_name != old_testcase_name: print(' Testcase name: {}'.format( colorize(new_testcase_name, RED))) old_testcase_name = new_testcase_name print(' ERROR: {} [{}]'.format( - colorize(test_name, RED), failed_test_id)) + colorize(test_name, RED), errored_test_id)) if self.testsuites_no_tests_run: print('TESTCASES WHERE NO TESTS WERE SUCCESSFULLY EXECUTED:') tc_classes = set() @@ -732,11 +773,6 @@ def parse_digit_env(env_var, default): if __name__ == '__main__': - if "RND_SEED" not in os.environ: - os.environ["RND_SEED"] = str(time.time()) - print("Setting RND_SEED=%s" % os.environ["RND_SEED"]) - else: - print("Using provided RND_SEED=%s" % os.environ["RND_SEED"]) verbose = parse_digit_env("V", 0) test_timeout = parse_digit_env("TIMEOUT", 600) # default = 10 minutes