Skip to content

Commit bd70d56

Browse files
committed
Add test of an initial message other than Init
This test fails without the previous commit.
1 parent 83d28d8 commit bd70d56

File tree

2 files changed

+39
-8
lines changed

2 files changed

+39
-8
lines changed

lightning/src/ln/peer_handler.rs

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2163,6 +2163,7 @@ fn is_gossip_msg(type_id: u16) -> bool {
21632163
#[cfg(test)]
21642164
mod tests {
21652165
use crate::chain::keysinterface::{NodeSigner, Recipient};
2166+
use crate::ln::peer_channel_encryptor::PeerChannelEncryptor;
21662167
use crate::ln::peer_handler::{PeerManager, MessageHandler, SocketDescriptor, IgnoringMessageHandler, filter_addresses};
21672168
use crate::ln::{msgs, wire};
21682169
use crate::ln::msgs::NetAddress;
@@ -2271,19 +2272,15 @@ mod tests {
22712272
// Simple test which builds a network of PeerManager, connects and brings them to NoiseState::Finished and
22722273
// push a DisconnectPeer event to remove the node flagged by id
22732274
let cfgs = create_peermgr_cfgs(2);
2274-
let chan_handler = test_utils::TestChannelMessageHandler::new();
2275-
let mut peers = create_network(2, &cfgs);
2275+
let peers = create_network(2, &cfgs);
22762276
establish_connection(&peers[0], &peers[1]);
22772277
assert_eq!(peers[0].peers.read().unwrap().len(), 1);
22782278

22792279
let their_id = peers[1].node_signer.get_node_id(Recipient::Node).unwrap();
2280-
2281-
chan_handler.pending_events.lock().unwrap().push(events::MessageSendEvent::HandleError {
2280+
cfgs[0].chan_handler.pending_events.lock().unwrap().push(events::MessageSendEvent::HandleError {
22822281
node_id: their_id,
22832282
action: msgs::ErrorAction::DisconnectPeer { msg: None },
22842283
});
2285-
assert_eq!(chan_handler.pending_events.lock().unwrap().len(), 1);
2286-
peers[0].message_handler.chan_handler = &chan_handler;
22872284

22882285
peers[0].process_events();
22892286
assert_eq!(peers[0].peers.read().unwrap().len(), 0);
@@ -2317,6 +2314,35 @@ mod tests {
23172314
assert_eq!(peers[1].read_event(&mut fd_b, &a_data).unwrap(), false);
23182315
}
23192316

2317+
#[test]
2318+
fn test_non_init_first_mst() {
2319+
// Simple test of the first message received over a connection being something other than
2320+
// Init. This results in an immediate disconnection, which previously included a spurious
2321+
// peer_disconnected event handed to event handlers (which would panic in
2322+
// `TestChannelMessageHandler` here).
2323+
let cfgs = create_peermgr_cfgs(2);
2324+
let peers = create_network(2, &cfgs);
2325+
2326+
let mut fd_dup = FileDescriptor { fd: 3, outbound_data: Arc::new(Mutex::new(Vec::new())) };
2327+
let addr_dup = NetAddress::IPv4{addr: [127, 0, 0, 1], port: 1003};
2328+
let id_a = cfgs[0].node_signer.get_node_id(Recipient::Node).unwrap();
2329+
peers[0].new_inbound_connection(fd_dup.clone(), Some(addr_dup.clone())).unwrap();
2330+
2331+
let mut dup_encryptor = PeerChannelEncryptor::new_outbound(id_a, SecretKey::from_slice(&[42; 32]).unwrap());
2332+
let initial_data = dup_encryptor.get_act_one(&peers[1].secp_ctx);
2333+
assert_eq!(peers[0].read_event(&mut fd_dup, &initial_data).unwrap(), false);
2334+
peers[0].process_events();
2335+
2336+
let a_data = fd_dup.outbound_data.lock().unwrap().split_off(0);
2337+
let (act_three, _) =
2338+
dup_encryptor.process_act_two(&a_data[..], &&cfgs[1].node_signer).unwrap();
2339+
assert_eq!(peers[0].read_event(&mut fd_dup, &act_three).unwrap(), false);
2340+
2341+
let not_init_msg = msgs::Ping { ponglen: 4, byteslen: 0 };
2342+
let msg_bytes = dup_encryptor.encrypt_message(&not_init_msg);
2343+
assert!(peers[0].read_event(&mut fd_dup, &msg_bytes).is_err());
2344+
}
2345+
23202346
#[test]
23212347
fn test_disconnect_all_peer() {
23222348
// Simple test which builds a network of PeerManager, connects and brings them to NoiseState::Finished and

lightning/src/util/test_utils.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -330,13 +330,15 @@ impl chaininterface::BroadcasterInterface for TestBroadcaster {
330330
pub struct TestChannelMessageHandler {
331331
pub pending_events: Mutex<Vec<events::MessageSendEvent>>,
332332
expected_recv_msgs: Mutex<Option<Vec<wire::Message<()>>>>,
333+
connected_peers: Mutex<HashSet<PublicKey>>,
333334
}
334335

335336
impl TestChannelMessageHandler {
336337
pub fn new() -> Self {
337338
TestChannelMessageHandler {
338339
pending_events: Mutex::new(Vec::new()),
339340
expected_recv_msgs: Mutex::new(None),
341+
connected_peers: Mutex::new(HashSet::new()),
340342
}
341343
}
342344

@@ -421,8 +423,11 @@ impl msgs::ChannelMessageHandler for TestChannelMessageHandler {
421423
fn handle_channel_reestablish(&self, _their_node_id: &PublicKey, msg: &msgs::ChannelReestablish) {
422424
self.received_msg(wire::Message::ChannelReestablish(msg.clone()));
423425
}
424-
fn peer_disconnected(&self, _their_node_id: &PublicKey, _no_connection_possible: bool) {}
425-
fn peer_connected(&self, _their_node_id: &PublicKey, _msg: &msgs::Init) -> Result<(), ()> {
426+
fn peer_disconnected(&self, their_node_id: &PublicKey, _no_connection_possible: bool) {
427+
assert!(self.connected_peers.lock().unwrap().remove(their_node_id));
428+
}
429+
fn peer_connected(&self, their_node_id: &PublicKey, _msg: &msgs::Init) -> Result<(), ()> {
430+
assert!(self.connected_peers.lock().unwrap().insert(their_node_id.clone()));
426431
// Don't bother with `received_msg` for Init as its auto-generated and we don't want to
427432
// bother re-generating the expected Init message in all tests.
428433
Ok(())

0 commit comments

Comments
 (0)