@@ -18,7 +18,7 @@ use chain::channelmonitor::MonitorEvent;
18
18
use chain:: transaction:: OutPoint ;
19
19
use chain:: keysinterface;
20
20
use ln:: features:: { ChannelFeatures , InitFeatures } ;
21
- use ln:: msgs;
21
+ use ln:: { msgs, wire } ;
22
22
use ln:: msgs:: OptionalField ;
23
23
use ln:: script:: ShutdownScript ;
24
24
use routing:: scoring:: FixedPenaltyScorer ;
@@ -249,37 +249,100 @@ impl chaininterface::BroadcasterInterface for TestBroadcaster {
249
249
250
250
pub struct TestChannelMessageHandler {
251
251
pub pending_events : Mutex < Vec < events:: MessageSendEvent > > ,
252
+ expected_recv_msgs : Mutex < Option < Vec < wire:: Message < ( ) > > > > ,
252
253
}
253
254
254
255
impl TestChannelMessageHandler {
255
256
pub fn new ( ) -> Self {
256
257
TestChannelMessageHandler {
257
258
pending_events : Mutex :: new ( Vec :: new ( ) ) ,
259
+ expected_recv_msgs : Mutex :: new ( None ) ,
258
260
}
259
261
}
262
+
263
+ #[ cfg( test) ]
264
+ pub ( crate ) fn expect_receive_msg ( & self , ev : wire:: Message < ( ) > ) {
265
+ let mut expected_msgs = self . expected_recv_msgs . lock ( ) . unwrap ( ) ;
266
+ if expected_msgs. is_none ( ) { * expected_msgs = Some ( Vec :: new ( ) ) ; }
267
+ expected_msgs. as_mut ( ) . unwrap ( ) . push ( ev) ;
268
+ }
269
+
270
+ fn received_msg ( & self , ev : wire:: Message < ( ) > ) {
271
+ let mut msgs = self . expected_recv_msgs . lock ( ) . unwrap ( ) ;
272
+ if msgs. is_none ( ) { return ; }
273
+ #[ cfg( test) ]
274
+ assert_eq ! ( msgs. as_ref( ) . unwrap( ) [ 0 ] , ev) ;
275
+ msgs. as_mut ( ) . unwrap ( ) . remove ( 0 ) ;
276
+ }
277
+ }
278
+
279
+ impl Drop for TestChannelMessageHandler {
280
+ fn drop ( & mut self ) {
281
+ let l = self . expected_recv_msgs . lock ( ) . unwrap ( ) ;
282
+ assert ! ( l. is_none( ) || l. as_ref( ) . unwrap( ) . is_empty( ) ) ;
283
+ }
260
284
}
261
285
262
286
impl msgs:: ChannelMessageHandler for TestChannelMessageHandler {
263
- fn handle_open_channel ( & self , _their_node_id : & PublicKey , _their_features : InitFeatures , _msg : & msgs:: OpenChannel ) { }
264
- fn handle_accept_channel ( & self , _their_node_id : & PublicKey , _their_features : InitFeatures , _msg : & msgs:: AcceptChannel ) { }
265
- fn handle_funding_created ( & self , _their_node_id : & PublicKey , _msg : & msgs:: FundingCreated ) { }
266
- fn handle_funding_signed ( & self , _their_node_id : & PublicKey , _msg : & msgs:: FundingSigned ) { }
267
- fn handle_funding_locked ( & self , _their_node_id : & PublicKey , _msg : & msgs:: FundingLocked ) { }
268
- fn handle_shutdown ( & self , _their_node_id : & PublicKey , _their_features : & InitFeatures , _msg : & msgs:: Shutdown ) { }
269
- fn handle_closing_signed ( & self , _their_node_id : & PublicKey , _msg : & msgs:: ClosingSigned ) { }
270
- fn handle_update_add_htlc ( & self , _their_node_id : & PublicKey , _msg : & msgs:: UpdateAddHTLC ) { }
271
- fn handle_update_fulfill_htlc ( & self , _their_node_id : & PublicKey , _msg : & msgs:: UpdateFulfillHTLC ) { }
272
- fn handle_update_fail_htlc ( & self , _their_node_id : & PublicKey , _msg : & msgs:: UpdateFailHTLC ) { }
273
- fn handle_update_fail_malformed_htlc ( & self , _their_node_id : & PublicKey , _msg : & msgs:: UpdateFailMalformedHTLC ) { }
274
- fn handle_commitment_signed ( & self , _their_node_id : & PublicKey , _msg : & msgs:: CommitmentSigned ) { }
275
- fn handle_revoke_and_ack ( & self , _their_node_id : & PublicKey , _msg : & msgs:: RevokeAndACK ) { }
276
- fn handle_update_fee ( & self , _their_node_id : & PublicKey , _msg : & msgs:: UpdateFee ) { }
277
- fn handle_channel_update ( & self , _their_node_id : & PublicKey , _msg : & msgs:: ChannelUpdate ) { }
278
- fn handle_announcement_signatures ( & self , _their_node_id : & PublicKey , _msg : & msgs:: AnnouncementSignatures ) { }
279
- fn handle_channel_reestablish ( & self , _their_node_id : & PublicKey , _msg : & msgs:: ChannelReestablish ) { }
287
+ fn handle_open_channel ( & self , _their_node_id : & PublicKey , _their_features : InitFeatures , msg : & msgs:: OpenChannel ) {
288
+ self . received_msg ( wire:: Message :: OpenChannel ( msg. clone ( ) ) ) ;
289
+ }
290
+ fn handle_accept_channel ( & self , _their_node_id : & PublicKey , _their_features : InitFeatures , msg : & msgs:: AcceptChannel ) {
291
+ self . received_msg ( wire:: Message :: AcceptChannel ( msg. clone ( ) ) ) ;
292
+ }
293
+ fn handle_funding_created ( & self , _their_node_id : & PublicKey , msg : & msgs:: FundingCreated ) {
294
+ self . received_msg ( wire:: Message :: FundingCreated ( msg. clone ( ) ) ) ;
295
+ }
296
+ fn handle_funding_signed ( & self , _their_node_id : & PublicKey , msg : & msgs:: FundingSigned ) {
297
+ self . received_msg ( wire:: Message :: FundingSigned ( msg. clone ( ) ) ) ;
298
+ }
299
+ fn handle_funding_locked ( & self , _their_node_id : & PublicKey , msg : & msgs:: FundingLocked ) {
300
+ self . received_msg ( wire:: Message :: FundingLocked ( msg. clone ( ) ) ) ;
301
+ }
302
+ fn handle_shutdown ( & self , _their_node_id : & PublicKey , _their_features : & InitFeatures , msg : & msgs:: Shutdown ) {
303
+ self . received_msg ( wire:: Message :: Shutdown ( msg. clone ( ) ) ) ;
304
+ }
305
+ fn handle_closing_signed ( & self , _their_node_id : & PublicKey , msg : & msgs:: ClosingSigned ) {
306
+ self . received_msg ( wire:: Message :: ClosingSigned ( msg. clone ( ) ) ) ;
307
+ }
308
+ fn handle_update_add_htlc ( & self , _their_node_id : & PublicKey , msg : & msgs:: UpdateAddHTLC ) {
309
+ self . received_msg ( wire:: Message :: UpdateAddHTLC ( msg. clone ( ) ) ) ;
310
+ }
311
+ fn handle_update_fulfill_htlc ( & self , _their_node_id : & PublicKey , msg : & msgs:: UpdateFulfillHTLC ) {
312
+ self . received_msg ( wire:: Message :: UpdateFulfillHTLC ( msg. clone ( ) ) ) ;
313
+ }
314
+ fn handle_update_fail_htlc ( & self , _their_node_id : & PublicKey , msg : & msgs:: UpdateFailHTLC ) {
315
+ self . received_msg ( wire:: Message :: UpdateFailHTLC ( msg. clone ( ) ) ) ;
316
+ }
317
+ fn handle_update_fail_malformed_htlc ( & self , _their_node_id : & PublicKey , msg : & msgs:: UpdateFailMalformedHTLC ) {
318
+ self . received_msg ( wire:: Message :: UpdateFailMalformedHTLC ( msg. clone ( ) ) ) ;
319
+ }
320
+ fn handle_commitment_signed ( & self , _their_node_id : & PublicKey , msg : & msgs:: CommitmentSigned ) {
321
+ self . received_msg ( wire:: Message :: CommitmentSigned ( msg. clone ( ) ) ) ;
322
+ }
323
+ fn handle_revoke_and_ack ( & self , _their_node_id : & PublicKey , msg : & msgs:: RevokeAndACK ) {
324
+ self . received_msg ( wire:: Message :: RevokeAndACK ( msg. clone ( ) ) ) ;
325
+ }
326
+ fn handle_update_fee ( & self , _their_node_id : & PublicKey , msg : & msgs:: UpdateFee ) {
327
+ self . received_msg ( wire:: Message :: UpdateFee ( msg. clone ( ) ) ) ;
328
+ }
329
+ fn handle_channel_update ( & self , _their_node_id : & PublicKey , _msg : & msgs:: ChannelUpdate ) {
330
+ // Don't call `received_msg` here as `TestRoutingMessageHandler` generates these sometimes
331
+ }
332
+ fn handle_announcement_signatures ( & self , _their_node_id : & PublicKey , msg : & msgs:: AnnouncementSignatures ) {
333
+ self . received_msg ( wire:: Message :: AnnouncementSignatures ( msg. clone ( ) ) ) ;
334
+ }
335
+ fn handle_channel_reestablish ( & self , _their_node_id : & PublicKey , msg : & msgs:: ChannelReestablish ) {
336
+ self . received_msg ( wire:: Message :: ChannelReestablish ( msg. clone ( ) ) ) ;
337
+ }
280
338
fn peer_disconnected ( & self , _their_node_id : & PublicKey , _no_connection_possible : bool ) { }
281
- fn peer_connected ( & self , _their_node_id : & PublicKey , _msg : & msgs:: Init ) { }
282
- fn handle_error ( & self , _their_node_id : & PublicKey , _msg : & msgs:: ErrorMessage ) { }
339
+ fn peer_connected ( & self , _their_node_id : & PublicKey , _msg : & msgs:: Init ) {
340
+ // Don't bother with `received_msg` for Init as its auto-generated and we don't want to
341
+ // bother re-generating the expected Init message in all tests.
342
+ }
343
+ fn handle_error ( & self , _their_node_id : & PublicKey , msg : & msgs:: ErrorMessage ) {
344
+ self . received_msg ( wire:: Message :: Error ( msg. clone ( ) ) ) ;
345
+ }
283
346
}
284
347
285
348
impl events:: MessageSendEventsProvider for TestChannelMessageHandler {
0 commit comments