public void CheckRatesProvider() { var coinAverage = new CoinAverageRateProvider("BTC"); var jpy = coinAverage.GetRateAsync("JPY").GetAwaiter().GetResult(); var jpy2 = new BitpayRateProvider(new Bitpay(new Key(), new Uri("https://bitpay.com/"))).GetRateAsync("JPY").GetAwaiter().GetResult(); var cached = new CachedRateProvider("BTC", coinAverage, new MemoryCache(new MemoryCacheOptions() { ExpirationScanFrequency = TimeSpan.FromSeconds(1.0) })); cached.CacheSpan = TimeSpan.FromSeconds(10); var a = cached.GetRateAsync("JPY").GetAwaiter().GetResult(); var b = cached.GetRateAsync("JPY").GetAwaiter().GetResult(); //Manually check that cache get hit after 10 sec var c = cached.GetRateAsync("JPY").GetAwaiter().GetResult(); var bitstamp = new CoinAverageRateProvider("BTC") { Exchange = "bitstamp" }; var bitstampRate = bitstamp.GetRateAsync("USD").GetAwaiter().GetResult(); Assert.Throws <RateUnavailableException>(() => bitstamp.GetRateAsync("XXXXX").GetAwaiter().GetResult()); }
public void CheckRatesProvider() { var coinAverage = new CoinAverageRateProvider(); var jpy = coinAverage.GetRateAsync("JPY").GetAwaiter().GetResult(); var jpy2 = new BitpayRateProvider(new Bitpay(new Key(), new Uri("https://bitpay.com/"))).GetRateAsync("JPY").GetAwaiter().GetResult(); var cached = new CachedRateProvider(coinAverage, new MemoryCache(new MemoryCacheOptions() { ExpirationScanFrequency = TimeSpan.FromSeconds(1.0) })); cached.CacheSpan = TimeSpan.FromSeconds(10); var a = cached.GetRateAsync("JPY").GetAwaiter().GetResult(); var b = cached.GetRateAsync("JPY").GetAwaiter().GetResult(); //Manually check that cache get hit after 10 sec var c = cached.GetRateAsync("JPY").GetAwaiter().GetResult(); }
public IRateProvider ApplyRateRules(BTCPayNetwork network, IRateProvider rateProvider) { if (!PreferredExchange.IsCoinAverage()) { // If the original rateProvider is a cache, use the same inner provider as fallback, and same memory cache to wrap it all if (rateProvider is CachedRateProvider cachedRateProvider) { rateProvider = new FallbackRateProvider(new IRateProvider[] { new CoinAverageRateProvider(network.CryptoCode) { Exchange = PreferredExchange }, cachedRateProvider.Inner }); rateProvider = new CachedRateProvider(network.CryptoCode, rateProvider, cachedRateProvider.MemoryCache) { AdditionalScope = PreferredExchange }; } else { rateProvider = new FallbackRateProvider(new IRateProvider[] { new CoinAverageRateProvider(network.CryptoCode) { Exchange = PreferredExchange }, rateProvider }); } } if (RateRules == null || RateRules.Count == 0) { return(rateProvider); } return(new TweakRateProvider(network, rateProvider, RateRules.ToList())); }