Skip to content

Commit b318ccd

Browse files
committed
Add spontaneous payment Python binding test
Exercise the spontaneous payment (keysend) path through the Python UniFFI bindings after a channel is ready. Assert events, custom TLV records, and persisted payment metadata on both sender and receiver.
1 parent 7fa8d0f commit b318ccd

1 file changed

Lines changed: 37 additions & 0 deletions

File tree

bindings/python/src/ldk_node/test_ldk_node.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,43 @@ def setUp(self):
214214
esplora_endpoint = get_esplora_endpoint()
215215
mine_and_wait(esplora_endpoint, 1)
216216

217+
def test_spontaneous_payment(self):
218+
"""Spontaneous payment test in python: keysend after channel ready."""
219+
esplora_endpoint = get_esplora_endpoint()
220+
221+
node_1, node_2, tmp_dir_1, tmp_dir_2, node_id_1, node_id_2, listening_addresses_2 = setup_two_nodes(esplora_endpoint)
222+
fund_nodes(node_1, node_2, esplora_endpoint)
223+
open_channel_and_wait_ready(node_1, node_2, node_id_2, listening_addresses_2[0], esplora_endpoint)
224+
225+
keysend_amount_msat = 2_500_000
226+
custom_tlvs = [CustomTlvRecord(type_num=13377331, value=bytes([1, 2, 3]))]
227+
keysend_payment_id = node_1.spontaneous_payment().send_with_custom_tlvs(
228+
keysend_amount_msat, node_id_2, None, custom_tlvs
229+
)
230+
231+
expect_event(node_1, Event.PAYMENT_SUCCESSFUL)
232+
received_event = expect_event(node_2, Event.PAYMENT_RECEIVED)
233+
234+
self.assertEqual(received_event.amount_msat, keysend_amount_msat)
235+
self.assertEqual(received_event.custom_records, custom_tlvs)
236+
237+
sender_payment = node_1.payment(keysend_payment_id)
238+
receiver_payment = node_2.payment(keysend_payment_id)
239+
240+
self.assertIsNotNone(sender_payment)
241+
self.assertIsNotNone(receiver_payment)
242+
self.assertEqual(sender_payment.status, PaymentStatus.SUCCEEDED)
243+
self.assertEqual(sender_payment.direction, PaymentDirection.OUTBOUND)
244+
self.assertEqual(sender_payment.amount_msat, keysend_amount_msat)
245+
self.assertTrue(sender_payment.kind.is_spontaneous())
246+
247+
self.assertEqual(receiver_payment.status, PaymentStatus.SUCCEEDED)
248+
self.assertEqual(receiver_payment.direction, PaymentDirection.INBOUND)
249+
self.assertEqual(receiver_payment.amount_msat, keysend_amount_msat)
250+
self.assertTrue(receiver_payment.kind.is_spontaneous())
251+
252+
stop_and_cleanup(node_1, node_2, tmp_dir_1, tmp_dir_2)
253+
217254
def test_channel_full_cycle(self):
218255
esplora_endpoint = get_esplora_endpoint()
219256

0 commit comments

Comments
 (0)