Skip to content

Commit 965714e

Browse files
committed
Create a module for receiving updates about network graph
Separate the logic handling messages regarding nodes and channels from route construction.
1 parent 59b1bf6 commit 965714e

File tree

7 files changed

+1835
-1625
lines changed

7 files changed

+1835
-1625
lines changed

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 45 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,11 @@ fn test_simple_monitor_permanent_update_fail() {
2626
let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
2727
create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
2828

29-
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
3029
let (_, payment_hash_1) = get_payment_preimage_hash!(&nodes[0]);
3130

3231
*nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::PermanentFailure);
32+
let network_graph = &nodes[0].network_graph;
33+
let route = nodes[0].router.get_route(network_graph, &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
3334
unwrap_send_err!(nodes[0].node.send_payment(&route, payment_hash_1, &None), true, APIError::ChannelUnavailable {..}, {});
3435
check_added_monitors!(nodes[0], 2);
3536

@@ -59,11 +60,12 @@ fn do_test_simple_monitor_temporary_update_fail(disconnect: bool) {
5960
let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
6061
let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported()).2;
6162

62-
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
6363
let (payment_preimage_1, payment_hash_1) = get_payment_preimage_hash!(&nodes[0]);
6464

6565
*nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
6666

67+
let network_graph = &nodes[0].network_graph;
68+
let route = nodes[0].router.get_route(network_graph, &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
6769
unwrap_send_err!(nodes[0].node.send_payment(&route, payment_hash_1, &None), false, APIError::MonitorUpdateFailed, {});
6870
check_added_monitors!(nodes[0], 1);
6971

@@ -107,6 +109,8 @@ fn do_test_simple_monitor_temporary_update_fail(disconnect: bool) {
107109
// Now set it to failed again...
108110
let (_, payment_hash_2) = get_payment_preimage_hash!(&nodes[0]);
109111
*nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
112+
let network_graph = &nodes[0].network_graph;
113+
let route = nodes[0].router.get_route(network_graph, &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
110114
unwrap_send_err!(nodes[0].node.send_payment(&route, payment_hash_2, &None), false, APIError::MonitorUpdateFailed, {});
111115
check_added_monitors!(nodes[0], 1);
112116

@@ -166,10 +170,11 @@ fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
166170
let (payment_preimage_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
167171

168172
// Now try to send a second payment which will fail to send
169-
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
170173
let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
171174

172175
*nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
176+
let network_graph = &nodes[0].network_graph;
177+
let route = nodes[0].router.get_route(network_graph, &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
173178
unwrap_send_err!(nodes[0].node.send_payment(&route, payment_hash_2, &None), false, APIError::MonitorUpdateFailed, {});
174179
check_added_monitors!(nodes[0], 1);
175180

@@ -495,8 +500,9 @@ fn test_monitor_update_fail_cs() {
495500
let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
496501
let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported()).2;
497502

498-
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
499503
let (payment_preimage, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
504+
let network_graph = &nodes[0].network_graph;
505+
let route = nodes[0].router.get_route(network_graph, &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
500506
nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
501507
check_added_monitors!(nodes[0], 1);
502508

@@ -580,8 +586,9 @@ fn test_monitor_update_fail_no_rebroadcast() {
580586
let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
581587
let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported()).2;
582588

583-
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
584589
let (payment_preimage_1, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
590+
let network_graph = &nodes[0].network_graph;
591+
let route = nodes[0].router.get_route(network_graph, &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
585592
nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
586593
check_added_monitors!(nodes[0], 1);
587594

@@ -628,14 +635,16 @@ fn test_monitor_update_raa_while_paused() {
628635

629636
send_payment(&nodes[0], &[&nodes[1]], 5000000, 5_000_000);
630637

631-
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
632638
let (payment_preimage_1, our_payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
639+
let network_graph = &nodes[0].network_graph;
640+
let route = nodes[0].router.get_route(network_graph, &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
633641
nodes[0].node.send_payment(&route, our_payment_hash_1, &None).unwrap();
634642
check_added_monitors!(nodes[0], 1);
635643
let send_event_1 = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
636644

637-
let route = nodes[1].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
638645
let (payment_preimage_2, our_payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
646+
let network_graph = &nodes[1].network_graph;
647+
let route = nodes[1].router.get_route(network_graph, &nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
639648
nodes[1].node.send_payment(&route, our_payment_hash_2, &None).unwrap();
640649
check_added_monitors!(nodes[1], 1);
641650
let send_event_2 = SendEvent::from_event(nodes[1].node.get_and_clear_pending_msg_events().remove(0));
@@ -723,7 +732,8 @@ fn do_test_monitor_update_fail_raa(test_ignore_second_cs: bool) {
723732
// While the second channel is AwaitingRAA, forward a second payment to get it into the
724733
// holding cell.
725734
let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
726-
let route = nodes[0].router.get_route(&nodes[2].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
735+
let network_graph = &nodes[0].network_graph;
736+
let route = nodes[0].router.get_route(network_graph, &nodes[2].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
727737
nodes[0].node.send_payment(&route, payment_hash_2, &None).unwrap();
728738
check_added_monitors!(nodes[0], 1);
729739

@@ -748,7 +758,8 @@ fn do_test_monitor_update_fail_raa(test_ignore_second_cs: bool) {
748758
// for forwarding.
749759

750760
let (_, payment_hash_3) = get_payment_preimage_hash!(nodes[0]);
751-
let route = nodes[0].router.get_route(&nodes[2].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
761+
let network_graph = &nodes[0].network_graph;
762+
let route = nodes[0].router.get_route(network_graph, &nodes[2].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
752763
nodes[0].node.send_payment(&route, payment_hash_3, &None).unwrap();
753764
check_added_monitors!(nodes[0], 1);
754765

@@ -795,7 +806,8 @@ fn do_test_monitor_update_fail_raa(test_ignore_second_cs: bool) {
795806
let (payment_preimage_4, payment_hash_4) = if test_ignore_second_cs {
796807
// Try to route another payment backwards from 2 to make sure 1 holds off on responding
797808
let (payment_preimage_4, payment_hash_4) = get_payment_preimage_hash!(nodes[0]);
798-
let route = nodes[2].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
809+
let network_graph = &nodes[2].network_graph;
810+
let route = nodes[2].router.get_route(network_graph, &nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
799811
nodes[2].node.send_payment(&route, payment_hash_4, &None).unwrap();
800812
check_added_monitors!(nodes[2], 1);
801813

@@ -1037,7 +1049,6 @@ fn raa_no_response_awaiting_raa_state() {
10371049
let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
10381050
let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported()).2;
10391051

1040-
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
10411052
let (payment_preimage_1, payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
10421053
let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
10431054
let (payment_preimage_3, payment_hash_3) = get_payment_preimage_hash!(nodes[0]);
@@ -1047,6 +1058,8 @@ fn raa_no_response_awaiting_raa_state() {
10471058
// immediately after a CS. By setting failing the monitor update failure from the CS (which
10481059
// requires only an RAA response due to AwaitingRAA) we can deliver the RAA and require the CS
10491060
// generation during RAA while in monitor-update-failed state.
1061+
let network_graph = &nodes[0].network_graph;
1062+
let route = nodes[0].router.get_route(network_graph, &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
10501063
nodes[0].node.send_payment(&route, payment_hash_1, &None).unwrap();
10511064
check_added_monitors!(nodes[0], 1);
10521065
nodes[0].node.send_payment(&route, payment_hash_2, &None).unwrap();
@@ -1097,6 +1110,8 @@ fn raa_no_response_awaiting_raa_state() {
10971110
// We send a third payment here, which is somewhat of a redundant test, but the
10981111
// chanmon_fail_consistency test required it to actually find the bug (by seeing out-of-sync
10991112
// commitment transaction states) whereas here we can explicitly check for it.
1113+
let network_graph = &nodes[0].network_graph;
1114+
let route = nodes[0].router.get_route(network_graph, &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
11001115
nodes[0].node.send_payment(&route, payment_hash_3, &None).unwrap();
11011116
check_added_monitors!(nodes[0], 0);
11021117
assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
@@ -1184,8 +1199,9 @@ fn claim_while_disconnected_monitor_update_fail() {
11841199

11851200
// Send a second payment from A to B, resulting in a commitment update that gets swallowed with
11861201
// the monitor still failed
1187-
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
11881202
let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1203+
let network_graph = &nodes[0].network_graph;
1204+
let route = nodes[0].router.get_route(network_graph, &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
11891205
nodes[0].node.send_payment(&route, payment_hash_2, &None).unwrap();
11901206
check_added_monitors!(nodes[0], 1);
11911207

@@ -1276,8 +1292,9 @@ fn monitor_failed_no_reestablish_response() {
12761292

12771293
// Route the payment and deliver the initial commitment_signed (with a monitor update failure
12781294
// on receipt).
1279-
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
12801295
let (payment_preimage_1, payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
1296+
let network_graph = &nodes[0].network_graph;
1297+
let route = nodes[0].router.get_route(network_graph, &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
12811298
nodes[0].node.send_payment(&route, payment_hash_1, &None).unwrap();
12821299
check_added_monitors!(nodes[0], 1);
12831300

@@ -1346,8 +1363,9 @@ fn first_message_on_recv_ordering() {
13461363

13471364
// Route the first payment outbound, holding the last RAA for B until we are set up so that we
13481365
// can deliver it and fail the monitor update.
1349-
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
13501366
let (payment_preimage_1, payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
1367+
let network_graph = &nodes[0].network_graph;
1368+
let route = nodes[0].router.get_route(network_graph, &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
13511369
nodes[0].node.send_payment(&route, payment_hash_1, &None).unwrap();
13521370
check_added_monitors!(nodes[0], 1);
13531371

@@ -1368,9 +1386,11 @@ fn first_message_on_recv_ordering() {
13681386
let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
13691387

13701388
// Route the second payment, generating an update_add_htlc/commitment_signed
1371-
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
13721389
let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1390+
let network_graph = &nodes[0].network_graph;
1391+
let route = nodes[0].router.get_route(network_graph, &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
13731392
nodes[0].node.send_payment(&route, payment_hash_2, &None).unwrap();
1393+
13741394
check_added_monitors!(nodes[0], 1);
13751395
let mut events = nodes[0].node.get_and_clear_pending_msg_events();
13761396
assert_eq!(events.len(), 1);
@@ -1444,8 +1464,9 @@ fn test_monitor_update_fail_claim() {
14441464
assert!(nodes[1].node.claim_funds(payment_preimage_1, &None, 1_000_000));
14451465
check_added_monitors!(nodes[1], 1);
14461466

1447-
let route = nodes[2].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
14481467
let (_, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1468+
let network_graph = &nodes[2].network_graph;
1469+
let route = nodes[2].router.get_route(network_graph, &nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
14491470
nodes[2].node.send_payment(&route, payment_hash_2, &None).unwrap();
14501471
check_added_monitors!(nodes[2], 1);
14511472

@@ -1525,8 +1546,9 @@ fn test_monitor_update_on_pending_forwards() {
15251546
commitment_signed_dance!(nodes[1], nodes[2], cs_fail_update.commitment_signed, true, true);
15261547
assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
15271548

1528-
let route = nodes[2].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
15291549
let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1550+
let network_graph = &nodes[2].network_graph;
1551+
let route = nodes[2].router.get_route(network_graph, &nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
15301552
nodes[2].node.send_payment(&route, payment_hash_2, &None).unwrap();
15311553
check_added_monitors!(nodes[2], 1);
15321554

@@ -1584,9 +1606,11 @@ fn monitor_update_claim_fail_no_response() {
15841606
let (payment_preimage_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
15851607

15861608
// Now start forwarding a second payment, skipping the last RAA so B is in AwaitingRAA
1587-
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
15881609
let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1610+
let network_graph = &nodes[0].network_graph;
1611+
let route = nodes[0].router.get_route(network_graph, &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
15891612
nodes[0].node.send_payment(&route, payment_hash_2, &None).unwrap();
1613+
15901614
check_added_monitors!(nodes[0], 1);
15911615

15921616
let mut events = nodes[0].node.get_and_clear_pending_msg_events();
@@ -1746,9 +1770,9 @@ fn do_during_funding_monitor_fail(fail_on_generate: bool, restore_between_fails:
17461770
(channel_id, create_chan_between_nodes_with_value_b(&nodes[1], &nodes[0], &funding_locked))
17471771
};
17481772
for node in nodes.iter() {
1749-
assert!(node.router.handle_channel_announcement(&announcement).unwrap());
1750-
node.router.handle_channel_update(&as_update).unwrap();
1751-
node.router.handle_channel_update(&bs_update).unwrap();
1773+
assert!(node.network_graph.handle_channel_announcement(&announcement).unwrap());
1774+
node.network_graph.handle_channel_update(&as_update).unwrap();
1775+
node.network_graph.handle_channel_update(&bs_update).unwrap();
17521776
}
17531777

17541778
send_payment(&nodes[0], &[&nodes[1]], 8000000, 8_000_000);

0 commit comments

Comments
 (0)