Initial import of ORISYS arm workstation
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
from pathlib import Path
|
||||
from unittest import TestCase
|
||||
from station.rpc import call
|
||||
|
||||
|
||||
class BackendTest(TestCase):
|
||||
def test_offline_rpc_task_lifecycle_and_shutdown(self):
|
||||
with tempfile.TemporaryDirectory() as folder:
|
||||
socket=Path(folder)/'backend.sock'
|
||||
proc=subprocess.Popen([sys.executable,'-m','station.control_service','--socket',str(socket),'--offline'],
|
||||
stdout=subprocess.PIPE,stderr=subprocess.STDOUT,text=True)
|
||||
try:
|
||||
deadline=time.monotonic()+10
|
||||
while not socket.exists() and proc.poll() is None and time.monotonic()<deadline: time.sleep(.05)
|
||||
self.assertIsNone(proc.poll())
|
||||
self.assertEqual(call(socket,'ping')['protocol'],1)
|
||||
catalog=call(socket,'catalog')
|
||||
unavailable={r['id'] for r in catalog['actions'] if not r['available']}
|
||||
self.assertIn('gauge_run',unavailable)
|
||||
with self.assertRaises(RuntimeError): call(socket,'submit',{'action':'__import__','arm':'89'})
|
||||
arms=[]
|
||||
while time.monotonic()<deadline:
|
||||
snap=call(socket,'snapshot');arms=snap.get('arms',[])
|
||||
if arms: break
|
||||
time.sleep(.05)
|
||||
self.assertTrue(arms)
|
||||
aid=arms[0]['id']
|
||||
token=call(socket,'submit',{'action':'handeye_show','arm':aid})['task_id']
|
||||
while time.monotonic()<deadline:
|
||||
row=call(socket,'task',{'task_id':token})
|
||||
if row['state'] not in ('queued','running'): break
|
||||
time.sleep(.05)
|
||||
self.assertEqual(row['state'],'succeeded')
|
||||
token=call(socket,'submit',{'action':'gripper_up','arm':aid})['task_id']
|
||||
while time.monotonic()<deadline:
|
||||
row=call(socket,'task',{'task_id':token})
|
||||
if row['state'] not in ('queued','running'): break
|
||||
time.sleep(.05)
|
||||
self.assertEqual(row['state'],'failed');self.assertIn('离线',row['result']['message'])
|
||||
finally:
|
||||
proc.terminate()
|
||||
try: output,_=proc.communicate(timeout=10)
|
||||
except subprocess.TimeoutExpired:
|
||||
proc.kill();output,_=proc.communicate();self.fail(output)
|
||||
self.assertEqual(proc.returncode,0,output)
|
||||
self.assertFalse(socket.exists())
|
||||
Reference in New Issue
Block a user