mirror of
https://github.com/python/cpython
synced 2024-10-14 16:59:44 +00:00
gh-97669: Fix test_tools reference leak (#98216)
test_tools.test_sundry() now uses an unittest mock to prevent the logging module to register a real "atfork" function which kept the logging module dictionary alive. So the logging module can be properly unloaded. Previously, the logging module was loaded before test_sundry(), but it's no longer the case since recent test_tools sub-tests removals.
This commit is contained in:
parent
0895c2a066
commit
a8c8526fd8
|
@ -246,3 +246,11 @@ def modules_cleanup(oldmodules):
|
|||
# do currently). Implicitly imported *real* modules should be left alone
|
||||
# (see issue 10556).
|
||||
sys.modules.update(oldmodules)
|
||||
|
||||
|
||||
def mock_register_at_fork(func):
|
||||
# bpo-30599: Mock os.register_at_fork() when importing the random module,
|
||||
# since this function doesn't allow to unregister callbacks and would leak
|
||||
# memory.
|
||||
from unittest import mock
|
||||
return mock.patch('os.register_at_fork', create=True)(func)
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
import unittest
|
||||
from unittest import mock
|
||||
from test.support import verbose
|
||||
from test.support.import_helper import forget
|
||||
from test.support.import_helper import forget, mock_register_at_fork
|
||||
from test.support.os_helper import (TESTFN, unlink, rmtree)
|
||||
from test.support import script_helper, threading_helper
|
||||
|
||||
|
@ -41,12 +41,6 @@ def task(N, done, done_tasks, errors):
|
|||
if finished:
|
||||
done.set()
|
||||
|
||||
def mock_register_at_fork(func):
|
||||
# bpo-30599: Mock os.register_at_fork() when importing the random module,
|
||||
# since this function doesn't allow to unregister callbacks and would leak
|
||||
# memory.
|
||||
return mock.patch('os.register_at_fork', create=True)(func)
|
||||
|
||||
# Create a circular import structure: A -> C -> B -> D -> A
|
||||
# NOTE: `time` is already loaded and therefore doesn't threaten to deadlock.
|
||||
|
||||
|
|
|
@ -27,7 +27,11 @@ class TestSundryScripts(unittest.TestCase):
|
|||
|
||||
skiplist = denylist + allowlist + other
|
||||
|
||||
def test_sundry(self):
|
||||
# import logging registers "atfork" functions which keep indirectly the
|
||||
# logging module dictionary alive. Mock the function to be able to unload
|
||||
# cleanly the logging module.
|
||||
@import_helper.mock_register_at_fork
|
||||
def test_sundry(self, mock_os):
|
||||
old_modules = import_helper.modules_setup()
|
||||
try:
|
||||
for fn in os.listdir(scriptsdir):
|
||||
|
|
Loading…
Reference in a new issue