mirror of
https://gitlab.com/iscmt/homehub4000-prometheus-exporter.git
synced 2026-04-04 17:22:24 -04:00
Prometheus exporter for HomeHub 4000 router
This commit is contained in:
73
tests/test_router_status.py
Normal file
73
tests/test_router_status.py
Normal file
@@ -0,0 +1,73 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user