mirror of
https://gitlab.com/iscmt/homehub4000-prometheus-exporter.git
synced 2026-04-04 17:22:24 -04:00
74 lines
2.7 KiB
Python
74 lines
2.7 KiB
Python
from datetime import datetime
|
|
|
|
from router_status import parse_timestamp, parse_events, build_status
|
|
|
|
|
|
class TestParseTimestamp:
|
|
def test_iso_format(self):
|
|
result = parse_timestamp("2024-01-15T10:30:00")
|
|
assert result == datetime(2024, 1, 15, 10, 30, 0)
|
|
|
|
def test_strptime_format(self):
|
|
result = parse_timestamp("2024-01-15 10:30:00")
|
|
assert result == datetime(2024, 1, 15, 10, 30, 0)
|
|
|
|
def test_invalid_returns_none(self):
|
|
assert parse_timestamp("not a date") is None
|
|
assert parse_timestamp("") is None
|
|
assert parse_timestamp(None) is None
|
|
|
|
|
|
class TestParseEvents:
|
|
def test_extracts_connected_device(self):
|
|
rows = [
|
|
{
|
|
"log_timestamp": "2024-01-15T10:30:00",
|
|
"message": "<MyPhone [AA:BB:CC:DD:EE:FF]> has successfully connected to WiFi",
|
|
}
|
|
]
|
|
events = list(parse_events(rows))
|
|
assert len(events) == 1
|
|
assert events[0]["name"] == "MyPhone"
|
|
assert events[0]["mac"] == "AA:BB:CC:DD:EE:FF"
|
|
assert events[0]["event"] == "connected"
|
|
|
|
def test_extracts_disconnected_device(self):
|
|
rows = [
|
|
{
|
|
"log_timestamp": "2024-01-15T10:30:00",
|
|
"message": "<Laptop [11:22:33:44:55:66]> was disconnected from WiFi",
|
|
}
|
|
]
|
|
events = list(parse_events(rows))
|
|
assert len(events) == 1
|
|
assert events[0]["event"] == "disconnected"
|
|
|
|
def test_skips_missing_timestamp(self):
|
|
rows = [{"message": "<Device [AA:BB:CC:DD:EE:FF]> has successfully connected"}]
|
|
events = list(parse_events(rows))
|
|
assert len(events) == 0
|
|
|
|
def test_allows_missing_timestamp_when_flagged(self):
|
|
rows = [{"message": "<Device [AA:BB:CC:DD:EE:FF]> has successfully connected"}]
|
|
events = list(parse_events(rows, allow_missing_timestamp=True))
|
|
assert len(events) == 1
|
|
|
|
|
|
class TestBuildStatus:
|
|
def test_tracks_connection(self):
|
|
events = [
|
|
{"name": "Phone", "mac": "AA:BB:CC:DD:EE:FF", "event": "connected", "time": datetime(2024, 1, 15, 10, 0)},
|
|
]
|
|
status = build_status(events)
|
|
assert "AA:BB:CC:DD:EE:FF" in status
|
|
assert status["AA:BB:CC:DD:EE:FF"].is_connected is True
|
|
|
|
def test_tracks_disconnection(self):
|
|
events = [
|
|
{"name": "Phone", "mac": "AA:BB:CC:DD:EE:FF", "event": "connected", "time": datetime(2024, 1, 15, 10, 0)},
|
|
{"name": "Phone", "mac": "AA:BB:CC:DD:EE:FF", "event": "disconnected", "time": datetime(2024, 1, 15, 11, 0)},
|
|
]
|
|
status = build_status(events)
|
|
assert status["AA:BB:CC:DD:EE:FF"].is_connected is False
|
|
assert status["AA:BB:CC:DD:EE:FF"].last_connected_time == datetime(2024, 1, 15, 10, 0)
|