@@ -7187,29 +7187,23 @@ fn test_channel_failed_after_message_with_badonion_node_perm_bits_set() {
7187
7187
let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
7188
7188
let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
7189
7189
let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
7190
- create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 1000000,
7191
- InitFeatures::known(), InitFeatures::known());
7192
- let chan_2 = create_announced_chan_between_nodes_with_value(&nodes, 1, 2, 1000000, 1000000,
7193
- InitFeatures::known(), InitFeatures::known());
7190
+ create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
7191
+ let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
7194
7192
7195
- let (route, our_payment_hash, _, our_payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[2], 100000 );
7193
+ let (route, our_payment_hash, _, our_payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[2], 100_000 );
7196
7194
7197
7195
// First hop
7198
7196
let mut payment_event = {
7199
7197
nodes[0].node.send_payment(&route, our_payment_hash, &Some(our_payment_secret)).unwrap();
7200
7198
check_added_monitors!(nodes[0], 1);
7201
- let mut events = nodes[0].node.get_and_clear_pending_msg_events();
7202
- assert_eq!(events.len(), 1);
7203
- SendEvent::from_event(events.remove(0))
7199
+ SendEvent::from_node(&nodes[0])
7204
7200
};
7201
+
7205
7202
nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
7206
- check_added_monitors!(nodes[1], 0);
7207
7203
commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false);
7208
7204
expect_pending_htlcs_forwardable!(nodes[1]);
7209
- let mut events_2 = nodes[1].node.get_and_clear_pending_msg_events();
7210
- assert_eq!(events_2.len(), 1);
7211
7205
check_added_monitors!(nodes[1], 1);
7212
- payment_event = SendEvent::from_event(events_2.remove(0) );
7206
+ payment_event = SendEvent::from_node(&nodes[1] );
7213
7207
assert_eq!(payment_event.msgs.len(), 1);
7214
7208
7215
7209
// Second Hop
@@ -7220,54 +7214,45 @@ fn test_channel_failed_after_message_with_badonion_node_perm_bits_set() {
7220
7214
7221
7215
let events_3 = nodes[2].node.get_and_clear_pending_msg_events();
7222
7216
assert_eq!(events_3.len(), 1);
7223
- let update_msg : (msgs::UpdateFailMalformedHTLC, msgs::CommitmentSigned) = {
7224
- match events_3[0] {
7225
- MessageSendEvent::UpdateHTLCs { node_id: _ , updates: msgs::CommitmentUpdate {
7226
- ref update_fail_malformed_htlcs, ref commitment_signed, .. } } => {
7227
- let mut update_msg = update_fail_malformed_htlcs[0].clone();
7228
- // Set the NODE bit (BADONION and PERM already set in invalid_onion_version error)
7229
- update_msg.failure_code = update_msg.failure_code|0x2000;
7230
- (update_msg, commitment_signed.clone())
7231
- },
7232
- _ => panic!("Unexpected event"),
7233
- }
7234
- };
7235
-
7236
- nodes[1].node.handle_update_fail_malformed_htlc(&nodes[2].node.get_our_node_id(), &update_msg.0);
7217
+ match events_3[0] {
7218
+ MessageSendEvent::UpdateHTLCs { updates, .. } => {
7219
+ let mut update_msg = updates.update_fail_malformed_htlcs[0].clone();
7220
+ // Set the NODE bit (BADONION and PERM already set in invalid_onion_version error)
7221
+ update_msg.failure_code |= 0x2000;
7222
+
7223
+ nodes[1].node.handle_update_fail_malformed_htlc(&nodes[2].node.get_our_node_id(), &update_msg);
7224
+ commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false, true);
7225
+ },
7226
+ _ => panic!("Unexpected event"),
7227
+ }
7237
7228
7238
- check_added_monitors!(nodes[1], 0);
7239
- commitment_signed_dance!(nodes[1], nodes[2], update_msg.1, false, true);
7240
7229
expect_pending_htlcs_forwardable_and_htlc_handling_failed!(nodes[1],
7241
7230
vec![HTLCDestination::NextHopChannel {
7242
7231
node_id: Some(nodes[2].node.get_our_node_id()), channel_id: chan_2.2 }]);
7243
7232
let events_4 = nodes[1].node.get_and_clear_pending_msg_events();
7244
7233
assert_eq!(events_4.len(), 1);
7245
7234
check_added_monitors!(nodes[1], 1);
7246
7235
7247
- let update_msg: (msgs::UpdateFailHTLC, msgs::CommitmentSigned) = {
7248
- match events_4[0] {
7249
- MessageSendEvent::UpdateHTLCs { node_id: _ , updates: msgs::CommitmentUpdate {
7250
- ref update_fail_htlcs, ref commitment_signed, .. } } => {
7251
- (update_fail_htlcs[0].clone(), commitment_signed.clone())
7252
- },
7253
- _ => panic!("Unexpected event"),
7254
- }
7255
- };
7256
-
7257
- nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &update_msg.0);
7236
+ match events_4[0] {
7237
+ MessageSendEvent::UpdateHTLCs { updates, .. } => {
7238
+ nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fail_htlcs[0]);
7239
+ commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false, true);
7240
+ },
7241
+ _ => panic!("Unexpected event"),
7242
+ }
7258
7243
7259
- check_added_monitors!(nodes[0], 0);
7260
- commitment_signed_dance!(nodes[0], nodes[1], update_msg.1, false, true);
7261
7244
let events_5 = nodes[0].node.get_and_clear_pending_events();
7262
7245
assert_eq!(events_5.len(), 1);
7263
7246
7264
7247
// Expect a PaymentPathFailed event with a ChannelFailure network update for the channel between
7265
7248
// the node originating the error to its next hop.
7266
7249
match events_5[0] {
7267
- Event::PaymentPathFailed { network_update: Some(NetworkUpdate::ChannelFailure {
7268
- short_channel_id, is_permanent }), .. } => {
7250
+ Event::PaymentPathFailed { network_update:
7251
+ Some(NetworkUpdate::ChannelFailure { short_channel_id, is_permanent }), error_code, ..
7252
+ } => {
7269
7253
assert_eq!(short_channel_id, chan_2.0.contents.short_channel_id);
7270
7254
assert!(is_permanent);
7255
+ assert_eq!(error_code, Some(0x8000|0x4000|0x2000|4));
7271
7256
},
7272
7257
_ => panic!("Unexpected event"),
7273
7258
}
0 commit comments