Initial import of ORISYS arm workstation

This commit is contained in:
cheng
2026-10-16 17:27:30 +08:00
commit 2b74c50ba8
745 changed files with 1199101 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
import threading
import time
from unittest import TestCase
from station.tasks import TaskManager
class TasksTest(TestCase):
def setUp(self): self.manager=TaskManager()
def tearDown(self): self.manager.close()
def wait(self,token):
until=time.monotonic()+3
while time.monotonic()<until:
row=self.manager.snapshot(token)
if row['state'] not in ('running','queued'): return row
time.sleep(.01)
self.fail('task did not complete')
def test_resources_held_until_completion(self):
gate=threading.Event()
one=self.manager.submit('move',{'arm:89'},lambda cancel:(gate.wait(2),{'ok':True})[1])
with self.assertRaises(RuntimeError): self.manager.submit('move-again',{'arm:89'},lambda e:{'ok':True})
other=self.manager.submit('camera',{'camera'},lambda e:{'ok':True})
self.assertEqual(self.wait(other)['state'],'succeeded')
gate.set();self.assertEqual(self.wait(one)['state'],'succeeded')
next_task=self.manager.submit('next',{'arm:89'},lambda e:{'ok':True})
self.assertEqual(self.wait(next_task)['state'],'succeeded')
def test_cancel_and_exception_release_ownership(self):
token=self.manager.submit('long',{'arm'},lambda event:(event.wait(2),{'ok':False})[1])
self.manager.cancel(token)
self.assertEqual(self.wait(token)['state'],'cancelled')
def fail(event): raise ValueError('driver rejected')
token=self.manager.submit('reject',{'arm'},fail)
result=self.wait(token)
self.assertEqual(result['state'],'failed');self.assertIn('driver rejected',result['result']['message'])