Skip to content

Commit

Permalink
bpo-30028: Add comments, move the test to test_support.py
Browse files Browse the repository at this point in the history
Added an explanatory comment and moved the test to test_support.py.
I also modified the test to be in line with the other tests of temp_cwd.
  • Loading branch information
Anselm Kruis committed Apr 10, 2017
1 parent 7b96cf7 commit 9ca9665
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 14 deletions.
2 changes: 2 additions & 0 deletions Lib/test/support/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -965,6 +965,8 @@ def temp_dir(path=None, quiet=False):
try:
yield path
finally:
# In case the process forks, let only the parent remove the
# directory. The child has a diffent process id. (bpo-30028)
if dir_created and pid == os.getpid():
rmtree(path)

Expand Down
14 changes: 0 additions & 14 deletions Lib/test/test_regrtest.py
Original file line number Diff line number Diff line change
Expand Up @@ -821,19 +821,5 @@ def test_crashed(self):
randomize=True)


class TempCwdTestCase(unittest.TestCase):
@unittest.skipUnless(hasattr(os, "fork"), "test requires os.fork")
def test_forked_child(self):
with support.temp_cwd() as cwd:
pid = os.fork()
if pid != 0:
# parent
os.waitpid(pid, 0)
self.assertTrue(os.path.isdir(cwd), "directory was removed "+cwd)
if pid == 0:
# terminate the child in order to not confuse the test runner
os._exit(0)


if __name__ == '__main__':
unittest.main()
14 changes: 14 additions & 0 deletions Lib/test/test_support.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,20 @@ def test_temp_dir__existing_dir__quiet_true(self):
f'temporary directory {path!r}: '),
warn)

@unittest.skipUnless(hasattr(os, "fork"), "test requires os.fork")
def test_temp_dir__forked_child(self):
"""Test that a forked child process does not remove the directory."""
with support.temp_cwd() as temp_path:
pid = os.fork()
if pid != 0:
# parent process
os.waitpid(pid, 0) # wait for the child to terminate
# make sure that temp_path is still present
self.assertTrue(os.path.isdir(temp_path))
if pid == 0:
# terminate the child in order to not confuse the test runner
os._exit(0)

# Tests for change_cwd()

def test_change_cwd(self):
Expand Down

0 comments on commit 9ca9665

Please sign in to comment.