Skip to content

Commit 5e3396e

Browse files
committed
Introduce helpers for TestLdkNode
this commits add some helpers like : - setup_two_nodes, fund_nodes, open_channel_and_wait_ready, stop_and_cleanup - find_two_free_ports to randomize port attributions and avoid collisions - switch the test_channel_full_cycle to the new helpers
1 parent 47dad6d commit 5e3396e

1 file changed

Lines changed: 68 additions & 51 deletions

File tree

bindings/python/src/ldk_node/test_ldk_node.py

Lines changed: 68 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import os
66
import re
77
import requests
8+
import socket
89

910
from 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

125186
class 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

239256
if __name__ == '__main__':
240257
unittest.main()

0 commit comments

Comments
 (0)