Skip to content

Commit 223e030

Browse files
authored
XFAIL TestLocalPath.test_make_numbered_dir_multiprocess_safe (#11611)
The tested py.path.local.make_numbered_dir function is *not* multiprocess safe, because is uses os.listdir which itself is not. The os.listdir documentation explicitly states that: > If a file is removed from or added to the directory during the call > of this function, whether a name for that file be included is unspecified. This can lead to a race when: 1. process A attempts to create directory N 2. the creation fails, as another process already created it in the meantime 3. process A calls listdir to determine a more recent maxnum 4. processes B+ repeatedly create newer directories and they delete directory N 5. process A doesn't have directory N or any newer directory in listdir result 6. process A attempts to create directory N again and raises For details, see #11603 (comment) and bellow. Additionally, the test itself has a race in batch_make_numbered_dirs. When this functions attempts to write to repro-N/foo, repro-N may have already been removed by another process. For details, see #11603 (comment) and bellow. --- The tested py.path.local.make_numbered_dir function is not used in pytest. There is a different implementation in _pytest.pathlib. Closes #11603
1 parent 1eca302 commit 223e030

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

testing/_py/test_local.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -868,6 +868,9 @@ def test_fspath_protocol_other_class(self, fake_fspath_obj):
868868
py_path.strpath, str_path
869869
)
870870

871+
@pytest.mark.xfail(
872+
reason="#11603", raises=(error.EEXIST, error.ENOENT), strict=False
873+
)
871874
def test_make_numbered_dir_multiprocess_safe(self, tmpdir):
872875
# https://github.com/pytest-dev/py/issues/30
873876
with multiprocessing.Pool() as pool:

0 commit comments

Comments
 (0)