Skip to content

Commit 26e4fe6

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 d78d640 commit 26e4fe6

File tree

4 files changed

+140
-49
lines changed

4 files changed

+140
-49
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18209,7 +18209,7 @@ pub mod bench {
1820918209
let scorer = RwLock::new(test_utils::TestScorer::new());
1821018210
let entropy = test_utils::TestKeysInterface::new(&[0u8; 32], network);
1821118211
let router = test_utils::TestRouter::new(Arc::new(NetworkGraph::new(network, &logger_a)), &logger_a, &scorer);
18212-
let message_router = test_utils::TestMessageRouter::new(Arc::new(NetworkGraph::new(network, &logger_a)), &entropy);
18212+
let message_router = test_utils::TestMessageRouter::new_default(Arc::new(NetworkGraph::new(network, &logger_a)), &entropy);
1821318213

1821418214
let mut config: UserConfig = Default::default();
1821518215
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;
@@ -877,7 +877,7 @@ impl<'a, 'b, 'c> Drop for Node<'a, 'b, 'c> {
877877
&self.logger,
878878
&scorer,
879879
),
880-
message_router: &test_utils::TestMessageRouter::new(
880+
message_router: &test_utils::TestMessageRouter::new_default(
881881
network_graph,
882882
self.keys_manager,
883883
),
@@ -4155,49 +4155,47 @@ pub fn create_chanmon_cfgs_with_keys(
41554155
chan_mon_cfgs
41564156
}
41574157

4158-
pub fn create_node_cfgs<'a>(
4159-
node_count: usize, chanmon_cfgs: &'a Vec<TestChanMonCfg>,
4160-
) -> Vec<NodeCfg<'a>> {
4161-
create_node_cfgs_with_persisters(
4162-
node_count,
4163-
chanmon_cfgs,
4164-
chanmon_cfgs.iter().map(|c| &c.persister).collect(),
4165-
)
4166-
}
4167-
4168-
pub fn create_node_cfgs_with_persisters<'a>(
4158+
fn create_node_cfgs_internal<'a, F>(
41694159
node_count: usize, chanmon_cfgs: &'a Vec<TestChanMonCfg>,
4170-
persisters: Vec<&'a impl test_utils::SyncPersist>,
4171-
) -> Vec<NodeCfg<'a>> {
4160+
persisters: Vec<&'a impl test_utils::SyncPersist>, message_router_constructor: F,
4161+
) -> Vec<NodeCfg<'a>>
4162+
where
4163+
F: Fn(
4164+
Arc<NetworkGraph<&'a TestLogger>>,
4165+
&'a TestKeysInterface,
4166+
) -> test_utils::TestMessageRouter<'a>,
4167+
{
41724168
let mut nodes = Vec::new();
41734169

41744170
for i in 0..node_count {
4171+
let cfg = &chanmon_cfgs[i];
4172+
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &cfg.logger));
41754173
let chain_monitor = test_utils::TestChainMonitor::new(
4176-
Some(&chanmon_cfgs[i].chain_source),
4177-
&chanmon_cfgs[i].tx_broadcaster,
4178-
&chanmon_cfgs[i].logger,
4179-
&chanmon_cfgs[i].fee_estimator,
4174+
Some(&cfg.chain_source),
4175+
&cfg.tx_broadcaster,
4176+
&cfg.logger,
4177+
&cfg.fee_estimator,
41804178
persisters[i],
4181-
&chanmon_cfgs[i].keys_manager,
4179+
&cfg.keys_manager,
41824180
);
4183-
let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, &chanmon_cfgs[i].logger));
4181+
41844182
let seed = [i as u8; 32];
41854183
nodes.push(NodeCfg {
4186-
chain_source: &chanmon_cfgs[i].chain_source,
4187-
logger: &chanmon_cfgs[i].logger,
4188-
tx_broadcaster: &chanmon_cfgs[i].tx_broadcaster,
4189-
fee_estimator: &chanmon_cfgs[i].fee_estimator,
4184+
chain_source: &cfg.chain_source,
4185+
logger: &cfg.logger,
4186+
tx_broadcaster: &cfg.tx_broadcaster,
4187+
fee_estimator: &cfg.fee_estimator,
41904188
router: test_utils::TestRouter::new(
41914189
Arc::clone(&network_graph),
4192-
&chanmon_cfgs[i].logger,
4193-
&chanmon_cfgs[i].scorer,
4190+
&cfg.logger,
4191+
&cfg.scorer,
41944192
),
4195-
message_router: test_utils::TestMessageRouter::new(
4193+
message_router: message_router_constructor(
41964194
Arc::clone(&network_graph),
4197-
&chanmon_cfgs[i].keys_manager,
4195+
&cfg.keys_manager,
41984196
),
41994197
chain_monitor,
4200-
keys_manager: &chanmon_cfgs[i].keys_manager,
4198+
keys_manager: &cfg.keys_manager,
42014199
node_seed: seed,
42024200
network_graph,
42034201
override_init_features: Rc::new(RefCell::new(None)),
@@ -4207,6 +4205,42 @@ pub fn create_node_cfgs_with_persisters<'a>(
42074205
nodes
42084206
}
42094207

4208+
pub fn create_node_cfgs<'a>(
4209+
node_count: usize, chanmon_cfgs: &'a Vec<TestChanMonCfg>,
4210+
) -> Vec<NodeCfg<'a>> {
4211+
let persisters = chanmon_cfgs.iter().map(|c| &c.persister).collect();
4212+
create_node_cfgs_internal(
4213+
node_count,
4214+
chanmon_cfgs,
4215+
persisters,
4216+
test_utils::TestMessageRouter::new_default,
4217+
)
4218+
}
4219+
4220+
pub fn create_node_cfgs_with_persisters<'a>(
4221+
node_count: usize, chanmon_cfgs: &'a Vec<TestChanMonCfg>,
4222+
persisters: Vec<&'a impl test_utils::SyncPersist>,
4223+
) -> Vec<NodeCfg<'a>> {
4224+
create_node_cfgs_internal(
4225+
node_count,
4226+
chanmon_cfgs,
4227+
persisters,
4228+
test_utils::TestMessageRouter::new_default,
4229+
)
4230+
}
4231+
4232+
pub fn create_node_cfgs_with_node_id_message_router<'a>(
4233+
node_count: usize, chanmon_cfgs: &'a Vec<TestChanMonCfg>,
4234+
) -> Vec<NodeCfg<'a>> {
4235+
let persisters = chanmon_cfgs.iter().map(|c| &c.persister).collect();
4236+
create_node_cfgs_internal(
4237+
node_count,
4238+
chanmon_cfgs,
4239+
persisters,
4240+
test_utils::TestMessageRouter::new_node_id_router,
4241+
)
4242+
}
4243+
42104244
pub fn test_default_channel_config() -> UserConfig {
42114245
let mut default_config = UserConfig::default();
42124246
// 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
@@ -5151,7 +5151,7 @@ pub fn test_key_derivation_params() {
51515151
let router =
51525152
test_utils::TestRouter::new(Arc::clone(&network_graph), &chanmon_cfgs[0].logger, &scorer);
51535153
let message_router =
5154-
test_utils::TestMessageRouter::new(Arc::clone(&network_graph), &keys_manager);
5154+
test_utils::TestMessageRouter::new_default(Arc::clone(&network_graph), &keys_manager);
51555155
let node = NodeCfg {
51565156
chain_source: &chanmon_cfgs[0].chain_source,
51575157
logger: &chanmon_cfgs[0].logger,

lightning/src/util/test_utils.rs

Lines changed: 74 additions & 17 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,21 +311,49 @@ impl<'a> Drop for TestRouter<'a> {
311311
}
312312
}
313313

314+
pub enum TestMessageRouterInternal<'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+
),
329+
}
330+
314331
pub struct TestMessageRouter<'a> {
315-
inner: DefaultMessageRouter<
316-
Arc<NetworkGraph<&'a TestLogger>>,
317-
&'a TestLogger,
318-
&'a TestKeysInterface,
319-
>,
332+
pub inner: TestMessageRouterInternal<'a>,
320333
pub peers_override: Mutex<Vec<PublicKey>>,
321334
}
322335

