mirror of
https://github.com/meshtastic/firmware.git
synced 2026-05-19 14:25:28 -04:00
* Start of MCP server and test suite * Add MCP server for interacting with meshtastic devices and testing framework / TUI * Update mcp-server/README.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix mcp-server review feedback from thread Agent-Logs-Url: https://github.com/meshtastic/firmware/sessions/91dc128a-ed50-4d07-8bb2-3dc6623a05f7 Co-authored-by: thebentern <9000580+thebentern@users.noreply.github.com> * Enhance StreamAPI and PhoneAPI for improved log record handling and concurrency control * Semgrep fixes * Trunk and semgrep fixes * optimize pio streaming tee file writes Agent-Logs-Url: https://github.com/meshtastic/firmware/sessions/04e26c6b-6a2b-45be-bbeb-79ae4d0be633 Co-authored-by: thebentern <9000580+thebentern@users.noreply.github.com> * chore: remove redundant log handle assignment Agent-Logs-Url: https://github.com/meshtastic/firmware/sessions/04e26c6b-6a2b-45be-bbeb-79ae4d0be633 Co-authored-by: thebentern <9000580+thebentern@users.noreply.github.com> * Consolidate type imports and remove placeholder test files * Add tests for config persistence and more exchange messages * Refactor position test to validate on-demand request/reply behavior * Remove position request/reply test and update README for telemetry behavior * Fix transmit history file to get removed on factory reset --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
73 lines
2.5 KiB
Python
73 lines
2.5 KiB
Python
"""`boards.py` filter and enumeration correctness.
|
|
|
|
Runs against the real `pio project config` output of this firmware repo —
|
|
validates that filter predicates match expected envs and don't drift if
|
|
variants get reorganized.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
from meshtastic_mcp import boards
|
|
|
|
|
|
def test_list_boards_returns_many() -> None:
|
|
all_boards = boards.list_boards()
|
|
assert len(all_boards) >= 50, "expected at least 50 PlatformIO envs"
|
|
|
|
|
|
def test_tbeam_is_canonical_esp32() -> None:
|
|
"""The default env in platformio.ini is `tbeam`; it must always be present
|
|
and flagged as esp32."""
|
|
rec = boards.get_board("tbeam")
|
|
assert rec["architecture"] == "esp32"
|
|
assert rec["hw_model_slug"] == "TBEAM"
|
|
assert rec["actively_supported"] is True
|
|
assert rec["board"] == "ttgo-tbeam"
|
|
|
|
|
|
def test_filter_by_architecture() -> None:
|
|
esp32s3 = boards.list_boards(architecture="esp32s3")
|
|
assert len(esp32s3) >= 1
|
|
assert all(b["architecture"] == "esp32s3" for b in esp32s3)
|
|
|
|
|
|
def test_filter_by_actively_supported() -> None:
|
|
supported = boards.list_boards(actively_supported_only=True)
|
|
unsupported = [b for b in boards.list_boards() if not b["actively_supported"]]
|
|
assert supported, "at least one board should be actively supported"
|
|
assert all(b["actively_supported"] for b in supported)
|
|
# Quick sanity: the set difference is non-empty in this repo (there are
|
|
# boards marked actively_supported=false).
|
|
assert unsupported, "expected at least one actively_supported=false board"
|
|
|
|
|
|
def test_filter_by_query_substring_matches_display_name() -> None:
|
|
heltec = boards.list_boards(query="heltec")
|
|
assert heltec, "expected at least one Heltec env"
|
|
# Case-insensitive across display_name, env name, or hw_model_slug
|
|
for b in heltec:
|
|
blob = " ".join(
|
|
filter(
|
|
None,
|
|
[
|
|
b.get("display_name") or "",
|
|
b["env"],
|
|
b.get("hw_model_slug") or "",
|
|
],
|
|
)
|
|
).lower()
|
|
assert "heltec" in blob
|
|
|
|
|
|
def test_get_board_unknown_env_raises() -> None:
|
|
with pytest.raises(KeyError, match="Unknown env"):
|
|
boards.get_board("definitely-not-a-real-env")
|
|
|
|
|
|
def test_get_board_surfaces_raw_config() -> None:
|
|
rec = boards.get_board("tbeam")
|
|
assert "raw_config" in rec
|
|
assert "custom_meshtastic_architecture" in rec["raw_config"]
|
|
assert rec["raw_config"]["custom_meshtastic_architecture"] == "esp32"
|