55import os
66import re
77import requests
8+ import socket
89
910from ldk_node import *
1011
@@ -118,8 +119,68 @@ def expect_event(node, expected_event_type):
118119 assert isinstance (event , expected_event_type )
119120 print ("EVENT:" , event )
120121 node .event_handled ()
121- return event
122-
122+ return event
123+
124+ def find_two_free_ports ():
125+ with socket .socket () as s1 , socket .socket () as s2 :
126+ s1 .bind (("127.0.0.1" , 0 ))
127+ s2 .bind (("127.0.0.1" ,0 ))
128+ port_1 = s1 .getsockname ()[1 ]
129+ port_2 = s2 .getsockname ()[1 ]
130+ return port_1 , port_2
131+
132+ def setup_two_nodes (esplora_endpoint ):
133+ port_1 , port_2 = find_two_free_ports ()
134+ tmp_dir_1 = tempfile .TemporaryDirectory ("_ldk_node_1" )
135+ listening_addresses_1 = [f"127.0.0.1:{ port_1 } " ]
136+ node_1 = setup_node (tmp_dir_1 .name , esplora_endpoint , listening_addresses_1 )
137+ node_1 .start ()
138+ node_id_1 = node_1 .node_id ()
139+
140+ tmp_dir_2 = tempfile .TemporaryDirectory ("_ldk_node_2" )
141+ listening_addresses_2 = [f"127.0.0.1:{ port_2 } " ]
142+ node_2 = setup_node (tmp_dir_2 .name , esplora_endpoint , listening_addresses_2 )
143+ node_2 .start ()
144+ node_id_2 = node_2 .node_id ()
145+
146+ return node_1 , node_2 , tmp_dir_1 , tmp_dir_2 , node_id_1 , node_id_2 , listening_addresses_2
147+
148+ def fund_nodes (node_1 , node_2 , esplora_endpoint , amount_sats = 100000 ):
149+ address_1 = node_1 .onchain_payment ().new_address ()
150+ txid_1 = send_to_address (address_1 , amount_sats )
151+ address_2 = node_2 .onchain_payment ().new_address ()
152+ txid_2 = send_to_address (address_2 , amount_sats )
153+
154+ wait_for_tx (esplora_endpoint , txid_1 )
155+ wait_for_tx (esplora_endpoint , txid_2 )
156+ mine_and_wait (esplora_endpoint , 6 )
157+
158+ node_1 .sync_wallets ()
159+ node_2 .sync_wallets ()
160+
161+ def open_channel_and_wait_ready (node_1 , node_2 , node_id_2 , listening_address_2 , esplora_endpoint , channel_amount_sats = 50000 ):
162+ node_1 .open_channel (node_id_2 , listening_address_2 , channel_amount_sats , None , None )
163+
164+ channel_pending_event_1 = expect_event (node_1 , Event .CHANNEL_PENDING )
165+ expect_event (node_2 , Event .CHANNEL_PENDING )
166+
167+ funding_txid = channel_pending_event_1 .funding_txo .txid
168+ wait_for_tx (esplora_endpoint , funding_txid )
169+ mine_and_wait (esplora_endpoint , 6 )
170+
171+ node_1 .sync_wallets ()
172+ node_2 .sync_wallets ()
173+
174+ channel_ready_event_1 = expect_event (node_1 , Event .CHANNEL_READY )
175+ channel_ready_event_2 = expect_event (node_2 , Event .CHANNEL_READY )
176+ return channel_ready_event_1 , channel_ready_event_2 , funding_txid
177+
178+ def stop_and_cleanup (node_1 , node_2 , tmp_dir_1 , tmp_dir_2 ):
179+ node_1 .stop ()
180+ node_2 .stop ()
181+ time .sleep (1 )
182+ tmp_dir_1 .cleanup ()
183+ tmp_dir_2 .cleanup ()
123184
124185
125186class TestLdkNode (unittest .TestCase ):
@@ -133,38 +194,13 @@ def setUp(self):
133194 def test_channel_full_cycle (self ):
134195 esplora_endpoint = get_esplora_endpoint ()
135196
136- ## Setup Node 1
137- tmp_dir_1 = tempfile .TemporaryDirectory ("_ldk_node_1" )
138- print ("TMP DIR 1:" , tmp_dir_1 .name )
139-
140- listening_addresses_1 = ["127.0.0.1:2323" ]
141- node_1 = setup_node (tmp_dir_1 .name , esplora_endpoint , listening_addresses_1 )
142- node_1 .start ()
143- node_id_1 = node_1 .node_id ()
197+ ## Setup two nodes
198+ node_1 , node_2 , tmp_dir_1 , tmp_dir_2 , node_id_1 , node_id_2 , listening_addresses_2 = setup_two_nodes (esplora_endpoint )
144199 print ("Node ID 1:" , node_id_1 )
145-
146- # Setup Node 2
147- tmp_dir_2 = tempfile .TemporaryDirectory ("_ldk_node_2" )
148- print ("TMP DIR 2:" , tmp_dir_2 .name )
149-
150- listening_addresses_2 = ["127.0.0.1:2324" ]
151- node_2 = setup_node (tmp_dir_2 .name , esplora_endpoint , listening_addresses_2 )
152- node_2 .start ()
153- node_id_2 = node_2 .node_id ()
154200 print ("Node ID 2:" , node_id_2 )
155201
156- address_1 = node_1 .onchain_payment ().new_address ()
157- txid_1 = send_to_address (address_1 , 100000 )
158- address_2 = node_2 .onchain_payment ().new_address ()
159- txid_2 = send_to_address (address_2 , 100000 )
202+ fund_nodes (node_1 , node_2 , esplora_endpoint )
160203
161- wait_for_tx (esplora_endpoint , txid_1 )
162- wait_for_tx (esplora_endpoint , txid_2 )
163-
164- mine_and_wait (esplora_endpoint , 6 )
165-
166- node_1 .sync_wallets ()
167- node_2 .sync_wallets ()
168204
169205 spendable_balance_1 = node_1 .list_balances ().spendable_onchain_balance_sats
170206 spendable_balance_2 = node_2 .list_balances ().spendable_onchain_balance_sats
@@ -183,22 +219,9 @@ def test_channel_full_cycle(self):
183219 print ("TOTAL 2:" , total_balance_2 )
184220 self .assertEqual (total_balance_2 , 100000 )
185221
186- node_1 .open_channel (node_id_2 , listening_addresses_2 [0 ], 50000 , None , None )
187-
188-
189- channel_pending_event_1 = expect_event (node_1 , Event .CHANNEL_PENDING )
190- channel_pending_event_2 = expect_event (node_2 , Event .CHANNEL_PENDING )
191- funding_txid = channel_pending_event_1 .funding_txo .txid
192- wait_for_tx (esplora_endpoint , funding_txid )
193- mine_and_wait (esplora_endpoint , 6 )
194-
195- node_1 .sync_wallets ()
196- node_2 .sync_wallets ()
197-
198- channel_ready_event_1 = expect_event (node_1 , Event .CHANNEL_READY )
222+ channel_ready_event_1 , channel_ready_event_2 , funding_txid = open_channel_and_wait_ready (node_1 , node_2 , node_id_2 , listening_addresses_2 [0 ], esplora_endpoint )
199223 print ("funding_txo:" , funding_txid )
200224
201- channel_ready_event_2 = expect_event (node_2 , Event .CHANNEL_READY )
202225
203226 description = Bolt11InvoiceDescription .DIRECT ("asdf" )
204227 invoice = node_2 .bolt11_payment ().receive (2500000 , description , 9217 )
@@ -228,13 +251,7 @@ def test_channel_full_cycle(self):
228251 self .assertEqual (spendable_balance_after_close_2 , 102500 )
229252
230253 # Stop nodes
231- node_1 .stop ()
232- node_2 .stop ()
233-
234- # Cleanup
235- time .sleep (1 ) # Wait a sec so our logs can finish writing
236- tmp_dir_1 .cleanup ()
237- tmp_dir_2 .cleanup ()
254+ stop_and_cleanup (node_1 , node_2 , tmp_dir_1 , tmp_dir_2 )
238255
239256if __name__ == '__main__' :
240257 unittest .main ()
0 commit comments