Skip to content

Commit 927379c

Browse files
committed
Add tests for getting next channel announcements
1 parent 018a467 commit 927379c

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed

lightning/src/ln/router.rs

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2332,5 +2332,124 @@ mod tests {
23322332
// router.handle_htlc_fail_channel_update(&node_failure_msg);
23332333
}
23342334

2335+
#[test]
2336+
fn getting_next_channel_announcements() {
2337+
let (secp_ctx, our_id, router) = create_router();
2338+
let secret_key = &SecretKey::from_slice(&hex::decode("0202020202020202020202020202020202020202020202020202020202020202").unwrap()[..]).unwrap();
2339+
let public_key = PublicKey::from_secret_key(&secp_ctx, secret_key);
2340+
2341+
let zero_hash = Sha256dHash::hash(&[0; 32]);
2342+
let channel_id = 0;
2343+
let channel_time = 100;
2344+
let channel_key = NetworkMap::get_key(channel_id, zero_hash.clone());
2345+
2346+
// No channels yet.
2347+
let next_announcements = router.get_next_channel_announcements(channel_key, 10);
2348+
assert_eq!(next_announcements.len(), 0);
2349+
2350+
{
2351+
let mut network = router.network_map.write().unwrap();
2352+
network.channels.insert(channel_key, ChannelInfo {
2353+
features: ChannelFeatures::empty(),
2354+
one_to_two: DirectionalChannelInfo {
2355+
src_node_id: public_key.clone(),
2356+
last_update: channel_time,
2357+
enabled: false,
2358+
cltv_expiry_delta: u16::max_value(),
2359+
htlc_minimum_msat: 0,
2360+
fee_base_msat: u32::max_value(),
2361+
fee_proportional_millionths: u32::max_value(),
2362+
last_update_message: None,
2363+
}, two_to_one: DirectionalChannelInfo {
2364+
src_node_id: our_id.clone(),
2365+
last_update: channel_time,
2366+
enabled: true,
2367+
cltv_expiry_delta: 0,
2368+
htlc_minimum_msat: 0,
2369+
fee_base_msat: u32::max_value(),
2370+
fee_proportional_millionths: 0,
2371+
last_update_message: None,
2372+
},
2373+
announcement_message: None,
2374+
});
2375+
}
2376+
2377+
// Channels without announcements are not returned.
2378+
let next_announcements = router.get_next_channel_announcements(channel_key, 2);
2379+
assert_eq!(next_announcements.len(), 0);
2380+
2381+
{
2382+
let mut network = router.network_map.write().unwrap();
2383+
2384+
let unsigned_channel_update = UnsignedChannelUpdate {
2385+
chain_hash: genesis_block(Network::Testnet).header.bitcoin_hash(),
2386+
short_channel_id: channel_id,
2387+
timestamp: channel_time + 100,
2388+
flags: 0,
2389+
cltv_expiry_delta: 144,
2390+
htlc_minimum_msat: 1000000,
2391+
fee_base_msat: 10000,
2392+
fee_proportional_millionths: 20,
2393+
excess_data: Vec::new()
2394+
};
2395+
let msghash = hash_to_message!(&Sha256dHash::hash(&unsigned_channel_update.encode()[..])[..]);
2396+
let valid_channel_update = ChannelUpdate {
2397+
signature: secp_ctx.sign(&msghash, secret_key),
2398+
contents: unsigned_channel_update.clone()
2399+
};
2400+
2401+
let unsigned_announcement = UnsignedChannelAnnouncement {
2402+
features: ChannelFeatures::supported(),
2403+
chain_hash: genesis_block(Network::Testnet).header.bitcoin_hash(),
2404+
short_channel_id: 0,
2405+
node_id_1: our_id,
2406+
node_id_2: our_id,
2407+
bitcoin_key_1: public_key,
2408+
bitcoin_key_2: public_key,
2409+
excess_data: Vec::new(),
2410+
};
2411+
2412+
let msghash = hash_to_message!(&Sha256dHash::hash(&unsigned_announcement.encode()[..])[..]);
2413+
let announcement = ChannelAnnouncement {
2414+
node_signature_1: secp_ctx.sign(&msghash, secret_key),
2415+
node_signature_2: secp_ctx.sign(&msghash, secret_key),
2416+
bitcoin_signature_1: secp_ctx.sign(&msghash, secret_key),
2417+
bitcoin_signature_2: secp_ctx.sign(&msghash, secret_key),
2418+
contents: unsigned_announcement.clone(),
2419+
};
2420+
2421+
network.channels.insert(channel_key, ChannelInfo {
2422+
features: ChannelFeatures::empty(),
2423+
one_to_two: DirectionalChannelInfo {
2424+
src_node_id: public_key.clone(),
2425+
last_update: channel_time,
2426+
enabled: false,
2427+
cltv_expiry_delta: u16::max_value(),
2428+
htlc_minimum_msat: 0,
2429+
fee_base_msat: u32::max_value(),
2430+
fee_proportional_millionths: u32::max_value(),
2431+
last_update_message: Some(valid_channel_update.clone()),
2432+
}, two_to_one: DirectionalChannelInfo {
2433+
src_node_id: our_id.clone(),
2434+
last_update: channel_time,
2435+
enabled: true,
2436+
cltv_expiry_delta: 0,
2437+
htlc_minimum_msat: 0,
2438+
fee_base_msat: u32::max_value(),
2439+
fee_proportional_millionths: 0,
2440+
last_update_message: Some(valid_channel_update.clone()),
2441+
},
2442+
announcement_message: Some(announcement.clone()),
2443+
});
2444+
}
2445+
2446+
let next_announcements = router.get_next_channel_announcements(channel_key, 2);
2447+
assert_eq!(next_announcements.len(), 1);
2448+
2449+
// Further starting point have no channels after it
2450+
let next_announcements = router.get_next_channel_announcements(channel_key + 1000, 2);
2451+
assert_eq!(next_announcements.len(), 0);
2452+
}
2453+
23352454

23362455
}

0 commit comments

Comments
 (0)