コード例 #1
0
        public void WhenConnectionFailsCloudFlareBypass_Should_BeTried()
        {
            // arrange
            bool cloudFlareCalled = false;
            var  client           = PrepareClient();

            socket.Setup(s => s.State).Returns(ConnectionState.Disconnected);
            socket.Setup(s => s.Start()).Callback(() => { socket.Raise(s => s.StateChanged += null, new StateChange(ConnectionState.Connecting, ConnectionState.Disconnected)); });

            cloud.Setup(c => c.GetCloudFlareCookies(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>())).Returns(new CookieContainer()).Callback(() =>
            {
                cloudFlareCalled = true;
                socket.Setup(s => s.State).Returns(ConnectionState.Connected);
                socket.Setup(s => s.Start()).Callback(() => { socket.Raise(s => s.StateChanged += null, new StateChange(ConnectionState.Connecting, ConnectionState.Connected)); });
            });

            BittrexMarketSummary result = null;

            // act
            var subscription = client.SubscribeToMarketDeltaStream("TestMarket1", (test) => result = test);

            // assert
            Assert.IsTrue(subscription.Success);
            Assert.IsTrue(cloudFlareCalled);
        }
コード例 #2
0
        public void GetMarketSummary_Should_RespondWithMarketSummary()
        {
            // arrange
            var expected = new BittrexMarketSummary()
            {
                Ask            = 0.001m,
                Bid            = 0.002m,
                Last           = 0.003m,
                Created        = new DateTime(2017, 1, 1),
                MarketName     = "TestMarket",
                BaseVolume     = 1.1m,
                High           = 2.2m,
                Low            = 3.3m,
                OpenBuyOrders  = 10,
                OpenSellOrders = 20,
                PrevDay        = 4.4m,
                TimeStamp      = new DateTime(2016, 1, 1),
                Volume         = 5.5m
            };
            var objects = TestHelpers.PrepareClient(() => Construct(), JsonConvert.SerializeObject(WrapInResult(new List <BittrexMarketSummary>()
            {
                expected
            })));

            // act
            var result = objects.Client.GetMarketSummary("TestMarket");

            // assert
            Assert.IsTrue(result.Success);
            Assert.IsTrue(TestHelpers.PublicInstancePropertiesEqual(result.Data, expected));
        }
コード例 #3
0
 /// <summary>
 /// Responds to the changes in market data.
 /// </summary>
 /// <param name="marketDelta">Market delta stream data.</param>
 protected static void OnMarketDeltaUpdate(BittrexMarketSummary marketDelta)
 {
     if (_streams.TryGetValue(marketDelta.MarketName, out var stream))
     {
         stream.UpdateMarketDelta(new BittrexMarketSummaryProvider(marketDelta));
     }
 }
コード例 #4
0
        public void WhenTheSocketReturnsEmptyDataTheEvent_Should_NotTrigger()
        {
            // arrange
            var client = PrepareClient();

            BittrexMarketSummary result = null;
            var subscription            = client.SubscribeToMarketDeltaStream("TestMarket1", (test) => result = test);

            var expected = "";

            // act
            TriggerSub(sub, expected);

            // assert
            Assert.IsTrue(subscription.Success);
            Assert.IsNull(result);
        }
コード例 #5
0
        public void WhenUnsubscribingTheLastSubscriptionTheSocket_Should_Close()
        {
            // arrange
            bool stopCalled = false;
            var  client     = PrepareClient();

            socket.Setup(s => s.Stop(It.IsAny <TimeSpan>())).Callback(() => stopCalled = true);

            BittrexMarketSummary result = null;
            var subscription            = client.SubscribeToMarketDeltaStream("TestMarket1", (test) => result = test);

            // act
            client.UnsubscribeFromStream(subscription.Result);
            Thread.Sleep(10);

            // assert
            Assert.IsTrue(subscription.Success);
            Assert.IsTrue(stopCalled);
        }
コード例 #6
0
        public void SubscribingToMarketDeltaStream_Should_NotTriggerWhenDeltaMessageForOtherMarketIsReceived()
        {
            // arrange
            Subscription sub;
            Mock <Interfaces.IHubConnection> socket;
            Mock <ICloudFlareAuthenticator>  cloud;
            var client = PrepareClient(out sub, out socket, out cloud);

            BittrexMarketSummary result = null;
            var subscription            = client.SubscribeToMarketDeltaStream("TestMarket1", (test) => result = test);

            var expected = new BittrexStreamDeltas()
            {
                Deltas = new List <BittrexMarketSummary>()
                {
                    new BittrexMarketSummary()
                    {
                        Ask               = 1.1m,
                        BaseVolume        = 2.2m,
                        Bid               = 3.3m,
                        Created           = new DateTime(2017, 1, 1),
                        DisplayMarketName = null,
                        High              = 4.4m,
                        Last              = 5.5m,
                        Low               = 6.6m,
                        MarketName        = "TestMarket2",
                        OpenBuyOrders     = 10,
                        OpenSellOrders    = 20,
                        PrevDay           = 7.7m,
                        TimeStamp         = new DateTime(2016, 1, 1),
                        Volume            = 8.8m
                    }
                }
            };

            // act
            TriggerSub(sub, expected);

            // assert
            Assert.IsTrue(subscription.Success);
            Assert.IsNull(result);
        }
