@@ -22,6 +22,53 @@ use crate::ln::msgs::ChannelMessageHandler;
22
22
use crate :: ln:: channelmanager:: { PaymentId , RecipientOnionFields } ;
23
23
use crate :: util:: test_channel_signer:: SignerOp ;
24
24
25
+ #[ test]
26
+ fn test_open_channel ( ) {
27
+ // Simulate acquiring the signature for `funding_created` asynchronously.
28
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
29
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
30
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
31
+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
32
+
33
+ // Open an outbound channel simulating an async signer.
34
+ let channel_value_satoshis = 100000 ;
35
+ let user_channel_id = 42 ;
36
+ nodes[ 0 ] . disable_next_channel_signer_op ( SignerOp :: GetPerCommitmentPoint ) ;
37
+ let channel_id_0 = nodes[ 0 ] . node . create_channel ( nodes[ 1 ] . node . get_our_node_id ( ) , channel_value_satoshis, 10001 , user_channel_id, None , None ) . unwrap ( ) ;
38
+
39
+ {
40
+ let msgs = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
41
+ assert ! ( msgs. is_empty( ) , "Expected no message events; got {:?}" , msgs) ;
42
+ }
43
+
44
+ nodes[ 0 ] . enable_channel_signer_op ( & nodes[ 1 ] . node . get_our_node_id ( ) , & channel_id_0, SignerOp :: GetPerCommitmentPoint ) ;
45
+ nodes[ 0 ] . node . signer_unblocked ( None ) ;
46
+
47
+ // nodes[0] --- open_channel --> nodes[1]
48
+ let mut open_chan_msg = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendOpenChannel , nodes[ 1 ] . node. get_our_node_id( ) ) ;
49
+
50
+ // Handle an inbound channel simulating an async signer.
51
+ nodes[ 1 ] . disable_next_channel_signer_op ( SignerOp :: GetPerCommitmentPoint ) ;
52
+ nodes[ 1 ] . node . handle_open_channel ( & nodes[ 0 ] . node . get_our_node_id ( ) , & open_chan_msg) ;
53
+
54
+ {
55
+ let msgs = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
56
+ assert ! ( msgs. is_empty( ) , "Expected no message events; got {:?}" , msgs) ;
57
+ }
58
+
59
+ let channel_id_1 = {
60
+ let channels = nodes[ 1 ] . node . list_channels ( ) ;
61
+ assert_eq ! ( channels. len( ) , 1 , "expected one channel, not {}" , channels. len( ) ) ;
62
+ channels[ 0 ] . channel_id
63
+ } ;
64
+
65
+ nodes[ 1 ] . enable_channel_signer_op ( & nodes[ 0 ] . node . get_our_node_id ( ) , & channel_id_1, SignerOp :: GetPerCommitmentPoint ) ;
66
+ nodes[ 1 ] . node . signer_unblocked ( None ) ;
67
+
68
+ // nodes[0] <-- accept_channel --- nodes[1]
69
+ get_event_msg ! ( nodes[ 1 ] , MessageSendEvent :: SendAcceptChannel , nodes[ 0 ] . node. get_our_node_id( ) ) ;
70
+ }
71
+
25
72
#[ test]
26
73
fn test_async_commitment_signature_for_funding_created ( ) {
27
74
// Simulate acquiring the signature for `funding_created` asynchronously.
0 commit comments