diff options
author | robot-piglet <robot-piglet@yandex-team.com> | 2024-11-01 10:10:09 +0300 |
---|---|---|
committer | robot-piglet <robot-piglet@yandex-team.com> | 2024-11-01 10:20:27 +0300 |
commit | 864de19590b66130e4e89d94921eac85f68726a4 (patch) | |
tree | 81e0df7c643d88edd6bd593c013c9c498295f9b6 /library/python/filelock/ut/test_filelock.py | |
parent | e130c0be0961db0ebe54f3c23c14ec5b940c32d0 (diff) | |
download | ydb-864de19590b66130e4e89d94921eac85f68726a4.tar.gz |
Intermediate changes
commit_hash:afe2bc6dcfc79e6d34dabab9a0c92d3fa18bc87d
Diffstat (limited to 'library/python/filelock/ut/test_filelock.py')
-rw-r--r-- | library/python/filelock/ut/test_filelock.py | 61 |
1 files changed, 58 insertions, 3 deletions
diff --git a/library/python/filelock/ut/test_filelock.py b/library/python/filelock/ut/test_filelock.py index 60a3722390..018acf290b 100644 --- a/library/python/filelock/ut/test_filelock.py +++ b/library/python/filelock/ut/test_filelock.py @@ -58,12 +58,12 @@ def test_filelock_init_acquired(): def test_concurrent_lock(): - filename = 'con.lock' + filename = 'thread.lock' def lock(): lock = library.python.filelock.FileLock(filename) time.sleep(1) - lock.acquire() + assert lock.acquire() lock.release() try: os.unlink(filename) @@ -73,7 +73,6 @@ def test_concurrent_lock(): threads = [] for i in range(100): t = threading.Thread(target=lock) - t.daemon = True threads.append(t) for t in threads: @@ -81,3 +80,59 @@ def test_concurrent_lock(): for t in threads: t.join() + + +def test_pidfilelock(): + lock_file = 'pidfile.lock' + # there should be no info + lock = library.python.filelock.PidFileLock(lock_file) + assert lock.info.pid == 0 + assert lock.info.time == 0 + + with library.python.filelock.PidFileLock(lock_file) as lock: + assert lock.info.pid == os.getpid() + assert lock.info.time <= time.time() + assert lock.info.time > time.time() - 2 + + newlock = library.python.filelock.PidFileLock(lock_file) + # info shouldn't require locking + assert newlock.info.pid == os.getpid() + assert not newlock.acquire(blocking=False) + + newlock = library.python.filelock.PidFileLock(lock_file) + # info is still accessible + assert newlock.info.pid == os.getpid() + t = newlock.info.time + # info is updated + time.sleep(1) + with newlock as lock: + assert lock.info.time > t + + +def _try_acquire_pidlock(lock_file, out_file, lock_pid=None): + lock = library.python.filelock.PidFileLock(lock_file) + with open(out_file, "w") as afile: + afile.write("1" if lock.acquire(blocking=False) else "0") + + if lock_pid is not None: + assert lock.info.pid == lock_pid + + +def test_pidfilelock_multiprocessing(): + lock_file = 'mp_pidfile.lock' + out_file = lock_file + ".out" + + # subprocess can aquire lock + proc = multiprocessing.Process(target=_try_acquire_pidlock, args=(lock_file, out_file)) + proc.start() + proc.join() + with open(out_file) as afile: + assert "1" == afile.read() + + # subprocess can't aquire lock + with library.python.filelock.PidFileLock(lock_file) as lock: + proc = multiprocessing.Process(target=_try_acquire_pidlock, args=(lock_file, out_file, lock.info.pid)) + proc.start() + proc.join() + with open(out_file) as afile: + assert "0" == afile.read() |