@@ -8201,10 +8201,10 @@ fn do_test_mpp_keysend(accept_mpp_keysend: bool) {
8201
8201
let node_chanmgrs = create_node_chanmgrs(4, &node_cfgs, &[None, None, None, Some(mpp_keysend_config)]);
8202
8202
let nodes = create_network(4, &node_cfgs, &node_chanmgrs);
8203
8203
8204
- create_announced_chan_between_nodes(&nodes, 0, 1).0.contents.short_channel_id ;
8205
- create_announced_chan_between_nodes(&nodes, 0, 2).0.contents.short_channel_id ;
8206
- create_announced_chan_between_nodes(&nodes, 1, 3).0.contents.short_channel_id ;
8207
- create_announced_chan_between_nodes(&nodes, 2, 3).0.contents.short_channel_id ;
8204
+ create_announced_chan_between_nodes(&nodes, 0, 1);
8205
+ create_announced_chan_between_nodes(&nodes, 0, 2);
8206
+ create_announced_chan_between_nodes(&nodes, 1, 3);
8207
+ let chan_2_3 = create_announced_chan_between_nodes(&nodes, 2, 3);
8208
8208
let network_graph = nodes[0].network_graph.clone();
8209
8209
8210
8210
let payer_pubkey = nodes[0].node.get_our_node_id();
@@ -8228,14 +8228,58 @@ fn do_test_mpp_keysend(accept_mpp_keysend: bool) {
8228
8228
let expected_route: &[&[&Node]] = &[&[&nodes[1], &nodes[3]], &[&nodes[2], &nodes[3]]];
8229
8229
let mut events = nodes[0].node.get_and_clear_pending_msg_events();
8230
8230
assert_eq!(events.len(), 2);
8231
- for (path_idx, expected_path) in expected_route.iter().enumerate() {
8232
- let ev = remove_first_msg_event_to_node(&expected_path[0].node.get_our_node_id(), &mut events);
8233
- let expect_payment = path_idx == expected_route.len() - 1;
8234
- pass_along_path(&nodes[0], *expected_path, recv_value, payment_hash.clone(),
8235
- Some(payment_secret), ev, expect_payment, Some(payment_preimage));
8236
- }
8237
8231
8238
- claim_payment_along_route(&nodes[0], expected_route, false, payment_preimage);
8232
+ let ev = remove_first_msg_event_to_node(&nodes[1].node.get_our_node_id(), &mut events);
8233
+ pass_along_path(&nodes[0], expected_route[0], recv_value, payment_hash.clone(),
8234
+ Some(payment_secret), ev.clone(), false, Some(payment_preimage));
8235
+
8236
+ if accept_mpp_keysend {
8237
+ let ev = remove_first_msg_event_to_node(&nodes[2].node.get_our_node_id(), &mut events);
8238
+ pass_along_path(&nodes[0], expected_route[1], recv_value, payment_hash.clone(),
8239
+ Some(payment_secret), ev.clone(), true, Some(payment_preimage));
8240
+ claim_payment_along_route(&nodes[0], expected_route, false, payment_preimage);
8241
+ } else {
8242
+ let ev = remove_first_msg_event_to_node(&nodes[2].node.get_our_node_id(), &mut events);
8243
+ let mut payment_event = SendEvent::from_event(ev.clone());
8244
+
8245
+ assert_eq!(nodes[2].node.get_our_node_id(), payment_event.node_id);
8246
+
8247
+ nodes[2].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
8248
+ commitment_signed_dance!(nodes[2], nodes[0], payment_event.commitment_msg, false);
8249
+
8250
+ expect_pending_htlcs_forwardable!(nodes[2]);
8251
+ check_added_monitors!(nodes[2], 1);
8252
+
8253
+ let mut events_2 = nodes[2].node.get_and_clear_pending_msg_events();
8254
+ assert_eq!(events_2.len(), 1);
8255
+ payment_event = SendEvent::from_event(events_2.remove(0));
8256
+
8257
+ nodes[3].node.handle_update_add_htlc(&nodes[2].node.get_our_node_id(), &payment_event.msgs[0]);
8258
+ check_added_monitors!(nodes[3], 0);
8259
+ commitment_signed_dance!(nodes[3], nodes[2], payment_event.commitment_msg, false);
8260
+
8261
+ expect_pending_htlcs_forwardable_ignore!(nodes[3]);
8262
+ nodes[3].node.process_pending_htlc_forwards();
8263
+ expect_pending_htlcs_forwardable_and_htlc_handling_failed_ignore!(nodes[3],
8264
+ vec![HTLCDestination::FailedPayment { payment_hash: payment_hash }]);
8265
+ nodes[3].node.process_pending_htlc_forwards();
8266
+
8267
+ check_added_monitors!(nodes[3], 1);
8268
+
8269
+ let fail_updates_1 = get_htlc_update_msgs!(nodes[3], nodes[2].node.get_our_node_id());
8270
+ nodes[2].node.handle_update_fail_htlc(&nodes[3].node.get_our_node_id(), &fail_updates_1.update_fail_htlcs[0]);
8271
+ commitment_signed_dance!(nodes[2], nodes[3], fail_updates_1.commitment_signed, false);
8272
+
8273
+ expect_pending_htlcs_forwardable_and_htlc_handling_failed!(nodes[2],
8274
+ vec![HTLCDestination::NextHopChannel { node_id: Some(nodes[3].node.get_our_node_id()), channel_id: chan_2_3.2 }]);
8275
+ check_added_monitors!(nodes[2], 1);
8276
+
8277
+ let fail_updates_2 = get_htlc_update_msgs!(nodes[2], nodes[0].node.get_our_node_id());
8278
+ nodes[0].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &fail_updates_2.update_fail_htlcs[0]);
8279
+ commitment_signed_dance!(nodes[0], nodes[2], fail_updates_2.commitment_signed, false);
8280
+
8281
+ expect_payment_failed_conditions(&nodes[0], payment_hash, true, PaymentFailedConditions::new().mpp_parts_remain());
8282
+ }
8239
8283
}
8240
8284
8241
8285
#[test]
@@ -8244,7 +8288,6 @@ fn test_mpp_keysend() {
8244
8288
}
8245
8289
8246
8290
#[test]
8247
- #[should_panic]
8248
8291
fn test_mpp_keysend_fail() {
8249
8292
do_test_mpp_keysend(false);
8250
8293
}
0 commit comments