Skip to content

Commit 02f806c

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 4f99f01 commit 02f806c

File tree

4 files changed

+106
-44
lines changed

4 files changed

+106
-44
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17230,7 +17230,7 @@ pub mod bench {
1723017230
let scorer = RwLock::new(test_utils::TestScorer::new());
1723117231
let entropy = test_utils::TestKeysInterface::new(&[0u8; 32], network);
1723217232
let router = test_utils::TestRouter::new(Arc::new(NetworkGraph::new(network, &logger_a)), &logger_a, &scorer);
17233-
let message_router = test_utils::TestMessageRouter::new(Arc::new(NetworkGraph::new(network, &logger_a)), &entropy);
17233+
let message_router = test_utils::TestMessageRouter::new_default(Arc::new(NetworkGraph::new(network, &logger_a)), &entropy);
1723417234

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

lightning/src/ln/functional_test_utils.rs

Lines changed: 64 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ use crate::util::scid_utils;
4747
use crate::util::ser::{ReadableArgs, Writeable};
4848
use crate::util::test_channel_signer::SignerOp;
4949
use crate::util::test_channel_signer::TestChannelSigner;
50-
use crate::util::test_utils;
50+
use crate::util::test_utils::{self, TestLogger};
5151
use crate::util::test_utils::{TestChainMonitor, TestKeysInterface, TestScorer};
5252

5353
use bitcoin::amount::Amount;
@@ -855,7 +855,7 @@ impl<'a, 'b, 'c> Drop for Node<'a, 'b, 'c> {
855855
&self.logger,
856856
&scorer,
857857
),
858-
message_router: &test_utils::TestMessageRouter::new(
858+
message_router: &test_utils::TestMessageRouter::new_default(
859859
network_graph,
860860
self.keys_manager,
861861
),
@@ -4204,49 +4204,47 @@ pub fn create_chanmon_cfgs_with_keys(
42044204
chan_mon_cfgs
42054205
}
42064206

4207-
pub fn create_node_cfgs<'a>(
4208-
node_count: usize, chanmon_cfgs: &'a Vec<TestChanMonCfg>,
4209-
) -> Vec<NodeCfg<'a>> {
4210-
create_node_cfgs_with_persisters(
4211-
node_count,
4212-
chanmon_cfgs,
4213-
chanmon_cfgs.iter().map(|c| &c.persister).collect(),
4214-
)
4215-
}
4216-
4217-
pub fn create_node_cfgs_with_persisters<'a>(
4207+
fn create_node_cfgs_internal<'a, F>(
42184208
node_count: usize, chanmon_cfgs: &'a Vec<TestChanMonCfg>,
4219-
persisters: Vec<&'a impl test_utils::SyncPersist>,
4220-
) -> Vec<NodeCfg<'a>> {
4209+
persisters: Vec<&'a impl test_utils::SyncPersist>, message_router_constructor: F,
4210+
) -> Vec<NodeCfg<'a>>
4211+
where
4212+
F: Fn(
4213+
Arc<NetworkGraph<&'a TestLogger>>,
4214+
&'a TestKeysInterface,
4215+
) -> test_utils::TestMessageRouter<'a>,
4216+
{
42214217
let mut nodes = Vec::new();
42224218

42234219
for i in 0..node_count {
4220+
let cfg = &chanmon_cfgs[i];
4221+
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &cfg.logger));
42244222
let chain_monitor = test_utils::TestChainMonitor::new(
4225-
Some(&chanmon_cfgs[i].chain_source),
4226-
&chanmon_cfgs[i].tx_broadcaster,
4227-
&chanmon_cfgs[i].logger,
4228-
&chanmon_cfgs[i].fee_estimator,
4223+
Some(&cfg.chain_source),
4224+
&cfg.tx_broadcaster,
4225+
&cfg.logger,
4226+
&cfg.fee_estimator,
42294227
persisters[i],
4230-
&chanmon_cfgs[i].keys_manager,
4228+
&cfg.keys_manager,
42314229
);
4232-
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &chanmon_cfgs[i].logger));
4230+
42334231
let seed = [i as u8; 32];
42344232
nodes.push(NodeCfg {
4235-
chain_source: &chanmon_cfgs[i].chain_source,
4236-
logger: &chanmon_cfgs[i].logger,
4237-
tx_broadcaster: &chanmon_cfgs[i].tx_broadcaster,
4238-
fee_estimator: &chanmon_cfgs[i].fee_estimator,
4233+
chain_source: &cfg.chain_source,
4234+
logger: &cfg.logger,
4235+
tx_broadcaster: &cfg.tx_broadcaster,
4236+
fee_estimator: &cfg.fee_estimator,
42394237
router: test_utils::TestRouter::new(
42404238
Arc::clone(&network_graph),
4241-
&chanmon_cfgs[i].logger,
4242-
&chanmon_cfgs[i].scorer,
4239+
&cfg.logger,
4240+
&cfg.scorer,
42434241
),
4244-
message_router: test_utils::TestMessageRouter::new(
4242+
message_router: message_router_constructor(
42454243
Arc::clone(&network_graph),
4246-
&chanmon_cfgs[i].keys_manager,
4244+
&cfg.keys_manager,
42474245
),
42484246
chain_monitor,
4249-
keys_manager: &chanmon_cfgs[i].keys_manager,
4247+
keys_manager: &cfg.keys_manager,
42504248
node_seed: seed,
42514249
network_graph,
42524250
override_init_features: Rc::new(RefCell::new(None)),
@@ -4256,6 +4254,42 @@ pub fn create_node_cfgs_with_persisters<'a>(
42564254
nodes
42574255
}
42584256

4257+
pub fn create_node_cfgs<'a>(
4258+
node_count: usize, chanmon_cfgs: &'a Vec<TestChanMonCfg>,
4259+
) -> Vec<NodeCfg<'a>> {
4260+
let persisters = chanmon_cfgs.iter().map(|c| &c.persister).collect();
4261+
create_node_cfgs_internal(
4262+
node_count,
4263+
chanmon_cfgs,
4264+
persisters,
4265+
test_utils::TestMessageRouter::new_default,
4266+
)
4267+
}
4268+
4269+
pub fn create_node_cfgs_with_persisters<'a>(
4270+
node_count: usize, chanmon_cfgs: &'a Vec<TestChanMonCfg>,
4271+
persisters: Vec<&'a impl test_utils::SyncPersist>,
4272+
) -> Vec<NodeCfg<'a>> {
4273+
create_node_cfgs_internal(
4274+
node_count,
4275+
chanmon_cfgs,
4276+
persisters,
4277+
test_utils::TestMessageRouter::new_default,
4278+
)
4279+
}
4280+
4281+
pub fn create_node_cfgs_with_node_id_message_router<'a>(
4282+
node_count: usize, chanmon_cfgs: &'a Vec<TestChanMonCfg>,
4283+
) -> Vec<NodeCfg<'a>> {
4284+
let persisters = chanmon_cfgs.iter().map(|c| &c.persister).collect();
4285+
create_node_cfgs_internal(
4286+
node_count,
4287+
chanmon_cfgs,
4288+
persisters,
4289+
test_utils::TestMessageRouter::new_node_id_router,
4290+
)
4291+
}
4292+
42594293
pub fn test_default_channel_config() -> UserConfig {
42604294
let mut default_config = UserConfig::default();
42614295
// 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: 40 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,69 @@ 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+
DefaultMessageRouter<
317+
Arc<NetworkGraph<&'a TestLogger>>,
318+
&'a TestLogger,
319+
&'a TestKeysInterface,
320+
>,
321+
),
322+
NodeId(
323+
NodeIdMessageRouter<
324+
Arc<NetworkGraph<&'a TestLogger>>,
325+
&'a TestLogger,
326+
&'a TestKeysInterface,
327+
>,
328+
),
320329
}
321330

