From a57fc525a6ef602072888c5510be38b3981217a8 Mon Sep 17 00:00:00 2001 From: Richard Safier Date: Mon, 1 Jul 2024 22:11:08 -0400 Subject: [PATCH] Add Builder.LookupPayment & CheckForSuccessButFailureReasonIsNotNone_LND_18_Bug test. --- LNUnit.Tests/AbcLightningFixtureBoltDb.cs | 2 +- .../Abstract/AbcLightningAbstractTests.cs | 42 +++++++++++++++++++ LNUnit/Setup/LNUnitBuilder.cs | 12 ++++++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/LNUnit.Tests/AbcLightningFixtureBoltDb.cs b/LNUnit.Tests/AbcLightningFixtureBoltDb.cs index c95447a..66bab4f 100644 --- a/LNUnit.Tests/AbcLightningFixtureBoltDb.cs +++ b/LNUnit.Tests/AbcLightningFixtureBoltDb.cs @@ -3,7 +3,7 @@ namespace LNUnit.Tests; [TestFixture("boltdb", "lightninglabs/lnd", "daily-testing-only", "/root/.lnd", true)] -//[TestFixture("boltdb", "custom_lnd", "latest", "/home/lnd/.lnd", false)] +// [TestFixture("boltdb", "lightninglabs/lnd", "v0.17.5-beta", "/root/.lnd", false)] public class AbcLightningAbstractTestsBoltDb : LNUnit.Tests.Abstract.AbcLightningAbstractTests { public AbcLightningAbstractTestsBoltDb(string dbType = "boltdb", diff --git a/LNUnit.Tests/Abstract/AbcLightningAbstractTests.cs b/LNUnit.Tests/Abstract/AbcLightningAbstractTests.cs index 51c610c..bbcdf39 100644 --- a/LNUnit.Tests/Abstract/AbcLightningAbstractTests.cs +++ b/LNUnit.Tests/Abstract/AbcLightningAbstractTests.cs @@ -757,6 +757,48 @@ public async Task FailureInvoiceTimeout() Assert.That(invoiceLookup.State == Invoice.Types.InvoiceState.Canceled); } + [Test] + [Category("Payment")] + [Category("Invoice")] + [NonParallelizable] + // [Timeout(5000)] + public async Task CheckForSuccessButFailureReasonIsNotNone_LND_18_Bug() + { + var invoice = await Builder.GeneratePaymentRequestFromAlias("alice", new Invoice + { + Memo = "weird", + Expiry = 1000, + ValueMsat = 1003 + }); + //Apply HTLC hold to prevent payment from settling + await Builder.DelayAllHTLCsOnAlias("bob", 30_000); //6s + await Builder.DelayAllHTLCsOnAlias("carol", 15_000); //6s + Payment? payment = null; + var failed = false; + + payment = await Builder.MakeLightningPaymentFromAlias("carol", new SendPaymentRequest + { + PaymentRequest = invoice.PaymentRequest, + FeeLimitSat = 100000000, + TimeoutSeconds = 15 + }); + + + Builder.CancelInterceptorOnAlias("bob"); + Builder.CancelInterceptorOnAlias("carol"); + Assert.That(payment!.Status == Payment.Types.PaymentStatus.Succeeded); + Assert.That(payment!.FailureReason == PaymentFailureReason.FailureReasonNone); + var invoiceLookup = await Builder.LookupInvoice("alice", invoice.RHash); + Assert.That(invoiceLookup != null); + Assert.That(invoiceLookup.RHash == invoice.RHash); + Assert.That(invoiceLookup.State == Invoice.Types.InvoiceState.Settled); + var paymentLookup = await Builder.LookupPayment("carol", invoiceLookup.RHash); + Assert.That(paymentLookup.Status == Payment.Types.PaymentStatus.Succeeded); + //This will pass in v0.18.0 and is changing behavior + Assert.That(paymentLookup.FailureReason != PaymentFailureReason.FailureReasonNone); + } + + [Test] [Category("Payment")] [Category("Interceptor")] diff --git a/LNUnit/Setup/LNUnitBuilder.cs b/LNUnit/Setup/LNUnitBuilder.cs index 3ad6b1c..dbfa501 100644 --- a/LNUnit/Setup/LNUnitBuilder.cs +++ b/LNUnit/Setup/LNUnitBuilder.cs @@ -711,6 +711,18 @@ await Enumerable.Range(0, count).ParallelForEachAsync(async x => return response.ToList(); } + public async Task LookupPayment(string alias, ByteString hash) + { + var node = await GetNodeFromAlias(alias); + var streamingCallResponse = node.RouterClient.TrackPaymentV2(new TrackPaymentRequest() + { + NoInflightUpdates = true, + PaymentHash = hash + }); + Payment? paymentResponse = null; + await foreach (var res in streamingCallResponse.ResponseStream.ReadAllAsync()) paymentResponse = res; + return paymentResponse!; + } public async Task LookupInvoice(string alias, ByteString rHash) { var node = await GetNodeFromAlias(alias);