Skip to content

Commit 21904ff

Browse files
committed
Add a constructor for the test SocketDescriptor and hang_writes
In testing, its useful to be able to tell the `SocketDescriptor` to pretend the system network buffer is full, which we add here by creating a new `hang_writes` flag. In order to simplify constructing, we also add a new constructor which existing tests are moved to.
1 parent bcad257 commit 21904ff

File tree

1 file changed

+32
-55
lines changed

1 file changed

+32
-55
lines changed

lightning/src/ln/peer_handler.rs

Lines changed: 32 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -2754,6 +2754,7 @@ mod tests {
27542754
#[derive(Clone)]
27552755
struct FileDescriptor {
27562756
fd: u16,
2757+
hang_writes: Arc<AtomicBool>,
27572758
outbound_data: Arc<Mutex<Vec<u8>>>,
27582759
disconnect: Arc<AtomicBool>,
27592760
}
@@ -2771,13 +2772,28 @@ mod tests {
27712772

27722773
impl SocketDescriptor for FileDescriptor {
27732774
fn send_data(&mut self, data: &[u8], _resume_read: bool) -> usize {
2774-
self.outbound_data.lock().unwrap().extend_from_slice(data);
2775-
data.len()
2775+
if self.hang_writes.load(Ordering::Acquire) {
2776+
0
2777+
} else {
2778+
self.outbound_data.lock().unwrap().extend_from_slice(data);
2779+
data.len()
2780+
}
27762781
}
27772782

27782783
fn disconnect_socket(&mut self) { self.disconnect.store(true, Ordering::Release); }
27792784
}
27802785

2786+
impl FileDescriptor {
2787+
fn new(fd: u16) -> Self {
2788+
Self {
2789+
fd,
2790+
hang_writes: Arc::new(AtomicBool::new(false)),
2791+
outbound_data: Arc::new(Mutex::new(Vec::new())),
2792+
disconnect: Arc::new(AtomicBool::new(false)),
2793+
}
2794+
}
2795+
}
2796+
27812797
struct PeerManagerCfg {
27822798
chan_handler: test_utils::TestChannelMessageHandler,
27832799
routing_handler: test_utils::TestRoutingMessageHandler,
@@ -2828,7 +2844,7 @@ mod tests {
28282844
cfgs.push(
28292845
PeerManagerCfg{
28302846
chan_handler: test_utils::TestChannelMessageHandler::new(ChainHash::using_genesis_block(Network::Testnet)),
2831-
logger: test_utils::TestLogger::new(),
2847+
logger: test_utils::TestLogger::with_id(i.to_string()),
28322848
routing_handler: test_utils::TestRoutingMessageHandler::new(),
28332849
custom_handler: TestCustomMessageHandler { features },
28342850
node_signer: test_utils::TestNodeSigner::new(node_secret),
@@ -2902,19 +2918,13 @@ mod tests {
29022918
let fd = FD_COUNTER.fetch_add(1, Ordering::Relaxed) as u16;
29032919

29042920
let id_a = peer_a.node_signer.get_node_id(Recipient::Node).unwrap();
2905-
let mut fd_a = FileDescriptor {
2906-
fd, outbound_data: Arc::new(Mutex::new(Vec::new())),
2907-
disconnect: Arc::new(AtomicBool::new(false)),
2908-
};
2921+
let mut fd_a = FileDescriptor::new(fd);
29092922
let addr_a = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1000};
29102923

29112924
let id_b = peer_b.node_signer.get_node_id(Recipient::Node).unwrap();
29122925
let features_a = peer_a.init_features(id_b);
29132926
let features_b = peer_b.init_features(id_a);
2914-
let mut fd_b = FileDescriptor {
2915-
fd, outbound_data: Arc::new(Mutex::new(Vec::new())),
2916-
disconnect: Arc::new(AtomicBool::new(false)),
2917-
};
2927+
let mut fd_b = FileDescriptor::new(fd);
29182928
let addr_b = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1001};
29192929

29202930
let initial_data = peer_b.new_outbound_connection(id_a, fd_b.clone(), Some(addr_a.clone())).unwrap();
@@ -2960,15 +2970,9 @@ mod tests {
29602970
let mut ctr = 0;
29612971
while start_time.elapsed() < std::time::Duration::from_secs(1) {
29622972
let id_a = peers[0].node_signer.get_node_id(Recipient::Node).unwrap();
2963-
let mut fd_a = FileDescriptor {
2964-
fd: $id + ctr * 3, outbound_data: Arc::new(Mutex::new(Vec::new())),
2965-
disconnect: Arc::new(AtomicBool::new(false)),
2966-
};
2973+
let mut fd_a = FileDescriptor::new($id + ctr * 3);
29672974
let addr_a = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1000};
2968-
let mut fd_b = FileDescriptor {
2969-
fd: $id + ctr * 3, outbound_data: Arc::new(Mutex::new(Vec::new())),
2970-
disconnect: Arc::new(AtomicBool::new(false)),
2971-
};
2975+
let mut fd_b = FileDescriptor::new($id + ctr * 3);
29722976
let addr_b = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1001};
29732977
let initial_data = peers[1].new_outbound_connection(id_a, fd_b.clone(), Some(addr_a.clone())).unwrap();
29742978
peers[0].new_inbound_connection(fd_a.clone(), Some(addr_b.clone())).unwrap();
@@ -3032,15 +3036,9 @@ mod tests {
30323036
let peer_pairs = [(&peers[0], &incompatible_peers[0]), (&incompatible_peers[1], &peers[1])];
30333037
for (peer_a, peer_b) in peer_pairs.iter() {
30343038
let id_a = peer_a.node_signer.get_node_id(Recipient::Node).unwrap();
3035-
let mut fd_a = FileDescriptor {
3036-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3037-
disconnect: Arc::new(AtomicBool::new(false)),
3038-
};
3039+
let mut fd_a = FileDescriptor::new(1);
30393040
let addr_a = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1000};
3040-
let mut fd_b = FileDescriptor {
3041-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3042-
disconnect: Arc::new(AtomicBool::new(false)),
3043-
};
3041+
let mut fd_b = FileDescriptor::new(1);
30443042
let addr_b = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1001};
30453043
let initial_data = peer_b.new_outbound_connection(id_a, fd_b.clone(), Some(addr_a.clone())).unwrap();
30463044
peer_a.new_inbound_connection(fd_a.clone(), Some(addr_b.clone())).unwrap();
@@ -3068,15 +3066,9 @@ mod tests {
30683066
let peer_pairs = [(&peers[0], &incompatible_peers[0]), (&incompatible_peers[1], &peers[1])];
30693067
for (peer_a, peer_b) in peer_pairs.iter() {
30703068
let id_a = peer_a.node_signer.get_node_id(Recipient::Node).unwrap();
3071-
let mut fd_a = FileDescriptor {
3072-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3073-
disconnect: Arc::new(AtomicBool::new(false)),
3074-
};
3069+
let mut fd_a = FileDescriptor::new(1);
30753070
let addr_a = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1000};
3076-
let mut fd_b = FileDescriptor {
3077-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3078-
disconnect: Arc::new(AtomicBool::new(false)),
3079-
};
3071+
let mut fd_b = FileDescriptor::new(1);
30803072
let addr_b = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1001};
30813073
let initial_data = peer_b.new_outbound_connection(id_a, fd_b.clone(), Some(addr_a.clone())).unwrap();
30823074
peer_a.new_inbound_connection(fd_a.clone(), Some(addr_b.clone())).unwrap();
@@ -3150,10 +3142,7 @@ mod tests {
31503142
let cfgs = create_peermgr_cfgs(2);
31513143
let peers = create_network(2, &cfgs);
31523144

3153-
let mut fd_dup = FileDescriptor {
3154-
fd: 3, outbound_data: Arc::new(Mutex::new(Vec::new())),
3155-
disconnect: Arc::new(AtomicBool::new(false)),
3156-
};
3145+
let mut fd_dup = FileDescriptor::new(3);
31573146
let addr_dup = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1003};
31583147
let id_a = cfgs[0].node_signer.get_node_id(Recipient::Node).unwrap();
31593148
peers[0].new_inbound_connection(fd_dup.clone(), Some(addr_dup.clone())).unwrap();
@@ -3257,14 +3246,8 @@ mod tests {
32573246
let peers = create_network(2, &cfgs);
32583247

32593248
let a_id = peers[0].node_signer.get_node_id(Recipient::Node).unwrap();
3260-
let mut fd_a = FileDescriptor {
3261-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3262-
disconnect: Arc::new(AtomicBool::new(false)),
3263-
};
3264-
let mut fd_b = FileDescriptor {
3265-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3266-
disconnect: Arc::new(AtomicBool::new(false)),
3267-
};
3249+
let mut fd_a = FileDescriptor::new(1);
3250+
let mut fd_b = FileDescriptor::new(1);
32683251
let initial_data = peers[1].new_outbound_connection(a_id, fd_b.clone(), None).unwrap();
32693252
peers[0].new_inbound_connection(fd_a.clone(), None).unwrap();
32703253

@@ -3310,14 +3293,8 @@ mod tests {
33103293
}, 0, &[1; 32], &logger, &node_signer_b);
33113294

33123295
let a_id = node_signer_a.get_node_id(Recipient::Node).unwrap();
3313-
let mut fd_a = FileDescriptor {
3314-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3315-
disconnect: Arc::new(AtomicBool::new(false)),
3316-
};
3317-
let mut fd_b = FileDescriptor {
3318-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3319-
disconnect: Arc::new(AtomicBool::new(false)),
3320-
};
3296+
let mut fd_a = FileDescriptor::new(1);
3297+
let mut fd_b = FileDescriptor::new(1);
33213298

33223299
// Exchange messages with both peers until they both complete the init handshake.
33233300
let act_one = peer_b.new_outbound_connection(a_id, fd_b.clone(), None).unwrap();

0 commit comments

Comments
 (0)