Skip to content

Commit cdc0f13

Browse files
Add handle unkown peer test
1 parent fc2aa6a commit cdc0f13

File tree

1 file changed

+212
-1
lines changed

1 file changed

+212
-1
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 212 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7541,6 +7541,12 @@ impl<'a, Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
75417541
mod tests {
75427542
use bitcoin::hashes::Hash;
75437543
use bitcoin::hashes::sha256::Hash as Sha256;
7544+
use bitcoin::hashes::hex::FromHex;
7545+
use bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey};
7546+
use bitcoin::secp256k1::ecdsa::Signature;
7547+
use bitcoin::secp256k1::ffi::Signature as FFISignature;
7548+
use bitcoin::blockdata::script::Script;
7549+
use bitcoin::Txid;
75447550
use core::time::Duration;
75457551
use core::sync::atomic::Ordering;
75467552
use ln::{PaymentPreimage, PaymentHash, PaymentSecret};
@@ -7549,7 +7555,7 @@ mod tests {
75497555
use ln::features::InitFeatures;
75507556
use ln::functional_test_utils::*;
75517557
use ln::msgs;
7552-
use ln::msgs::ChannelMessageHandler;
7558+
use ln::msgs::{ChannelMessageHandler, OptionalField};
75537559
use routing::router::{PaymentParameters, RouteParameters, find_route};
75547560
use util::errors::APIError;
75557561
use util::events::{Event, MessageSendEvent, MessageSendEventsProvider, ClosureReason};
@@ -8154,6 +8160,211 @@ mod tests {
81548160
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
81558161
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
81568162
}
8163+
8164+
fn check_unkown_peer_msg_event<'a, 'b: 'a, 'c: 'b>(node: &Node<'a, 'b, 'c>, closing_node_id: PublicKey, closed_channel_id: [u8; 32]){
8165+
let close_msg_ev = node.node.get_and_clear_pending_msg_events();
8166+
let expected_error_str = format!("Can't find a peer with a node_id matching the passed counterparty_node_id {}", closing_node_id);
8167+
match close_msg_ev[0] {
8168+
MessageSendEvent::HandleError {
8169+
ref node_id, action: msgs::ErrorAction::SendErrorMessage {
8170+
msg: msgs::ErrorMessage { ref channel_id, ref data }
8171+
}
8172+
} => {
8173+
assert_eq!(*node_id, closing_node_id);
8174+
assert_eq!(*data, expected_error_str);
8175+
assert_eq!(*channel_id, closed_channel_id);
8176+
}
8177+
_ => panic!("Unexpected event"),
8178+
}
8179+
}
8180+
8181+
fn check_unkown_peer_error<T>(res_err: Result<T, APIError>, expected_public_key: PublicKey) {
8182+
match res_err {
8183+
Err(APIError::APIMisuseError { err }) => {
8184+
assert_eq!(err, format!("Can't find a peer with a node_id matching the passed counterparty_node_id {}", expected_public_key));
8185+
},
8186+
Ok(_) => panic!("Unexpected Ok"),
8187+
Err(_) => panic!("Unexpected Error"),
8188+
}
8189+
}
8190+
8191+
#[test]
8192+
fn test_api_calls_with_unkown_counterparty_node() {
8193+
// Tests that our API functions and message handlers that expects a `counterparty_node_id`
8194+
// as input, behaves as expected if the `counterparty_node_id` is an unkown peer in the
8195+
// `ChannelManager::per_peer_state` map.
8196+
let chanmon_cfg = create_chanmon_cfgs(2);
8197+
let node_cfg = create_node_cfgs(2, &chanmon_cfg);
8198+
let node_chanmgr = create_node_chanmgrs(2, &node_cfg, &[None, None]);
8199+
let nodes = create_network(2, &node_cfg, &node_chanmgr);
8200+
8201+
// Boilerplate code to produce `open_channel` and `accept_channel` msgs more densly than
8202+
// creating dummy ones.
8203+
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 1_000_000, 500_000_000, 42, None).unwrap();
8204+
let open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
8205+
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::known(), &open_channel_msg);
8206+
let accept_channel_msg = get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id());
8207+
8208+
// Dummy values
8209+
let channel_id = [4; 32];
8210+
let signature = Signature::from(unsafe { FFISignature::new() });
8211+
let unkown_public_key = PublicKey::from_secret_key(&Secp256k1::signing_only(), &SecretKey::from_slice(&[42; 32]).unwrap());
8212+
8213+
// Dummy msgs
8214+
let funding_created_msg = msgs::FundingCreated {
8215+
temporary_channel_id: open_channel_msg.temporary_channel_id,
8216+
funding_txid: Txid::from_hex("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap(),
8217+
funding_output_index: 0,
8218+
signature: signature,
8219+
};
8220+
8221+
let funding_signed_msg = msgs::FundingSigned {
8222+
channel_id: channel_id,
8223+
signature: signature,
8224+
};
8225+
8226+
let channel_ready_msg = msgs::ChannelReady {
8227+
channel_id: channel_id,
8228+
next_per_commitment_point: unkown_public_key,
8229+
short_channel_id_alias: None,
8230+
};
8231+
8232+
let announcement_signatures_msg = msgs::AnnouncementSignatures {
8233+
channel_id: channel_id,
8234+
short_channel_id: 0,
8235+
node_signature: signature,
8236+
bitcoin_signature: signature,
8237+
};
8238+
8239+
let channel_reestablish_msg = msgs::ChannelReestablish {
8240+
channel_id: channel_id,
8241+
next_local_commitment_number: 0,
8242+
next_remote_commitment_number: 0,
8243+
data_loss_protect: OptionalField::Absent,
8244+
};
8245+
8246+
let closing_signed_msg = msgs::ClosingSigned {
8247+
channel_id: channel_id,
8248+
fee_satoshis: 1000,
8249+
signature: signature,
8250+
fee_range: None,
8251+
};
8252+
8253+
let shutdown_msg = msgs::Shutdown {
8254+
channel_id: channel_id,
8255+
scriptpubkey: Script::new(),
8256+
};
8257+
8258+
let onion_routing_packet = msgs::OnionPacket {
8259+
version: 255,
8260+
public_key: Ok(unkown_public_key),
8261+
hop_data: [1; 20*65],
8262+
hmac: [2; 32]
8263+
};
8264+
8265+
let update_add_htlc_msg = msgs::UpdateAddHTLC {
8266+
channel_id: channel_id,
8267+
htlc_id: 0,
8268+
amount_msat: 1000000,
8269+
payment_hash: PaymentHash([1; 32]),
8270+
cltv_expiry: 821716,
8271+
onion_routing_packet
8272+
};
8273+
8274+
let commitment_signed_msg = msgs::CommitmentSigned {
8275+
channel_id: channel_id,
8276+
signature: signature,
8277+
htlc_signatures: Vec::new(),
8278+
};
8279+
8280+
let update_fee_msg = msgs::UpdateFee {
8281+
channel_id: channel_id,
8282+
feerate_per_kw: 1000,
8283+
};
8284+
8285+
let malformed_update_msg = msgs::UpdateFailMalformedHTLC{
8286+
channel_id: channel_id,
8287+
htlc_id: 0,
8288+
sha256_of_onion: [1; 32],
8289+
failure_code: 0x8000,
8290+
};
8291+
8292+
let fulfill_update_msg = msgs::UpdateFulfillHTLC{
8293+
channel_id: channel_id,
8294+
htlc_id: 0,
8295+
payment_preimage: PaymentPreimage([1; 32]),
8296+
};
8297+
8298+
let fail_update_msg = msgs::UpdateFailHTLC{
8299+
channel_id: channel_id,
8300+
htlc_id: 0,
8301+
reason: msgs::OnionErrorPacket { data: Vec::new()},
8302+
};
8303+
8304+
let revoke_and_ack_msg = msgs::RevokeAndACK {
8305+
channel_id: channel_id,
8306+
per_commitment_secret: [1; 32],
8307+
next_per_commitment_point: unkown_public_key,
8308+
};
8309+
8310+
// Test the API functions and message handlers.
8311+
check_unkown_peer_error(nodes[0].node.create_channel(unkown_public_key, 1_000_000, 500_000_000, 42, None), unkown_public_key);
8312+
8313+
nodes[1].node.handle_open_channel(&unkown_public_key, InitFeatures::known(), &open_channel_msg);
8314+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, open_channel_msg.temporary_channel_id);
8315+
8316+
nodes[0].node.handle_accept_channel(&unkown_public_key, InitFeatures::known(), &accept_channel_msg);
8317+
check_unkown_peer_msg_event(&nodes[0], unkown_public_key, open_channel_msg.temporary_channel_id);
8318+
8319+
check_unkown_peer_error(nodes[0].node.accept_inbound_channel(&open_channel_msg.temporary_channel_id, &unkown_public_key, 42), unkown_public_key);
8320+
nodes[1].node.handle_funding_created(&unkown_public_key, &funding_created_msg);
8321+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, open_channel_msg.temporary_channel_id);
8322+
8323+
nodes[0].node.handle_funding_signed(&unkown_public_key, &funding_signed_msg);
8324+
check_unkown_peer_msg_event(&nodes[0], unkown_public_key, channel_id);
8325+
8326+
nodes[0].node.handle_channel_ready(&unkown_public_key, &channel_ready_msg);
8327+
check_unkown_peer_msg_event(&nodes[0], unkown_public_key, channel_id);
8328+
8329+
nodes[1].node.handle_announcement_signatures(&unkown_public_key, &announcement_signatures_msg);
8330+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8331+
8332+
check_unkown_peer_error(nodes[0].node.close_channel(&channel_id, &unkown_public_key), unkown_public_key);
8333+
8334+
check_unkown_peer_error(nodes[0].node.force_close_broadcasting_latest_txn(&channel_id, &unkown_public_key), unkown_public_key);
8335+
8336+
check_unkown_peer_error(nodes[0].node.force_close_without_broadcasting_txn(&channel_id, &unkown_public_key), unkown_public_key);
8337+
8338+
nodes[0].node.handle_shutdown(&unkown_public_key, &InitFeatures::known(), &shutdown_msg);
8339+
check_unkown_peer_msg_event(&nodes[0], unkown_public_key, channel_id);
8340+
8341+
nodes[1].node.handle_closing_signed(&unkown_public_key, &closing_signed_msg);
8342+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8343+
8344+
nodes[0].node.handle_channel_reestablish(&unkown_public_key, &channel_reestablish_msg);
8345+
check_unkown_peer_msg_event(&nodes[0], unkown_public_key, channel_id);
8346+
8347+
nodes[1].node.handle_update_add_htlc(&unkown_public_key, &update_add_htlc_msg);
8348+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8349+
8350+
nodes[1].node.handle_commitment_signed(&unkown_public_key, &commitment_signed_msg);
8351+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8352+
8353+
nodes[1].node.handle_update_fail_malformed_htlc(&unkown_public_key, &malformed_update_msg);
8354+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8355+
8356+
nodes[1].node.handle_update_fail_htlc(&unkown_public_key, &fail_update_msg);
8357+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8358+
8359+
nodes[1].node.handle_update_fulfill_htlc(&unkown_public_key, &fulfill_update_msg);
8360+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8361+
8362+
nodes[1].node.handle_revoke_and_ack(&unkown_public_key, &revoke_and_ack_msg);
8363+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8364+
8365+
nodes[1].node.handle_update_fee(&unkown_public_key, &update_fee_msg);
8366+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8367+
}
81578368
}
81588369

81598370
#[cfg(all(any(test, feature = "_test_utils"), feature = "_bench_unstable"))]

0 commit comments

Comments
 (0)