import json import tempfile import threading import time from pathlib import Path from unittest import TestCase from station.operation_log import OperationLog from station.tasks import TaskManager class OperationLogTest(TestCase): def test_memory_bounded_but_disk_retains_every_event(self): with tempfile.TemporaryDirectory() as folder: log = OperationLog(Path(folder)/'events.jsonl', limit=2) for i in range(5): log.add('received', str(i), action='stage_track', arm='89') snap=log.snapshot() self.assertEqual([r['seq'] for r in snap['events']], [4,5]) rows=[json.loads(line) for line in Path(snap['path']).read_text().splitlines()] self.assertEqual([r['seq'] for r in rows],list(range(1,6))) def test_fast_task_keeps_all_transitions_between_gui_polls(self): manager=TaskManager() try: def execute(event): manager.set_phase(event,'识别目标') manager.set_phase(event,'识别目标') return {'ok':True,'message':'执行完成'} token=manager.submit('stage_track', {'robot-control'},execute,context={'arm':'89'}) deadline=time.monotonic()+2 while manager.snapshot(token)['state'] in ('queued','running') and time.monotonic()