Skip to content

Commit 54607ff

Browse files
committed
f Test clearing initial_routing_sync in PeerManager
1 parent 4e976e3 commit 54607ff

File tree

2 files changed

+62
-3
lines changed

2 files changed

+62
-3
lines changed

lightning/src/ln/peer_handler.rs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1247,6 +1247,13 @@ mod tests {
12471247
(fd_a.clone(), fd_b.clone())
12481248
}
12491249

1250+
fn establish_connection_and_read_events<'a>(peer_a: &PeerManager<FileDescriptor, &'a test_utils::TestChannelMessageHandler>, peer_b: &PeerManager<FileDescriptor, &'a test_utils::TestChannelMessageHandler>) -> (FileDescriptor, FileDescriptor) {
1251+
let (mut fd_a, mut fd_b) = establish_connection(peer_a, peer_b);
1252+
assert_eq!(peer_b.read_event(&mut fd_b, &fd_a.outbound_data.lock().unwrap().split_off(0)).unwrap(), false);
1253+
assert_eq!(peer_a.read_event(&mut fd_a, &fd_b.outbound_data.lock().unwrap().split_off(0)).unwrap(), false);
1254+
(fd_a.clone(), fd_b.clone())
1255+
}
1256+
12501257
#[test]
12511258
fn test_disconnect_peer() {
12521259
// Simple test which builds a network of PeerManager, connects and brings them to NoiseState::Finished and
@@ -1421,4 +1428,47 @@ mod tests {
14211428
assert_eq!(routing_handlers_concrete[1].clone().chan_upds_recvd.load(Ordering::Acquire), 100);
14221429
assert_eq!(routing_handlers_concrete[1].clone().chan_anns_recvd.load(Ordering::Acquire), 50);
14231430
}
1431+
1432+
#[test]
1433+
fn limit_initial_routing_sync_requests() {
1434+
// Inbound peer 0 requests initial_routing_sync, but outbound peer 1 does not.
1435+
{
1436+
let chan_handlers = create_chan_handlers(2);
1437+
let routing_handlers: Vec<Arc<msgs::RoutingMessageHandler>> = vec![
1438+
Arc::new(test_utils::TestRoutingMessageHandler::new().set_request_full_sync()),
1439+
Arc::new(test_utils::TestRoutingMessageHandler::new()),
1440+
];
1441+
let peers = create_network(2, &chan_handlers, Some(&routing_handlers));
1442+
let (fd_0_to_1, fd_1_to_0) = establish_connection_and_read_events(&peers[0], &peers[1]);
1443+
1444+
let peer_0 = peers[0].peers.lock().unwrap();
1445+
let peer_1 = peers[1].peers.lock().unwrap();
1446+
1447+
let peer_0_features = peer_1.peers.get(&fd_1_to_0).unwrap().their_features.as_ref();
1448+
let peer_1_features = peer_0.peers.get(&fd_0_to_1).unwrap().their_features.as_ref();
1449+
1450+
assert!(peer_0_features.unwrap().initial_routing_sync());
1451+
assert!(!peer_1_features.unwrap().initial_routing_sync());
1452+
}
1453+
1454+
// Outbound peer 1 requests initial_routing_sync, but inbound peer 0 does not.
1455+
{
1456+
let chan_handlers = create_chan_handlers(2);
1457+
let routing_handlers: Vec<Arc<msgs::RoutingMessageHandler>> = vec![
1458+
Arc::new(test_utils::TestRoutingMessageHandler::new()),
1459+
Arc::new(test_utils::TestRoutingMessageHandler::new().set_request_full_sync()),
1460+
];
1461+
let peers = create_network(2, &chan_handlers, Some(&routing_handlers));
1462+
let (fd_0_to_1, fd_1_to_0) = establish_connection_and_read_events(&peers[0], &peers[1]);
1463+
1464+
let peer_0 = peers[0].peers.lock().unwrap();
1465+
let peer_1 = peers[1].peers.lock().unwrap();
1466+
1467+
let peer_0_features = peer_1.peers.get(&fd_1_to_0).unwrap().their_features.as_ref();
1468+
let peer_1_features = peer_0.peers.get(&fd_0_to_1).unwrap().their_features.as_ref();
1469+
1470+
assert!(!peer_0_features.unwrap().initial_routing_sync());
1471+
assert!(peer_1_features.unwrap().initial_routing_sync());
1472+
}
1473+
}
14241474
}

lightning/src/util/test_utils.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,11 +170,20 @@ impl events::MessageSendEventsProvider for TestChannelMessageHandler {
170170
}
171171
}
172172

173-
pub struct TestRoutingMessageHandler {}
173+
pub struct TestRoutingMessageHandler {
174+
request_full_sync: bool,
175+
}
174176

175177
impl TestRoutingMessageHandler {
176178
pub fn new() -> Self {
177-
TestRoutingMessageHandler {}
179+
TestRoutingMessageHandler {
180+
request_full_sync: false,
181+
}
182+
}
183+
184+
pub fn set_request_full_sync(mut self) -> Self {
185+
self.request_full_sync = true;
186+
self
178187
}
179188
}
180189
impl msgs::RoutingMessageHandler for TestRoutingMessageHandler {
@@ -195,7 +204,7 @@ impl msgs::RoutingMessageHandler for TestRoutingMessageHandler {
195204
Vec::new()
196205
}
197206
fn should_request_full_sync(&self, _node_id: &PublicKey) -> bool {
198-
true
207+
self.request_full_sync
199208
}
200209
}
201210

0 commit comments

Comments
 (0)