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
+51
View File
@@ -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())