@@ -2332,5 +2332,124 @@ mod tests {
2332
2332
// router.handle_htlc_fail_channel_update(&node_failure_msg);
2333
2333
}
2334
2334
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
+
2335
2454
2336
2455
}
0 commit comments