45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from cmvr_edge_ai.connectors.cmvr_es import CmvrAgvCommandSink
|
|
|
|
|
|
VELOCITY_LIMITS = {
|
|
"vx": {"min": -0.5, "max": 0.5},
|
|
"vy": {"min": -0.3, "max": 0.3},
|
|
"wz": {"min": -1.0, "max": 1.0},
|
|
}
|
|
|
|
|
|
def test_agv_sink_requires_a_fixed_device() -> None:
|
|
with pytest.raises(ValueError, match="fixed, non-empty device_id"):
|
|
CmvrAgvCommandSink("agv", {"endpoint": "cmvr_es"})
|
|
|
|
|
|
def test_unsafe_velocity_override_requires_a_real_boolean() -> None:
|
|
with pytest.raises(ValueError, match="must be a boolean"):
|
|
CmvrAgvCommandSink(
|
|
"agv",
|
|
{
|
|
"endpoint": "cmvr_es",
|
|
"device_id": "src1100",
|
|
# Environment expansion deliberately leaves plugin params as
|
|
# strings. The dangerous override must not use bool("false").
|
|
"unsafe_allow_unleased_velocity": "false",
|
|
"velocity_limits": VELOCITY_LIMITS,
|
|
},
|
|
)
|
|
|
|
|
|
def test_unsafe_velocity_override_requires_sink_side_limits() -> None:
|
|
with pytest.raises(ValueError, match="requires explicit velocity_limits"):
|
|
CmvrAgvCommandSink(
|
|
"agv",
|
|
{
|
|
"endpoint": "cmvr_es",
|
|
"device_id": "src1100",
|
|
"unsafe_allow_unleased_velocity": True,
|
|
},
|
|
)
|