@@ -3892,9 +3892,8 @@ mod tests {
3892
3892
( $node: expr) => { {
3893
3893
let mut events = $node. node. get_and_clear_pending_events( ) ;
3894
3894
assert_eq!( events. len( ) , 1 ) ;
3895
- let payment_event = SendEvent :: from_event( events. remove( 0 ) ) ;
3896
- assert_eq!( payment_event. msgs. len( ) , 1 ) ;
3897
3895
check_added_monitors!( $node, 1 ) ;
3896
+ let payment_event = SendEvent :: from_event( events. remove( 0 ) ) ;
3898
3897
payment_event
3899
3898
} }
3900
3899
}
@@ -3930,7 +3929,7 @@ mod tests {
3930
3929
}
3931
3930
3932
3931
let mut htlc_id = 0 ;
3933
- // channel reserve is bigger than max_htlc_msat so loop to deplete
3932
+ // channel reserve is bigger than their_max_htlc_value_in_flight_msat so loop to deplete
3934
3933
// nodes[0]'s wealth
3935
3934
loop {
3936
3935
let amt_msat = recv_value_0 + total_fee_msat;
@@ -3970,15 +3969,15 @@ mod tests {
3970
3969
let amt_msat_1 = recv_value_1 + total_fee_msat;
3971
3970
3972
3971
let ( route_1, our_payment_hash_1, our_payment_preimage_1) = get_route_and_payment_hash ! ( recv_value_1) ;
3973
- let payment_event = {
3972
+ let payment_event_1 = {
3974
3973
nodes[ 0 ] . node . send_payment ( route_1, our_payment_hash_1) . unwrap ( ) ;
3975
3974
check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
3976
3975
3977
3976
let mut events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
3978
3977
assert_eq ! ( events. len( ) , 1 ) ;
3979
3978
SendEvent :: from_event ( events. remove ( 0 ) )
3980
3979
} ;
3981
- nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & payment_event . msgs [ 0 ] ) . unwrap ( ) ;
3980
+ nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & payment_event_1 . msgs [ 0 ] ) . unwrap ( ) ;
3982
3981
3983
3982
let recv_value_2 = stat01. value_to_self_msat - amt_msat_1 - stat01. channel_reserve_msat - total_fee_msat;
3984
3983
{
@@ -4020,19 +4019,39 @@ mod tests {
4020
4019
}
4021
4020
}
4022
4021
4022
+ let recv_value_21 = recv_value_2/2 ;
4023
+ let recv_value_22 = recv_value_2 - recv_value_21 - total_fee_msat;
4024
+ {
4025
+ let stat = get_channel_value_stat ! ( nodes[ 0 ] , chan_1. 2 ) ;
4026
+ assert_eq ! ( stat. value_to_self_msat - ( stat. pending_outbound_htlcs_amount_msat + recv_value_21 + recv_value_22 + total_fee_msat + total_fee_msat) , stat. channel_reserve_msat) ;
4027
+ }
4028
+
4023
4029
// now see if it goes through on both sides
4024
- let ( route_2, our_payment_hash_2, our_payment_preimage_2) = get_route_and_payment_hash ! ( recv_value_2) ;
4025
- // but this will stuck the in the holding cell b/c nodes[0] is in
4026
- // AwaitingRemoteRevoke state
4027
- nodes[ 0 ] . node . send_payment ( route_2, our_payment_hash_2) . unwrap ( ) ;
4030
+ let ( route_21, our_payment_hash_21, our_payment_preimage_21) = get_route_and_payment_hash ! ( recv_value_21) ;
4031
+ // but this will stuck in the holding cell
4032
+ nodes[ 0 ] . node . send_payment ( route_21, our_payment_hash_21) . unwrap ( ) ;
4028
4033
check_added_monitors ! ( nodes[ 0 ] , 0 ) ;
4029
4034
let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
4030
4035
assert_eq ! ( events. len( ) , 0 ) ;
4031
4036
4032
- check_added_monitors ! ( nodes[ 1 ] , 0 ) ;
4033
- let ( as_revoke_and_ack, as_commitment_signed) = nodes[ 1 ] . node . handle_commitment_signed ( & nodes[ 0 ] . node . get_our_node_id ( ) , & payment_event. commitment_msg ) . unwrap ( ) ;
4034
- check_added_monitors ! ( nodes[ 1 ] , 1 ) ;
4037
+ {
4038
+ let ( route, our_payment_hash, _) = get_route_and_payment_hash ! ( recv_value_22+1 ) ;
4039
+ match nodes[ 0 ] . node . send_payment ( route, our_payment_hash) . err ( ) . unwrap ( ) {
4040
+ APIError :: RouteError { err} => assert_eq ! ( err, "Cannot send value that would put us over our reserve value" ) ,
4041
+ _ => panic ! ( "Unknown error variants" ) ,
4042
+ }
4043
+ }
4044
+
4045
+ let ( route_22, our_payment_hash_22, our_payment_preimage_22) = get_route_and_payment_hash ! ( recv_value_22) ;
4046
+ // this will also stuck in the holding cell
4047
+ nodes[ 0 ] . node . send_payment ( route_22, our_payment_hash_22) . unwrap ( ) ;
4035
4048
check_added_monitors ! ( nodes[ 0 ] , 0 ) ;
4049
+ let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
4050
+ assert_eq ! ( events. len( ) , 0 ) ;
4051
+
4052
+ let ( as_revoke_and_ack, as_commitment_signed) = nodes[ 1 ] . node . handle_commitment_signed ( & nodes[ 0 ] . node . get_our_node_id ( ) , & payment_event_1. commitment_msg ) . unwrap ( ) ;
4053
+ check_added_monitors ! ( nodes[ 1 ] , 1 ) ;
4054
+
4036
4055
let commitment_update_2 = nodes[ 0 ] . node . handle_revoke_and_ack ( & nodes[ 1 ] . node . get_our_node_id ( ) , & as_revoke_and_ack) . unwrap ( ) . unwrap ( ) ;
4037
4056
check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
4038
4057
let ( bs_revoke_and_ack, bs_none) = nodes[ 0 ] . node . handle_commitment_signed ( & nodes[ 1 ] . node . get_our_node_id ( ) , & as_commitment_signed. unwrap ( ) ) . unwrap ( ) ;
@@ -4043,34 +4062,56 @@ mod tests {
4043
4062
4044
4063
expect_pending_htlcs_forwardable ! ( nodes[ 1 ] ) ;
4045
4064
4046
- let payment_event_1 = expect_forward ! ( nodes[ 1 ] ) ;
4047
- nodes[ 2 ] . node . handle_update_add_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & payment_event_1 . msgs [ 0 ] ) . unwrap ( ) ;
4048
- commitment_signed_dance ! ( nodes[ 2 ] , nodes[ 1 ] , & payment_event_1 . commitment_msg, false ) ;
4065
+ let ref payment_event_11 = expect_forward ! ( nodes[ 1 ] ) ;
4066
+ nodes[ 2 ] . node . handle_update_add_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & payment_event_11 . msgs [ 0 ] ) . unwrap ( ) ;
4067
+ commitment_signed_dance ! ( nodes[ 2 ] , nodes[ 1 ] , payment_event_11 . commitment_msg, false ) ;
4049
4068
4050
4069
expect_pending_htlcs_forwardable ! ( nodes[ 2 ] ) ;
4051
4070
expect_payment_received ! ( nodes[ 2 ] , our_payment_hash_1, recv_value_1) ;
4052
4071
4053
4072
// second payment
4054
- assert_eq ! ( commitment_update_2. update_add_htlcs. len( ) , 1 ) ;
4073
+ assert_eq ! ( commitment_update_2. update_add_htlcs. len( ) , 2 ) ;
4055
4074
nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & commitment_update_2. update_add_htlcs [ 0 ] ) . unwrap ( ) ;
4075
+ nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & commitment_update_2. update_add_htlcs [ 1 ] ) . unwrap ( ) ;
4056
4076
commitment_signed_dance ! ( nodes[ 1 ] , nodes[ 0 ] , & commitment_update_2. commitment_signed, false ) ;
4057
4077
expect_pending_htlcs_forwardable ! ( nodes[ 1 ] ) ;
4058
4078
4059
- let payment_event_2 = expect_forward ! ( nodes[ 1 ] ) ;
4060
- nodes[ 2 ] . node . handle_update_add_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & payment_event_2. msgs [ 0 ] ) . unwrap ( ) ;
4079
+ let ref payment_event_3 = expect_forward ! ( nodes[ 1 ] ) ;
4080
+ assert_eq ! ( payment_event_3. msgs. len( ) , 2 ) ;
4081
+ nodes[ 2 ] . node . handle_update_add_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & payment_event_3. msgs [ 0 ] ) . unwrap ( ) ;
4082
+ nodes[ 2 ] . node . handle_update_add_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & payment_event_3. msgs [ 1 ] ) . unwrap ( ) ;
4061
4083
4062
- commitment_signed_dance ! ( nodes[ 2 ] , nodes[ 1 ] , & payment_event_2 . commitment_msg, false ) ;
4084
+ commitment_signed_dance ! ( nodes[ 2 ] , nodes[ 1 ] , & payment_event_3 . commitment_msg, false ) ;
4063
4085
expect_pending_htlcs_forwardable ! ( nodes[ 2 ] ) ;
4064
4086
4065
- expect_payment_received ! ( nodes[ 2 ] , our_payment_hash_2, recv_value_2) ;
4087
+ let events = nodes[ 2 ] . node . get_and_clear_pending_events ( ) ;
4088
+ assert_eq ! ( events. len( ) , 2 ) ;
4089
+ match events[ 0 ] {
4090
+ Event :: PaymentReceived { ref payment_hash, amt } => {
4091
+ assert_eq ! ( our_payment_hash_21, * payment_hash) ;
4092
+ assert_eq ! ( recv_value_21, amt) ;
4093
+ } ,
4094
+ _ => panic ! ( "Unexpected event" ) ,
4095
+ }
4096
+ match events[ 1 ] {
4097
+ Event :: PaymentReceived { ref payment_hash, amt } => {
4098
+ assert_eq ! ( our_payment_hash_22, * payment_hash) ;
4099
+ assert_eq ! ( recv_value_22, amt) ;
4100
+ } ,
4101
+ _ => panic ! ( "Unexpected event" ) ,
4102
+ }
4066
4103
4067
4104
claim_payment ( & nodes[ 0 ] , & vec ! ( & nodes[ 1 ] , & nodes[ 2 ] ) , our_payment_preimage_1) ;
4068
- claim_payment ( & nodes[ 0 ] , & vec ! ( & nodes[ 1 ] , & nodes[ 2 ] ) , our_payment_preimage_2) ;
4105
+ claim_payment ( & nodes[ 0 ] , & vec ! ( & nodes[ 1 ] , & nodes[ 2 ] ) , our_payment_preimage_21) ;
4106
+ claim_payment ( & nodes[ 0 ] , & vec ! ( & nodes[ 1 ] , & nodes[ 2 ] ) , our_payment_preimage_22) ;
4107
+
4108
+ let expected_value_to_self = stat01. value_to_self_msat - ( recv_value_1 + total_fee_msat) - ( recv_value_21 + total_fee_msat) - ( recv_value_22 + total_fee_msat) ;
4109
+ let stat0 = get_channel_value_stat ! ( nodes[ 0 ] , chan_1. 2 ) ;
4110
+ assert_eq ! ( stat0. value_to_self_msat, expected_value_to_self) ;
4111
+ assert_eq ! ( stat0. value_to_self_msat, stat0. channel_reserve_msat) ;
4069
4112
4070
- let expected_value_to_self = stat01. value_to_self_msat - ( recv_value_1 + total_fee_msat) - ( recv_value_2 + total_fee_msat) ;
4071
- let stat = get_channel_value_stat ! ( nodes[ 0 ] , chan_1. 2 ) ;
4072
- assert_eq ! ( stat. value_to_self_msat, expected_value_to_self) ;
4073
- assert_eq ! ( stat. value_to_self_msat, stat. channel_reserve_msat) ;
4113
+ let stat2 = get_channel_value_stat ! ( nodes[ 2 ] , chan_2. 2 ) ;
4114
+ assert_eq ! ( stat2. value_to_self_msat, stat22. value_to_self_msat + recv_value_1 + recv_value_21 + recv_value_22) ;
4074
4115
}
4075
4116
4076
4117
#[ test]
0 commit comments