From 69bd888babbd5cd3816efe56801a5bcd521683b4 Mon Sep 17 00:00:00 2001 From: rockstardev Date: Fri, 15 Jun 2018 15:02:40 -0500 Subject: [PATCH] Refactoring ServerTester so that ClightningRPCClient can use LND --- BTCPayServer.Tests/ServerTester.cs | 38 ++++++++++++++++++++---------- BTCPayServer.Tests/UnitTest1.cs | 3 ++- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/BTCPayServer.Tests/ServerTester.cs b/BTCPayServer.Tests/ServerTester.cs index a47268c48..fa16ca2d9 100644 --- a/BTCPayServer.Tests/ServerTester.cs +++ b/BTCPayServer.Tests/ServerTester.cs @@ -21,6 +21,7 @@ using System.Globalization; using BTCPayServer.Payments.Lightning.CLightning; using BTCPayServer.Payments.Lightning.Charge; using BTCPayServer.Tests.Lnd; +using BTCPayServer.Payments.Lightning; namespace BTCPayServer.Tests { @@ -81,41 +82,51 @@ namespace BTCPayServer.Tests /// /// Connect a customer LN node to the merchant LN node /// - public void PrepareLightning() + public void PrepareLightning(LightningConnectionType lndBackend) { - PrepareLightningAsync().GetAwaiter().GetResult(); + ILightningInvoiceClient client = MerchantCharge.Client; + if (lndBackend == LightningConnectionType.Lnd) + client = MerchantLnd.Client; + + PrepareLightningAsync(client).GetAwaiter().GetResult(); } + private static readonly string[] SKIPPED_STATES = + { "ONCHAIN", "CHANNELD_SHUTTING_DOWN", "CLOSINGD_SIGEXCHANGE", "CLOSINGD_COMPLETE", "FUNDING_SPEND_SEEN" }; + /// /// Connect a customer LN node to the merchant LN node /// /// - public async Task PrepareLightningAsync() + private async Task PrepareLightningAsync(ILightningInvoiceClient client) { while (true) { - var skippedStates = new[] { "ONCHAIN", "CHANNELD_SHUTTING_DOWN", "CLOSINGD_SIGEXCHANGE", "CLOSINGD_COMPLETE", "FUNDING_SPEND_SEEN" }; - var channel = (await CustomerLightningD.ListPeersAsync()) + var merchantInfo = await WaitLNSynched(client); + + var peers = await CustomerLightningD.ListPeersAsync(); + var filteringToTargetedPeers = peers.Where(a => a.Id == merchantInfo.NodeId); + var channel = filteringToTargetedPeers .SelectMany(p => p.Channels) - .Where(c => !skippedStates.Contains(c.State ?? "")) + .Where(c => !SKIPPED_STATES.Contains(c.State ?? "")) .FirstOrDefault(); + switch (channel?.State) { case null: - var merchantInfo = await WaitLNSynched(); - var clightning = new NodeInfo(merchantInfo.Id, MerchantCharge.P2PHost, merchantInfo.Port); + var clightning = new NodeInfo(merchantInfo.NodeId, merchantInfo.Address, merchantInfo.P2PPort); await CustomerLightningD.ConnectAsync(clightning); var address = await CustomerLightningD.NewAddressAsync(); await ExplorerNode.SendToAddressAsync(address, Money.Coins(0.2m)); - ExplorerNode.Generate(1); - await WaitLNSynched(); + ExplorerNode.Generate(6); + await WaitLNSynched(client); await Task.Delay(1000); await CustomerLightningD.FundChannelAsync(clightning, Money.Satoshis(16777215)); break; case "CHANNELD_AWAITING_LOCKIN": ExplorerNode.Generate(1); - await WaitLNSynched(); + await WaitLNSynched(client); break; case "CHANNELD_NORMAL": return; @@ -125,11 +136,11 @@ namespace BTCPayServer.Tests } } - private async Task WaitLNSynched() + private async Task WaitLNSynched(ILightningInvoiceClient client) { while (true) { - var merchantInfo = await MerchantCharge.Client.GetInfoAsync(); + var merchantInfo = await client.GetInfo(); var blockCount = await ExplorerNode.GetBlockCountAsync(); if (merchantInfo.BlockHeight != blockCount) { @@ -155,6 +166,7 @@ namespace BTCPayServer.Tests } public CLightningRPCClient CustomerLightningD { get; set; } + public CLightningRPCClient MerchantLightningD { get; private set; } public ChargeTester MerchantCharge { get; private set; } public LndMockTester MerchantLnd { get; set; } diff --git a/BTCPayServer.Tests/UnitTest1.cs b/BTCPayServer.Tests/UnitTest1.cs index 855e43915..4e41d215a 100644 --- a/BTCPayServer.Tests/UnitTest1.cs +++ b/BTCPayServer.Tests/UnitTest1.cs @@ -504,11 +504,12 @@ namespace BTCPayServer.Tests using (var tester = ServerTester.Create()) { tester.Start(); - tester.PrepareLightning(); var user = tester.NewAccount(); user.GrantAccess(); user.RegisterLightningNode("BTC", type); user.RegisterDerivationScheme("BTC"); + + tester.PrepareLightning(type); Task.WaitAll(CanSendLightningPaymentCore(tester, user));