コード例 #1
0
        public void DisconnectedSocket_Should_Reconnect()
        {
            // arrange
            bool reconnected = false;
            var  client      = new TestSocketClient(new SocketClientOptions("")
            {
                ReconnectInterval = TimeSpan.Zero, LogVerbosity = LogVerbosity.Debug
            });
            var socket = client.CreateSocket();

            socket.ShouldReconnect = true;
            socket.CanConnect      = true;
            socket.DisconnectTime  = DateTime.UtcNow;
            var sub = new SocketConnection(client, socket);

            sub.ShouldReconnect = true;
            client.ConnectSocketSub(sub);
            var rstEvent = new ManualResetEvent(false);

            sub.ConnectionRestored += (a) =>
            {
                reconnected = true;
                rstEvent.Set();
            };

            // act
            socket.InvokeClose();
            rstEvent.WaitOne(1000);

            // assert
            Assert.IsTrue(reconnected);
        }
コード例 #2
0
        public void UnsubscribingAll_Should_CloseAllSockets()
        {
            // arrange
            var client = new TestSocketClient(new SocketClientOptions("")
            {
                ReconnectInterval = TimeSpan.Zero, LogVerbosity = LogVerbosity.Debug
            });
            var socket1 = client.CreateSocket();
            var socket2 = client.CreateSocket();

            socket1.CanConnect = true;
            socket2.CanConnect = true;
            var sub1 = new SocketConnection(client, socket1);
            var sub2 = new SocketConnection(client, socket2);

            client.ConnectSocketSub(sub1);
            client.ConnectSocketSub(sub2);

            // act
            client.UnsubscribeAll().Wait();

            // assert
            Assert.IsTrue(socket1.Connected == false);
            Assert.IsTrue(socket2.Connected == false);
        }
コード例 #3
0
        public void SocketMessages_Should_BeProcessedInDataHandlers()
        {
            // arrange
            var client = new TestSocketClient(new SocketClientOptions("")
            {
                ReconnectInterval = TimeSpan.Zero, LogVerbosity = LogVerbosity.Debug
            });
            var socket = client.CreateSocket();

            socket.ShouldReconnect = true;
            socket.CanConnect      = true;
            socket.DisconnectTime  = DateTime.UtcNow;
            var    sub      = new SocketConnection(client, socket);
            var    rstEvent = new ManualResetEvent(false);
            JToken result   = null;

            sub.AddHandler(SocketSubscription.CreateForIdentifier("TestHandler", true, (connection, data) =>
            {
                result = data;
                rstEvent.Set();
            }));
            client.ConnectSocketSub(sub);

            // act
            socket.InvokeMessage("{\"property\": 123}");
            rstEvent.WaitOne(1000);

            // assert
            Assert.IsTrue((int)result["property"] == 123);
        }
コード例 #4
0
        public void WhenResubscribeFails_Socket_ShouldReconnect()
        {
            // arrange
            int reconnected = 0;
            var client      = new TestSocketClient(new SocketClientOptions()
            {
                ReconnectInterval = TimeSpan.FromMilliseconds(1), LogVerbosity = LogVerbosity.Debug
            });
            var socket = client.CreateSocket();

            socket.ShouldReconnect = true;
            socket.CanConnect      = true;
            socket.DisconnectTime  = DateTime.UtcNow;
            var sub = new SocketSubscription(socket);

            client.ConnectSocketSub(sub);
            var rstEvent = new ManualResetEvent(false);

            client.OnReconnect += () =>
            {
                reconnected++;
                rstEvent.Set();
                return(reconnected == 2);
            };

            // act
            socket.InvokeClose();
            rstEvent.WaitOne(1000);
            Thread.Sleep(100);

            // assert
            Assert.IsTrue(reconnected == 2);
        }
