mirror of
https://github.com/ipnet-mesh/meshcore-hub.git
synced 2026-07-05 17:31:13 +02:00
dbd68e9a9f
- Add custom Dockerfile for meshcore-mqtt-broker (Node 22 Alpine, built from michaelhart/meshcore-mqtt-broker source) - Add GitHub Actions workflow for weekly multi-arch MQTT broker image builds - Add local build script (etc/docker/meshcore-mqtt-broker/build.sh) - Update docker-compose.yml and test compose to use new ghcr.io image - Add MQTT connection retry logic with exponential backoff to collector subscriber - Create UPGRADING.md with migration guide for breaking changes - Update README.md and AGENTS.md for accuracy (Python 3.14, removed commands, fixed MQTT defaults) - Remove obsolete files (etc/mosquitto.conf, .agentmap.yaml, CLAUDE.md)
58 lines
2.0 KiB
Python
58 lines
2.0 KiB
Python
"""Tests for MQTT topic parsing utilities."""
|
|
|
|
from meshcore_hub.common.mqtt import TopicBuilder
|
|
|
|
|
|
class TestTopicBuilder:
|
|
"""Tests for MQTT topic builder parsing helpers."""
|
|
|
|
def test_parse_event_topic_with_single_segment_prefix(self) -> None:
|
|
"""Event topics are parsed correctly with a simple prefix."""
|
|
builder = TopicBuilder(prefix="meshcore")
|
|
|
|
parsed = builder.parse_event_topic(
|
|
"meshcore/ABCDEF1234567890/event/advertisement"
|
|
)
|
|
|
|
assert parsed == ("ABCDEF1234567890", "advertisement")
|
|
|
|
def test_parse_event_topic_with_multi_segment_prefix(self) -> None:
|
|
"""Event topics are parsed correctly with a slash-delimited prefix."""
|
|
builder = TopicBuilder(prefix="meshcore/BOS")
|
|
|
|
parsed = builder.parse_event_topic(
|
|
"meshcore/BOS/ABCDEF1234567890/event/channel_msg_recv"
|
|
)
|
|
|
|
assert parsed == ("ABCDEF1234567890", "channel_msg_recv")
|
|
|
|
def test_parse_command_topic_with_multi_segment_prefix(self) -> None:
|
|
"""Command topics are parsed correctly with a slash-delimited prefix."""
|
|
builder = TopicBuilder(prefix="meshcore/BOS")
|
|
|
|
parsed = builder.parse_command_topic(
|
|
"meshcore/BOS/ABCDEF123456/command/send_msg"
|
|
)
|
|
|
|
assert parsed == ("ABCDEF123456", "send_msg")
|
|
|
|
def test_parse_letsmesh_upload_topic(self) -> None:
|
|
"""LetsMesh upload topics map to public key and feed type."""
|
|
builder = TopicBuilder(prefix="meshcore")
|
|
|
|
parsed = builder.parse_letsmesh_upload_topic(
|
|
"meshcore/STN/ABCDEF1234567890/status"
|
|
)
|
|
|
|
assert parsed == ("ABCDEF1234567890", "status")
|
|
|
|
def test_parse_letsmesh_upload_topic_rejects_unknown_feed(self) -> None:
|
|
"""Unknown LetsMesh feed topics are rejected."""
|
|
builder = TopicBuilder(prefix="meshcore")
|
|
|
|
parsed = builder.parse_letsmesh_upload_topic(
|
|
"meshcore/STN/ABCDEF1234567890/something_else"
|
|
)
|
|
|
|
assert parsed is None
|