|
|
|
|
@ -1391,6 +1391,52 @@ NETWORK_DIRECT_DIAL_SLOT: {value}
|
|
|
|
|
)
|
|
|
|
|
self.assertTrue(entry["ACTIVE"])
|
|
|
|
|
|
|
|
|
|
def test_network_direct_dial_lookup_runs_once_per_stream(self):
|
|
|
|
|
config = minimal_config(("MASTER-A",))
|
|
|
|
|
add_openbridge_system(config, "OBP-1", network_id=3001)
|
|
|
|
|
|
|
|
|
|
with DeterministicScenario(config=config) as scenario:
|
|
|
|
|
scenario.register_peer("MASTER-A", 1001)
|
|
|
|
|
scenario.clock.advance(6)
|
|
|
|
|
calls = []
|
|
|
|
|
activate = scenario.bm.activate_network_direct_dial
|
|
|
|
|
|
|
|
|
|
def record_activation(dst_id, pkt_time):
|
|
|
|
|
calls.append((dst_id, pkt_time))
|
|
|
|
|
activate(dst_id, pkt_time)
|
|
|
|
|
|
|
|
|
|
scenario.bm.activate_network_direct_dial = record_activation
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
scenario.inject_obp(
|
|
|
|
|
"OBP-1",
|
|
|
|
|
PacketSpec(dst_id=1001, stream_id=0x01020304, seq=0),
|
|
|
|
|
)
|
|
|
|
|
scenario.inject_obp(
|
|
|
|
|
"OBP-1",
|
|
|
|
|
PacketSpec(
|
|
|
|
|
dst_id=1001,
|
|
|
|
|
stream_id=0x01020304,
|
|
|
|
|
seq=1,
|
|
|
|
|
payload=b"\x01" * 33,
|
|
|
|
|
),
|
|
|
|
|
)
|
|
|
|
|
scenario.inject_obp(
|
|
|
|
|
"OBP-1",
|
|
|
|
|
PacketSpec(
|
|
|
|
|
dst_id=1001,
|
|
|
|
|
stream_id=0x01020305,
|
|
|
|
|
seq=0,
|
|
|
|
|
payload=b"\x02" * 33,
|
|
|
|
|
),
|
|
|
|
|
)
|
|
|
|
|
finally:
|
|
|
|
|
scenario.bm.activate_network_direct_dial = activate
|
|
|
|
|
|
|
|
|
|
self.assertEqual(len(calls), 2)
|
|
|
|
|
self.assertEqual(calls[0][0], bytes_3(1001))
|
|
|
|
|
self.assertEqual(calls[1][0], bytes_3(1001))
|
|
|
|
|
|
|
|
|
|
def test_network_direct_dial_can_route_to_slot2_for_dmo_clients(self):
|
|
|
|
|
config = minimal_config(("MASTER-A",))
|
|
|
|
|
config["SYSTEMS"]["MASTER-A"]["NETWORK_DIRECT_DIAL_SLOT"] = 2
|
|
|
|
|
|