40 lines
1.2 KiB
Python
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')
|