2026-08-30 14:26:11 +02:00
|
|
|
import unittest
|
|
|
|
|
|
|
|
|
|
from hue_collector.collector import Collector
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FakeClient:
|
|
|
|
|
data = {
|
|
|
|
|
"device": [
|
|
|
|
|
{"id": "d1", "metadata": {"name": "Motion"}},
|
|
|
|
|
{"id": "d2", "metadata": {"name": "Lamp"}},
|
|
|
|
|
{"id": "d3", "metadata": {"name": "Offline lamp"}},
|
|
|
|
|
],
|
|
|
|
|
"room": [{"id": "r1", "metadata": {"name": "Office"}, "children": [{"rid": "d1"}, {"rid": "d2"}, {"rid": "d3"}]}],
|
|
|
|
|
"zone": [{"id": "z1", "metadata": {"name": "Downstairs"}, "children": [{"rid": "d2"}]}],
|
|
|
|
|
"light": [
|
|
|
|
|
{"id": "l1", "owner": {"rid": "d2"}, "on": {"on": True}, "dimming": {"brightness": 60}},
|
|
|
|
|
{"id": "l2", "owner": {"rid": "d3"}, "on": {"on": True}, "dimming": {"brightness": 100}},
|
|
|
|
|
],
|
|
|
|
|
"temperature": [{"id": "t1", "owner": {"rid": "d1"}, "temperature": {"temperature": 21.5}}],
|
|
|
|
|
"light_level": [{"id": "s1", "owner": {"rid": "d1"}, "light_level": {"light_level": 123.4}}],
|
|
|
|
|
"zigbee_connectivity": [
|
|
|
|
|
{"owner": {"rid": "d1"}, "status": "connected"},
|
|
|
|
|
{"owner": {"rid": "d2"}, "status": "connected"},
|
|
|
|
|
{"owner": {"rid": "d3"}, "status": "disconnected"},
|
|
|
|
|
],
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
def get(self, resource):
|
|
|
|
|
return self.data[resource]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CollectorTests(unittest.TestCase):
|
|
|
|
|
def setUp(self):
|
|
|
|
|
self.metrics = Collector(FakeClient()).collect()
|
|
|
|
|
|
|
|
|
|
def test_group_counts_only_connected_lights(self):
|
|
|
|
|
self.assertIn('hue_group_lights_available{group="Office",group_id="r1",group_type="room"} 1', self.metrics)
|
2026-08-30 15:04:40 +02:00
|
|
|
self.assertIn('hue_group_lights_off{group="Office",group_id="r1",group_type="room"} 0', self.metrics)
|
|
|
|
|
self.assertIn('hue_group_lights_unavailable{group="Office",group_id="r1",group_type="room"} 1', self.metrics)
|
2026-08-30 14:26:11 +02:00
|
|
|
self.assertIn('hue_group_lights_shining_percent{group="Office",group_id="r1",group_type="room"} 100.0', self.metrics)
|
|
|
|
|
self.assertIn('hue_group_lights_off_percent{group="Office",group_id="r1",group_type="room"} 0.0', self.metrics)
|
|
|
|
|
self.assertIn('hue_group_lights_unavailable_percent{group="Office",group_id="r1",group_type="room"} 50.0', self.metrics)
|
|
|
|
|
self.assertIn('hue_group_average_brightness_percent{group="Office",group_id="r1",group_type="room"} 60.0', self.metrics)
|
|
|
|
|
|
|
|
|
|
def test_sensor_values_have_location(self):
|
|
|
|
|
self.assertIn('hue_temperature_celsius{room="Office",sensor="Motion",sensor_id="t1",sensor_type="temperature",zones=""} 21.5', self.metrics)
|
|
|
|
|
self.assertIn('hue_light_level_lux{room="Office",sensor="Motion",sensor_id="s1",sensor_type="light_level",zones=""} 123.4', self.metrics)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
unittest.main()
|