Add unit test for trampoline MPP consolidation
This tests that a trampoline waits until all incoming HTLCs are received, and fail or succeed them together
This commit is contained in:
@@ -1648,6 +1648,8 @@ class LNWallet(LNWorker):
|
||||
is_mpp = sum(len(x) for x in list(sc.config.values())) > 1
|
||||
if is_mpp and not invoice_features.supports(LnFeatures.BASIC_MPP_OPT):
|
||||
continue
|
||||
if not is_mpp and self.config.TEST_FORCE_MPP:
|
||||
continue
|
||||
self.logger.info(f"trying split configuration: {sc.config.values()} rating: {sc.rating}")
|
||||
routes = []
|
||||
try:
|
||||
|
||||
@@ -893,6 +893,7 @@ class SimpleConfig(Logger):
|
||||
EXPERIMENTAL_LN_FORWARD_TRAMPOLINE_PAYMENTS = ConfigVar('lightning_forward_trampoline_payments', default=False, type_=bool)
|
||||
TEST_FAIL_HTLCS_WITH_TEMP_NODE_FAILURE = ConfigVar('test_fail_htlcs_with_temp_node_failure', default=False, type_=bool)
|
||||
TEST_FAIL_HTLCS_AS_MALFORMED = ConfigVar('test_fail_malformed_htlc', default=False, type_=bool)
|
||||
TEST_FORCE_MPP = ConfigVar('test_force_mpp', default=False, type_=bool)
|
||||
TEST_SHUTDOWN_FEE = ConfigVar('test_shutdown_fee', default=None, type_=int)
|
||||
TEST_SHUTDOWN_FEE_RANGE = ConfigVar('test_shutdown_fee_range', default=None)
|
||||
TEST_SHUTDOWN_LEGACY = ConfigVar('test_shutdown_legacy', default=False, type_=bool)
|
||||
|
||||
@@ -1180,7 +1180,7 @@ class TestPeer(ElectrumTestCase):
|
||||
graph = self.prepare_chans_and_peers_in_graph(self.GRAPH_DEFINITIONS['square_graph'])
|
||||
await self._run_mpp(graph, {'mpp_invoice': False}, {'mpp_invoice': True})
|
||||
|
||||
async def _run_trampoline_payment(self, is_legacy, direct, drop_dave=None):
|
||||
async def _run_trampoline_payment(self, is_legacy, direct, drop_dave=None, test_mpp_consolidation=False):
|
||||
if drop_dave is None: drop_dave = []
|
||||
|
||||
async def pay(lnaddr, pay_req):
|
||||
@@ -1217,7 +1217,16 @@ class TestPeer(ElectrumTestCase):
|
||||
# insert a channel from bob to carol
|
||||
graph_definition['bob']['channels']['carol'] = high_fee_channel
|
||||
|
||||
if test_mpp_consolidation:
|
||||
# deplete alice to carol so that all htlcs go through bob
|
||||
graph_definition['alice']['channels']['carol'] = depleted_channel
|
||||
|
||||
graph = self.prepare_chans_and_peers_in_graph(graph_definition)
|
||||
|
||||
if test_mpp_consolidation:
|
||||
graph.workers['dave'].features |= LnFeatures.BASIC_MPP_OPT
|
||||
graph.workers['alice'].network.config.TEST_FORCE_MPP = True
|
||||
|
||||
peers = graph.peers.values()
|
||||
if is_legacy:
|
||||
# turn off trampoline features in invoice
|
||||
@@ -1231,6 +1240,11 @@ class TestPeer(ElectrumTestCase):
|
||||
|
||||
await f()
|
||||
|
||||
@needs_test_with_all_chacha20_implementations
|
||||
async def test_trampoline_mpp_consolidation(self):
|
||||
with self.assertRaises(PaymentDone):
|
||||
await self._run_trampoline_payment(is_legacy=True, direct=False, test_mpp_consolidation=True)
|
||||
|
||||
@needs_test_with_all_chacha20_implementations
|
||||
async def test_payment_trampoline_legacy(self):
|
||||
with self.assertRaises(PaymentDone):
|
||||
|
||||
Reference in New Issue
Block a user