コード例 #5
0
        public void SocketMessages_Should_BeProcessedInSubsequentHandlersIfHandlerReturnsFalse()
        {
            // arrange
            var client = new TestSocketClient(new SocketClientOptions()
            {
                ReconnectInterval = TimeSpan.Zero, LogVerbosity = LogVerbosity.Debug
            });
            var socket = client.CreateSocket();

            socket.ShouldReconnect = true;
            socket.CanConnect      = true;
            socket.DisconnectTime  = DateTime.UtcNow;
            var    sub      = new SocketSubscription(socket);
            var    rstEvent = new ManualResetEvent(false);
            JToken result   = null;

            sub.MessageHandlers.Add("TestHandlerNotProcessing", (subs, data) =>
            {
                return(false);
            });
            sub.MessageHandlers.Add("TestHandler", (subs, data) =>
            {
                result = data;
                rstEvent.Set();
                return(true);
            });
            client.ConnectSocketSub(sub);

            // act
            socket.InvokeMessage("{\"property\": 123}");
            rstEvent.WaitOne(100);

            // assert
            Assert.IsTrue((int)result["property"] == 123);
        }
コード例 #6
0
        public void SocketMessages_Should_ContainOriginalDataIfEnabled(bool enabled)
        {
            // arrange
            var client = new TestSocketClient(new SocketClientOptions("")
            {
                ReconnectInterval = TimeSpan.Zero, LogLevel = LogLevel.Debug, OutputOriginalData = enabled
            });
            var socket = client.CreateSocket();

            socket.ShouldReconnect = true;
            socket.CanConnect      = true;
            socket.DisconnectTime  = DateTime.UtcNow;
            var    sub      = new SocketConnection(client, socket);
            var    rstEvent = new ManualResetEvent(false);
            string original = null;

            sub.AddSubscription(SocketSubscription.CreateForIdentifier(10, "TestHandler", true, (messageEvent) =>
            {
                original = messageEvent.OriginalData;
                rstEvent.Set();
            }));
            client.ConnectSocketSub(sub);

            // act
            socket.InvokeMessage("{\"property\": 123}");
            rstEvent.WaitOne(1000);

            // assert
            Assert.IsTrue(original == (enabled ? "{\"property\": 123}" : null));
        }
コード例 #7
0
        public void ConnectSocket_Should_ReturnConnectionResult(bool canConnect)
        {
            //arrange
            var client = new TestSocketClient();
            var socket = client.CreateSocket();

            socket.CanConnect = canConnect;

            //act
            var connectResult = client.ConnectSocketSub(new SocketConnection(client, socket));

            //assert
            Assert.IsTrue(connectResult.Success == canConnect);
        }
コード例 #8
0
        public void SettingOptions_Should_ResultInOptionsSet()
        {
            //arrange
            //act
            var client = new TestSocketClient(new SocketClientOptions("")
            {
                BaseAddress       = "http://test.address.com",
                ReconnectInterval = TimeSpan.FromSeconds(6)
            });


            //assert
            Assert.IsTrue(client.BaseAddress == "http://test.address.com/");
            Assert.IsTrue(client.ReconnectInterval.TotalSeconds == 6);
        }
コード例 #9
0
        public void FailingToConnectSocket_Should_ReturnError()
        {
            // arrange
            var client = new TestSocketClient(new SocketClientOptions("")
            {
                ReconnectInterval = TimeSpan.Zero, LogVerbosity = LogVerbosity.Debug
            });
            var socket = client.CreateSocket();

            socket.CanConnect = false;
            var sub = new SocketConnection(client, socket);

            // act
            var connectResult = client.ConnectSocketSub(sub);

            // assert
            Assert.IsFalse(connectResult.Success);
        }
コード例 #10
0
        public void UnsubscribingStream_Should_CloseTheSocket()
        {
            // arrange
            var client = new TestSocketClient(new SocketClientOptions("")
            {
                ReconnectInterval = TimeSpan.Zero, LogVerbosity = LogVerbosity.Debug
            });
            var socket = client.CreateSocket();

            socket.CanConnect = true;
            var sub = new SocketConnection(client, socket);

            client.ConnectSocketSub(sub);
            var ups = new UpdateSubscription(sub, SocketSubscription.CreateForIdentifier("Test", true, (d, a) => {}));

            // act
            client.Unsubscribe(ups).Wait();

            // assert
            Assert.IsTrue(socket.Connected == false);
        }