mirror of
https://github.com/python/cpython.git
synced 2026-01-06 07:22:09 +00:00
bpo-22367: Update test_fcntl.py for spawn process mode (#17154)
This commit is contained in:
parent
79e18ec75d
commit
9960230f76
1 changed files with 19 additions and 9 deletions
|
|
@ -51,6 +51,21 @@ def __init__(self, fn):
|
|||
def fileno(self):
|
||||
return self.fn
|
||||
|
||||
def try_lockf_on_other_process_fail(fname, cmd):
|
||||
f = open(fname, 'wb+')
|
||||
try:
|
||||
fcntl.lockf(f, cmd)
|
||||
except BlockingIOError:
|
||||
pass
|
||||
finally:
|
||||
f.close()
|
||||
|
||||
def try_lockf_on_other_process(fname, cmd):
|
||||
f = open(fname, 'wb+')
|
||||
fcntl.lockf(f, cmd)
|
||||
fcntl.lockf(f, fcntl.LOCK_UN)
|
||||
f.close()
|
||||
|
||||
class TestFcntl(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
|
|
@ -138,28 +153,23 @@ def test_flock(self):
|
|||
self.assertRaises(ValueError, fcntl.flock, -1, fcntl.LOCK_SH)
|
||||
self.assertRaises(TypeError, fcntl.flock, 'spam', fcntl.LOCK_SH)
|
||||
|
||||
@unittest.skipIf(platform.system() == "AIX", "AIX returns PermissionError")
|
||||
def test_lockf_exclusive(self):
|
||||
self.f = open(TESTFN, 'wb+')
|
||||
cmd = fcntl.LOCK_EX | fcntl.LOCK_NB
|
||||
def try_lockf_on_other_process():
|
||||
self.assertRaises(BlockingIOError, fcntl.lockf, self.f, cmd)
|
||||
|
||||
fcntl.lockf(self.f, cmd)
|
||||
p = Process(target=try_lockf_on_other_process)
|
||||
p = Process(target=try_lockf_on_other_process_fail, args=(TESTFN, cmd))
|
||||
p.start()
|
||||
p.join()
|
||||
fcntl.lockf(self.f, fcntl.LOCK_UN)
|
||||
self.assertEqual(p.exitcode, 0)
|
||||
|
||||
@unittest.skipIf(platform.system() == "AIX", "AIX returns PermissionError")
|
||||
def test_lockf_share(self):
|
||||
self.f = open(TESTFN, 'wb+')
|
||||
cmd = fcntl.LOCK_SH | fcntl.LOCK_NB
|
||||
def try_lockf_on_other_process():
|
||||
fcntl.lockf(self.f, cmd)
|
||||
fcntl.lockf(self.f, fcntl.LOCK_UN)
|
||||
|
||||
fcntl.lockf(self.f, cmd)
|
||||
p = Process(target=try_lockf_on_other_process)
|
||||
p = Process(target=try_lockf_on_other_process, args=(TESTFN, cmd))
|
||||
p.start()
|
||||
p.join()
|
||||
fcntl.lockf(self.f, fcntl.LOCK_UN)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue