Add birdcage-mcp FastMCP server for satellite dish control
34 tools (connection, movement, signal, system, satellite, console), 5 resources, 3 prompts. Backed by DemoDevice for offline testing. 46 tests passing against the demo backend via run_server_async.
This commit is contained in:
parent
16ca4892b3
commit
8a6b99bd8c
21 changed files with 3233 additions and 0 deletions
121
mcp/tests/test_system.py
Normal file
121
mcp/tests/test_system.py
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
"""Tests for system and firmware tools."""
|
||||
|
||||
import pytest
|
||||
from conftest import parse_result
|
||||
from fastmcp import Client
|
||||
from fastmcp.exceptions import ToolError
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_get_firmware_id(mcp_client: Client):
|
||||
result = await mcp_client.call_tool("get_firmware_id", {})
|
||||
data = parse_result(result)
|
||||
assert "02.02.48" in data["raw"]
|
||||
assert "TWELINCH" in data["raw"]
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_get_motor_dynamics(mcp_client: Client):
|
||||
result = await mcp_client.call_tool("get_motor_dynamics", {})
|
||||
data = parse_result(result)
|
||||
assert data["az_max_vel"] == 65.0
|
||||
assert data["el_max_vel"] == 45.0
|
||||
assert data["az_accel"] == 400.0
|
||||
assert data["el_accel"] == 400.0
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_set_max_velocity(mcp_client: Client):
|
||||
result = await mcp_client.call_tool(
|
||||
"set_max_velocity", {"motor_id": 0, "deg_per_sec": 30.0}
|
||||
)
|
||||
data = parse_result(result)
|
||||
assert data["axis"] == "azimuth"
|
||||
assert data["max_velocity"] == 30.0
|
||||
|
||||
# Verify it stuck
|
||||
result = await mcp_client.call_tool("get_motor_dynamics", {})
|
||||
data = parse_result(result)
|
||||
assert data["az_max_vel"] == 30.0
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_set_max_velocity_invalid_motor(mcp_client: Client):
|
||||
with pytest.raises(ToolError):
|
||||
await mcp_client.call_tool(
|
||||
"set_max_velocity", {"motor_id": 3, "deg_per_sec": 10.0}
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_set_max_acceleration(mcp_client: Client):
|
||||
result = await mcp_client.call_tool(
|
||||
"set_max_acceleration", {"motor_id": 1, "accel": 200.0}
|
||||
)
|
||||
data = parse_result(result)
|
||||
assert data["axis"] == "elevation"
|
||||
assert data["max_acceleration"] == 200.0
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_get_motor_life(mcp_client: Client):
|
||||
result = await mcp_client.call_tool("get_motor_life", {})
|
||||
data = parse_result(result)
|
||||
assert "AZ total moves" in data["raw"]
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_get_pid_gains(mcp_client: Client):
|
||||
result = await mcp_client.call_tool("get_pid_gains", {})
|
||||
data = parse_result(result)
|
||||
assert data["az"]["kp"] == 600.0
|
||||
assert data["az"]["kv"] == 60.0
|
||||
assert data["el"]["kp"] == 250.0
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_set_pid_gains(mcp_client: Client):
|
||||
result = await mcp_client.call_tool(
|
||||
"set_pid_gains",
|
||||
{"motor_id": 0, "kp": 500.0, "kv": 55.0, "ki": 2.0},
|
||||
)
|
||||
data = parse_result(result)
|
||||
assert data["status"] == "set"
|
||||
assert data["kp"] == 500.0
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_get_a3981_diag(mcp_client: Client):
|
||||
result = await mcp_client.call_tool("get_a3981_diag", {})
|
||||
data = parse_result(result)
|
||||
assert "OK" in data["raw"]
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_get_a3981_modes(mcp_client: Client):
|
||||
result = await mcp_client.call_tool("get_a3981_modes", {})
|
||||
data = parse_result(result)
|
||||
assert "AUTO" in data["step_mode"]
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_nvs_dump(mcp_client: Client):
|
||||
result = await mcp_client.call_tool("nvs_dump", {})
|
||||
data = parse_result(result)
|
||||
assert "Disable Tracker" in data["raw"]
|
||||
assert "AZ Max Vel" in data["raw"]
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_nvs_read(mcp_client: Client):
|
||||
result = await mcp_client.call_tool("nvs_read", {"index": 20})
|
||||
data = parse_result(result)
|
||||
assert data["index"] == 20
|
||||
assert "Disable Tracker" in data["raw"]
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_nvs_read_missing_index(mcp_client: Client):
|
||||
result = await mcp_client.call_tool("nvs_read", {"index": 999})
|
||||
data = parse_result(result)
|
||||
assert "not found" in data["raw"]
|
||||
Loading…
Add table
Add a link
Reference in a new issue