aboutsummaryrefslogtreecommitdiffstats
path: root/library/python/filelock/ut
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
parente130c0be0961db0ebe54f3c23c14ec5b940c32d0 (diff)
downloadydb-864de19590b66130e4e89d94921eac85f68726a4.tar.gz
Intermediate changes
commit_hash:afe2bc6dcfc79e6d34dabab9a0c92d3fa18bc87d
Diffstat (limited to 'library/python/filelock/ut')
-rw-r--r--library/python/filelock/ut/test_filelock.py61
-rw-r--r--library/python/filelock/ut/ya.make18
2 files changed, 75 insertions, 4 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()
diff --git a/library/python/filelock/ut/ya.make b/library/python/filelock/ut/ya.make
index a62699640f..60108f73c6 100644
--- a/library/python/filelock/ut/ya.make
+++ b/library/python/filelock/ut/ya.make
@@ -1,9 +1,25 @@
PY23_TEST()
-TEST_SRCS(test_filelock.py)
+TEST_SRCS(
+ test_filelock.py
+)
PEERDIR(
library/python/filelock
)
+IF (OS_DARWIN)
+ SIZE(LARGE)
+ TAG(
+ ya:fat
+ ya:exotic_platform
+ )
+ELSEIF (OS_WINDOWS)
+ SIZE(LARGE)
+ TAG(
+ ya:fat
+ sb:ssd&~MULTISLOT&WINDOWS
+ )
+ENDIF()
+
END()