コード例 #7
0
        public void WhenConnectingCloudFlareBypass_Should_BeUsed()
        {
            // arrange
            bool cloudFlareCalled = false;
            var  client           = PrepareClient();

            cloud.Setup(c => c.GetCloudFlareCookies(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>())).Returns(Task.FromResult(new CookieContainer())).Callback(() =>
            {
                cloudFlareCalled = true;
            });

            BittrexMarketSummary result = null;

            // act
            var subscription = client.SubscribeToMarketDeltaStream("TestMarket1", (test) => result = test);

            // assert
            Assert.IsTrue(subscription.Success);
            Assert.IsTrue(cloudFlareCalled);
        }
コード例 #8
0
        public void WhenCloudFlareFailsSubscription_Should_Fail()
        {
            // arrange
            Subscription sub;
            Mock <Interfaces.IHubConnection> socket;
            Mock <ICloudFlareAuthenticator>  cloud;
            var client = PrepareClient(out sub, out socket, out cloud);

            socket.Setup(s => s.State).Returns(ConnectionState.Disconnected);
            cloud.Setup(c => c.GetCloudFlareCookies(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>())).Returns <CookieContainer>(null);
            socket.Setup(s => s.Start()).Callback(() => { socket.Raise(s => s.StateChanged += null, new StateChange(ConnectionState.Connecting, ConnectionState.Disconnected)); });

            BittrexMarketSummary result = null;

            // act
            var subscription = client.SubscribeToMarketDeltaStream("TestMarket1", (test) => result = test);

            // assert
            Assert.IsFalse(subscription.Success);
        }
コード例 #9
0
        public void WhenTheSocketReturnsEmptyDataTheEvent_Should_NotTrigger()
        {
            // arrange
            Subscription sub;
            Mock <Interfaces.IHubConnection> socket;
            Mock <ICloudFlareAuthenticator>  cloud;
            var client = PrepareClient(out sub, out socket, out cloud);

            BittrexMarketSummary result = null;
            var subscription            = client.SubscribeToMarketDeltaStream("TestMarket1", (test) => result = test);

            var expected = "";

            // act
            TriggerSub(sub, expected);

            // assert
            Assert.IsTrue(subscription.Success);
            Assert.IsNull(result);
        }
コード例 #10
0
        public static Pair24HoursStatistic ToMarketSummary(this BittrexMarketSummary marketSummaryDataType)
        {
            Pair pair;

            if (!BittrexPairs.TryParsePair(marketSummaryDataType.MarketName, out pair))
            {
                return(null);
            }

            DateTime parsedTimeStamp;
            var      timeStamp = DateTime.TryParse(marketSummaryDataType.TimeStamp, out parsedTimeStamp) ? parsedTimeStamp : (DateTime?)null;

            var summary = new Pair24HoursStatistic(pair,
                                                   marketSummaryDataType.High, marketSummaryDataType.Low,
                                                   marketSummaryDataType.BaseVolume, marketSummaryDataType.QuoteVolume,
                                                   marketSummaryDataType.Last, marketSummaryDataType.PrevDay,
                                                   marketSummaryDataType.CountOpenBuyOrders, marketSummaryDataType.CountOpenSellOrders,
                                                   timeStamp);

            return(summary);
        }
コード例 #11
0
        public void SubscribingToMarketDeltaStream_Should_TriggerWhenDeltaMessageIsReceived()
        {
            // arrange
            var client = PrepareClient();

            BittrexMarketSummary result = null;
            var subscription            = client.SubscribeToMarketDeltaStream("TestMarket", (test) => result = test);

            var expected = new BittrexStreamDeltas()
            {
                Deltas = new List <BittrexMarketSummary>()
                {
                    new BittrexMarketSummary()
                    {
                        Ask               = 1.1m,
                        BaseVolume        = 2.2m,
                        Bid               = 3.3m,
                        Created           = new DateTime(2017, 1, 1),
                        DisplayMarketName = null,
                        High              = 4.4m,
                        Last              = 5.5m,
                        Low               = 6.6m,
                        MarketName        = "TestMarket",
                        OpenBuyOrders     = 10,
                        OpenSellOrders    = 20,
                        PrevDay           = 7.7m,
                        TimeStamp         = new DateTime(2016, 1, 1),
                        Volume            = 8.8m
                    }
                }
            };

            // act
            TriggerSub(sub, expected);

            // assert
            Assert.IsTrue(subscription.Success);
            Assert.IsTrue(ObjectComparer.PublicInstancePropertiesEqual(result, expected.Deltas[0]));
        }
コード例 #12
0
 /// <summary>
 /// Initializes the new instance of market summary provider for Bittrex exchanger.
 /// </summary>
 /// <param name="source">Market summary data source.</param>
 public BittrexMarketSummaryProvider(BittrexMarketSummary source)
 {
     Source = source;
 }