예제 #1
0
        public void RxTextTest()
        {
            //Setup
            var objWebSocketBehavior = Substitute.For <IWebSocketBehavior>();
            var objKeepAliveMonitor  = Substitute.For <IKeepAliveMonitor>();
            var objClient            = new WebsocketSharp.Server.Client(objWebSocketBehavior, objKeepAliveMonitor);
            var objHandler           = Substitute.For <EventHandler <byte[]> >();
            var objEventArgs         = Substitute.For <IMessageEventArgs>();

            objEventArgs.IsBinary.Returns(false);
            objEventArgs.IsText.Returns(true);
            objEventArgs.IsPing.Returns(false);
            objEventArgs.Data.Returns("MyString");

            objClient.Rx += objHandler;

            //Act
            objWebSocketBehavior.OnMessageReceived += Raise.Event <EventHandler <IMessageEventArgs> >(objClient, objEventArgs);

            //Assert
            var data = System.Text.Encoding.UTF32.GetBytes("MyString");

            objHandler
            .Received(1)
            .Invoke(
                Arg.Is <IConnection.IConnection>(c => c.Equals(objClient)),
                Arg.Is <byte[]>(b => b.SequenceEqual(data))
                )
            ;
        }
예제 #2
0
        public void DisconnectTest()
        {
            //Setup
            var objWebSocketBehavior = Substitute.For <IWebSocketBehavior>();
            var objKeepAliveMonitor  = Substitute.For <IKeepAliveMonitor>();
            var objClient            = new WebsocketSharp.Server.Client(objWebSocketBehavior, objKeepAliveMonitor);
            var objHandler           = Substitute.For <EventHandler <IConnection.IConnection> >();

            objClient.Disconnected += objHandler;

            //Act
            objClient.Disconnect();

            //Assert
            objKeepAliveMonitor.Received(1).TimeOut            -= Arg.Any <EventHandler>();
            objKeepAliveMonitor.Received(1).UnResponsive       -= Arg.Any <EventHandler>();
            objWebSocketBehavior.Received(1).OnCloseReceived   -= Arg.Any <EventHandler <ICloseEventArgs> >();
            objWebSocketBehavior.Received(1).OnErrorReceived   -= Arg.Any <EventHandler <IErrorEventArgs> >();
            objWebSocketBehavior.Received(1).OnMessageReceived -= Arg.Any <EventHandler <IMessageEventArgs> >();
            objKeepAliveMonitor.Received(1).Stop();
            objWebSocketBehavior.Received(1).Close();

            objHandler
            .Received(1)
            .Invoke(
                Arg.Is <IConnection.IConnection>(c => c.Equals(objClient)),
                Arg.Is(objClient)
                )
            ;
        }
예제 #3
0
        public void TransmitTest()
        {
            //Setup
            var objWebSocketBehavior = Substitute.For <IWebSocketBehavior>();
            var objKeepAliveMonitor  = Substitute.For <IKeepAliveMonitor>();
            var objClient            = new WebsocketSharp.Server.Client(objWebSocketBehavior, objKeepAliveMonitor);

            //Act
            objClient.Transmit(new byte[] { 1, 2, 3, 4 });
            System.Threading.Thread.Sleep(50); // wait a bit, data is being transmitted to IWebSocketBehavior on a separate thread

            //Assert
            objWebSocketBehavior.Received(1).SendAsync(Arg.Is <byte[]>(b => b.SequenceEqual(new byte[] { 1, 2, 3, 4 })));
        }
예제 #4
0
        public void KeepAliveTimeOutPingOKTest()
        {
            //Arrange
            var objWebSocketBehavior = Substitute.For <IWebSocketBehavior>();
            var objKeepAliveMonitor  = Substitute.For <IKeepAliveMonitor>();
            var objClient            = new WebsocketSharp.Server.Client(objWebSocketBehavior, objKeepAliveMonitor);

            objWebSocketBehavior.Ping().Returns(true);

            //Act
            objKeepAliveMonitor.TimeOut += Raise.EventWith(this, new EventArgs());

            //Assert
            objKeepAliveMonitor.Received(1).StartCountDown();
            objWebSocketBehavior.Received(1).Ping();
            objKeepAliveMonitor.Received(1).Reset();
        }
예제 #5
0
        public void CreateTest()
        {
            //Setup
            var objWebSocketBehavior = Substitute.For <IWebSocketBehavior>();
            var objKeepAliveMonitor  = Substitute.For <IKeepAliveMonitor>();

            //Act
            var objClient = new WebsocketSharp.Server.Client(objWebSocketBehavior, objKeepAliveMonitor);

            //Assert
            objKeepAliveMonitor.Received(1).TimeOut            += Arg.Any <EventHandler>();
            objKeepAliveMonitor.Received(1).UnResponsive       += Arg.Any <EventHandler>();
            objWebSocketBehavior.Received(1).OnCloseReceived   += Arg.Any <EventHandler <ICloseEventArgs> >();
            objWebSocketBehavior.Received(1).OnErrorReceived   += Arg.Any <EventHandler <IErrorEventArgs> >();
            objWebSocketBehavior.Received(1).OnMessageReceived += Arg.Any <EventHandler <IMessageEventArgs> >();

            objKeepAliveMonitor.Received(1).Start();
            Assert.IsTrue(Guid.TryParse(objClient.ID, out Guid objGuid));
        }
예제 #6
0
        public void DisconnectedOnErrorTest()
        {
            //Setup
            var objWebSocketBehavior = Substitute.For <IWebSocketBehavior>();
            var objKeepAliveMonitor  = Substitute.For <IKeepAliveMonitor>();
            var objClient            = new WebsocketSharp.Server.Client(objWebSocketBehavior, objKeepAliveMonitor);
            var objEventArgs         = Substitute.For <IErrorEventArgs>();
            var objHandler           = Substitute.For <EventHandler <IConnection.IConnection> >();

            objClient.Disconnected += objHandler;

            //Act
            objWebSocketBehavior.OnErrorReceived += Raise.Event <EventHandler <IErrorEventArgs> >(objClient, objEventArgs);

            //Assert
            objWebSocketBehavior.Received().OnCloseReceived   -= Arg.Any <EventHandler <ICloseEventArgs> >();
            objWebSocketBehavior.Received().OnErrorReceived   -= Arg.Any <EventHandler <IErrorEventArgs> >();
            objWebSocketBehavior.Received().OnMessageReceived -= Arg.Any <EventHandler <IMessageEventArgs> >();

            objHandler
            .Received(1)
            .Invoke(Arg.Is(objClient), Arg.Is(objClient));
        }
예제 #7
0
        public void RxPingTest()
        {
            //Setup
            var objWebSocketBehavior = Substitute.For <IWebSocketBehavior>();
            var objKeepAliveMonitor  = Substitute.For <IKeepAliveMonitor>();
            var objClient            = new WebsocketSharp.Server.Client(objWebSocketBehavior, objKeepAliveMonitor);
            var objEventArgs         = Substitute.For <IMessageEventArgs>();

            objEventArgs.IsBinary.Returns(false);
            objEventArgs.IsText.Returns(false);
            objEventArgs.IsPing.Returns(true);

            var eventReceived = false;

            objClient.Rx += delegate(object sender, byte[] data) {
                eventReceived = true;
            };

            //Act
            objWebSocketBehavior.OnMessageReceived += Raise.Event <EventHandler <IMessageEventArgs> >(objClient, objEventArgs);

            //Assert
            Assert.IsFalse(eventReceived, "Event received for ping while this should have been ignored");
        }