Coverage for tests/tests/test_systems.py: 0%
70 statements
« prev ^ index » next coverage.py v7.11.3, created at 2026-01-05 21:46 +0100
« prev ^ index » next coverage.py v7.11.3, created at 2026-01-05 21:46 +0100
1#!/usr/bin/env python3
2"""RAMSES RF - Test the payload parsers and corresponding output.
4Includes gwy dicts (schema, traits, params, status).
5"""
7from pathlib import Path, PurePath
9import pytest
11from ramses_rf import Gateway
12from ramses_rf.helpers import shrink
13from ramses_tx.message import Message
14from ramses_tx.packet import Packet
16from .helpers import (
17 TEST_DIR,
18 assert_expected,
19 assert_expected_set,
20 load_expected_results,
21 load_test_gwy,
22 shuffle_dict,
23)
25WORK_DIR = f"{TEST_DIR}/systems"
28def pytest_generate_tests(metafunc: pytest.Metafunc) -> None:
29 def id_fnc(param: Path) -> str:
30 return PurePath(param).name
32 folders = [f for f in Path(WORK_DIR).iterdir() if f.is_dir() and f.name[:1] != "_"]
33 metafunc.parametrize("dir_name", folders, ids=id_fnc)
36def test_payload_from_log_file(dir_name: Path) -> None:
37 """Assert that each message payload is as expected (different to other tests)."""
38 # RP --- 02:044328 18:200214 --:------ 2309 003 0007D0 # {'ufh_idx': '00', 'setpoint': 20.0}
40 def proc_log_line(log_line: str) -> None:
41 if "#" not in log_line:
42 return
43 pkt_line, pkt_eval = log_line.split("#", maxsplit=1)
45 if not pkt_line[27:].strip():
46 return
48 pkt = Packet.from_file(pkt_line[:26], pkt_line[27:])
49 msg = Message(pkt)
51 assert msg.payload == eval(pkt_eval)
53 with open(f"{dir_name}/packet.log") as f:
54 while line := (f.readline()):
55 if line.strip():
56 proc_log_line(line)
59async def test_schemax_with_log_file(dir_name: Path) -> None:
60 """Compare the schema built from a log file with the expected results."""
62 expected: dict = load_expected_results(dir_name) or {}
63 gwy: Gateway = await load_test_gwy(
64 dir_name, **expected["schema"], known_list=expected["known_list"]
65 )
67 schema, packets = gwy.get_state()
69 # sert_expected_set(gwy, expected)
70 assert_expected(shrink(schema), shrink(expected["schema"]))
72 await gwy.stop()
75async def test_systemx_from_log_file(dir_name: Path) -> None:
76 """Compare the system built from a log file with the expected results."""
78 expected: dict = load_expected_results(dir_name) or {}
79 gwy: Gateway = await load_test_gwy(dir_name)
81 assert_expected_set(gwy, expected)
82 # sert shrink(gwy.schema) == shrink(schema)
84 for dev in gwy.devices:
85 _ = dev.schema
86 _ = dev.traits
87 _ = dev.params
88 _ = dev.status
90 for tcs in gwy.systems:
91 _ = tcs.schema
92 _ = tcs.traits
93 _ = tcs.params
94 _ = tcs.status
96 await gwy.stop()
99# async def test_restor1_from_log_file(dir_name: Path) -> None:
100# """Compare the system built from a get_state log file with the expected results."""
102# expected: dict = load_expected_results(dir_name) or {}
103# gwy: Gateway = Gateway(None, input_file=io.StringIO()) # empty file
105# # schema, packets = gwy.get_state(include_expired=True)
106# await gwy._restore_cached_packets(packets)
108# assert_expected_set(gwy, expected)
109# # sert shrink(gwy.schema) == shrink(schema)
111# await gwy.stop()
114async def test_restore_from_log_file(dir_name: Path) -> None:
115 """Compare the system built from a get_state log file with the expected results."""
117 expected: dict = load_expected_results(dir_name) or {}
118 gwy: Gateway = await load_test_gwy(dir_name)
120 schema, packets = gwy.get_state(include_expired=True)
121 await gwy._restore_cached_packets(packets)
123 assert_expected_set(gwy, expected)
124 # sert shrink(gwy.schema) == shrink(schema)
126 for dev in gwy.devices: # SQLite refactor should pass this test
127 if dev._gwy.msg_db:
128 # depends on ramses_rf/entity_base.py def _msgs() from msg_db
129 assert len(dev._msgs) == len(dev._msgs_), "_msgs not equal to _msgs_"
130 # and make sure that every code from _msgs_ is in _msgb
131 assert set(dev._msgs_).issubset(set(dev._msgs)), (
132 "_msgs_ not a subset of _msgs"
133 )
134 # original test can't be met for UFC CTL 3150, see database.py qry()
135 # assert sorted(dev._msgs) == sorted(dev._msgs_), (
136 # f"Assert 1: {dev} _msgs != _msgs_"
137 # )
138 # don't expect them to match 100% because _msgs() creation requires filter:
139 # sql = """
140 # SELECT dtm from messages WHERE verb in (' I', 'RP')
141 # AND (src = ? OR dst = ?) """
142 # assert len(dev._gwy.msg_db.qry_field(sql, (dev.id[:12], dev.id[:12]))) == len(
143 # dev._msgs_
144 # ), f"Assert 2: {dev} qry != _msgs_"
146 await gwy.stop()
149async def test_shuffle_from_log_file(dir_name: Path) -> None:
150 """Compare the system built from a shuffled log file with the expected results."""
152 expected: dict = load_expected_results(dir_name) or {}
153 gwy: Gateway = await load_test_gwy(dir_name)
155 schema, packets = gwy.get_state(include_expired=True)
156 packets = shuffle_dict(packets)
157 await gwy._restore_cached_packets(packets)
159 assert_expected_set(gwy, expected)
160 # sert shrink(gwy.schema) == shrink(schema)
162 packets = shuffle_dict(packets)
163 await gwy._restore_cached_packets(packets)
165 assert_expected_set(gwy, expected)
166 # sert shrink(gwy.schema) == shrink(schema)
168 await gwy.stop()