async def METHOD_NAME(api: OT3API, sig_name: str) -> None:
    assert sig_name in SIGNAL_TEST_NAMES
    if sig_name == "nsync":
        stop = MoveStopCondition.sync_line
    else:
        stop = MoveStopCondition.none
    _move_group_nsync = _build_move_group(MOVING_DISTANCE, MOVING_SPEED, stop)
    runner = MoveGroupRunner(move_groups=[[_move_group_nsync]])
    if api.is_simulator:
        # test that the required functionality exists
        assert runner.run
    else:
        backend: OT3Controller = api._backend  # type: ignore[assignment]
        messenger = backend._messenger
        if sig_name == "nsync":
            engage = api._backend.release_sync  # type: ignore[union-attr]
            release = api._backend.engage_sync  # type: ignore[union-attr]
        elif sig_name == "estop":
            engage = api._backend.engage_estop  # type: ignore[union-attr]
            release = api._backend.release_estop  # type: ignore[union-attr]
        async def _sleep_then_activate_stop_signal() -> None:
            if "external" in sig_name:
                print("waiting for EXTERNAL E-Stop button")
                return
            pause_seconds = MOVE_SECONDS / 2
            print(
                f"pausing {round(pause_seconds, 1)} second before activating {sig_name}"
            )
            await asyncio.sleep(pause_seconds)
            try:
                print(f"activating {sig_name}")
                await engage()
                print(f"pausing 1 second before deactivating {sig_name}")
                await asyncio.sleep(1)
            finally:
                print(f"deactivating {sig_name}")
                await release()
                await asyncio.sleep(0.5)
        async def _do_the_moving() -> None:
            print(f"moving {MOVING_DISTANCE} at speed {MOVING_SPEED}")
            try:
                await runner.run(can_messenger=messenger)
            except MotionFailedError:
                print("caught MotionFailedError from estop")
        await asyncio.sleep(0.25)  # what is this doing?
        move_coro = _do_the_moving()
        stop_coro = _sleep_then_activate_stop_signal()
        await asyncio.gather(stop_coro, move_coro)