322331
impl<'a> TestMessageRouter<'a> {
323-
pub fn new(
332+
pub fn new_default(
333+
network_graph: Arc<NetworkGraph<&'a TestLogger>>, entropy_source: &'a TestKeysInterface,
334+
) -> Self {
335+
Self::Default(DefaultMessageRouter::new(network_graph, entropy_source))
336+
}
337+
338+
pub fn new_node_id_router(
324339
network_graph: Arc<NetworkGraph<&'a TestLogger>>, entropy_source: &'a TestKeysInterface,
325340
) -> Self {
326-
Self { inner: DefaultMessageRouter::new(network_graph, entropy_source) }
341+
Self::NodeId(NodeIdMessageRouter::new(network_graph, entropy_source))
327342
}
328343
}
329344

330345
impl<'a> MessageRouter for TestMessageRouter<'a> {
331346
fn find_path(
332347
&self, sender: PublicKey, peers: Vec<PublicKey>, destination: Destination,
333348
) -> Result<OnionMessagePath, ()> {
334-
self.inner.find_path(sender, peers, destination)
349+
match self {
350+
Self::Default(inner) => inner.find_path(sender, peers, destination),
351+
Self::NodeId(inner) => inner.find_path(sender, peers, destination),
352+
}
335353
}
336354

337355
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
338356
&self, recipient: PublicKey, context: MessageContext, peers: Vec<MessageForwardNode>,
339357
secp_ctx: &Secp256k1<T>,
340358
) -> Result<Vec<BlindedMessagePath>, ()> {
341-
self.inner.create_blinded_paths(recipient, context, peers, secp_ctx)
359+
match self {
360+
Self::Default(inner) => inner.create_blinded_paths(recipient, context, peers, secp_ctx),
361+
Self::NodeId(inner) => inner.create_blinded_paths(recipient, context, peers, secp_ctx),
362+
}
342363
}
343364

344365
fn create_compact_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
345366
&self, recipient: PublicKey, context: MessageContext, peers: Vec<MessageForwardNode>,
346367
secp_ctx: &Secp256k1<T>,
347368
) -> Result<Vec<BlindedMessagePath>, ()> {
348-
self.inner.create_compact_blinded_paths(recipient, context, peers, secp_ctx)
369+
match self {
370+
Self::Default(inner) => {
371+
inner.create_compact_blinded_paths(recipient, context, peers, secp_ctx)
372+
},
373+
Self::NodeId(inner) => {
374+
inner.create_compact_blinded_paths(recipient, context, peers, secp_ctx)
375+
},
376+
}
349377
}
350378
}
351379

0 commit comments

Comments
 (0)