Initial import of ORISYS arm workstation
This commit is contained in:
@@ -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'])
|
||||
Reference in New Issue
Block a user