Thanks to visit codestin.com
Credit goes to github.com

Skip to content

gh-102251: Disable non-rerunnable test in test_import #106013

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

Merged
merged 5 commits into from
Jun 23, 2023

Conversation

erlend-aasland
Copy link
Contributor

@erlend-aasland erlend-aasland commented Jun 23, 2023

Alternative to gh-104796; proposed as this PR has a much smaller diff and is less intrusive.

test_basic_multiple_interpreters_main_no_reset() does not support rerunning
@sunmy2019
Copy link
Member

I like this solution more. 👍

@erlend-aasland
Copy link
Contributor Author

I like this solution more. 👍

Yes; my rationale is:

Keep the diff down; keep the solution as simple as possible. We want to be able to easily remove the no_rerun() hack when the original problem has been addressed. With this solution we can simply remove the decorator from the affected test function. Also, it limits the decorator to this file only, and adds a relatively big warning for the programmer.

@erlend-aasland erlend-aasland added the 🔨 test-with-refleak-buildbots Test PR w/ refleak buildbots; report in status section label Jun 23, 2023
@bedevere-bot

This comment was marked as outdated.

@bedevere-bot bedevere-bot removed the 🔨 test-with-refleak-buildbots Test PR w/ refleak buildbots; report in status section label Jun 23, 2023
@erlend-aasland erlend-aasland added the 🔨 test-with-refleak-buildbots Test PR w/ refleak buildbots; report in status section label Jun 23, 2023
@bedevere-bot

This comment was marked as outdated.

@bedevere-bot bedevere-bot removed the 🔨 test-with-refleak-buildbots Test PR w/ refleak buildbots; report in status section label Jun 23, 2023
@erlend-aasland erlend-aasland requested a review from sunmy2019 June 23, 2023 11:05
@erlend-aasland erlend-aasland added the 🔨 test-with-refleak-buildbots Test PR w/ refleak buildbots; report in status section label Jun 23, 2023
@bedevere-bot

This comment was marked as outdated.

@bedevere-bot bedevere-bot removed the 🔨 test-with-refleak-buildbots Test PR w/ refleak buildbots; report in status section label Jun 23, 2023
@erlend-aasland
Copy link
Contributor Author

erlend-aasland commented Jun 23, 2023

Comment on ref leak run:

For all buildbots, only test_peg_generator is leaking, except:

  • buildbot/s390x RHEL8 Refleaks PR: test_import leaked [1, 1, 4] memory blocks, sum=6 Link

Suggesting to land this PR as a start, then focus on the RHEL8/s390x issue.

Copy link
Member

@sunmy2019 sunmy2019 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other parts LGTM

@erlend-aasland erlend-aasland added the 🔨 test-with-refleak-buildbots Test PR w/ refleak buildbots; report in status section label Jun 23, 2023
@bedevere-bot

This comment was marked as outdated.

@bedevere-bot bedevere-bot removed the 🔨 test-with-refleak-buildbots Test PR w/ refleak buildbots; report in status section label Jun 23, 2023
@erlend-aasland erlend-aasland changed the title gh-102251: Fix test_import ref leak gh-102251: Disable non-rerunnable test in test_import Jun 23, 2023
@erlend-aasland erlend-aasland merged commit 4849a80 into python:main Jun 23, 2023
@erlend-aasland erlend-aasland deleted the fix-test-import-leaks-alt branch June 23, 2023 23:34
@vstinner
Copy link
Member

@no_rerun(reason="rerun not possible; module state is never cleared (see gh-102251)")

IMO @no_rerun() is bad pattern and should be avoided or removed. They are many tests with side effects which cannot be cancelled because there is no API for that. For example, in the past, there were tests registering codecs and error handlers.

The usual fix is to run such test in subprocesses.

For example, test_audit runs subprocesses on functions registering audit hooks, since there is no function to unregister a audit hook by design.

@erlend-aasland
Copy link
Contributor Author

@vstinner: I agree that it is a bad pattern. This is a temporary fix only. See my comment earlier in this PR:

We want to be able to easily remove the no_rerun() hack when the original problem has been addressed.

@erlend-aasland
Copy link
Contributor Author

The usual fix is to run such test in subprocesses.

ISTM we should rework parts of test_import to follow this pattern.

@Yhg1s
Copy link
Member

Yhg1s commented Sep 18, 2023

This needs a backport to 3.12 to resolve the test_import leak that only shows up when you run python -m test -R:: test_import instead of python -m test -R :: test_import (note the space between -R ::). Some of the buildbots run with -R::.

@Yhg1s Yhg1s added the needs backport to 3.12 only security fixes label Sep 18, 2023
@miss-islington
Copy link
Contributor

Thanks @erlend-aasland for the PR 🌮🎉.. I'm working now to backport this PR to: 3.12.
🐍🍒⛏🤖

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Sep 18, 2023
@bedevere-app
Copy link

bedevere-app bot commented Sep 18, 2023

GH-109540 is a backport of this pull request to the 3.12 branch.

@bedevere-app bedevere-app bot removed the needs backport to 3.12 only security fixes label Sep 18, 2023
Yhg1s pushed a commit that referenced this pull request Sep 18, 2023
…) (#109540)

gh-102251: Disable non-rerunnable test in test_import (GH-106013)
(cherry picked from commit 4849a80)

Co-authored-by: Erlend E. Aasland <[email protected]>
@vstinner
Copy link
Member

If a test makes a change which cannot be undone, one option is to run it in a subprocess.

Another option is to add an API to undo the change. For example, codecs.unregister() was added to fix tests adding codecs.

See issue #108963 which is a similar issue.

@vstinner
Copy link
Member

Anyway, thanks for removing this ugly workaround :-(

    def setUpClass(cls):
        if '-R' in sys.argv or '--huntrleaks' in sys.argv:
            # https://github.com/python/cpython/issues/102251
            raise unittest.SkipTest('unresolved refleaks (see gh-102251)')

@erlend-aasland
Copy link
Contributor Author

Oh, I totally forgot about this. I still think Victor's proposal1 should be applied; this PR is a workaround, not a fix :)

Footnotes

  1. "The usual fix is to run such test in subprocesses." — V. Stinner.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants