diff --git a/tests/test_collector.py b/tests/test_collector.py new file mode 100644 index 0000000..ba7aba1 --- /dev/null +++ b/tests/test_collector.py @@ -0,0 +1,33 @@ +import importlib.util +from pathlib import Path + +spec = importlib.util.spec_from_file_location("collector", Path(__file__).parents[1] / "collector.py") +c = importlib.util.module_from_spec(spec) +spec.loader.exec_module(c) + + +def test_scalar_values(): + assert c.extract_values(b"21.5") == {"value": 21.5} + assert c.extract_values(b"ON") == {"value": 1.0} + assert c.extract_values(b"offline") == {"value": 0.0} + + +def test_json_is_flattened_and_sensitive_fields_are_removed(): + values = c.extract_values(b'{"temperature":21.2,"battery":88,"location":{"lat":48.1,"lon":11.5},"token":123,"online":true}') + assert values == {"temperature": 21.2, "battery": 88.0, "online": 1.0} + + +def test_strings_and_binary_payloads_are_not_stored(): + assert c.extract_values(b"Sascha ist zuhause") == {} + assert c.extract_values(b"\xff\x00") == {} + + +def test_topic_policy(): + assert c.topic_allowed("zigbee2mqtt/sensor/temperature") + assert not c.topic_allowed("camera/front/image") + assert not c.topic_allowed("homeassistant/sensor/foo/config") + + +def test_line_protocol_escaping(): + line = c.line("mqtt value", {"topic": "room, one"}, {"value": 1.5}, 123) + assert line == "mqtt\\ value,topic=room\\,\\ one value=1.5 123"