@@ -3118,6 +3118,126 @@ mod tests {
3118
3118
check_added_monitors_and_clear ! ( nodes[ 1 ] ) ;
3119
3119
}
3120
3120
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
+
3121
3241
#[ test]
3122
3242
fn test_update_fee ( ) {
3123
3243
let nodes = create_network ( 2 ) ;
0 commit comments