testing: Add test to assert path hooks ignored in sys.path
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
import pathlib
|
||||||
|
import tempfile
|
||||||
import unittest.mock
|
import unittest.mock
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
@@ -191,6 +193,43 @@ class TestRemoteControl:
|
|||||||
control.loop_once()
|
control.loop_once()
|
||||||
assert control.failures
|
assert control.failures
|
||||||
|
|
||||||
|
def test_ignore_sys_path_hook_entry(
|
||||||
|
self, pytester: pytest.Pytester, monkeypatch: pytest.MonkeyPatch
|
||||||
|
) -> None:
|
||||||
|
# Modifying sys.path as seen by the worker process is a bit tricky,
|
||||||
|
# because any changes made in the current process do not carry over.
|
||||||
|
# However, we can leverage the `sitecustomize` behavior to run arbitrary
|
||||||
|
# code when the subprocess interpreter is starting up. We just need to
|
||||||
|
# install our module in the search path, which we can accomplish by
|
||||||
|
# adding a temporary directory to PYTHONPATH.
|
||||||
|
tmpdir = tempfile.TemporaryDirectory()
|
||||||
|
with open(pathlib.Path(tmpdir.name) / "sitecustomize.py", "w") as custom:
|
||||||
|
print(
|
||||||
|
textwrap.dedent(
|
||||||
|
"""
|
||||||
|
import sys
|
||||||
|
sys.path.append('dummy.__path_hook__')
|
||||||
|
"""
|
||||||
|
),
|
||||||
|
file=custom,
|
||||||
|
)
|
||||||
|
|
||||||
|
monkeypatch.setenv("PYTHONPATH", tmpdir.name, prepend=":")
|
||||||
|
|
||||||
|
item = pytester.getitem(
|
||||||
|
textwrap.dedent(
|
||||||
|
"""
|
||||||
|
def test_func():
|
||||||
|
import sys
|
||||||
|
assert "dummy.__path_hook__" in sys.path
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
control = RemoteControl(item.config)
|
||||||
|
control.setup()
|
||||||
|
topdir, failures = control.runsession()[:2]
|
||||||
|
assert not failures
|
||||||
|
|
||||||
|
|
||||||
class TestLooponFailing:
|
class TestLooponFailing:
|
||||||
def test_looponfail_from_fail_to_ok(self, pytester: pytest.Pytester) -> None:
|
def test_looponfail_from_fail_to_ok(self, pytester: pytest.Pytester) -> None:
|
||||||
|
|||||||
Reference in New Issue
Block a user