@@ -10,7 +10,7 @@ use bitcoin::network::serialize::{serialize, BitcoinHash};
10
10
use lightning:: ln:: channel:: { Channel , ChannelKeys } ;
11
11
use lightning:: ln:: channelmanager:: { HTLCFailReason , PendingForwardHTLCInfo } ;
12
12
use lightning:: ln:: msgs;
13
- use lightning:: ln:: msgs:: MsgDecodable ;
13
+ use lightning:: ln:: msgs:: { MsgDecodable , ErrorAction } ;
14
14
use lightning:: chain:: chaininterface:: { FeeEstimator , ConfirmationTarget } ;
15
15
use lightning:: chain:: transaction:: OutPoint ;
16
16
use lightning:: util:: reset_rng_state;
@@ -239,55 +239,71 @@ pub fn do_test(data: &[u8]) {
239
239
let funding_locked = decode_msg ! ( msgs:: FundingLocked , 32 +33 ) ;
240
240
return_err ! ( channel. funding_locked( & funding_locked) ) ;
241
241
242
+ macro_rules! test_err {
243
+ ( $expr: expr) => {
244
+ match $expr {
245
+ Ok ( r) => Some ( r) ,
246
+ Err ( e) => match e. action {
247
+ None => return ,
248
+ Some ( ErrorAction :: UpdateFailHTLC { ..} ) => None ,
249
+ Some ( ErrorAction :: DisconnectPeer { ..} ) => return ,
250
+ Some ( ErrorAction :: IgnoreError ) => None ,
251
+ Some ( ErrorAction :: SendErrorMessage { ..} ) => None ,
252
+ } ,
253
+ }
254
+ }
255
+ }
256
+
242
257
loop {
243
258
match get_slice ! ( 1 ) [ 0 ] {
244
259
0 => {
245
- return_err ! ( channel. send_htlc( slice_to_be64( get_slice!( 8 ) ) , [ 42 ; 32 ] , slice_to_be32( get_slice!( 4 ) ) , msgs:: OnionPacket {
260
+ test_err ! ( channel. send_htlc( slice_to_be64( get_slice!( 8 ) ) , [ 42 ; 32 ] , slice_to_be32( get_slice!( 4 ) ) , msgs:: OnionPacket {
246
261
version: get_slice!( 1 ) [ 0 ] ,
247
262
public_key: get_pubkey!( ) ,
248
263
hop_data: [ 0 ; 20 * 65 ] ,
249
264
hmac: [ 0 ; 32 ] ,
250
265
} ) ) ;
251
266
} ,
252
267
1 => {
253
- return_err ! ( channel. send_commitment( ) ) ;
268
+ test_err ! ( channel. send_commitment( ) ) ;
254
269
} ,
255
270
2 => {
256
271
let update_add_htlc = decode_msg ! ( msgs:: UpdateAddHTLC , 32 +8 +8 +32 +4 +4 +33 +20 * 65 +32 ) ;
257
- return_err ! ( channel. update_add_htlc( & update_add_htlc, PendingForwardHTLCInfo :: dummy( ) ) ) ;
272
+ test_err ! ( channel. update_add_htlc( & update_add_htlc, PendingForwardHTLCInfo :: dummy( ) ) ) ;
258
273
} ,
259
274
3 => {
260
275
let update_fulfill_htlc = decode_msg ! ( msgs:: UpdateFulfillHTLC , 32 + 8 + 32 ) ;
261
- return_err ! ( channel. update_fulfill_htlc( & update_fulfill_htlc) ) ;
276
+ test_err ! ( channel. update_fulfill_htlc( & update_fulfill_htlc) ) ;
262
277
} ,
263
278
4 => {
264
279
let update_fail_htlc = decode_msg_with_len16 ! ( msgs:: UpdateFailHTLC , 32 + 8 , 1 ) ;
265
- return_err ! ( channel. update_fail_htlc( & update_fail_htlc, HTLCFailReason :: dummy( ) ) ) ;
280
+ test_err ! ( channel. update_fail_htlc( & update_fail_htlc, HTLCFailReason :: dummy( ) ) ) ;
266
281
} ,
267
282
5 => {
268
283
let update_fail_malformed_htlc = decode_msg ! ( msgs:: UpdateFailMalformedHTLC , 32 +8 +32 +2 ) ;
269
- return_err ! ( channel. update_fail_malformed_htlc( & update_fail_malformed_htlc, HTLCFailReason :: dummy( ) ) ) ;
284
+ test_err ! ( channel. update_fail_malformed_htlc( & update_fail_malformed_htlc, HTLCFailReason :: dummy( ) ) ) ;
270
285
} ,
271
286
6 => {
272
287
let commitment_signed = decode_msg_with_len16 ! ( msgs:: CommitmentSigned , 32 +64 , 64 ) ;
273
- return_err ! ( channel. commitment_signed( & commitment_signed) ) ;
288
+ test_err ! ( channel. commitment_signed( & commitment_signed) ) ;
274
289
} ,
275
290
7 => {
276
291
let revoke_and_ack = decode_msg ! ( msgs:: RevokeAndACK , 32 +32 +33 ) ;
277
- return_err ! ( channel. revoke_and_ack( & revoke_and_ack) ) ;
292
+ test_err ! ( channel. revoke_and_ack( & revoke_and_ack) ) ;
278
293
} ,
279
294
8 => {
280
295
let update_fee = decode_msg ! ( msgs:: UpdateFee , 32 +4 ) ;
281
- return_err ! ( channel. update_fee( & fee_est, & update_fee) ) ;
296
+ test_err ! ( channel. update_fee( & fee_est, & update_fee) ) ;
282
297
} ,
283
298
9 => {
284
299
let shutdown = decode_msg_with_len16 ! ( msgs:: Shutdown , 32 , 1 ) ;
285
- return_err ! ( channel. shutdown( & fee_est, & shutdown) ) ;
300
+ test_err ! ( channel. shutdown( & fee_est, & shutdown) ) ;
286
301
if channel. is_shutdown ( ) { return ; }
287
302
} ,
288
303
10 => {
289
304
let closing_signed = decode_msg ! ( msgs:: ClosingSigned , 32 +8 +64 ) ;
290
- if return_err ! ( channel. closing_signed( & fee_est, & closing_signed) ) . 1 . is_some ( ) {
305
+ let sign_res = test_err ! ( channel. closing_signed( & fee_est, & closing_signed) ) ;
306
+ if sign_res. is_some ( ) && sign_res. unwrap ( ) . 1 . is_some ( ) {
291
307
assert ! ( channel. is_shutdown( ) ) ;
292
308
return ;
293
309
}
0 commit comments