1111//! nodes for functional tests.
1212
1313use crate :: chain:: { BestBlock , ChannelMonitorUpdateStatus , Confirm , Listen , Watch , chainmonitor:: Persist } ;
14- use crate :: sign:: EntropySource ;
1514use crate :: chain:: channelmonitor:: ChannelMonitor ;
1615use crate :: chain:: transaction:: OutPoint ;
1716use crate :: events:: { ClaimedHTLC , ClosureReason , Event , HTLCDestination , MessageSendEvent , MessageSendEventsProvider , PathFailure , PaymentPurpose , PaymentFailureReason } ;
1817use crate :: events:: bump_transaction:: { BumpTransactionEvent , BumpTransactionEventHandler , Wallet , WalletSource } ;
1918use crate :: ln:: { ChannelId , PaymentPreimage , PaymentHash , PaymentSecret } ;
2019use crate :: ln:: channelmanager:: { AChannelManager , ChainParameters , ChannelManager , ChannelManagerReadArgs , RAACommitmentOrder , PaymentSendFailure , RecipientOnionFields , PaymentId , MIN_CLTV_EXPIRY_DELTA } ;
21- use crate :: routing:: gossip:: { P2PGossipSync , NetworkGraph , NetworkUpdate } ;
22- use crate :: routing:: router:: { self , PaymentParameters , Route , RouteParameters } ;
2320use crate :: ln:: features:: InitFeatures ;
2421use crate :: ln:: msgs;
25- use crate :: ln:: msgs:: { ChannelMessageHandler , RoutingMessageHandler } ;
26- use crate :: util:: test_channel_signer:: TestChannelSigner ;
22+ use crate :: ln:: msgs:: { ChannelMessageHandler , OnionMessageHandler , RoutingMessageHandler } ;
23+ use crate :: ln:: peer_handler:: IgnoringMessageHandler ;
24+ use crate :: onion_message:: messenger:: OnionMessenger ;
25+ use crate :: routing:: gossip:: { P2PGossipSync , NetworkGraph , NetworkUpdate } ;
26+ use crate :: routing:: router:: { self , PaymentParameters , Route , RouteParameters } ;
27+ use crate :: sign:: { EntropySource , RandomBytes } ;
28+ use crate :: util:: config:: { UserConfig , MaxDustHTLCExposure } ;
29+ use crate :: util:: errors:: APIError ;
30+ #[ cfg( test) ]
31+ use crate :: util:: logger:: Logger ;
2732use crate :: util:: scid_utils;
33+ use crate :: util:: test_channel_signer:: TestChannelSigner ;
2834use crate :: util:: test_utils;
2935use crate :: util:: test_utils:: { panicking, TestChainMonitor , TestScorer , TestKeysInterface } ;
30- use crate :: util:: errors:: APIError ;
31- use crate :: util:: config:: { UserConfig , MaxDustHTLCExposure } ;
3236use crate :: util:: ser:: { ReadableArgs , Writeable } ;
3337#[ cfg( test) ]
3438use crate :: util:: logger:: Logger ;
@@ -45,13 +49,14 @@ use bitcoin::network::constants::Network;
4549use bitcoin:: pow:: CompactTarget ;
4650use bitcoin:: secp256k1:: { PublicKey , SecretKey } ;
4751
52+ use alloc:: rc:: Rc ;
53+ use core:: cell:: RefCell ;
54+ use core:: iter:: repeat;
55+ use core:: mem;
56+ use core:: ops:: Deref ;
4857use crate :: io;
4958use crate :: prelude:: * ;
50- use core:: cell:: RefCell ;
51- use alloc:: rc:: Rc ;
5259use crate :: sync:: { Arc , Mutex , LockTestExt , RwLock } ;
53- use core:: mem;
54- use core:: iter:: repeat;
5560
5661pub const CHAN_CONFIRM_DEPTH : u32 = 10 ;
5762
@@ -390,6 +395,7 @@ pub struct NodeCfg<'a> {
390395 pub tx_broadcaster : & ' a test_utils:: TestBroadcaster ,
391396 pub fee_estimator : & ' a test_utils:: TestFeeEstimator ,
392397 pub router : test_utils:: TestRouter < ' a > ,
398+ pub message_router : test_utils:: TestMessageRouter < ' a > ,
393399 pub chain_monitor : test_utils:: TestChainMonitor < ' a > ,
394400 pub keys_manager : & ' a test_utils:: TestKeysInterface ,
395401 pub logger : & ' a test_utils:: TestLogger ,
@@ -409,6 +415,26 @@ type TestChannelManager<'node_cfg, 'chan_mon_cfg> = ChannelManager<
409415 & ' chan_mon_cfg test_utils:: TestLogger ,
410416> ;
411417
418+ type TestOnionMessenger < ' chan_man , ' node_cfg , ' chan_mon_cfg > = OnionMessenger <
419+ DedicatedEntropy ,
420+ & ' node_cfg test_utils:: TestKeysInterface ,
421+ & ' chan_mon_cfg test_utils:: TestLogger ,
422+ & ' node_cfg test_utils:: TestMessageRouter < ' chan_mon_cfg > ,
423+ & ' chan_man TestChannelManager < ' node_cfg , ' chan_mon_cfg > ,
424+ IgnoringMessageHandler ,
425+ > ;
426+
427+ /// For use with [`OnionMessenger`] otherwise `test_restored_packages_retry` will fail. This is
428+ /// because that test uses older serialized data produced by calling [`EntropySource`] in a specific
429+ /// manner. Using the same [`EntropySource`] with [`OnionMessenger`] would introduce another call,
430+ /// causing the produced data to no longer match.
431+ pub struct DedicatedEntropy ( RandomBytes ) ;
432+
433+ impl Deref for DedicatedEntropy {
434+ type Target = RandomBytes ;
435+ fn deref ( & self ) -> & Self :: Target { & self . 0 }
436+ }
437+
412438pub struct Node < ' chan_man , ' node_cfg : ' chan_man , ' chan_mon_cfg : ' node_cfg > {
413439 pub chain_source : & ' chan_mon_cfg test_utils:: TestChainSource ,
414440 pub tx_broadcaster : & ' chan_mon_cfg test_utils:: TestBroadcaster ,
@@ -417,6 +443,7 @@ pub struct Node<'chan_man, 'node_cfg: 'chan_man, 'chan_mon_cfg: 'node_cfg> {
417443 pub chain_monitor : & ' node_cfg test_utils:: TestChainMonitor < ' chan_mon_cfg > ,
418444 pub keys_manager : & ' chan_mon_cfg test_utils:: TestKeysInterface ,
419445 pub node : & ' chan_man TestChannelManager < ' node_cfg , ' chan_mon_cfg > ,
446+ pub onion_messenger : TestOnionMessenger < ' chan_man , ' node_cfg , ' chan_mon_cfg > ,
420447 pub network_graph : & ' node_cfg NetworkGraph < & ' chan_mon_cfg test_utils:: TestLogger > ,
421448 pub gossip_sync : P2PGossipSync < & ' node_cfg NetworkGraph < & ' chan_mon_cfg test_utils:: TestLogger > , & ' chan_mon_cfg test_utils:: TestChainSource , & ' chan_mon_cfg test_utils:: TestLogger > ,
422449 pub node_seed : [ u8 ; 32 ] ,
@@ -434,6 +461,14 @@ pub struct Node<'chan_man, 'node_cfg: 'chan_man, 'chan_mon_cfg: 'node_cfg> {
434461 & ' chan_mon_cfg test_utils:: TestLogger ,
435462 > ,
436463}
464+
465+ impl < ' a , ' b , ' c > Node < ' a , ' b , ' c > {
466+ pub fn init_features ( & self , peer_node_id : & PublicKey ) -> InitFeatures {
467+ self . override_init_features . borrow ( ) . clone ( )
468+ . unwrap_or_else ( || self . node . init_features ( ) | self . onion_messenger . provided_init_features ( peer_node_id) )
469+ }
470+ }
471+
437472#[ cfg( feature = "std" ) ]
438473impl < ' a , ' b , ' c > std:: panic:: UnwindSafe for Node < ' a , ' b , ' c > { }
439474#[ cfg( feature = "std" ) ]
@@ -614,7 +649,7 @@ impl<'a, 'b, 'c> Drop for Node<'a, 'b, 'c> {
614649 node_signer : self . keys_manager ,
615650 signer_provider : self . keys_manager ,
616651 fee_estimator : & test_utils:: TestFeeEstimator { sat_per_kw : Mutex :: new ( 253 ) } ,
617- router : & test_utils:: TestRouter :: new ( Arc :: new ( network_graph) , & scorer) ,
652+ router : & test_utils:: TestRouter :: new ( Arc :: new ( network_graph) , & self . logger , & scorer) ,
618653 chain_monitor : self . chain_monitor ,
619654 tx_broadcaster : & broadcaster,
620655 logger : & self . logger ,
@@ -1069,6 +1104,7 @@ macro_rules! reload_node {
10691104
10701105 $new_channelmanager = _reload_node( & $node, $new_config, & chanman_encoded, $monitors_encoded) ;
10711106 $node. node = & $new_channelmanager;
1107+ $node. onion_messenger. set_offers_handler( & $new_channelmanager) ;
10721108 } ;
10731109 ( $node: expr, $chanman_encoded: expr, $monitors_encoded: expr, $persister: ident, $new_chain_monitor: ident, $new_channelmanager: ident) => {
10741110 reload_node!( $node, $crate:: util:: config:: UserConfig :: default ( ) , $chanman_encoded, $monitors_encoded, $persister, $new_chain_monitor, $new_channelmanager) ;
@@ -2912,7 +2948,8 @@ pub fn create_node_cfgs_with_persisters<'a>(node_count: usize, chanmon_cfgs: &'a
29122948 logger : & chanmon_cfgs[ i] . logger ,
29132949 tx_broadcaster : & chanmon_cfgs[ i] . tx_broadcaster ,
29142950 fee_estimator : & chanmon_cfgs[ i] . fee_estimator ,
2915- router : test_utils:: TestRouter :: new ( network_graph. clone ( ) , & chanmon_cfgs[ i] . scorer ) ,
2951+ router : test_utils:: TestRouter :: new ( network_graph. clone ( ) , & chanmon_cfgs[ i] . logger , & chanmon_cfgs[ i] . scorer ) ,
2952+ message_router : test_utils:: TestMessageRouter :: new ( network_graph. clone ( ) ) ,
29162953 chain_monitor,
29172954 keys_manager : & chanmon_cfgs[ i] . keys_manager ,
29182955 node_seed : seed,
@@ -2966,14 +3003,19 @@ pub fn create_network<'a, 'b: 'a, 'c: 'b>(node_count: usize, cfgs: &'b Vec<NodeC
29663003 let connect_style = Rc :: new ( RefCell :: new ( ConnectStyle :: random_style ( ) ) ) ;
29673004
29683005 for i in 0 ..node_count {
3006+ let dedicated_entropy = DedicatedEntropy ( RandomBytes :: new ( [ i as u8 ; 32 ] ) ) ;
3007+ let onion_messenger = OnionMessenger :: new (
3008+ dedicated_entropy, cfgs[ i] . keys_manager , cfgs[ i] . logger , & cfgs[ i] . message_router ,
3009+ & chan_mgrs[ i] , IgnoringMessageHandler { } ,
3010+ ) ;
29693011 let gossip_sync = P2PGossipSync :: new ( cfgs[ i] . network_graph . as_ref ( ) , None , cfgs[ i] . logger ) ;
29703012 let wallet_source = Arc :: new ( test_utils:: TestWalletSource :: new ( SecretKey :: from_slice ( & [ i as u8 + 1 ; 32 ] ) . unwrap ( ) ) ) ;
29713013 nodes. push ( Node {
29723014 chain_source : cfgs[ i] . chain_source , tx_broadcaster : cfgs[ i] . tx_broadcaster ,
29733015 fee_estimator : cfgs[ i] . fee_estimator , router : & cfgs[ i] . router ,
29743016 chain_monitor : & cfgs[ i] . chain_monitor , keys_manager : & cfgs[ i] . keys_manager ,
29753017 node : & chan_mgrs[ i] , network_graph : cfgs[ i] . network_graph . as_ref ( ) , gossip_sync,
2976- node_seed : cfgs[ i] . node_seed , network_chan_count : chan_count. clone ( ) ,
3018+ node_seed : cfgs[ i] . node_seed , onion_messenger , network_chan_count : chan_count. clone ( ) ,
29773019 network_payment_count : payment_count. clone ( ) , logger : cfgs[ i] . logger ,
29783020 blocks : Arc :: clone ( & cfgs[ i] . tx_broadcaster . blocks ) ,
29793021 connect_style : Rc :: clone ( & connect_style) ,
@@ -2988,16 +3030,24 @@ pub fn create_network<'a, 'b: 'a, 'c: 'b>(node_count: usize, cfgs: &'b Vec<NodeC
29883030
29893031 for i in 0 ..node_count {
29903032 for j in ( i+1 ) ..node_count {
2991- nodes[ i] . node . peer_connected ( & nodes[ j] . node . get_our_node_id ( ) , & msgs:: Init {
2992- features : nodes[ j] . override_init_features . borrow ( ) . clone ( ) . unwrap_or_else ( || nodes[ j] . node . init_features ( ) ) ,
3033+ let node_id_i = nodes[ i] . node . get_our_node_id ( ) ;
3034+ let node_id_j = nodes[ j] . node . get_our_node_id ( ) ;
3035+
3036+ let init_i = msgs:: Init {
3037+ features : nodes[ i] . init_features ( & node_id_j) ,
29933038 networks : None ,
29943039 remote_network_address : None ,
2995- } , true ) . unwrap ( ) ;
2996- nodes [ j ] . node . peer_connected ( & nodes [ i ] . node . get_our_node_id ( ) , & msgs:: Init {
2997- features : nodes[ i ] . override_init_features . borrow ( ) . clone ( ) . unwrap_or_else ( || nodes [ i ] . node . init_features ( ) ) ,
3040+ } ;
3041+ let init_j = msgs:: Init {
3042+ features : nodes[ j ] . init_features ( & node_id_i ) ,
29983043 networks : None ,
29993044 remote_network_address : None ,
3000- } , false ) . unwrap ( ) ;
3045+ } ;
3046+
3047+ nodes[ i] . node . peer_connected ( & node_id_j, & init_j, true ) . unwrap ( ) ;
3048+ nodes[ j] . node . peer_connected ( & node_id_i, & init_i, false ) . unwrap ( ) ;
3049+ nodes[ i] . onion_messenger . peer_connected ( & node_id_j, & init_j, true ) . unwrap ( ) ;
3050+ nodes[ j] . onion_messenger . peer_connected ( & node_id_i, & init_i, false ) . unwrap ( ) ;
30013051 }
30023052 }
30033053
0 commit comments