test: clean up concurrent cooldown processes
This commit is contained in:
+21
-17
@@ -137,24 +137,28 @@ def test_check_and_reserve_atomic_under_concurrent_access(tmp_path: Path) -> Non
|
|||||||
import multiprocessing
|
import multiprocessing
|
||||||
|
|
||||||
state_file = tmp_path / "concurrent.json"
|
state_file = tmp_path / "concurrent.json"
|
||||||
results = multiprocessing.Manager().list()
|
# Explicitly shut down the manager and never leak a timed-out child.
|
||||||
|
with multiprocessing.Manager() as manager:
|
||||||
|
results = manager.list()
|
||||||
|
processes = []
|
||||||
|
for i in range(3):
|
||||||
|
args = (i, str(state_file), results)
|
||||||
|
p = multiprocessing.Process(target=_try_reserve_for_test, args=(args,))
|
||||||
|
processes.append(p)
|
||||||
|
for p in processes:
|
||||||
|
p.start()
|
||||||
|
for p in processes:
|
||||||
|
p.join(timeout=10)
|
||||||
|
for p in processes:
|
||||||
|
if p.is_alive():
|
||||||
|
p.terminate()
|
||||||
|
p.join(timeout=2)
|
||||||
|
|
||||||
# Launch 3 processes simultaneously
|
# At most one should succeed
|
||||||
processes = []
|
ok_count = sum(1 for _, r in results if r == "ok")
|
||||||
for i in range(3):
|
assert ok_count == 1, f"Expected exactly 1 ok, got {ok_count}: {results}"
|
||||||
args = (i, str(state_file), results)
|
denied_count = sum(1 for _, r in results if "cooldown" in r)
|
||||||
p = multiprocessing.Process(target=_try_reserve_for_test, args=(args,))
|
assert denied_count == 2, f"Expected 2 denied, got {denied_count}: {results}"
|
||||||
processes.append(p)
|
|
||||||
for p in processes:
|
|
||||||
p.start()
|
|
||||||
for p in processes:
|
|
||||||
p.join(timeout=10)
|
|
||||||
|
|
||||||
# At most one should succeed
|
|
||||||
ok_count = sum(1 for _, r in results if r == "ok")
|
|
||||||
assert ok_count == 1, f"Expected exactly 1 ok, got {ok_count}: {results}"
|
|
||||||
denied_count = sum(1 for _, r in results if "cooldown" in r)
|
|
||||||
assert denied_count == 2, f"Expected 2 denied, got {denied_count}: {results}"
|
|
||||||
|
|
||||||
|
|
||||||
# A03: Manual redirect control tests
|
# A03: Manual redirect control tests
|
||||||
|
|||||||
Reference in New Issue
Block a user