aboutsummaryrefslogtreecommitdiffstats
path: root/library/python/filelock/ut/test_filelock.py
diff options
context:
space:
mode:
authorrobot-piglet <robot-piglet@yandex-team.com>2024-11-01 10:10:09 +0300
committerrobot-piglet <robot-piglet@yandex-team.com>2024-11-01 10:20:27 +0300
commit864de19590b66130e4e89d94921eac85f68726a4 (patch)
tree81e0df7c643d88edd6bd593c013c9c498295f9b6 /library/python/filelock/ut/test_filelock.py
parente130c0be0961db0ebe54f3c23c14ec5b940c32d0 (diff)
downloadydb-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.py61
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()