Skip to content

Commit 1a32737

Browse files
committed
Stop relying on the *Features::known method in routing tests
As we move towards specify supported/required feature bits in the module(s) where they are supported, the global `known` feature set constructors no longer make sense. Here we stop relying on the `known` method in the `routing` module, which was only used in tests.
1 parent 6b1f867 commit 1a32737

File tree

3 files changed

+50
-47
lines changed

3 files changed

+50
-47
lines changed

lightning/src/routing/gossip.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1869,9 +1869,10 @@ impl ReadOnlyNetworkGraph<'_> {
18691869
#[cfg(test)]
18701870
mod tests {
18711871
use chain;
1872+
use ln::channelmanager;
18721873
use ln::chan_utils::make_funding_redeemscript;
18731874
use ln::PaymentHash;
1874-
use ln::features::{ChannelFeatures, InitFeatures, NodeFeatures};
1875+
use ln::features::InitFeatures;
18751876
use routing::gossip::{P2PGossipSync, NetworkGraph, NetworkUpdate, NodeAlias, MAX_EXCESS_BYTES_FOR_RELAY, NodeId, RoutingFees, ChannelUpdateInfo, ChannelInfo, NodeAnnouncementInfo, NodeInfo};
18761877
use ln::msgs::{RoutingMessageHandler, UnsignedNodeAnnouncement, NodeAnnouncement,
18771878
UnsignedChannelAnnouncement, ChannelAnnouncement, UnsignedChannelUpdate, ChannelUpdate,
@@ -1934,7 +1935,7 @@ mod tests {
19341935
fn get_signed_node_announcement<F: Fn(&mut UnsignedNodeAnnouncement)>(f: F, node_key: &SecretKey, secp_ctx: &Secp256k1<secp256k1::All>) -> NodeAnnouncement {
19351936
let node_id = PublicKey::from_secret_key(&secp_ctx, node_key);
19361937
let mut unsigned_announcement = UnsignedNodeAnnouncement {
1937-
features: NodeFeatures::known(),
1938+
features: channelmanager::provided_node_features(),
19381939
timestamp: 100,
19391940
node_id: node_id,
19401941
rgb: [0; 3],
@@ -1958,7 +1959,7 @@ mod tests {
19581959
let node_2_btckey = &SecretKey::from_slice(&[39; 32]).unwrap();
19591960

19601961
let mut unsigned_announcement = UnsignedChannelAnnouncement {
1961-
features: ChannelFeatures::known(),
1962+
features: channelmanager::provided_channel_features(),
19621963
chain_hash: genesis_block(Network::Testnet).header.block_hash(),
19631964
short_channel_id: 0,
19641965
node_id_1,
@@ -2616,15 +2617,17 @@ mod tests {
26162617

26172618
// It should ignore if gossip_queries feature is not enabled
26182619
{
2619-
let init_msg = Init { features: InitFeatures::known().clear_gossip_queries(), remote_network_address: None };
2620+
let init_msg = Init { features: InitFeatures::empty(), remote_network_address: None };
26202621
gossip_sync.peer_connected(&node_id_1, &init_msg).unwrap();
26212622
let events = gossip_sync.get_and_clear_pending_msg_events();
26222623
assert_eq!(events.len(), 0);
26232624
}
26242625

26252626
// It should send a gossip_timestamp_filter with the correct information
26262627
{
2627-
let init_msg = Init { features: InitFeatures::known(), remote_network_address: None };
2628+
let mut features = InitFeatures::empty();
2629+
features.set_gossip_queries_optional();
2630+
let init_msg = Init { features, remote_network_address: None };
26282631
gossip_sync.peer_connected(&node_id_1, &init_msg).unwrap();
26292632
let events = gossip_sync.get_and_clear_pending_msg_events();
26302633
assert_eq!(events.len(), 1);
@@ -3014,7 +3017,7 @@ mod tests {
30143017
// 2. Test encoding/decoding of ChannelInfo
30153018
// Check we can encode/decode ChannelInfo without ChannelUpdateInfo fields present.
30163019
let chan_info_none_updates = ChannelInfo {
3017-
features: ChannelFeatures::known(),
3020+
features: channelmanager::provided_channel_features(),
30183021
node_one: NodeId::from_pubkey(&nodes[0].node.get_our_node_id()),
30193022
one_to_two: None,
30203023
node_two: NodeId::from_pubkey(&nodes[1].node.get_our_node_id()),
@@ -3032,7 +3035,7 @@ mod tests {
30323035

30333036
// Check we can encode/decode ChannelInfo with ChannelUpdateInfo fields present.
30343037
let chan_info_some_updates = ChannelInfo {
3035-
features: ChannelFeatures::known(),
3038+
features: channelmanager::provided_channel_features(),
30363039
node_one: NodeId::from_pubkey(&nodes[0].node.get_our_node_id()),
30373040
one_to_two: Some(chan_update_info.clone()),
30383041
node_two: NodeId::from_pubkey(&nodes[1].node.get_our_node_id()),
@@ -3074,7 +3077,7 @@ mod tests {
30743077
// 1. Check we can read a valid NodeAnnouncementInfo and fail on an invalid one
30753078
let valid_netaddr = ::ln::msgs::NetAddress::Hostname { hostname: ::util::ser::Hostname::try_from("A".to_string()).unwrap(), port: 1234 };
30763079
let valid_node_ann_info = NodeAnnouncementInfo {
3077-
features: NodeFeatures::known(),
3080+
features: channelmanager::provided_node_features(),
30783081
last_update: 0,
30793082
rgb: [0u8; 3],
30803083
alias: NodeAlias([0u8; 32]),

lightning/src/routing/router.rs

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1939,7 +1939,7 @@ mod tests {
19391939
use routing::scoring::{ChannelUsage, Score, ProbabilisticScorer, ProbabilisticScoringParameters};
19401940
use chain::transaction::OutPoint;
19411941
use chain::keysinterface::KeysInterface;
1942-
use ln::features::{ChannelFeatures, InitFeatures, InvoiceFeatures, NodeFeatures};
1942+
use ln::features::{ChannelFeatures, InitFeatures, NodeFeatures};
19431943
use ln::msgs::{ErrorAction, LightningError, UnsignedChannelAnnouncement, ChannelAnnouncement, RoutingMessageHandler,
19441944
NodeAnnouncement, UnsignedNodeAnnouncement, ChannelUpdate, UnsignedChannelUpdate, MAX_VALUE_MSAT};
19451945
use ln::channelmanager;
@@ -2656,7 +2656,7 @@ mod tests {
26562656
fn htlc_minimum_overpay_test() {
26572657
let (secp_ctx, network_graph, gossip_sync, _, logger) = build_graph();
26582658
let (our_privkey, our_id, privkeys, nodes) = get_nodes(&secp_ctx);
2659-
let payment_params = PaymentParameters::from_node_id(nodes[2]).with_features(InvoiceFeatures::known());
2659+
let payment_params = PaymentParameters::from_node_id(nodes[2]).with_features(channelmanager::provided_invoice_features());
26602660
let scorer = test_utils::TestScorer::with_penalty(0);
26612661
let keys_manager = test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
26622662
let random_seed_bytes = keys_manager.get_secure_random_bytes();
@@ -3629,7 +3629,7 @@ mod tests {
36293629
let scorer = test_utils::TestScorer::with_penalty(0);
36303630
let keys_manager = test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
36313631
let random_seed_bytes = keys_manager.get_secure_random_bytes();
3632-
let payment_params = PaymentParameters::from_node_id(nodes[2]).with_features(InvoiceFeatures::known());
3632+
let payment_params = PaymentParameters::from_node_id(nodes[2]).with_features(channelmanager::provided_invoice_features());
36333633

36343634
// We will use a simple single-path route from
36353635
// our node to node2 via node0: channels {1, 3}.
@@ -3903,7 +3903,7 @@ mod tests {
39033903
let scorer = test_utils::TestScorer::with_penalty(0);
39043904
let keys_manager = test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
39053905
let random_seed_bytes = keys_manager.get_secure_random_bytes();
3906-
let payment_params = PaymentParameters::from_node_id(nodes[3]).with_features(InvoiceFeatures::known());
3906+
let payment_params = PaymentParameters::from_node_id(nodes[3]).with_features(channelmanager::provided_invoice_features());
39073907

39083908
// Path via {node7, node2, node4} is channels {12, 13, 6, 11}.
39093909
// {12, 13, 11} have the capacities of 100, {6} has a capacity of 50.
@@ -4077,7 +4077,7 @@ mod tests {
40774077
let keys_manager = test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
40784078
let random_seed_bytes = keys_manager.get_secure_random_bytes();
40794079
let payment_params = PaymentParameters::from_node_id(nodes[2])
4080-
.with_features(InvoiceFeatures::known());
4080+
.with_features(channelmanager::provided_invoice_features());
40814081

40824082
// We need a route consisting of 3 paths:
40834083
// From our node to node2 via node0, node7, node1 (three paths one hop each).
@@ -4235,7 +4235,7 @@ mod tests {
42354235
let scorer = test_utils::TestScorer::with_penalty(0);
42364236
let keys_manager = test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
42374237
let random_seed_bytes = keys_manager.get_secure_random_bytes();
4238-
let payment_params = PaymentParameters::from_node_id(nodes[3]).with_features(InvoiceFeatures::known());
4238+
let payment_params = PaymentParameters::from_node_id(nodes[3]).with_features(channelmanager::provided_invoice_features());
42394239

42404240
// We need a route consisting of 3 paths:
42414241
// From our node to node3 via {node0, node2}, {node7, node2, node4} and {node7, node2}.
@@ -4399,7 +4399,7 @@ mod tests {
43994399
let scorer = test_utils::TestScorer::with_penalty(0);
44004400
let keys_manager = test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
44014401
let random_seed_bytes = keys_manager.get_secure_random_bytes();
4402-
let payment_params = PaymentParameters::from_node_id(nodes[3]).with_features(InvoiceFeatures::known());
4402+
let payment_params = PaymentParameters::from_node_id(nodes[3]).with_features(channelmanager::provided_invoice_features());
44034403

44044404
// This test checks that if we have two cheaper paths and one more expensive path,
44054405
// so that liquidity-wise any 2 of 3 combination is sufficient,
@@ -4568,7 +4568,7 @@ mod tests {
45684568
let scorer = test_utils::TestScorer::with_penalty(0);
45694569
let keys_manager = test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
45704570
let random_seed_bytes = keys_manager.get_secure_random_bytes();
4571-
let payment_params = PaymentParameters::from_node_id(nodes[3]).with_features(InvoiceFeatures::known());
4571+
let payment_params = PaymentParameters::from_node_id(nodes[3]).with_features(channelmanager::provided_invoice_features());
45724572

45734573
// We need a route consisting of 2 paths:
45744574
// From our node to node3 via {node0, node2} and {node7, node2, node4}.
@@ -4749,7 +4749,7 @@ mod tests {
47494749
let scorer = test_utils::TestScorer::with_penalty(0);
47504750
let keys_manager = test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
47514751
let random_seed_bytes = keys_manager.get_secure_random_bytes();
4752-
let payment_params = PaymentParameters::from_node_id(PublicKey::from_slice(&[02; 33]).unwrap()).with_features(InvoiceFeatures::known())
4752+
let payment_params = PaymentParameters::from_node_id(PublicKey::from_slice(&[02; 33]).unwrap()).with_features(channelmanager::provided_invoice_features())
47534753
.with_route_hints(vec![RouteHint(vec![RouteHintHop {
47544754
src_node_id: nodes[2],
47554755
short_channel_id: 42,
@@ -4840,7 +4840,7 @@ mod tests {
48404840
let scorer = test_utils::TestScorer::with_penalty(0);
48414841
let keys_manager = test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
48424842
let random_seed_bytes = keys_manager.get_secure_random_bytes();
4843-
let payment_params = PaymentParameters::from_node_id(nodes[2]).with_features(InvoiceFeatures::known())
4843+
let payment_params = PaymentParameters::from_node_id(nodes[2]).with_features(channelmanager::provided_invoice_features())
48444844
.with_max_channel_saturation_power_of_half(0);
48454845

48464846
// We need a route consisting of 3 paths:
@@ -5196,7 +5196,7 @@ mod tests {
51965196
let scorer = test_utils::TestScorer::with_penalty(0);
51975197
let keys_manager = test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
51985198
let random_seed_bytes = keys_manager.get_secure_random_bytes();
5199-
let payment_params = PaymentParameters::from_node_id(nodes[2]).with_features(InvoiceFeatures::known());
5199+
let payment_params = PaymentParameters::from_node_id(nodes[2]).with_features(channelmanager::provided_invoice_features());
52005200

52015201
// We modify the graph to set the htlc_minimum of channel 2 and 4 as needed - channel 2
52025202
// gets an htlc_maximum_msat of 80_000 and channel 4 an htlc_minimum_msat of 90_000. We
@@ -5245,7 +5245,7 @@ mod tests {
52455245
assert_eq!(route.paths[0][1].short_channel_id, 13);
52465246
assert_eq!(route.paths[0][1].fee_msat, 90_000);
52475247
assert_eq!(route.paths[0][1].cltv_expiry_delta, 42);
5248-
assert_eq!(route.paths[0][1].node_features.le_flags(), InvoiceFeatures::known().le_flags());
5248+
assert_eq!(route.paths[0][1].node_features.le_flags(), channelmanager::provided_invoice_features().le_flags());
52495249
assert_eq!(route.paths[0][1].channel_features.le_flags(), &id_to_feature_flags(13));
52505250
}
52515251
}
@@ -5264,14 +5264,14 @@ mod tests {
52645264
let logger = Arc::new(test_utils::TestLogger::new());
52655265
let network_graph = NetworkGraph::new(genesis_hash, Arc::clone(&logger));
52665266
let scorer = test_utils::TestScorer::with_penalty(0);
5267-
let payment_params = PaymentParameters::from_node_id(nodes[0]).with_features(InvoiceFeatures::known());
5267+
let payment_params = PaymentParameters::from_node_id(nodes[0]).with_features(channelmanager::provided_invoice_features());
52685268
let keys_manager = test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
52695269
let random_seed_bytes = keys_manager.get_secure_random_bytes();
52705270

52715271
{
52725272
let route = get_route(&our_id, &payment_params, &network_graph.read_only(), Some(&[
5273-
&get_channel_details(Some(3), nodes[0], InitFeatures::known(), 200_000),
5274-
&get_channel_details(Some(2), nodes[0], InitFeatures::known(), 10_000),
5273+
&get_channel_details(Some(3), nodes[0], channelmanager::provided_init_features(), 200_000),
5274+
&get_channel_details(Some(2), nodes[0], channelmanager::provided_init_features(), 10_000),
52755275
]), 100_000, 42, Arc::clone(&logger), &scorer, &random_seed_bytes).unwrap();
52765276
assert_eq!(route.paths.len(), 1);
52775277
assert_eq!(route.paths[0].len(), 1);
@@ -5282,8 +5282,8 @@ mod tests {
52825282
}
52835283
{
52845284
let route = get_route(&our_id, &payment_params, &network_graph.read_only(), Some(&[
5285-
&get_channel_details(Some(3), nodes[0], InitFeatures::known(), 50_000),
5286-
&get_channel_details(Some(2), nodes[0], InitFeatures::known(), 50_000),
5285+
&get_channel_details(Some(3), nodes[0], channelmanager::provided_init_features(), 50_000),
5286+
&get_channel_details(Some(2), nodes[0], channelmanager::provided_init_features(), 50_000),
52875287
]), 100_000, 42, Arc::clone(&logger), &scorer, &random_seed_bytes).unwrap();
52885288
assert_eq!(route.paths.len(), 2);
52895289
assert_eq!(route.paths[0].len(), 1);
@@ -5308,14 +5308,14 @@ mod tests {
53085308
// smallest of them, avoiding further fragmenting our available outbound balance to
53095309
// this node.
53105310
let route = get_route(&our_id, &payment_params, &network_graph.read_only(), Some(&[
5311-
&get_channel_details(Some(2), nodes[0], InitFeatures::known(), 50_000),
5312-
&get_channel_details(Some(3), nodes[0], InitFeatures::known(), 50_000),
5313-
&get_channel_details(Some(5), nodes[0], InitFeatures::known(), 50_000),
5314-
&get_channel_details(Some(6), nodes[0], InitFeatures::known(), 300_000),
5315-
&get_channel_details(Some(7), nodes[0], InitFeatures::known(), 50_000),
5316-
&get_channel_details(Some(8), nodes[0], InitFeatures::known(), 50_000),
5317-
&get_channel_details(Some(9), nodes[0], InitFeatures::known(), 50_000),
5318-
&get_channel_details(Some(4), nodes[0], InitFeatures::known(), 1_000_000),
5311+
&get_channel_details(Some(2), nodes[0], channelmanager::provided_init_features(), 50_000),
5312+
&get_channel_details(Some(3), nodes[0], channelmanager::provided_init_features(), 50_000),
5313+
&get_channel_details(Some(5), nodes[0], channelmanager::provided_init_features(), 50_000),
5314+
&get_channel_details(Some(6), nodes[0], channelmanager::provided_init_features(), 300_000),
5315+
&get_channel_details(Some(7), nodes[0], channelmanager::provided_init_features(), 50_000),
5316+
&get_channel_details(Some(8), nodes[0], channelmanager::provided_init_features(), 50_000),
5317+
&get_channel_details(Some(9), nodes[0], channelmanager::provided_init_features(), 50_000),
5318+
&get_channel_details(Some(4), nodes[0], channelmanager::provided_init_features(), 1_000_000),
53195319
]), 100_000, 42, Arc::clone(&logger), &scorer, &random_seed_bytes).unwrap();
53205320
assert_eq!(route.paths.len(), 1);
53215321
assert_eq!(route.paths[0].len(), 1);
@@ -5759,7 +5759,7 @@ mod tests {
57595759
excess_data: Vec::new()
57605760
});
57615761

5762-
let payment_params = PaymentParameters::from_node_id(nodes[2]).with_features(InvoiceFeatures::known());
5762+
let payment_params = PaymentParameters::from_node_id(nodes[2]).with_features(channelmanager::provided_invoice_features());
57635763
let keys_manager = test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
57645764
let random_seed_bytes = keys_manager.get_secure_random_bytes();
57655765
// 100,000 sats is less than the available liquidity on each channel, set above.
@@ -5843,7 +5843,7 @@ mod tests {
58435843
let src = &PublicKey::from_slice(nodes.keys().skip(seed % nodes.len()).next().unwrap().as_slice()).unwrap();
58445844
seed = seed.overflowing_mul(0xdeadbeef).0;
58455845
let dst = PublicKey::from_slice(nodes.keys().skip(seed % nodes.len()).next().unwrap().as_slice()).unwrap();
5846-
let payment_params = PaymentParameters::from_node_id(dst).with_features(InvoiceFeatures::known());
5846+
let payment_params = PaymentParameters::from_node_id(dst).with_features(channelmanager::provided_invoice_features());
58475847
let amt = seed as u64 % 200_000_000;
58485848
let params = ProbabilisticScoringParameters::default();
58495849
let scorer = ProbabilisticScorer::new(params, &graph, &logger);
@@ -5926,7 +5926,7 @@ mod benches {
59265926
use bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey};
59275927
use chain::transaction::OutPoint;
59285928
use chain::keysinterface::{KeysManager,KeysInterface};
5929-
use ln::channelmanager::{ChannelCounterparty, ChannelDetails};
5929+
use ln::channelmanager::{self, ChannelCounterparty, ChannelDetails};
59305930
use ln::features::{InitFeatures, InvoiceFeatures};
59315931
use routing::gossip::NetworkGraph;
59325932
use routing::scoring::{FixedPenaltyScorer, ProbabilisticScorer, ProbabilisticScoringParameters};
@@ -5955,7 +5955,7 @@ mod benches {
59555955
ChannelDetails {
59565956
channel_id: [0; 32],
59575957
counterparty: ChannelCounterparty {
5958-
features: InitFeatures::known(),
5958+
features: channelmanager::provided_init_features(),
59595959
node_id,
59605960
unspendable_punishment_reserve: 0,
59615961
forwarding_info: None,
@@ -6001,7 +6001,7 @@ mod benches {
60016001
let logger = DummyLogger {};
60026002
let network_graph = read_network_graph(&logger);
60036003
let scorer = FixedPenaltyScorer::with_penalty(0);
6004-
generate_routes(bench, &network_graph, scorer, InvoiceFeatures::known());
6004+
generate_routes(bench, &network_graph, scorer, channelmanager::provided_invoice_features());
60056005
}
60066006

60076007
#[bench]
@@ -6019,7 +6019,7 @@ mod benches {
60196019
let network_graph = read_network_graph(&logger);
60206020
let params = ProbabilisticScoringParameters::default();
60216021
let scorer = ProbabilisticScorer::new(params, &network_graph, &logger);
6022-
generate_routes(bench, &network_graph, scorer, InvoiceFeatures::known());
6022+
generate_routes(bench, &network_graph, scorer, channelmanager::provided_invoice_features());
60236023
}
60246024

60256025
fn generate_routes<S: Score>(

lightning/src/routing/scoring.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1281,7 +1281,7 @@ mod tests {
12811281
use util::time::Time;
12821282
use util::time::tests::SinceEpoch;
12831283

1284-
use ln::features::{ChannelFeatures, NodeFeatures};
1284+
use ln::channelmanager;
12851285
use ln::msgs::{ChannelAnnouncement, ChannelUpdate, UnsignedChannelAnnouncement, UnsignedChannelUpdate};
12861286
use routing::gossip::{EffectiveCapacity, NetworkGraph, NodeId};
12871287
use routing::router::RouteHop;
@@ -1372,7 +1372,7 @@ mod tests {
13721372
let node_2_secret = &SecretKey::from_slice(&[40; 32]).unwrap();
13731373
let secp_ctx = Secp256k1::new();
13741374
let unsigned_announcement = UnsignedChannelAnnouncement {
1375-
features: ChannelFeatures::known(),
1375+
features: channelmanager::provided_channel_features(),
13761376
chain_hash: genesis_hash,
13771377
short_channel_id,
13781378
node_id_1: PublicKey::from_secret_key(&secp_ctx, &node_1_key),
@@ -1426,25 +1426,25 @@ mod tests {
14261426
vec![
14271427
RouteHop {
14281428
pubkey: source_pubkey(),
1429-
node_features: NodeFeatures::known(),
1429+
node_features: channelmanager::provided_node_features(),
14301430
short_channel_id: 41,
1431-
channel_features: ChannelFeatures::known(),
1431+
channel_features: channelmanager::provided_channel_features(),
14321432
fee_msat: 1,
14331433
cltv_expiry_delta: 18,
14341434
},
14351435
RouteHop {
14361436
pubkey: target_pubkey(),
1437-
node_features: NodeFeatures::known(),
1437+
node_features: channelmanager::provided_node_features(),
14381438
short_channel_id: 42,
1439-
channel_features: ChannelFeatures::known(),
1439+
channel_features: channelmanager::provided_channel_features(),
14401440
fee_msat: 2,
14411441
cltv_expiry_delta: 18,
14421442
},
14431443
RouteHop {
14441444
pubkey: recipient_pubkey(),
1445-
node_features: NodeFeatures::known(),
1445+
node_features: channelmanager::provided_node_features(),
14461446
short_channel_id: 43,
1447-
channel_features: ChannelFeatures::known(),
1447+
channel_features: channelmanager::provided_channel_features(),
14481448
fee_msat: amount_msat,
14491449
cltv_expiry_delta: 18,
14501450
},

0 commit comments

Comments
 (0)