mirror of
https://github.com/jkingsman/Remote-Terminal-for-MeshCore.git
synced 2026-08-10 18:53:03 +02:00
Emit UTC Z-suffixed timestamps for Community MQTT observer payloads
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
import json
|
||||
import time
|
||||
from contextlib import asynccontextmanager
|
||||
from datetime import UTC, datetime
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import AsyncMock, MagicMock, patch
|
||||
|
||||
@@ -76,6 +77,13 @@ def _make_community_settings(**overrides) -> SimpleNamespace:
|
||||
return SimpleNamespace(**defaults)
|
||||
|
||||
|
||||
def _assert_utc_z_timestamp(value: str) -> None:
|
||||
assert value.endswith("Z")
|
||||
assert "+00:00" not in value
|
||||
parsed = datetime.fromisoformat(value.replace("Z", "+00:00"))
|
||||
assert parsed.tzinfo == UTC
|
||||
|
||||
|
||||
class TestBase64UrlEncode:
|
||||
def test_encodes_without_padding(self):
|
||||
result = _base64url_encode(b"\x00\x01\x02")
|
||||
@@ -219,12 +227,11 @@ class TestPacketFormatConversion:
|
||||
assert result["direction"] == "rx"
|
||||
assert result["len"] == "3"
|
||||
|
||||
def test_timestamp_is_iso8601(self):
|
||||
def test_timestamp_is_utc_z_iso8601(self):
|
||||
data = {"timestamp": 1700000000, "data": "0100AA", "snr": None, "rssi": None}
|
||||
result = _format_raw_packet(data, "Node", "AA" * 32)
|
||||
assert result is not None
|
||||
assert result["timestamp"]
|
||||
assert "T" in result["timestamp"]
|
||||
_assert_utc_z_timestamp(result["timestamp"])
|
||||
|
||||
def test_snr_rssi_unknown_when_none(self):
|
||||
data = {"timestamp": 0, "data": "0100AA", "snr": None, "rssi": None}
|
||||
@@ -734,7 +741,7 @@ class TestLwtAndStatusPublish:
|
||||
assert payload["status"] == "offline"
|
||||
assert payload["origin"] == "TestNode"
|
||||
assert payload["origin_id"] == pubkey_hex
|
||||
assert "timestamp" in payload
|
||||
_assert_utc_z_timestamp(payload["timestamp"])
|
||||
assert "client" not in payload
|
||||
assert kwargs["transport"] == "websockets"
|
||||
assert kwargs["websocket_path"] == "/"
|
||||
@@ -884,7 +891,7 @@ class TestLwtAndStatusPublish:
|
||||
assert payload["origin"] == "TestNode"
|
||||
assert payload["origin_id"] == pubkey_hex
|
||||
assert "client" not in payload
|
||||
assert "timestamp" in payload
|
||||
_assert_utc_z_timestamp(payload["timestamp"])
|
||||
assert payload["model"] == "T-Deck"
|
||||
assert payload["firmware_version"] == "v2.2.2 (Build: 2025-01-15)"
|
||||
assert payload["radio"] == "915.0,250.0,10,8"
|
||||
@@ -1393,6 +1400,7 @@ class TestPublishStatus:
|
||||
assert payload["origin"] == "TestNode"
|
||||
assert payload["origin_id"] == pubkey_hex
|
||||
assert "client" not in payload
|
||||
_assert_utc_z_timestamp(payload["timestamp"])
|
||||
assert payload["model"] == "T-Deck"
|
||||
assert payload["firmware_version"] == "v2.2.2 (Build: 2025-01-15)"
|
||||
assert payload["radio"] == "915.0,250.0,10,8"
|
||||
|
||||
Reference in New Issue
Block a user