Skip to content

Commit 533d812

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 ba396a8 commit 533d812

File tree

1 file changed

+32
-55
lines changed

1 file changed

+32
-55
lines changed

lightning/src/ln/peer_handler.rs

+32-55
Original file line numberDiff line numberDiff line change
@@ -2750,6 +2750,7 @@ mod tests {
27502750
#[derive(Clone)]
27512751
struct FileDescriptor {
27522752
fd: u16,
2753+
hang_writes: Arc<AtomicBool>,
27532754
outbound_data: Arc<Mutex<Vec<u8>>>,
27542755
disconnect: Arc<AtomicBool>,
27552756
}
@@ -2767,13 +2768,28 @@ mod tests {
27672768

27682769
impl SocketDescriptor for FileDescriptor {
27692770
fn send_data(&mut self, data: &[u8], _resume_read: bool) -> usize {
2770-
self.outbound_data.lock().unwrap().extend_from_slice(data);
2771-
data.len()
2771+
if self.hang_writes.load(Ordering::Acquire) {
2772+
0
2773+
} else {
2774+
self.outbound_data.lock().unwrap().extend_from_slice(data);
2775+
data.len()
2776+
}
27722777
}
27732778

27742779
fn disconnect_socket(&mut self) { self.disconnect.store(true, Ordering::Release); }
27752780
}
27762781

2782+
impl FileDescriptor {
2783+
fn new(fd: u16) -> Self {
2784+
Self {
2785+
fd,
2786+
hang_writes: Arc::new(AtomicBool::new(false)),
2787+
outbound_data: Arc::new(Mutex::new(Vec::new())),
2788+
disconnect: Arc::new(AtomicBool::new(false)),
2789+
}
2790+
}
2791+
}
2792+
27772793
struct PeerManagerCfg {
27782794
chan_handler: test_utils::TestChannelMessageHandler,
27792795
routing_handler: test_utils::TestRoutingMessageHandler,
@@ -2824,7 +2840,7 @@ mod tests {
28242840
cfgs.push(
28252841
PeerManagerCfg{
28262842
chan_handler: test_utils::TestChannelMessageHandler::new(ChainHash::using_genesis_block(Network::Testnet)),
2827-
logger: test_utils::TestLogger::new(),
2843+
logger: test_utils::TestLogger::with_id(i.to_string()),
28282844
routing_handler: test_utils::TestRoutingMessageHandler::new(),
28292845
custom_handler: TestCustomMessageHandler { features },
28302846
node_signer: test_utils::TestNodeSigner::new(node_secret),
@@ -2898,19 +2914,13 @@ mod tests {
28982914
let fd = FD_COUNTER.fetch_add(1, Ordering::Relaxed) as u16;
28992915

29002916
let id_a = peer_a.node_signer.get_node_id(Recipient::Node).unwrap();
2901-
let mut fd_a = FileDescriptor {
2902-
fd, outbound_data: Arc::new(Mutex::new(Vec::new())),
2903-
disconnect: Arc::new(AtomicBool::new(false)),
2904-
};
2917+
let mut fd_a = FileDescriptor::new(fd);
29052918
let addr_a = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1000};
29062919

29072920
let id_b = peer_b.node_signer.get_node_id(Recipient::Node).unwrap();
29082921
let features_a = peer_a.init_features(id_b);
29092922
let features_b = peer_b.init_features(id_a);
2910-
let mut fd_b = FileDescriptor {
2911-
fd, outbound_data: Arc::new(Mutex::new(Vec::new())),
2912-
disconnect: Arc::new(AtomicBool::new(false)),
2913-
};
2923+
let mut fd_b = FileDescriptor::new(fd);
29142924
let addr_b = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1001};
29152925

29162926
let initial_data = peer_b.new_outbound_connection(id_a, fd_b.clone(), Some(addr_a.clone())).unwrap();
@@ -2956,15 +2966,9 @@ mod tests {
29562966
let mut ctr = 0;
29572967
while start_time.elapsed() < std::time::Duration::from_secs(1) {
29582968
let id_a = peers[0].node_signer.get_node_id(Recipient::Node).unwrap();
2959-
let mut fd_a = FileDescriptor {
2960-
fd: $id + ctr * 3, outbound_data: Arc::new(Mutex::new(Vec::new())),
2961-
disconnect: Arc::new(AtomicBool::new(false)),
2962-
};
2969+
let mut fd_a = FileDescriptor::new($id + ctr * 3);
29632970
let addr_a = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1000};
2964-
let mut fd_b = FileDescriptor {
2965-
fd: $id + ctr * 3, outbound_data: Arc::new(Mutex::new(Vec::new())),
2966-
disconnect: Arc::new(AtomicBool::new(false)),
2967-
};
2971+
let mut fd_b = FileDescriptor::new($id + ctr * 3);
29682972
let addr_b = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1001};
29692973
let initial_data = peers[1].new_outbound_connection(id_a, fd_b.clone(), Some(addr_a.clone())).unwrap();
29702974
peers[0].new_inbound_connection(fd_a.clone(), Some(addr_b.clone())).unwrap();
@@ -3028,15 +3032,9 @@ mod tests {
30283032
let peer_pairs = [(&peers[0], &incompatible_peers[0]), (&incompatible_peers[1], &peers[1])];
30293033
for (peer_a, peer_b) in peer_pairs.iter() {
30303034
let id_a = peer_a.node_signer.get_node_id(Recipient::Node).unwrap();
3031-
let mut fd_a = FileDescriptor {
3032-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3033-
disconnect: Arc::new(AtomicBool::new(false)),
3034-
};
3035+
let mut fd_a = FileDescriptor::new(1);
30353036
let addr_a = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1000};
3036-
let mut fd_b = FileDescriptor {
3037-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3038-
disconnect: Arc::new(AtomicBool::new(false)),
3039-
};
3037+
let mut fd_b = FileDescriptor::new(1);
30403038
let addr_b = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1001};
30413039
let initial_data = peer_b.new_outbound_connection(id_a, fd_b.clone(), Some(addr_a.clone())).unwrap();
30423040
peer_a.new_inbound_connection(fd_a.clone(), Some(addr_b.clone())).unwrap();
@@ -3064,15 +3062,9 @@ mod tests {
30643062
let peer_pairs = [(&peers[0], &incompatible_peers[0]), (&incompatible_peers[1], &peers[1])];
30653063
for (peer_a, peer_b) in peer_pairs.iter() {
30663064
let id_a = peer_a.node_signer.get_node_id(Recipient::Node).unwrap();
3067-
let mut fd_a = FileDescriptor {
3068-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3069-
disconnect: Arc::new(AtomicBool::new(false)),
3070-
};
3065+
let mut fd_a = FileDescriptor::new(1);
30713066
let addr_a = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1000};
3072-
let mut fd_b = FileDescriptor {
3073-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3074-
disconnect: Arc::new(AtomicBool::new(false)),
3075-
};
3067+
let mut fd_b = FileDescriptor::new(1);
30763068
let addr_b = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1001};
30773069
let initial_data = peer_b.new_outbound_connection(id_a, fd_b.clone(), Some(addr_a.clone())).unwrap();
30783070
peer_a.new_inbound_connection(fd_a.clone(), Some(addr_b.clone())).unwrap();
@@ -3146,10 +3138,7 @@ mod tests {
31463138
let cfgs = create_peermgr_cfgs(2);
31473139
let peers = create_network(2, &cfgs);
31483140

3149-
let mut fd_dup = FileDescriptor {
3150-
fd: 3, outbound_data: Arc::new(Mutex::new(Vec::new())),
3151-
disconnect: Arc::new(AtomicBool::new(false)),
3152-
};
3141+
let mut fd_dup = FileDescriptor::new(3);
31533142
let addr_dup = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1003};
31543143
let id_a = cfgs[0].node_signer.get_node_id(Recipient::Node).unwrap();
31553144
peers[0].new_inbound_connection(fd_dup.clone(), Some(addr_dup.clone())).unwrap();
@@ -3253,14 +3242,8 @@ mod tests {
32533242
let peers = create_network(2, &cfgs);
32543243

32553244
let a_id = peers[0].node_signer.get_node_id(Recipient::Node).unwrap();
3256-
let mut fd_a = FileDescriptor {
3257-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3258-
disconnect: Arc::new(AtomicBool::new(false)),
3259-
};
3260-
let mut fd_b = FileDescriptor {
3261-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3262-
disconnect: Arc::new(AtomicBool::new(false)),
3263-
};
3245+
let mut fd_a = FileDescriptor::new(1);
3246+
let mut fd_b = FileDescriptor::new(1);
32643247
let initial_data = peers[1].new_outbound_connection(a_id, fd_b.clone(), None).unwrap();
32653248
peers[0].new_inbound_connection(fd_a.clone(), None).unwrap();
32663249

@@ -3306,14 +3289,8 @@ mod tests {
33063289
}, 0, &[1; 32], &logger, &node_signer_b);
33073290

33083291
let a_id = node_signer_a.get_node_id(Recipient::Node).unwrap();
3309-
let mut fd_a = FileDescriptor {
3310-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3311-
disconnect: Arc::new(AtomicBool::new(false)),
3312-
};
3313-
let mut fd_b = FileDescriptor {
3314-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3315-
disconnect: Arc::new(AtomicBool::new(false)),
3316-
};
3292+
let mut fd_a = FileDescriptor::new(1);
3293+
let mut fd_b = FileDescriptor::new(1);
33173294

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

0 commit comments

Comments
 (0)