Update workstation UI, ROS task control and device integration
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
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()<deadline:
|
||||
time.sleep(.01)
|
||||
events=manager.events.snapshot()['events']
|
||||
self.assertEqual([r['kind'] for r in events],['accepted','running','phase','succeeded'])
|
||||
self.assertTrue(all(r['task_id']==token and r['arm']=='89' for r in events))
|
||||
finally: manager.close()
|
||||
Reference in New Issue
Block a user