Skip to content

Commit 81ef0c6

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 aa8d1b7 commit 81ef0c6

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
@@ -2751,6 +2751,7 @@ mod tests {
27512751
#[derive(Clone)]
27522752
struct FileDescriptor {
27532753
fd: u16,
2754+
hang_writes: Arc<AtomicBool>,
27542755
outbound_data: Arc<Mutex<Vec<u8>>>,
27552756
disconnect: Arc<AtomicBool>,
27562757
}
@@ -2768,13 +2769,28 @@ mod tests {
27682769

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

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

2783+
impl FileDescriptor {
2784+
fn new(fd: u16) -> Self {
2785+
Self {
2786+
fd,
2787+
hang_writes: Arc::new(AtomicBool::new(false)),
2788+
outbound_data: Arc::new(Mutex::new(Vec::new())),
2789+
disconnect: Arc::new(AtomicBool::new(false)),
2790+
}
2791+
}
2792+
}
2793+
27782794
struct PeerManagerCfg {
27792795
chan_handler: test_utils::TestChannelMessageHandler,
27802796
routing_handler: test_utils::TestRoutingMessageHandler,
@@ -2825,7 +2841,7 @@ mod tests {
28252841
cfgs.push(
28262842
PeerManagerCfg{
28272843
chan_handler: test_utils::TestChannelMessageHandler::new(ChainHash::using_genesis_block(Network::Testnet)),
2828-
logger: test_utils::TestLogger::new(),
2844+
logger: test_utils::TestLogger::with_id(i.to_string()),
28292845
routing_handler: test_utils::TestRoutingMessageHandler::new(),
28302846
custom_handler: TestCustomMessageHandler { features },
28312847
node_signer: test_utils::TestNodeSigner::new(node_secret),
@@ -2899,19 +2915,13 @@ mod tests {
28992915
let fd = FD_COUNTER.fetch_add(1, Ordering::Relaxed) as u16;
29002916

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

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

29172927
let initial_data = peer_b.new_outbound_connection(id_a, fd_b.clone(), Some(addr_a.clone())).unwrap();
@@ -2957,15 +2967,9 @@ mod tests {
29572967
let mut ctr = 0;
29582968
while start_time.elapsed() < std::time::Duration::from_secs(1) {
29592969
let id_a = peers[0].node_signer.get_node_id(Recipient::Node).unwrap();
2960-
let mut fd_a = FileDescriptor {
2961-
fd: $id + ctr * 3, outbound_data: Arc::new(Mutex::new(Vec::new())),
2962-
disconnect: Arc::new(AtomicBool::new(false)),
2963-
};
2970+
let mut fd_a = FileDescriptor::new($id + ctr * 3);
29642971
let addr_a = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1000};
2965-
let mut fd_b = FileDescriptor {
2966-
fd: $id + ctr * 3, outbound_data: Arc::new(Mutex::new(Vec::new())),
2967-
disconnect: Arc::new(AtomicBool::new(false)),
2968-
};
2972+
let mut fd_b = FileDescriptor::new($id + ctr * 3);
29692973
let addr_b = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1001};
29702974
let initial_data = peers[1].new_outbound_connection(id_a, fd_b.clone(), Some(addr_a.clone())).unwrap();
29712975
peers[0].new_inbound_connection(fd_a.clone(), Some(addr_b.clone())).unwrap();
@@ -3029,15 +3033,9 @@ mod tests {
30293033
let peer_pairs = [(&peers[0], &incompatible_peers[0]), (&incompatible_peers[1], &peers[1])];
30303034
for (peer_a, peer_b) in peer_pairs.iter() {
30313035
let id_a = peer_a.node_signer.get_node_id(Recipient::Node).unwrap();
3032-
let mut fd_a = FileDescriptor {
3033-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3034-
disconnect: Arc::new(AtomicBool::new(false)),
3035-
};
3036+
let mut fd_a = FileDescriptor::new(1);
30363037
let addr_a = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1000};
3037-
let mut fd_b = FileDescriptor {
3038-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3039-
disconnect: Arc::new(AtomicBool::new(false)),
3040-
};
3038+
let mut fd_b = FileDescriptor::new(1);
30413039
let addr_b = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1001};
30423040
let initial_data = peer_b.new_outbound_connection(id_a, fd_b.clone(), Some(addr_a.clone())).unwrap();
30433041
peer_a.new_inbound_connection(fd_a.clone(), Some(addr_b.clone())).unwrap();
@@ -3065,15 +3063,9 @@ mod tests {
30653063
let peer_pairs = [(&peers[0], &incompatible_peers[0]), (&incompatible_peers[1], &peers[1])];
30663064
for (peer_a, peer_b) in peer_pairs.iter() {
30673065
let id_a = peer_a.node_signer.get_node_id(Recipient::Node).unwrap();
3068-
let mut fd_a = FileDescriptor {
3069-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3070-
disconnect: Arc::new(AtomicBool::new(false)),
3071-
};
3066+
let mut fd_a = FileDescriptor::new(1);
30723067
let addr_a = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1000};
3073-
let mut fd_b = FileDescriptor {
3074-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
3075-
disconnect: Arc::new(AtomicBool::new(false)),
3076-
};
3068+
let mut fd_b = FileDescriptor::new(1);
30773069
let addr_b = SocketAddress::TcpIpV4{addr: [127, 0, 0, 1], port: 1001};
30783070
let initial_data = peer_b.new_outbound_connection(id_a, fd_b.clone(), Some(addr_a.clone())).unwrap();
30793071
peer_a.new_inbound_connection(fd_a.clone(), Some(addr_b.clone())).unwrap();
@@ -3147,10 +3139,7 @@ mod tests {
31473139
let cfgs = create_peermgr_cfgs(2);
31483140
let peers = create_network(2, &cfgs);
31493141

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

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

@@ -3307,14 +3290,8 @@ mod tests {
33073290
}, 0, &[1; 32], &logger, &node_signer_b);
33083291

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

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

0 commit comments

Comments
 (0)