154 lines
6.2 KiB
Python
154 lines
6.2 KiB
Python
from aarecommon.models.tell import TellActivityEnum, TellPhaseEnum
|
|
|
|
from aare.daq.tell_state_machine import advance_tell_state, initial_tell_state
|
|
|
|
|
|
def test_mount_with_auto_unmount_uses_internal_phases():
|
|
state = initial_tell_state()
|
|
|
|
state = advance_tell_state(
|
|
state, "shell", 'mount("F", 2, 1, force=1, read_dm=0, auto_unmount=1)'
|
|
)
|
|
assert state.activity == TellActivityEnum.MOUNTING
|
|
assert state.operation == "mount"
|
|
assert state.phase == TellPhaseEnum.PREPARING
|
|
assert state.sample_position == "F2-1"
|
|
assert state.mount_success is None
|
|
|
|
state = advance_tell_state(state, "shell", "got result True")
|
|
assert state.activity == TellActivityEnum.MOUNTING
|
|
assert state.operation == "mount"
|
|
assert state.phase == TellPhaseEnum.PREPARING
|
|
assert state.mount_success is None
|
|
|
|
state = advance_tell_state(state, "shell", "unmount: None None None True")
|
|
assert state.activity == TellActivityEnum.UNMOUNTING
|
|
assert state.operation == "mount"
|
|
assert state.phase == TellPhaseEnum.AUTO_UNMOUNT
|
|
|
|
state = advance_tell_state(state, "Motion Sync", "Sample get from Gonio")
|
|
assert state.activity == TellActivityEnum.UNMOUNTING
|
|
assert state.operation == "mount"
|
|
assert state.phase == TellPhaseEnum.RETURNING_OLD_SAMPLE
|
|
|
|
state = advance_tell_state(state, "Motion Sync", "Sample put on Puck")
|
|
assert state.activity == TellActivityEnum.UNMOUNTING
|
|
assert state.operation == "mount"
|
|
assert state.phase == TellPhaseEnum.OLD_SAMPLE_RETURNED
|
|
|
|
state = advance_tell_state(state, "Motion Sync", "Sample get on Puck")
|
|
assert state.activity == TellActivityEnum.MOUNTING
|
|
assert state.operation == "mount"
|
|
assert state.phase == TellPhaseEnum.PICKING_NEW_SAMPLE
|
|
|
|
state = advance_tell_state(state, "Motion Sync", "Sample put on Gonio")
|
|
assert state.activity == TellActivityEnum.MOUNTING
|
|
assert state.operation == "mount"
|
|
assert state.phase == TellPhaseEnum.PLACING_NEW_SAMPLE
|
|
|
|
state = advance_tell_state(state, "Motion Sync", "Robot Clear after mount")
|
|
assert state.activity == TellActivityEnum.MOUNTING
|
|
assert state.operation == "mount"
|
|
assert state.phase == TellPhaseEnum.FINALIZING
|
|
|
|
state = advance_tell_state(state, "shell", "setting mounted sample to F2-1")
|
|
assert state.activity == TellActivityEnum.MOUNTING
|
|
assert state.operation == "mount"
|
|
assert state.phase == TellPhaseEnum.COMPLETE
|
|
assert state.sample_position == "F2-1"
|
|
assert state.mount_success is True
|
|
|
|
state = advance_tell_state(state, "state", "Ready")
|
|
assert state.activity == TellActivityEnum.IDLE
|
|
assert state.operation == "idle"
|
|
assert state.phase == TellPhaseEnum.IDLE
|
|
assert state.message == "Ready"
|
|
|
|
|
|
def test_plain_unmount_reaches_complete_before_ready():
|
|
state = initial_tell_state()
|
|
|
|
state = advance_tell_state(state, "shell", "unmount()")
|
|
assert state.activity == TellActivityEnum.UNMOUNTING
|
|
assert state.operation == "unmount"
|
|
assert state.phase == TellPhaseEnum.PREPARING
|
|
|
|
state = advance_tell_state(state, "Motion Sync", "Sample get from Gonio")
|
|
assert state.phase == TellPhaseEnum.RETURNING_OLD_SAMPLE
|
|
|
|
state = advance_tell_state(state, "Motion Sync", "Sample put on Puck")
|
|
assert state.phase == TellPhaseEnum.COMPLETE
|
|
assert state.mount_success is True
|
|
|
|
state = advance_tell_state(state, "state", "Ready")
|
|
assert state.activity == TellActivityEnum.IDLE
|
|
assert state.operation == "idle"
|
|
assert state.phase == TellPhaseEnum.IDLE
|
|
|
|
|
|
def test_gripper_detection_moves_to_failed_phase():
|
|
state = initial_tell_state()
|
|
state = advance_tell_state(state, "shell", 'mount("F", 2, 1)')
|
|
state = advance_tell_state(state, "Gripper detection", "Pin is lost")
|
|
|
|
assert state.activity == TellActivityEnum.ERROR
|
|
assert state.phase == TellPhaseEnum.FAILED
|
|
assert state.mount_success is False
|
|
assert state.mount_error == "Pin is lost"
|
|
|
|
|
|
def test_got_result_false_during_auto_unmount_is_not_error():
|
|
state = initial_tell_state()
|
|
|
|
state = advance_tell_state(
|
|
state, "shell", 'mount("D", 5, 14, force=1, read_dm=0, auto_unmount=1)'
|
|
)
|
|
assert state.activity == TellActivityEnum.MOUNTING
|
|
assert state.operation == "mount"
|
|
assert state.phase == TellPhaseEnum.PREPARING
|
|
|
|
state = advance_tell_state(state, "shell", "unmount: None None None True")
|
|
assert state.activity == TellActivityEnum.UNMOUNTING
|
|
assert state.operation == "mount"
|
|
assert state.phase == TellPhaseEnum.AUTO_UNMOUNT
|
|
|
|
state = advance_tell_state(state, "Motion Sync", "Sample get from Gonio")
|
|
assert state.activity == TellActivityEnum.UNMOUNTING
|
|
assert state.phase == TellPhaseEnum.RETURNING_OLD_SAMPLE
|
|
|
|
state = advance_tell_state(state, "shell", "got result False")
|
|
assert state.activity == TellActivityEnum.UNMOUNTING
|
|
assert state.operation == "mount"
|
|
assert state.phase == TellPhaseEnum.RETURNING_OLD_SAMPLE
|
|
assert state.mount_success is None
|
|
assert state.mount_error in (None, "")
|
|
|
|
state = advance_tell_state(state, "Motion Sync", "Sample put on Puck")
|
|
assert state.activity == TellActivityEnum.UNMOUNTING
|
|
assert state.phase == TellPhaseEnum.OLD_SAMPLE_RETURNED
|
|
|
|
state = advance_tell_state(state, "Motion Sync", "Sample get on Puck")
|
|
assert state.activity == TellActivityEnum.MOUNTING
|
|
assert state.phase == TellPhaseEnum.PICKING_NEW_SAMPLE
|
|
|
|
|
|
def test_mount_phase_after_old_sample_returned_confirms_auto_unmount_completed():
|
|
state = initial_tell_state()
|
|
|
|
state = advance_tell_state(
|
|
state, "shell", 'mount("F", 2, 1, force=1, read_dm=0, auto_unmount=1)'
|
|
)
|
|
state = advance_tell_state(state, "shell", "unmount: None None None True")
|
|
state = advance_tell_state(state, "Motion Sync", "Sample get from Gonio")
|
|
state = advance_tell_state(state, "Motion Sync", "Sample put on Puck")
|
|
assert state.phase == TellPhaseEnum.OLD_SAMPLE_RETURNED
|
|
|
|
state = advance_tell_state(state, "Motion Sync", "Sample get on Puck")
|
|
assert state.phase == TellPhaseEnum.PICKING_NEW_SAMPLE
|
|
|
|
state = advance_tell_state(state, "Motion Sync", "Sample put on Gonio")
|
|
assert state.phase == TellPhaseEnum.PLACING_NEW_SAMPLE
|
|
|
|
state = advance_tell_state(state, "Motion Sync", "Robot Clear after mount")
|
|
assert state.phase == TellPhaseEnum.FINALIZING
|