test(client): cover gateway replacement status

The manual lifecycle check depends on the Windows client diagnostics moving
from connected, to disconnected, and back to connected when the LAN gateway is
restarted. Existing formatter tests covered a gateway leave, but not the
replacement join updating the tracked gateway peer id afterward.

Add a client lifecycle unit test that formats the first gateway join, its leave,
and a replacement gateway join. The assertions prove the client-side relay
status clears the old peer id and then reports the new gateway as connected.

Test Plan:
- cargo fmt --check
- cargo test -p lanparty-client-win \
  tracks_gateway_replacement_after_disconnect -- --nocapture
- cargo test -p lanparty-client-win
- cargo test --workspace
- cargo clippy --workspace --all-targets -- -D warnings
- git diff --check

Refs: MVP lifecycle sanity check
This commit is contained in:
2026-05-22 09:30:30 +02:00
parent 94dd93dbb4
commit 0fb4689cb2
+35
View File
@@ -1685,6 +1685,41 @@ mod tests {
assert_eq!(relay_status.gateway_peer_id(), None); assert_eq!(relay_status.gateway_peer_id(), None);
} }
#[test]
fn tracks_gateway_replacement_after_disconnect() {
let first_gateway =
ControlMessage::PeerJoined(PeerInfo::new(1, Role::Gateway, None).unwrap());
let first_gateway_left = ControlMessage::PeerLeft {
peer_id: 1,
reason: DisconnectReason::Normal,
};
let replacement_gateway =
ControlMessage::PeerJoined(PeerInfo::new(3, Role::Gateway, None).unwrap());
let mut formatter = ControlEventFormatter::default();
let relay_status = ClientRelayStatus::new(false);
assert_eq!(
formatter.format(&first_gateway, &relay_status),
"relay event: LAN gateway connected as peer 1"
);
assert!(relay_status.gateway_connected());
assert_eq!(relay_status.gateway_peer_id(), Some(1));
assert_eq!(
formatter.format(&first_gateway_left, &relay_status),
"relay event: LAN gateway disconnected (peer 1, Normal)"
);
assert!(!relay_status.gateway_connected());
assert_eq!(relay_status.gateway_peer_id(), None);
assert_eq!(
formatter.format(&replacement_gateway, &relay_status),
"relay event: LAN gateway connected as peer 3"
);
assert!(relay_status.gateway_connected());
assert_eq!(relay_status.gateway_peer_id(), Some(3));
}
const fn mac(last_octet: u8) -> MacAddr { const fn mac(last_octet: u8) -> MacAddr {
MacAddr::new([0x02, 0, 0, 0, 0, last_octet]) MacAddr::new([0x02, 0, 0, 0, 0, last_octet])
} }