57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
import json
|
|
|
|
from target_simulator.core.command_builder import build_json_reset_ids
|
|
|
|
|
|
def test_build_json_reset_ids_default():
|
|
payloads = build_json_reset_ids()
|
|
assert isinstance(payloads, list)
|
|
assert len(payloads) > 0
|
|
|
|
total_targets = 0
|
|
ids = []
|
|
for p in payloads:
|
|
# payloads must be newline-terminated strings
|
|
assert isinstance(p, str)
|
|
assert p.endswith("\n")
|
|
obj = json.loads(p)
|
|
assert "TGTS" in obj
|
|
tgts = obj["TGTS"]
|
|
assert isinstance(tgts, list)
|
|
for t in tgts:
|
|
# ID should be present and within expected range
|
|
assert "ID" in t
|
|
ids.append(int(t["ID"]))
|
|
# flags a (active) and t (traceable) must be zero for reset
|
|
assert int(t.get("a", 0)) == 0
|
|
assert int(t.get("t", 0)) == 0
|
|
# Range (R) should be zero or 0.0
|
|
assert float(t.get("R", 0)) == 0.0
|
|
total_targets += len(tgts)
|
|
|
|
# Default covers IDs 0..31 -> 32 targets
|
|
assert total_targets == 32
|
|
assert set(ids) == set(range(0, 32))
|
|
|
|
|
|
def test_build_json_reset_ids_respects_max_bytes_and_batching():
|
|
# Use small max_bytes to force multiple batches for a small id range
|
|
payloads = build_json_reset_ids(max_id=7, max_bytes=100)
|
|
assert isinstance(payloads, list)
|
|
assert len(payloads) >= 1
|
|
|
|
total = 0
|
|
for p in payloads:
|
|
# Each returned payload should be parseable JSON and end with newline
|
|
assert isinstance(p, str)
|
|
assert p.endswith("\n")
|
|
b = p.encode("utf-8")
|
|
# Either it respects the provided max_bytes, or it's the single fallback
|
|
assert len(b) <= 100 or len(payloads) == 1
|
|
obj = json.loads(p)
|
|
tgts = obj.get("TGTS", [])
|
|
total += len(tgts)
|
|
|
|
# We requested IDs 0..7 -> 8 targets total
|
|
assert total == 8
|