diff options
author | Stefan Behnel <stefan_ml@behnel.de> | 2019-01-19 15:56:31 +0100 |
---|---|---|
committer | Stefan Behnel <stefan_ml@behnel.de> | 2019-01-19 15:56:31 +0100 |
commit | 36ed7f8a2e0626b126a94e8712e5967a60603dbe (patch) | |
tree | bec5bcddce34a1eb37c3e99d00acdf5ca105b4e7 | |
parent | 0a962c22acdb422e0a4956642aed5a08dcdcc1d1 (diff) | |
download | cython-36ed7f8a2e0626b126a94e8712e5967a60603dbe.tar.gz |
Try to make the test result passing from forked tests more robust.
See #2807.
-rwxr-xr-x | runtests.py | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/runtests.py b/runtests.py index 80e77b51b..1f843c9e7 100755 --- a/runtests.py +++ b/runtests.py @@ -1310,7 +1310,6 @@ def run_forked_test(result, run_func, test_name, fork=True): child_id = os.fork() if not child_id: result_code = 0 - output = None try: try: tests = partial_result = None @@ -1330,8 +1329,9 @@ def run_forked_test(result, run_func, test_name, fork=True): _shortDescription=test_name, module_name=None) partial_result.addError(tests, sys.exc_info()) - output = open(result_file, 'wb') - pickle.dump(partial_result.data(), output) + if partial_result is not None: + with open(result_file, 'wb') as output: + pickle.dump(partial_result.data(), output) except: traceback.print_exc() finally: @@ -1339,11 +1339,6 @@ def run_forked_test(result, run_func, test_name, fork=True): except: pass try: sys.stdout.flush() except: pass - try: - if output is not None: - output.close() - except: - pass os._exit(result_code) try: @@ -1353,18 +1348,22 @@ def run_forked_test(result, run_func, test_name, fork=True): # upper byte of result_code, and the signal it was # killed by in the lower byte if result_code & 255: - raise Exception("Tests in module '%s' were unexpectedly killed by signal %d"% - (module_name, result_code & 255)) + raise Exception( + "Tests in module '%s' were unexpectedly killed by signal %d, see test output for details." % ( + module_name, result_code & 255)) result_code >>= 8 if result_code in (0,1): - input = open(result_file, 'rb') try: - PartialTestResult.join_results(result, pickle.load(input)) - finally: - input.close() + with open(result_file, 'rb') as f: + PartialTestResult.join_results(result, pickle.load(f)) + except Exception: + raise Exception( + "Failed to load test result from test in module '%s' after exit status %d," + " see test output for details." % (module_name, result_code)) if result_code: - raise Exception("Tests in module '%s' exited with status %d" % - (module_name, result_code)) + raise Exception( + "Tests in module '%s' exited with status %d, see test output for details." % ( + module_name, result_code)) finally: try: os.unlink(result_file) |