mirror of
https://github.com/jmcorgan/fips.git
synced 2026-08-11 09:07:44 +00:00
Merge branch 'master' into next
# Conflicts: # src/node/tests/bootstrap.rs
This commit is contained in:
@@ -2,10 +2,11 @@
|
||||
|
||||
use super::*;
|
||||
use crate::EstablishedTraversal;
|
||||
use crate::config::UdpConfig;
|
||||
use crate::config::{TransportInstances, UdpConfig};
|
||||
use crate::node::wire::{PHASE_MSG1, PHASE_MSG2, PHASE_MSG3};
|
||||
use crate::transport::udp::UdpTransport;
|
||||
use crate::utils::index::IndexAllocator;
|
||||
use std::collections::HashMap;
|
||||
use tokio::time::{Duration, timeout, timeout_at};
|
||||
|
||||
#[tokio::test]
|
||||
@@ -284,3 +285,90 @@ async fn test_third_peer_can_handshake_via_adopted_transport_socket() {
|
||||
transport.stop().await.ok();
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_adopted_udp_inherits_mtu_from_single_primary_config() {
|
||||
let mut node = make_node();
|
||||
node.config.transports.udp = TransportInstances::Single(UdpConfig {
|
||||
mtu: Some(1500),
|
||||
..Default::default()
|
||||
});
|
||||
|
||||
let (packet_tx, packet_rx) = packet_channel(64);
|
||||
node.packet_tx = Some(packet_tx);
|
||||
node.packet_rx = Some(packet_rx);
|
||||
node.state = NodeState::Running;
|
||||
|
||||
let peer = make_node();
|
||||
let adopted_socket = std::net::UdpSocket::bind("127.0.0.1:0").unwrap();
|
||||
let handoff = EstablishedTraversal::new(
|
||||
"sess-inherit-single",
|
||||
peer.npub(),
|
||||
"127.0.0.1:9".parse().unwrap(),
|
||||
adopted_socket,
|
||||
);
|
||||
|
||||
let result = node.adopt_established_traversal(handoff).await.unwrap();
|
||||
let adopted = node
|
||||
.get_transport(&result.transport_id)
|
||||
.expect("adopted transport present");
|
||||
assert_eq!(
|
||||
adopted.mtu(),
|
||||
1500,
|
||||
"adopted UDP transport should inherit MTU from the primary [transports.udp] config",
|
||||
);
|
||||
|
||||
for (_, transport) in node.transports.iter_mut() {
|
||||
transport.stop().await.ok();
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_adopted_udp_inherits_mtu_from_named_primary_config() {
|
||||
let mut node = make_node();
|
||||
let mut named = HashMap::new();
|
||||
named.insert(
|
||||
"primary".to_string(),
|
||||
UdpConfig {
|
||||
mtu: Some(1500),
|
||||
..Default::default()
|
||||
},
|
||||
);
|
||||
named.insert(
|
||||
"secondary".to_string(),
|
||||
UdpConfig {
|
||||
mtu: Some(1280),
|
||||
..Default::default()
|
||||
},
|
||||
);
|
||||
node.config.transports.udp = TransportInstances::Named(named);
|
||||
|
||||
let (packet_tx, packet_rx) = packet_channel(64);
|
||||
node.packet_tx = Some(packet_tx);
|
||||
node.packet_rx = Some(packet_rx);
|
||||
node.state = NodeState::Running;
|
||||
|
||||
let peer = make_node();
|
||||
let adopted_socket = std::net::UdpSocket::bind("127.0.0.1:0").unwrap();
|
||||
let handoff = EstablishedTraversal::new(
|
||||
"sess-inherit-named",
|
||||
peer.npub(),
|
||||
"127.0.0.1:9".parse().unwrap(),
|
||||
adopted_socket,
|
||||
)
|
||||
.with_transport_name("primary");
|
||||
|
||||
let result = node.adopt_established_traversal(handoff).await.unwrap();
|
||||
let adopted = node
|
||||
.get_transport(&result.transport_id)
|
||||
.expect("adopted transport present");
|
||||
assert_eq!(
|
||||
adopted.mtu(),
|
||||
1500,
|
||||
"adopted UDP transport should inherit MTU from the named [transports.udp.<name>] config matching transport_name",
|
||||
);
|
||||
|
||||
for (_, transport) in node.transports.iter_mut() {
|
||||
transport.stop().await.ok();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -955,6 +955,38 @@ fn test_promote_clears_retry_pending() {
|
||||
);
|
||||
}
|
||||
|
||||
/// Initial peer-init failure at startup must enqueue a retry. Otherwise a peer
|
||||
/// whose addresses cannot be dialed at boot (no operational transport for the
|
||||
/// configured transport types, all addresses unreachable, NAT rebind, etc.)
|
||||
/// stays dead forever — pings arrive but cannot be answered until the daemon
|
||||
/// is manually restarted.
|
||||
#[tokio::test]
|
||||
async fn test_initiate_peer_connections_schedules_retry_on_no_transport() {
|
||||
let peer_identity = Identity::generate();
|
||||
let peer_npub = peer_identity.npub();
|
||||
let peer_node_addr = *PeerIdentity::from_npub(&peer_npub).unwrap().node_addr();
|
||||
|
||||
let mut config = Config::new();
|
||||
// udp address but no UDP transport registered on the node — every dial
|
||||
// attempt resolves to NodeError::NoTransportForType.
|
||||
config.peers.push(crate::config::PeerConfig::new(
|
||||
peer_npub,
|
||||
"udp",
|
||||
"10.0.0.2:2121",
|
||||
));
|
||||
|
||||
let mut node = Node::new(config).unwrap();
|
||||
assert!(node.retry_pending.is_empty());
|
||||
|
||||
node.initiate_peer_connections().await;
|
||||
|
||||
assert!(
|
||||
node.retry_pending.contains_key(&peer_node_addr),
|
||||
"startup peer-init failure must enqueue a retry so the peer can recover \
|
||||
without a daemon restart"
|
||||
);
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// transport_mtu() — ISSUE-2026-0011 regression coverage
|
||||
// ============================================================================
|
||||
|
||||
Reference in New Issue
Block a user