323336
impl<'a> TestMessageRouter<'a> {
324-
pub fn new(
337+
pub fn new_default(
325338
network_graph: Arc<NetworkGraph<&'a TestLogger>>, entropy_source: &'a TestKeysInterface,
326339
) -> Self {
327340
Self {
328-
inner: DefaultMessageRouter::new(network_graph, entropy_source),
341+
inner: TestMessageRouterInternal::Default(DefaultMessageRouter::new(
342+
network_graph,
343+
entropy_source,
344+
)),
345+
peers_override: Mutex::new(Vec::new()),
346+
}
347+
}
348+
349+
pub fn new_node_id_router(
350+
network_graph: Arc<NetworkGraph<&'a TestLogger>>, entropy_source: &'a TestKeysInterface,
351+
) -> Self {
352+
Self {
353+
inner: TestMessageRouterInternal::NodeId(NodeIdMessageRouter::new(
354+
network_graph,
355+
entropy_source,
356+
)),
329357
peers_override: Mutex::new(Vec::new()),
330358
}
331359
}
@@ -342,7 +370,12 @@ impl<'a> MessageRouter for TestMessageRouter<'a> {
342370
peers = peers_override.clone();
343371
}
344372
}
345-
self.inner.find_path(sender, peers, destination)
373+
match &self.inner {
374+
TestMessageRouterInternal::Default(inner) => {
375+
inner.find_path(sender, peers, destination)
376+
},
377+
TestMessageRouterInternal::NodeId(inner) => inner.find_path(sender, peers, destination),
378+
}
346379
}
347380

348381
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
@@ -360,7 +393,22 @@ impl<'a> MessageRouter for TestMessageRouter<'a> {
360393
peers = peer_override_nodes;
361394
}
362395
}
363-
self.inner.create_blinded_paths(recipient, local_node_receive_key, context, peers, secp_ctx)
396+
match &self.inner {
397+
TestMessageRouterInternal::Default(inner) => inner.create_blinded_paths(
398+
recipient,
399+
local_node_receive_key,
400+
context,
401+
peers,
402+
secp_ctx,
403+
),
404+
TestMessageRouterInternal::NodeId(inner) => inner.create_blinded_paths(
405+
recipient,
406+
local_node_receive_key,
407+
context,
408+
peers,
409+
secp_ctx,
410+
),
411+
}
364412
}
365413

366414
fn create_compact_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
@@ -378,13 +426,22 @@ impl<'a> MessageRouter for TestMessageRouter<'a> {
378426
.collect();
379427
}
380428
}
381-
self.inner.create_compact_blinded_paths(
382-
recipient,
383-
local_node_receive_key,
384-
context,
385-
peers,
386-
secp_ctx,
387-
)
429+
match &self.inner {
430+
TestMessageRouterInternal::Default(inner) => inner.create_compact_blinded_paths(
431+
recipient,
432+
local_node_receive_key,
433+
context,
434+
peers,
435+
secp_ctx,
436+
),
437+
TestMessageRouterInternal::NodeId(inner) => inner.create_compact_blinded_paths(
438+
recipient,
439+
local_node_receive_key,
440+
context,
441+
peers,
442+
secp_ctx,
443+
),
444+
}
388445
}
389446
}
390447

0 commit comments

Comments
 (0)