electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit 50ab8be7a29d1b1ece777d611a2a77e49402c689
parent 707a58abf11c541ca5e8b69d092d612d7613c538
Author: ThomasV <thomasv@electrum.org>
Date:   Thu, 11 Mar 2021 10:37:44 +0100

lnpeer: try to fix tests

Diffstat:
Melectrum/tests/test_lnpeer.py | 67++++++++++++++++++++++++++++++++++++-------------------------------
1 file changed, 36 insertions(+), 31 deletions(-)

diff --git a/electrum/tests/test_lnpeer.py b/electrum/tests/test_lnpeer.py @@ -774,12 +774,29 @@ class TestPeer(ElectrumTestCase): with self.assertRaises(PaymentDone): run(f()) - async def _run_mpp(self, graph, *, attempts): + def _run_mpp(self, graph, kwargs1, kwargs2): self.assertEqual(500_000_000_000, graph.chan_ab.balance(LOCAL)) self.assertEqual(500_000_000_000, graph.chan_ac.balance(LOCAL)) amount_to_pay = 600_000_000_000 peers = graph.all_peers() - async def pay(): + async def pay(attempts=1, + alice_uses_trampoline=False, + bob_forwarding=True, + mpp_invoice=True): + if mpp_invoice: + graph.w_d.features |= LnFeatures.BASIC_MPP_OPT + if bob_forwarding: + graph.w_b.enable_htlc_forwarding.set() + else: + graph.w_b.logger.info(f'disabling forwarding') + graph.w_b.enable_htlc_forwarding.clear() + if alice_uses_trampoline: + if graph.w_a.network.channel_db: + graph.w_a.network.channel_db.stop() + await graph.w_a.network.channel_db.stopped_event.wait() + graph.w_a.network.channel_db = None + else: + assert graph.w_a.network.channel_db is not None lnaddr, pay_req = await self.prepare_invoice(graph.w_d, include_routing_hints=True, amount_msat=amount_to_pay) self.assertEqual(PR_UNPAID, graph.w_d.get_payment_status(lnaddr.paymenthash)) result, log = await graph.w_a.pay_invoice(pay_req, attempts=attempts) @@ -788,47 +805,35 @@ class TestPeer(ElectrumTestCase): raise PaymentDone() else: raise NoPathFound() - async with TaskGroup() as group: - for peer in peers: - await group.spawn(peer._message_loop()) - await group.spawn(peer.htlc_switch()) - await asyncio.sleep(0.2) - await group.spawn(pay()) + + async def f(kwargs): + async with TaskGroup() as group: + for peer in peers: + await group.spawn(peer._message_loop()) + await group.spawn(peer.htlc_switch()) + await asyncio.sleep(0.2) + await group.spawn(pay(**kwargs)) + + with self.assertRaises(NoPathFound): + run(f(kwargs1)) + with self.assertRaises(PaymentDone): + run(f(kwargs2)) @needs_test_with_all_chacha20_implementations def test_multipart_payment_with_timeout(self): graph = self.prepare_chans_and_peers_in_square() - graph.w_d.features |= LnFeatures.BASIC_MPP_OPT - graph.w_b.enable_htlc_forwarding.clear() - with self.assertRaises(NoPathFound): - run(self._run_mpp(graph, attempts=1)) - graph.w_b.enable_htlc_forwarding.set() - run(asyncio.sleep(1)) # sleep to that the other htlc can fail - with self.assertRaises(PaymentDone): - run(self._run_mpp(graph, attempts=1)) + self._run_mpp(graph, {'bob_forwarding':False}, {'bob_forwarding':True}) @needs_test_with_all_chacha20_implementations def test_multipart_payment(self): graph = self.prepare_chans_and_peers_in_square() - self.assertFalse(graph.w_d.features.supports(LnFeatures.BASIC_MPP_OPT)) - with self.assertRaises(NoPathFound): - run(self._run_mpp(graph, attempts=1)) - graph.w_d.features |= LnFeatures.BASIC_MPP_OPT - with self.assertRaises(PaymentDone): - run(self._run_mpp(graph, attempts=1)) + self._run_mpp(graph, {'mpp_invoice':False}, {'mpp_invoice':True}) @needs_test_with_all_chacha20_implementations def test_multipart_payment_with_trampoline(self): + # single attempt will fail with insufficient trampoline fee graph = self.prepare_chans_and_peers_in_square() - graph.w_d.features |= LnFeatures.BASIC_MPP_OPT - graph.w_a.network.channel_db.stop() - run(graph.w_a.network.channel_db.stopped_event.wait()) - graph.w_a.network.channel_db = None - # Note: single attempt will fail with insufficient trampoline fee - with self.assertRaises(NoPathFound): - run(self._run_mpp(graph, attempts=1)) - with self.assertRaises(PaymentDone): - run(self._run_mpp(graph, attempts=3)) + self._run_mpp(graph, {'alice_uses_trampoline':True, 'attempts':1}, {'alice_uses_trampoline':True, 'attempts':3}) @needs_test_with_all_chacha20_implementations def test_close(self):