swayfx-mosaic/tooling/probes/step20c-rotated-partial-popup/test-budget.py

40 lines
1.2 KiB
Python

"""Offline ledger tests; no compositor or campaign reservation."""
from pathlib import Path
import tempfile
from budget import Budget
with tempfile.TemporaryDirectory() as directory:
lab = Path(directory)
budget = Budget(lab)
assert budget.reserve('control')['runs'] == ['control']
try:
budget.reserve('control')
except ValueError:
pass
else:
raise AssertionError('duplicate accepted')
assert budget.reserve('private_standard')['runs'][-1] == 'private_standard'
assert budget.reserve('private_mosaic')['runs'][-1] == 'private_mosaic'
try:
budget.reserve('control')
except ValueError:
pass
else:
raise AssertionError('exhaustion bypass')
try:
Budget(lab)
except BlockingIOError:
pass
else:
raise AssertionError('lock bypass')
with tempfile.TemporaryDirectory() as directory:
lab = Path(directory)
(lab / 'runs').mkdir()
(lab / 'runs' / 'failed').mkdir()
try:
Budget(lab).read()
except ValueError:
pass
else:
raise AssertionError('missing ledger accepted')
print('PASS persistence, duplicate, exhaustion, lock, missing-ledger')