Files
orisys_arm/station/test/test_module_independence.py
T

35 lines
1.7 KiB
Python

"""Only commands writing the same device conflict; all functions are fake."""
import threading
import time
from unittest import TestCase
from station.command_policy import resources_for
from station.tasks import TaskManager
class ModuleIndependenceTest(TestCase):
def test_four_modules_execute_concurrently(self):
manager=TaskManager();release=threading.Event();started={}
def operation(name,event):
started[name].set();release.wait(2)
return {'ok':True}
try:
tokens=[]
for name in ('real_up','camera_refresh','gripper_open','tactile_refresh'):
started[name]=threading.Event()
tokens.append(manager.submit(name,resources_for(name,'89'),lambda event,name=name:operation(name,event)))
self.assertTrue(all(flag.wait(1) for flag in started.values()))
self.assertTrue(all(manager.snapshot(t)['state']=='running' for t in tokens))
with self.assertRaises(RuntimeError):
manager.submit('gripper_close',resources_for('gripper_close','89'),lambda event:{'ok':True})
finally:
release.set();manager.close()
def test_only_composite_a7_workflow_also_owns_gripper(self):
grip=resources_for('gripper_open','89')
for action in ('real_up','reset_home','teach_goto','stage_track','stage_locate'):
self.assertFalse(resources_for(action,'89') & grip,action)
for action in ('stage_screw','pipeline'):
self.assertTrue(resources_for(action,'89') & grip,action)
self.assertFalse(resources_for(action,'89') & resources_for('tactile_reset','89'),action)
self.assertFalse(resources_for(action,'89') & resources_for('camera_refresh','89'),action)