2025-11-28 14:35:21 +08:00

68 lines
1.7 KiB
Python

import dataclasses
import pytest
from exporter.models import (
DeviceMetricsSnapshot,
INT32_MAX,
TransceiverChannelRecord,
TransceiverRecord,
is_invalid_value,
)
def test_transceiver_record_is_frozen():
record = TransceiverRecord(
device="dev1",
component_name="comp1",
logical_port="1/0/1",
present="PRESENT",
oper_status="ACTIVE",
temperature_c=40.0,
supply_voltage_v=3.3,
vendor="H3C",
serial="SN1",
part_number="PN",
hardware_rev="1.0",
)
with pytest.raises(dataclasses.FrozenInstanceError):
record.device = "dev2"
def test_transceiver_channel_record_is_frozen():
channel = TransceiverChannelRecord(
device="dev1",
component_name="comp1",
logical_port="1/0/1",
channel_index=0,
logical_channel="1/0/1:1",
rx_power_dbm=-3.0,
tx_power_dbm=-1.0,
bias_current_ma=10.0,
laser_temperature_c=25.0,
)
with pytest.raises(dataclasses.FrozenInstanceError):
channel.channel_index = 1
def test_snapshot_is_frozen():
tx = TransceiverRecord(device="d", component_name="c", logical_port="p")
snap = DeviceMetricsSnapshot(device="d", collected_at=0.0, transceivers=(tx,), channels=())
with pytest.raises(dataclasses.FrozenInstanceError):
snap.device = "other"
@pytest.mark.parametrize(
"value, expected",
[
(float(INT32_MAX), True),
(INT32_MAX, True),
(INT32_MAX - 1, False),
(-INT32_MAX, False),
(None, False),
],
)
def test_is_invalid_value_exact_int32_max(value, expected):
assert is_invalid_value(value) is expected