Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

regrtest: don't fail immediately if a child does crash #73548

Closed
vstinner opened this issue Jan 24, 2017 · 7 comments
Closed

regrtest: don't fail immediately if a child does crash #73548

vstinner opened this issue Jan 24, 2017 · 7 comments
Labels
3.7 (EOL) end of life tests Tests in the Lib/test dir type-feature A feature request or enhancement

Comments

@vstinner
Copy link
Member

BPO 29362
Nosy @vstinner, @ammaraskar
Files
  • regrtest_crash.diff
  • regrtest_crashed.patch
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = <Date 2017-02-06.13:13:02.298>
    created_at = <Date 2017-01-24.15:35:21.698>
    labels = ['3.7', 'type-feature', 'tests']
    title = "regrtest: don't fail immediately if a child does crash"
    updated_at = <Date 2017-02-06.13:13:02.297>
    user = 'https://github.com/vstinner'

    bugs.python.org fields:

    activity = <Date 2017-02-06.13:13:02.297>
    actor = 'vstinner'
    assignee = 'none'
    closed = True
    closed_date = <Date 2017-02-06.13:13:02.298>
    closer = 'vstinner'
    components = ['Tests']
    creation = <Date 2017-01-24.15:35:21.698>
    creator = 'vstinner'
    dependencies = []
    files = ['46446', '46480']
    hgrepos = []
    issue_num = 29362
    keywords = ['patch']
    message_count = 7.0
    messages = ['286194', '286195', '286419', '286639', '287122', '287123', '287124']
    nosy_count = 3.0
    nosy_names = ['vstinner', 'python-dev', 'ammar2']
    pr_nums = []
    priority = 'normal'
    resolution = 'fixed'
    stage = 'resolved'
    status = 'closed'
    superseder = None
    type = 'enhancement'
    url = 'https://bugs.python.org/issue29362'
    versions = ['Python 3.7']

    @vstinner
    Copy link
    Member Author

    When regrtest is used with -jN, regrtest spawn child processes to run tests. If a child crashs, regrtest master process immedialtely fails. It would prefer to be able to continue to run following tests. It's not because a single test crashed that all tests would crash.

    Example of output when a crash occurs:
    -----------------
    (...)
    0:02:45 [118/404/3] test_bytes crashed -- running: test_multiprocessing_spawn (67 sec), test_io (54 sec), test_subprocess (76 sec)
    python: Objects/abstract.c:2186: _Py_CheckFunctionResult: Assertion `(callable != NULL) ^ (where != NULL)' failed.
    Fatal Python error: Aborted

    Current thread 0x00007f9210f11440 (most recent call first):
    File "/home/haypo/prog/python/git_cpython/Lib/unittest/case.py", line 177 in handle
    File "/home/haypo/prog/python/git_cpython/Lib/unittest/case.py", line 728 in assertRaises
    File "/home/haypo/prog/python/git_cpython/Lib/test/test_bytes.py", line 636 in test_maketrans
    (...)
    File "/home/haypo/prog/python/git_cpython/Lib/runpy.py", line 85 in _run_code
    File "/home/haypo/prog/python/git_cpython/Lib/runpy.py", line 193 in _run_module_as_main

    Traceback (most recent call last):
      File "/home/haypo/prog/python/git_cpython/Lib/runpy.py", line 193, in _run_module_as_main
        "__main__", mod_spec)
      (...)
      File "/home/haypo/prog/python/git_cpython/Lib/test/libregrtest/main.py", line 411, in run_tests
        run_tests_multiprocess(self)
      File "/home/haypo/prog/python/git_cpython/Lib/test/libregrtest/runtest_mp.py", line 221, in run_tests_multiprocess
        raise Exception(msg)
    Exception: Child error on test_bytes: Exit code -6

    @vstinner vstinner added 3.7 (EOL) end of life tests Tests in the Lib/test dir type-feature A feature request or enhancement labels Jan 24, 2017
    @vstinner
    Copy link
    Member Author

    At least, I would like to see which tests were executed, which tests failed, total duration, etc. Get a summary!

    @ammaraskar
    Copy link
    Member

    This patch makes it so that when a child runner crashes during a multiprocess test run, it is treated similar to a keyboard interrupt. That is, the currently running tests will continue to run and immediately after it will print out a summary.

    I think the test suite should be interrupted when an interpreter crash happens because this indicates a fairly major failure and interrupting the suite brings a lot of attention to it.

    @vstinner
    Copy link
    Member Author

    vstinner commented Feb 1, 2017

    Attached patch changes libregrtest to handle CHILD_ERROR as a normal result and continue the execution of following tests. As a result, it displays the test summary as usual on such crash.

    --

    Ammar Askar: Thanks for regrtest_crash.diff, but I prefer to execute other unit tests rather than exiting immediatly.

    The --failfast option can be used with my patch to exit at the first crash or failure (with my patch, a crash is handled as a test failure).

    @python-dev
    Copy link
    Mannequin

    python-dev mannequin commented Feb 6, 2017

    New changeset 4446613000a3 by Victor Stinner in branch 'default':
    regrtest: don't fail immediately if a child does crash
    https://hg.python.org/cpython/rev/4446613000a3

    @python-dev
    Copy link
    Mannequin

    python-dev mannequin commented Feb 6, 2017

    New changeset 99e4e687145a76ac28055a651ee31470496c3ac7 by Victor Stinner in branch 'master':
    regrtest: don't fail immediately if a child does crash
    99e4e68

    @vstinner
    Copy link
    Member Author

    vstinner commented Feb 6, 2017

    I fixed regrtest in Python 3.7. Maybe I will backport the fix later to other branches, but I prefer to limit regrtest changes in stable branches.

    @vstinner vstinner closed this as completed Feb 6, 2017
    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    3.7 (EOL) end of life tests Tests in the Lib/test dir type-feature A feature request or enhancement
    Projects
    None yet
    Development

    No branches or pull requests

    2 participants