25 lines
1.4 KiB
Python
25 lines
1.4 KiB
Python
"""Pure accounting tests; no laboratory token is consumed."""
|
|
import copy,unittest
|
|
from ledger import validate
|
|
from plans import RUNS,SCOPE,CAPS
|
|
class AccountingTests(unittest.TestCase):
|
|
def state(self):return dict(scope=SCOPE,runs={},events=[])
|
|
def add(self,s,rid,kind,count):
|
|
s['runs'][rid]=dict(planned=RUNS[rid]['limits'],reserved=dict.fromkeys(RUNS[rid]['limits'],0))
|
|
s['runs'][rid]['reserved'][kind]=count
|
|
for i in range(count):s['events'].append(dict(id=rid,kind=kind,ns=1,sequence=len(s['events'])))
|
|
def test_fixed_eight(self):self.assertEqual(len(RUNS),8);self.assertEqual(sum(CAPS.values()),96);validate(self.state())
|
|
def test_all_caps(self):
|
|
s=self.state()
|
|
for rid in RUNS:self.add(s,rid,'capture',RUNS[rid]['limits']['capture'])
|
|
validate(s);self.assertEqual(len(s['events']),90)
|
|
def test_local_exceeded(self):
|
|
s=self.state();self.add(s,'saved-A','capture',11)
|
|
with self.assertRaises(ValueError):validate(s)
|
|
def test_old_ticket(self):
|
|
s=self.state();s['scope']='STEP20C_TARGETED_FINAL_BYTES_V1'
|
|
with self.assertRaises(ValueError):validate(s)
|
|
def test_reconcile(self):
|
|
s=self.state();self.add(s,'saved-A','capture',1);s['runs']['saved-A']['reserved']['capture']=0
|
|
with self.assertRaises(ValueError):validate(s)
|
|
if __name__=='__main__':unittest.main()
|