Skip to content

Commit 9dfb15d

Browse files
committed
add another test for update_fee
fundee update_add_htlc before the first revoke for update_fee being completed
1 parent 7ec9f4d commit 9dfb15d

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed

src/ln/channelmanager.rs

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3118,6 +3118,126 @@ mod tests {
31183118
check_added_monitors_and_clear!(nodes[1]);
31193119
}
31203120

3121+
#[test]
3122+
fn test_update_fee_with_fundee_update_add_htlc() {
3123+
let mut nodes = create_network(2);
3124+
let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
3125+
let channel_id = chan.2;
3126+
3127+
macro_rules! check_added_monitors_and_clear {
3128+
($node: expr) => {{
3129+
let mut added_monitors = $node.chan_monitor.added_monitors.lock().unwrap();
3130+
assert_eq!(added_monitors.len(), 1);
3131+
added_monitors.clear();
3132+
}}
3133+
}
3134+
3135+
macro_rules! get_feerate {
3136+
($node: expr) => {{
3137+
let chan_lock = $node.node.channel_state.lock().unwrap();
3138+
let chan = chan_lock.by_id.get(&channel_id).unwrap();
3139+
chan.get_feerate()
3140+
}}
3141+
}
3142+
3143+
// balancing
3144+
send_payment(&nodes[0], &vec!(&nodes[1])[..], 8000000);
3145+
3146+
let feerate = get_feerate!(nodes[0]);
3147+
nodes[0].node.update_fee(channel_id, feerate+20).unwrap();
3148+
3149+
let events_0 = nodes[0].node.get_and_clear_pending_events();
3150+
assert_eq!(events_0.len(), 1);
3151+
let (update_msg, commitment_signed) = match events_0[0] {
3152+
Event::UpdateHTLCs { node_id:_, updates: msgs::CommitmentUpdate { update_add_htlcs:_, update_fulfill_htlcs:_, update_fail_htlcs:_, update_fail_malformed_htlcs:_, ref update_fee, ref commitment_signed } } => {
3153+
(update_fee.as_ref(), commitment_signed)
3154+
},
3155+
_ => panic!("Unexpected event"),
3156+
};
3157+
nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), update_msg.unwrap()).unwrap();
3158+
check_added_monitors_and_clear!(nodes[0]);
3159+
let (revoke_msg, commitment_signed) = nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), commitment_signed).unwrap();
3160+
let commitment_signed = commitment_signed.unwrap();
3161+
check_added_monitors_and_clear!(nodes[1]);
3162+
3163+
let route = nodes[1].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 800000, TEST_FINAL_CLTV).unwrap();
3164+
let our_payment_preimage = [*nodes[1].network_payment_count.borrow(); 32];
3165+
*nodes[1].network_payment_count.borrow_mut() += 1;
3166+
let our_payment_hash = {
3167+
let mut sha = Sha256::new();
3168+
sha.input(&our_payment_preimage[..]);
3169+
let mut ret = [0; 32];
3170+
sha.result(&mut ret);
3171+
ret
3172+
};
3173+
3174+
// nothing happens since node[1] is in AwaitingRemoteRevoke
3175+
nodes[1].node.send_payment(route, our_payment_hash).unwrap();
3176+
{
3177+
let mut added_monitors = nodes[0].chan_monitor.added_monitors.lock().unwrap();
3178+
assert_eq!(added_monitors.len(), 0);
3179+
added_monitors.clear();
3180+
}
3181+
let events = nodes[0].node.get_and_clear_pending_events();
3182+
assert_eq!(events.len(), 0);
3183+
// node[1] has nothing to do
3184+
3185+
let resp_option = nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &revoke_msg).unwrap();
3186+
assert!(resp_option.is_none());
3187+
check_added_monitors_and_clear!(nodes[0]);
3188+
3189+
let (revoke_msg, commitment_signed) = nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &commitment_signed).unwrap();
3190+
assert!(commitment_signed.is_none());
3191+
check_added_monitors_and_clear!(nodes[0]);
3192+
let resp_option = nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &revoke_msg).unwrap();
3193+
// AwaitingRemoteRevoke ends here
3194+
3195+
let commitment_update = resp_option.unwrap();
3196+
assert_eq!(commitment_update.update_add_htlcs.len(), 1);
3197+
assert_eq!(commitment_update.update_fulfill_htlcs.len(), 0);
3198+
assert_eq!(commitment_update.update_fail_htlcs.len(), 0);
3199+
assert_eq!(commitment_update.update_fail_malformed_htlcs.len(), 0);
3200+
assert_eq!(commitment_update.update_fee.is_none(), true);
3201+
3202+
nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &commitment_update.update_add_htlcs[0]).unwrap();
3203+
let (revoke, commitment_signed) = nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &commitment_update.commitment_signed).unwrap();
3204+
check_added_monitors_and_clear!(nodes[0]);
3205+
check_added_monitors_and_clear!(nodes[1]);
3206+
let commitment_signed = commitment_signed.unwrap();
3207+
let resp_option = nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &revoke).unwrap();
3208+
check_added_monitors_and_clear!(nodes[1]);
3209+
assert!(resp_option.is_none());
3210+
3211+
let (revoke, commitment_signed) = nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &commitment_signed).unwrap();
3212+
check_added_monitors_and_clear!(nodes[1]);
3213+
assert!(commitment_signed.is_none());
3214+
let resp_option = nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &revoke).unwrap();
3215+
check_added_monitors_and_clear!(nodes[0]);
3216+
assert!(resp_option.is_none());
3217+
3218+
let events = nodes[0].node.get_and_clear_pending_events();
3219+
assert_eq!(events.len(), 1);
3220+
match events[0] {
3221+
Event::PendingHTLCsForwardable { .. } => { },
3222+
_ => panic!("Unexpected event"),
3223+
};
3224+
nodes[0].node.channel_state.lock().unwrap().next_forward = Instant::now();
3225+
nodes[0].node.process_pending_htlc_forwards();
3226+
3227+
let events = nodes[0].node.get_and_clear_pending_events();
3228+
assert_eq!(events.len(), 1);
3229+
match events[0] {
3230+
Event::PaymentReceived { .. } => { },
3231+
_ => panic!("Unexpected event"),
3232+
};
3233+
3234+
claim_payment(&nodes[1], &vec!(&nodes[0])[..], our_payment_preimage);
3235+
3236+
send_payment(&nodes[1], &vec!(&nodes[0])[..], 800000);
3237+
send_payment(&nodes[0], &vec!(&nodes[1])[..], 800000);
3238+
close_channel(&nodes[0], &nodes[1], &chan.2, chan.3, true);
3239+
}
3240+
31213241
#[test]
31223242
fn test_update_fee() {
31233243
let nodes = create_network(2);

0 commit comments

Comments
 (0)