From 32e830a1c5d73fe5e22de2f806ec951f4e1abbbb Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Mon, 28 Aug 2023 09:40:44 +0900 Subject: [PATCH] Fix slow 'Fasts' tests --- BTCPayServer.Tests/ThirdPartyTests.cs | 68 ++++++++++++++------------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/BTCPayServer.Tests/ThirdPartyTests.cs b/BTCPayServer.Tests/ThirdPartyTests.cs index 0020f3ddf..3781d4414 100644 --- a/BTCPayServer.Tests/ThirdPartyTests.cs +++ b/BTCPayServer.Tests/ThirdPartyTests.cs @@ -16,12 +16,14 @@ using BTCPayServer.Storage.Models; using BTCPayServer.Storage.Services.Providers.AzureBlobStorage.Configuration; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.FileSystemGlobbing; using NBitcoin; using NBitpayClient; using Newtonsoft.Json; using Xunit; using Xunit.Abstractions; using Xunit.Sdk; +using static BTCPayServer.HostedServices.PullPaymentHostedService.PayoutApproval; namespace BTCPayServer.Tests { @@ -289,11 +291,32 @@ retry: } } + [Fact] + public async Task CanGetRateFromRecommendedExchanges() + { + var factory = FastTests.CreateBTCPayRateFactory(); + var fetcher = new RateFetcher(factory); + var provider = new BTCPayNetworkProvider(ChainName.Mainnet); + var b = new StoreBlob(); + foreach (var k in StoreBlob.RecommendedExchanges) + { + b.DefaultCurrency = k.Key; + var rules = b.GetDefaultRateRules(provider); + var pairs = new[] { CurrencyPair.Parse($"BTC_{k.Key}") }.ToHashSet(); + var result = fetcher.FetchRates(pairs, rules, default); + foreach ((CurrencyPair key, Task value) in result) + { + var rateResult = await value; + TestLogs.LogInformation($"Testing {key} when default currency is {k.Key}"); + Assert.True(rateResult.BidAsk != null, $"Impossible to get the rate {rateResult.EvaluatedRule}"); + } + } + } + [Fact] public async Task CanGetRateCryptoCurrenciesByDefault() { - using var cts = new CancellationTokenSource(30_000); - string[] brokenShitcoins = { "BTG", "BTX" }; + using var cts = new CancellationTokenSource(60_000); var provider = new BTCPayNetworkProvider(ChainName.Mainnet); var factory = FastTests.CreateBTCPayRateFactory(); var fetcher = new RateFetcher(factory); @@ -302,44 +325,25 @@ retry: .Select(c => new CurrencyPair(c.CryptoCode, "USD")) .ToHashSet(); + string[] brokenShitcoins = { "BTG", "BTX" }; + bool IsBrokenShitcoin(CurrencyPair p) => brokenShitcoins.Contains(p.Left) || brokenShitcoins.Contains(p.Right); + foreach (var shitcoin in brokenShitcoins) + { + foreach (var p in pairs.Where(p => IsBrokenShitcoin(p)).ToArray()) + { + TestLogs.LogInformation($"Skipping {p} because it is marked as broken"); + pairs.Remove(p); + } + } + var rules = new StoreBlob().GetDefaultRateRules(provider); var result = fetcher.FetchRates(pairs, rules, cts.Token); foreach ((CurrencyPair key, Task value) in result) { var rateResult = await value; - if (brokenShitcoins.Contains(key.Left)) - { - TestLogs.LogInformation($"Skipping {key} because it is marked as broken"); - continue; - } - TestLogs.LogInformation($"Testing {key}"); Assert.True(rateResult.BidAsk != null, $"Impossible to get the rate {rateResult.EvaluatedRule}"); } - - var b = new StoreBlob(); - foreach (var k in StoreBlob.RecommendedExchanges) - { - b.DefaultCurrency = k.Key; - rules = b.GetDefaultRateRules(provider); - pairs = - provider.GetAll() - .Select(c => new CurrencyPair(c.CryptoCode, k.Key)) - .ToHashSet(); - result = fetcher.FetchRates(pairs, rules, cts.Token); - foreach ((CurrencyPair key, Task value) in result) - { - var rateResult = await value; - if (brokenShitcoins.Contains(key.Left)) - { - TestLogs.LogInformation($"Skipping {key} because it is marked as broken"); - continue; - } - TestLogs.LogInformation($"Testing {key} when default currency is {k.Key}"); - Assert.True(rateResult.BidAsk != null, $"Impossible to get the rate {rateResult.EvaluatedRule}"); - } - } - } [Fact]