2022-06-23 12:27:30 |
Benjamin Drung |
description |
Following sample test case causes pytest-cov to fail:
```
import os
import subprocess
import sys
import tempfile
import textwrap
import unittest
class Test(unittest.TestCase):
maxDiff = None
def test_deleted_working_directory(self):
"""Relative Python script from deleted working directory."""
orig_cwd = os.getcwd()
try:
with tempfile.TemporaryDirectory() as tmpdir:
deleted_dir = os.path.join(tmpdir, "gone")
os.mkdir(deleted_dir)
os.chdir(deleted_dir)
os.rmdir(deleted_dir)
with open(os.path.join(tmpdir, "script.py"), "w") as script:
script.write("raise ValueError()\n")
env = os.environ.copy()
env["PYTHONPATH"] = orig_cwd
process = subprocess.run(
[sys.executable, "../script.py"],
env=env,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
finally:
os.chdir(orig_cwd)
print(process.stderr.decode())
self.assertEqual(
process.stderr.decode(),
textwrap.dedent(
"""\
Traceback (most recent call last):
File "../script.py", line 1, in <module>
raise ValueError()
ValueError
"""
),
)
self.assertEqual(process.stdout.decode(), "")
self.assertEqual(process.returncode, 1)
```
Run this script with `python3 -m pytest --cov=. test.py` and stderr will contain following stack trace:
```
Error processing line 1 of /usr/lib/python3/dist-packages/init_cov_core.pth:
Traceback (most recent call last):
File "/usr/lib/python3.10/site.py", line 192, in addpackage
exec(line)
File "<string>", line 1, in <module>
File "/usr/lib/python3/dist-packages/cov_core_init.py", line 20, in <module>
import cov_core # noqa: register multiprocessing handler
File "/usr/lib/python3/dist-packages/cov_core.py", line 5, in <module>
import coverage
File "/usr/lib/python3/dist-packages/coverage/__init__.py", line 15, in <module>
from coverage.control import Coverage, process_startup
File "/usr/lib/python3/dist-packages/coverage/control.py", line 17, in <module>
from coverage.annotate import AnnotateReporter
File "/usr/lib/python3/dist-packages/coverage/annotate.py", line 9, in <module>
from coverage.files import flat_rootname
File "/usr/lib/python3/dist-packages/coverage/files.py", line 166, in <module>
set_relative_directory()
File "/usr/lib/python3/dist-packages/coverage/files.py", line 28, in set_relative_directory
RELATIVE_DIR = os.path.normcase(abs_file(os.curdir) + os.sep)
File "/usr/lib/python3/dist-packages/coverage/files.py", line 149, in abs_file
path = os.path.realpath(path)
File "/usr/lib/python3.10/posixpath.py", line 396, in realpath
return abspath(path)
File "/usr/lib/python3.10/posixpath.py", line 383, in abspath
cwd = os.getcwd()
FileNotFoundError: [Errno 2] No such file or directory
Remainder of file ignored
pytest-cov: Failed to setup subprocess coverage.
``` |
Upstream bug: https://github.com/pytest-dev/pytest-cov/issues/541
Following sample test case causes pytest-cov to fail:
```
import os
import subprocess
import sys
import tempfile
import textwrap
import unittest
class Test(unittest.TestCase):
maxDiff = None
def test_deleted_working_directory(self):
"""Relative Python script from deleted working directory."""
orig_cwd = os.getcwd()
try:
with tempfile.TemporaryDirectory() as tmpdir:
deleted_dir = os.path.join(tmpdir, "gone")
os.mkdir(deleted_dir)
os.chdir(deleted_dir)
os.rmdir(deleted_dir)
with open(os.path.join(tmpdir, "script.py"), "w") as script:
script.write("raise ValueError()\n")
env = os.environ.copy()
env["PYTHONPATH"] = orig_cwd
process = subprocess.run(
[sys.executable, "../script.py"],
env=env,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
finally:
os.chdir(orig_cwd)
print(process.stderr.decode())
self.assertEqual(
process.stderr.decode(),
textwrap.dedent(
"""\
Traceback (most recent call last):
File "../script.py", line 1, in <module>
raise ValueError()
ValueError
"""
),
)
self.assertEqual(process.stdout.decode(), "")
self.assertEqual(process.returncode, 1)
```
Run this script with `python3 -m pytest --cov=. test.py` and stderr will contain following stack trace:
```
Error processing line 1 of /usr/lib/python3/dist-packages/init_cov_core.pth:
Traceback (most recent call last):
File "/usr/lib/python3.10/site.py", line 192, in addpackage
exec(line)
File "<string>", line 1, in <module>
File "/usr/lib/python3/dist-packages/cov_core_init.py", line 20, in <module>
import cov_core # noqa: register multiprocessing handler
File "/usr/lib/python3/dist-packages/cov_core.py", line 5, in <module>
import coverage
File "/usr/lib/python3/dist-packages/coverage/__init__.py", line 15, in <module>
from coverage.control import Coverage, process_startup
File "/usr/lib/python3/dist-packages/coverage/control.py", line 17, in <module>
from coverage.annotate import AnnotateReporter
File "/usr/lib/python3/dist-packages/coverage/annotate.py", line 9, in <module>
from coverage.files import flat_rootname
File "/usr/lib/python3/dist-packages/coverage/files.py", line 166, in <module>
set_relative_directory()
File "/usr/lib/python3/dist-packages/coverage/files.py", line 28, in set_relative_directory
RELATIVE_DIR = os.path.normcase(abs_file(os.curdir) + os.sep)
File "/usr/lib/python3/dist-packages/coverage/files.py", line 149, in abs_file
path = os.path.realpath(path)
File "/usr/lib/python3.10/posixpath.py", line 396, in realpath
return abspath(path)
File "/usr/lib/python3.10/posixpath.py", line 383, in abspath
cwd = os.getcwd()
FileNotFoundError: [Errno 2] No such file or directory
Remainder of file ignored
pytest-cov: Failed to setup subprocess coverage.
``` |
|