32 lines
1.5 KiB
Python
32 lines
1.5 KiB
Python
"""Supplemental Windows lock compatibility in a new local test directory."""
|
|
from pathlib import Path
|
|
import json
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
|
|
target = str(Path(sys.argv[1]).resolve())
|
|
sys.path.insert(0, target)
|
|
import filelock
|
|
assert filelock.__version__ == '4.2.1'
|
|
assert Path(filelock.__file__).resolve().is_relative_to(Path(target))
|
|
child = '''import sys
|
|
sys.path.insert(0,sys.argv[1])
|
|
from filelock import FileLock,SoftFileLock,Timeout
|
|
cls=FileLock if sys.argv[2]=='native' else SoftFileLock
|
|
try:
|
|
with cls(sys.argv[3],timeout=0.2): print('acquired')
|
|
except Timeout: print('timed-out')
|
|
'''
|
|
cases = []
|
|
with tempfile.TemporaryDirectory(prefix='jt-sec02-windows-lock-') as temporary:
|
|
for kind, cls in [('native', filelock.FileLock), ('soft', filelock.SoftFileLock)]:
|
|
command=[sys.executable,'-c',child,target,kind,str(Path(temporary)/(kind+'.lock'))]
|
|
with cls(command[-1],timeout=1):
|
|
result=subprocess.run(command,capture_output=True,text=True,timeout=5,check=True)
|
|
assert result.stdout.strip()=='timed-out',result.stdout
|
|
result=subprocess.run(command,capture_output=True,text=True,timeout=5,check=True)
|
|
assert result.stdout.strip()=='acquired',result.stdout
|
|
cases.append({'case':kind,'finiteContentionTimeout':True,'acquiredAfterRelease':True})
|
|
print(json.dumps({'status':'PASS','platform':sys.platform,'filelock':filelock.__version__,'cases':cases,'limits':'Two fresh same-version Windows lock participants. No Windows shared-cache ACL/symlink security or cross-version migration claim.'}))
|