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>
40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
"""Mesh: two devices baked with the same session profile discover each other.
|
|
|
|
The fundamental "does my mesh work" test. If both devices share a PSK, LoRa
|
|
region, modem preset, and channel slot, they should hear each other's
|
|
NodeInfo packets within ~60s of boot and appear in each other's `nodesByNum`
|
|
DB.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
import pytest
|
|
from meshtastic_mcp.connection import connect
|
|
|
|
|
|
@pytest.mark.timeout(180)
|
|
def test_mesh_formation_within_60s(mesh_pair: dict[str, Any], wait_until) -> None:
|
|
"""Runs for every directed role pair — so we prove `A sees B in its node
|
|
DB` AND `B sees A in its node DB` independently. A one-sided pass can
|
|
mask a real problem (e.g. device A's RX works but its TX is dead).
|
|
"""
|
|
observer_port = mesh_pair["tx"]["port"]
|
|
target_node_num = mesh_pair["rx"]["my_node_num"]
|
|
assert (
|
|
target_node_num is not None
|
|
), f"{mesh_pair['rx']['role']} my_node_num not populated"
|
|
|
|
def target_visible_from_observer() -> bool:
|
|
with connect(port=observer_port) as iface:
|
|
nodes = iface.nodesByNum or {}
|
|
return target_node_num in nodes
|
|
|
|
wait_until(
|
|
target_visible_from_observer,
|
|
timeout=120,
|
|
backoff_start=2.0,
|
|
backoff_max=10.0,
|
|
)
|