Skip to content

Commit ae665ce

Browse files
Add handle unkown peer test
1 parent 4991456 commit ae665ce

File tree

1 file changed

+210
-1
lines changed

1 file changed

+210
-1
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 210 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7363,6 +7363,12 @@ impl<'a, Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
73637363
mod tests {
73647364
use bitcoin::hashes::Hash;
73657365
use bitcoin::hashes::sha256::Hash as Sha256;
7366+
use bitcoin::hashes::hex::FromHex;
7367+
use bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey};
7368+
use bitcoin::secp256k1::ecdsa::Signature;
7369+
use bitcoin::secp256k1::ffi::Signature as FFISignature;
7370+
use bitcoin::blockdata::script::Script;
7371+
use bitcoin::Txid;
73667372
use core::time::Duration;
73677373
use core::sync::atomic::Ordering;
73687374
use ln::{PaymentPreimage, PaymentHash, PaymentSecret};
@@ -7371,7 +7377,7 @@ mod tests {
73717377
use ln::features::InitFeatures;
73727378
use ln::functional_test_utils::*;
73737379
use ln::msgs;
7374-
use ln::msgs::ChannelMessageHandler;
7380+
use ln::msgs::{ChannelMessageHandler, OptionalField};
73757381
use routing::router::{PaymentParameters, RouteParameters, find_route};
73767382
use util::errors::APIError;
73777383
use util::events::{Event, MessageSendEvent, MessageSendEventsProvider};
@@ -7980,6 +7986,209 @@ mod tests {
79807986
nodes[0].node.get_and_clear_pending_events();
79817987
nodes[1].node.get_and_clear_pending_events();
79827988
}
7989+
7990+
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]){
7991+
let close_msg_ev = node.node.get_and_clear_pending_msg_events();
7992+
let expected_error_str = format!("Can't find a peer with a node_id matching the passed counterparty_node_id {}", closing_node_id);
7993+
match close_msg_ev[0] {
7994+
MessageSendEvent::HandleError {
7995+
ref node_id, action: msgs::ErrorAction::SendErrorMessage {
7996+
msg: msgs::ErrorMessage { ref channel_id, ref data }
7997+
}
7998+
} => {
7999+
assert_eq!(*node_id, closing_node_id);
8000+
assert_eq!(*data, expected_error_str);
8001+
assert_eq!(*channel_id, closed_channel_id);
8002+
}
8003+
_ => panic!("Unexpected event"),
8004+
}
8005+
}
8006+
8007+
fn check_unkown_peer_error<T>(res_err: Result<T, APIError>, expected_public_key: PublicKey) {
8008+
match res_err {
8009+
Err(APIError::APIMisuseError { err }) => {
8010+
assert_eq!(err, format!("Can't find a peer with a node_id matching the passed counterparty_node_id {}", expected_public_key));
8011+
},
8012+
Ok(_) => panic!("Unexpected Ok"),
8013+
Err(_) => panic!("Unexpected Error"),
8014+
}
8015+
}
8016+
8017+
#[test]
8018+
fn test_api_calls_with_unkown_counterparty_node() {
8019+
// Tests that our API functions and message handlers that expects a `counterparty_node_id`
8020+
// as input, behaves as expected if the `counterparty_node_id` is an unkown peer in the
8021+
// `ChannelManager::per_peer_state` map.
8022+
let chanmon_cfg = create_chanmon_cfgs(2);
8023+
let node_cfg = create_node_cfgs(2, &chanmon_cfg);
8024+
let node_chanmgr = create_node_chanmgrs(2, &node_cfg, &[None, None]);
8025+
let nodes = create_network(2, &node_cfg, &node_chanmgr);
8026+
8027+
// Boilerplate code to produce `open_channel` and `accept_channel` msgs more densly than
8028+
// creating dummy ones.
8029+
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 1_000_000, 500_000_000, 42, None).unwrap();
8030+
let open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
8031+
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::known(), &open_channel_msg);
8032+
let accept_channel_msg = get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id());
8033+
8034+
// Dummy values
8035+
let channel_id = [4; 32];
8036+
let signature = Signature::from(unsafe { FFISignature::new() });
8037+
let unkown_public_key = PublicKey::from_secret_key(&Secp256k1::signing_only(), &SecretKey::from_slice(&[42; 32]).unwrap());
8038+
8039+
// Dummy msgs
8040+
let funding_created_msg = msgs::FundingCreated {
8041+
temporary_channel_id: open_channel_msg.temporary_channel_id,
8042+
funding_txid: Txid::from_hex("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap(),
8043+
funding_output_index: 0,
8044+
signature: signature,
8045+
};
8046+
8047+
let funding_signed_msg = msgs::FundingSigned {
8048+
channel_id: channel_id,
8049+
signature: signature,
8050+
};
8051+
8052+
let channel_ready_msg = msgs::ChannelReady {
8053+
channel_id: channel_id,
8054+
next_per_commitment_point: unkown_public_key,
8055+
short_channel_id_alias: None,
8056+
};
8057+
8058+
let announcement_signatures_msg = msgs::AnnouncementSignatures {
8059+
channel_id: channel_id,
8060+
short_channel_id: 0,
8061+
node_signature: signature,
8062+
bitcoin_signature: signature,
8063+
};
8064+
8065+
let channel_reestablish_msg = msgs::ChannelReestablish {
8066+
channel_id: channel_id,
8067+
next_local_commitment_number: 0,
8068+
next_remote_commitment_number: 0,
8069+
data_loss_protect: OptionalField::Absent,
8070+
};
8071+
8072+
let closing_signed_msg = msgs::ClosingSigned {
8073+
channel_id: channel_id,
8074+
fee_satoshis: 1000,
8075+
signature: signature,
8076+
fee_range: None,
8077+
};
8078+
8079+
let shutdown_msg = msgs::Shutdown {
8080+
channel_id: channel_id,
8081+
scriptpubkey: Script::new(),
8082+
};
8083+
8084+
let onion_routing_packet = msgs::OnionPacket {
8085+
version: 255,
8086+
public_key: Ok(unkown_public_key),
8087+
hop_data: [1; 20*65],
8088+
hmac: [2; 32]
8089+
};
8090+
8091+
let update_add_htlc_msg = msgs::UpdateAddHTLC {
8092+
channel_id: channel_id,
8093+
htlc_id: 0,
8094+
amount_msat: 1000000,
8095+
payment_hash: PaymentHash([1; 32]),
8096+
cltv_expiry: 821716,
8097+
onion_routing_packet
8098+
};
8099+
8100+
let commitment_signed_msg = msgs::CommitmentSigned {
8101+
channel_id: channel_id,
8102+
signature: signature,
8103+
htlc_signatures: Vec::new(),
8104+
};
8105+
8106+
let update_fee_msg = msgs::UpdateFee {
8107+
channel_id: channel_id,
8108+
feerate_per_kw: 1000,
8109+
};
8110+
8111+
let malformed_update_msg = msgs::UpdateFailMalformedHTLC{
8112+
channel_id: channel_id,
8113+
htlc_id: 0,
8114+
sha256_of_onion: [1; 32],
8115+
failure_code: 0x8000,
8116+
};
8117+
8118+
let fulfill_update_msg = msgs::UpdateFulfillHTLC{
8119+
channel_id: channel_id,
8120+
htlc_id: 0,
8121+
payment_preimage: PaymentPreimage([1; 32]),
8122+
};
8123+
8124+
let fail_update_msg = msgs::UpdateFailHTLC{
8125+
channel_id: channel_id,
8126+
htlc_id: 0,
8127+
reason: msgs::OnionErrorPacket { data: Vec::new()},
8128+
};
8129+
8130+
let revoke_and_ack_msg = msgs::RevokeAndACK {
8131+
channel_id: channel_id,
8132+
per_commitment_secret: [1; 32],
8133+
next_per_commitment_point: unkown_public_key,
8134+
};
8135+
8136+
// Test the API functions and message handlers.
8137+
check_unkown_peer_error(nodes[0].node.create_channel(unkown_public_key, 1_000_000, 500_000_000, 42, None), unkown_public_key);
8138+
8139+
nodes[1].node.handle_open_channel(&unkown_public_key, InitFeatures::known(), &open_channel_msg);
8140+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, open_channel_msg.temporary_channel_id);
8141+
8142+
nodes[0].node.handle_accept_channel(&unkown_public_key, InitFeatures::known(), &accept_channel_msg);
8143+
check_unkown_peer_msg_event(&nodes[0], unkown_public_key, open_channel_msg.temporary_channel_id);
8144+
8145+
check_unkown_peer_error(nodes[0].node.accept_inbound_channel(&open_channel_msg.temporary_channel_id, &unkown_public_key, 42), unkown_public_key);
8146+
nodes[1].node.handle_funding_created(&unkown_public_key, &funding_created_msg);
8147+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, open_channel_msg.temporary_channel_id);
8148+
8149+
nodes[0].node.handle_funding_signed(&unkown_public_key, &funding_signed_msg);
8150+
check_unkown_peer_msg_event(&nodes[0], unkown_public_key, channel_id);
8151+
8152+
nodes[0].node.handle_channel_ready(&unkown_public_key, &channel_ready_msg);
8153+
check_unkown_peer_msg_event(&nodes[0], unkown_public_key, channel_id);
8154+
8155+
nodes[1].node.handle_announcement_signatures(&unkown_public_key, &announcement_signatures_msg);
8156+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8157+
8158+
check_unkown_peer_error(nodes[0].node.close_channel(&channel_id, &unkown_public_key), unkown_public_key);
8159+
8160+
check_unkown_peer_error(nodes[0].node.force_close_channel(&channel_id, &unkown_public_key), unkown_public_key);
8161+
8162+
nodes[0].node.handle_shutdown(&unkown_public_key, &InitFeatures::known(), &shutdown_msg);
8163+
check_unkown_peer_msg_event(&nodes[0], unkown_public_key, channel_id);
8164+
8165+
nodes[1].node.handle_closing_signed(&unkown_public_key, &closing_signed_msg);
8166+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8167+
8168+
nodes[0].node.handle_channel_reestablish(&unkown_public_key, &channel_reestablish_msg);
8169+
check_unkown_peer_msg_event(&nodes[0], unkown_public_key, channel_id);
8170+
8171+
nodes[1].node.handle_update_add_htlc(&unkown_public_key, &update_add_htlc_msg);
8172+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8173+
8174+
nodes[1].node.handle_commitment_signed(&unkown_public_key, &commitment_signed_msg);
8175+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8176+
8177+
nodes[1].node.handle_update_fail_malformed_htlc(&unkown_public_key, &malformed_update_msg);
8178+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8179+
8180+
nodes[1].node.handle_update_fail_htlc(&unkown_public_key, &fail_update_msg);
8181+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8182+
8183+
nodes[1].node.handle_update_fulfill_htlc(&unkown_public_key, &fulfill_update_msg);
8184+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8185+
8186+
nodes[1].node.handle_revoke_and_ack(&unkown_public_key, &revoke_and_ack_msg);
8187+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8188+
8189+
nodes[1].node.handle_update_fee(&unkown_public_key, &update_fee_msg);
8190+
check_unkown_peer_msg_event(&nodes[1], unkown_public_key, channel_id);
8191+
}
79838192
}
79848193

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

0 commit comments

Comments
 (0)