Skip to content

Commit ecfb791

Browse files
committed
refactor: Update TestMessageRouter to enum
To allow choosing different message router types for testing nodes, convert `TestMessageRouter` to an enum with variants `DefaultMessageRouter` and `NodeIdMessageRouter`. This provides better flexibility when testing various scenarios.
1 parent 8401798 commit ecfb791

File tree

4 files changed

+103
-30
lines changed

4 files changed

+103
-30
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17077,7 +17077,7 @@ pub mod bench {
1707717077
let scorer = RwLock::new(test_utils::TestScorer::new());
1707817078
let entropy = test_utils::TestKeysInterface::new(&[0u8; 32], network);
1707917079
let router = test_utils::TestRouter::new(Arc::new(NetworkGraph::new(network, &logger_a)), &logger_a, &scorer);
17080-
let message_router = test_utils::TestMessageRouter::new(Arc::new(NetworkGraph::new(network, &logger_a)), &entropy);
17080+
let message_router = test_utils::TestMessageRouter::new_default(Arc::new(NetworkGraph::new(network, &logger_a)), &entropy);
1708117081

1708217082
let mut config: UserConfig = Default::default();
1708317083
config.channel_config.max_dust_htlc_exposure = MaxDustHTLCExposure::FeeRateMultiplier(5_000_000 / 253);

lightning/src/ln/functional_test_utils.rs

Lines changed: 56 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ use crate::util::logger::Logger;
3838
use crate::util::scid_utils;
3939
use crate::util::test_channel_signer::TestChannelSigner;
4040
use crate::util::test_channel_signer::SignerOp;
41-
use crate::util::test_utils;
41+
use crate::util::test_utils::{self, TestLogger};
4242
use crate::util::test_utils::{TestChainMonitor, TestScorer, TestKeysInterface};
4343
use crate::util::ser::{ReadableArgs, Writeable};
4444

@@ -728,7 +728,7 @@ impl<'a, 'b, 'c> Drop for Node<'a, 'b, 'c> {
728728
signer_provider: self.keys_manager,
729729
fee_estimator: &test_utils::TestFeeEstimator::new(253),
730730
router: &test_utils::TestRouter::new(Arc::clone(&network_graph), &self.logger, &scorer),
731-
message_router: &test_utils::TestMessageRouter::new(network_graph, self.keys_manager),
731+
message_router: &test_utils::TestMessageRouter::new_default(network_graph, self.keys_manager),
732732
chain_monitor: self.chain_monitor,
733733
tx_broadcaster: &broadcaster,
734734
logger: &self.logger,
@@ -3345,26 +3345,39 @@ pub fn create_chanmon_cfgs_with_keys(node_count: usize, predefined_keys_ids: Opt
33453345
chan_mon_cfgs
33463346
}
33473347

3348-
pub fn create_node_cfgs<'a>(node_count: usize, chanmon_cfgs: &'a Vec<TestChanMonCfg>) -> Vec<NodeCfg<'a>> {
3349-
create_node_cfgs_with_persisters(node_count, chanmon_cfgs, chanmon_cfgs.iter().map(|c| &c.persister).collect())
3350-
}
3351-
3352-
pub fn create_node_cfgs_with_persisters<'a>(node_count: usize, chanmon_cfgs: &'a Vec<TestChanMonCfg>, persisters: Vec<&'a impl test_utils::SyncPersist>) -> Vec<NodeCfg<'a>> {
3348+
fn create_node_cfgs_internal<'a, F>(
3349+
node_count: usize,
3350+
chanmon_cfgs: &'a Vec<TestChanMonCfg>,
3351+
persisters: Vec<&'a impl test_utils::SyncPersist>,
3352+
message_router_constructor: F,
3353+
) -> Vec<NodeCfg<'a>>
3354+
where
3355+
F: Fn(Arc<NetworkGraph<&'a TestLogger>>, &'a TestKeysInterface) -> test_utils::TestMessageRouter<'a>,
3356+
{
33533357
let mut nodes = Vec::new();
33543358

33553359
for i in 0..node_count {
3356-
let chain_monitor = test_utils::TestChainMonitor::new(Some(&chanmon_cfgs[i].chain_source), &chanmon_cfgs[i].tx_broadcaster, &chanmon_cfgs[i].logger, &chanmon_cfgs[i].fee_estimator, persisters[i], &chanmon_cfgs[i].keys_manager);
3357-
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &chanmon_cfgs[i].logger));
3360+
let cfg = &chanmon_cfgs[i];
3361+
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &cfg.logger));
3362+
let chain_monitor = test_utils::TestChainMonitor::new(
3363+
Some(&cfg.chain_source),
3364+
&cfg.tx_broadcaster,
3365+
&cfg.logger,
3366+
&cfg.fee_estimator,
3367+
persisters[i],
3368+
&cfg.keys_manager,
3369+
);
3370+
33583371
let seed = [i as u8; 32];
33593372
nodes.push(NodeCfg {
3360-
chain_source: &chanmon_cfgs[i].chain_source,
3361-
logger: &chanmon_cfgs[i].logger,
3362-
tx_broadcaster: &chanmon_cfgs[i].tx_broadcaster,
3363-
fee_estimator: &chanmon_cfgs[i].fee_estimator,
3364-
router: test_utils::TestRouter::new(Arc::clone(&network_graph), &chanmon_cfgs[i].logger, &chanmon_cfgs[i].scorer),
3365-
message_router: test_utils::TestMessageRouter::new(Arc::clone(&network_graph), &chanmon_cfgs[i].keys_manager),
3373+
chain_source: &cfg.chain_source,
3374+
logger: &cfg.logger,
3375+
tx_broadcaster: &cfg.tx_broadcaster,
3376+
fee_estimator: &cfg.fee_estimator,
3377+
router: test_utils::TestRouter::new(Arc::clone(&network_graph), &cfg.logger, &cfg.scorer),
3378+
message_router: message_router_constructor(Arc::clone(&network_graph), &cfg.keys_manager),
33663379
chain_monitor,
3367-
keys_manager: &chanmon_cfgs[i].keys_manager,
3380+
keys_manager: &cfg.keys_manager,
33683381
node_seed: seed,
33693382
network_graph,
33703383
override_init_features: Rc::new(RefCell::new(None)),
@@ -3374,6 +3387,33 @@ pub fn create_node_cfgs_with_persisters<'a>(node_count: usize, chanmon_cfgs: &'a
33743387
nodes
33753388
}
33763389

3390+
pub fn create_node_cfgs<'a>(node_count: usize, chanmon_cfgs: &'a Vec<TestChanMonCfg>) -> Vec<NodeCfg<'a>> {
3391+
let persisters = chanmon_cfgs.iter().map(|c| &c.persister).collect();
3392+
create_node_cfgs_internal(node_count, chanmon_cfgs, persisters, |graph, keys_manager| {
3393+
test_utils::TestMessageRouter::new_default(graph, keys_manager)
3394+
})
3395+
}
3396+
3397+
pub fn create_node_cfgs_with_persisters<'a>(
3398+
node_count: usize,
3399+
chanmon_cfgs: &'a Vec<TestChanMonCfg>,
3400+
persisters: Vec<&'a impl test_utils::SyncPersist>,
3401+
) -> Vec<NodeCfg<'a>> {
3402+
create_node_cfgs_internal(node_count, chanmon_cfgs, persisters, |graph, keys_manager| {
3403+
test_utils::TestMessageRouter::new_default(graph, keys_manager)
3404+
})
3405+
}
3406+
3407+
pub fn create_node_cfgs_with_node_id_message_router<'a>(
3408+
node_count: usize,
3409+
chanmon_cfgs: &'a Vec<TestChanMonCfg>,
3410+
) -> Vec<NodeCfg<'a>> {
3411+
let persisters = chanmon_cfgs.iter().map(|c| &c.persister).collect();
3412+
create_node_cfgs_internal(node_count, chanmon_cfgs, persisters, |graph, keys_manager| {
3413+
test_utils::TestMessageRouter::new_node_id_router(graph, keys_manager)
3414+
})
3415+
}
3416+
33773417
pub fn test_default_channel_config() -> UserConfig {
33783418
let mut default_config = UserConfig::default();
33793419
// Set cltv_expiry_delta slightly lower to keep the final CLTV values inside one byte in our

lightning/src/ln/functional_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5175,7 +5175,7 @@ pub fn test_key_derivation_params() {
51755175
let router =
51765176
test_utils::TestRouter::new(Arc::clone(&network_graph), &chanmon_cfgs[0].logger, &scorer);
51775177
let message_router =
5178-
test_utils::TestMessageRouter::new(Arc::clone(&network_graph), &keys_manager);
5178+
test_utils::TestMessageRouter::new_default(Arc::clone(&network_graph), &keys_manager);
51795179
let node = NodeCfg {
51805180
chain_source: &chanmon_cfgs[0].chain_source,
51815181
logger: &chanmon_cfgs[0].logger,

lightning/src/util/test_utils.rs

Lines changed: 45 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ use crate::ln::types::ChannelId;
3434
use crate::ln::{msgs, wire};
3535
use crate::offers::invoice::UnsignedBolt12Invoice;
3636
use crate::onion_message::messenger::{
37-
DefaultMessageRouter, Destination, MessageRouter, OnionMessagePath,
37+
DefaultMessageRouter, Destination, MessageRouter, NodeIdMessageRouter, OnionMessagePath,
3838
};
3939
use crate::routing::gossip::{EffectiveCapacity, NetworkGraph, NodeId, RoutingFees};
4040
use crate::routing::router::{
@@ -311,41 +311,74 @@ impl<'a> Drop for TestRouter<'a> {
311311
}
312312
}
313313

314-
pub struct TestMessageRouter<'a> {
315-
inner: DefaultMessageRouter<
316-
Arc<NetworkGraph<&'a TestLogger>>,
317-
&'a TestLogger,
318-
&'a TestKeysInterface,
319-
>,
314+
pub enum TestMessageRouter<'a> {
315+
Default {
316+
inner: DefaultMessageRouter<
317+
Arc<NetworkGraph<&'a TestLogger>>,
318+
&'a TestLogger,
319+
&'a TestKeysInterface,
320+
>,
321+
},
322+
323+
NodeId {
324+
inner: NodeIdMessageRouter<
325+
Arc<NetworkGraph<&'a TestLogger>>,
326+
&'a TestLogger,
327+
&'a TestKeysInterface,
328+
>,
329+
},
320330
}
321331

322332
impl<'a> TestMessageRouter<'a> {
323-
pub fn new(
333+
pub fn new_default(
324334
network_graph: Arc<NetworkGraph<&'a TestLogger>>, entropy_source: &'a TestKeysInterface,
325335
) -> Self {
326-
Self { inner: DefaultMessageRouter::new(network_graph, entropy_source) }
336+
Self::Default { inner: DefaultMessageRouter::new(network_graph, entropy_source) }
337+
}
338+
339+
pub fn new_node_id_router(
340+
network_graph: Arc<NetworkGraph<&'a TestLogger>>, entropy_source: &'a TestKeysInterface,
341+
) -> Self {
342+
Self::NodeId { inner: NodeIdMessageRouter::new(network_graph, entropy_source) }
327343
}
328344
}
329345

330346
impl<'a> MessageRouter for TestMessageRouter<'a> {
331347
fn find_path(
332348
&self, sender: PublicKey, peers: Vec<PublicKey>, destination: Destination,
333349
) -> Result<OnionMessagePath, ()> {
334-
self.inner.find_path(sender, peers, destination)
350+
match self {
351+
Self::Default { inner } => inner.find_path(sender, peers, destination),
352+
Self::NodeId { inner } => inner.find_path(sender, peers, destination),
353+
}
335354
}
336355

337356
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
338357
&self, recipient: PublicKey, context: MessageContext, peers: Vec<MessageForwardNode>,
339358
secp_ctx: &Secp256k1<T>,
340359
) -> Result<Vec<BlindedMessagePath>, ()> {
341-
self.inner.create_blinded_paths(recipient, context, peers, secp_ctx)
360+
match self {
361+
Self::Default { inner } => {
362+
inner.create_blinded_paths(recipient, context, peers, secp_ctx)
363+
},
364+
Self::NodeId { inner } => {
365+
inner.create_blinded_paths(recipient, context, peers, secp_ctx)
366+
},
367+
}
342368
}
343369

344370
fn create_compact_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
345371
&self, recipient: PublicKey, context: MessageContext, peers: Vec<MessageForwardNode>,
346372
secp_ctx: &Secp256k1<T>,
347373
) -> Result<Vec<BlindedMessagePath>, ()> {
348-
self.inner.create_compact_blinded_paths(recipient, context, peers, secp_ctx)
374+
match self {
375+
Self::Default { inner } => {
376+
inner.create_compact_blinded_paths(recipient, context, peers, secp_ctx)
377+
},
378+
Self::NodeId { inner } => {
379+
inner.create_compact_blinded_paths(recipient, context, peers, secp_ctx)
380+
},
381+
}
349382
}
350383
}
351384

0 commit comments

Comments
 (0)