コード例 #1
0
ファイル: UnitTest1.cs プロジェクト: rsandrade/btcpayserver
        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());
        }
コード例 #2
0
        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();
        }
コード例 #3
0
 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()));
 }