示例#1
0
        public void CloseFrameSentWhenServerChannelClosedSilently()
        {
            EmbeddedChannel client = CreateClient();
            EmbeddedChannel server = CreateServer();

            Assert.False(server.WriteInbound(client.ReadOutbound <object>()));
            Assert.False(client.WriteInbound(server.ReadOutbound <object>()));

            // When server channel closed without explicit close-frame
            server.CloseAsync();

            // Then client receives NORMAL_CLOSURE close-frame
            Assert.True(client.WriteInbound(server.ReadOutbound <object>()));
            Assert.False(server.Open);

            CloseWebSocketFrame closeMessage = client.ReadInbound <CloseWebSocketFrame>();

            Assert.Equal(closeMessage.StatusCode(), WebSocketCloseStatus.NormalClosure.Code);
            closeMessage.Release();

            client.CloseAsync();
            Assert.True(ReferenceCountUtil.Release(client.ReadOutbound <object>()));
            Assert.False(client.FinishAndReleaseAll());
            Assert.False(server.FinishAndReleaseAll());
        }
示例#2
0
        public void ExplicitCloseFrameSentWhenClientChannelClosed()
        {
            WebSocketCloseStatus closeStatus = WebSocketCloseStatus.InvalidPayloadData;
            EmbeddedChannel      client      = CreateClient();
            EmbeddedChannel      server      = CreateServer();

            Assert.False(server.WriteInbound(client.ReadOutbound <object>()));
            Assert.False(client.WriteInbound(server.ReadOutbound <object>()));

            // When client channel closed with explicit close-frame
            Assert.True(client.WriteOutbound(new CloseWebSocketFrame(closeStatus)));
            client.CloseAsync();

            // Then client receives provided close-frame
            Assert.False(server.WriteInbound(client.ReadOutbound <object>()));
            Assert.False(client.Open);
            Assert.False(server.Open);

            CloseWebSocketFrame closeMessage = Decode <CloseWebSocketFrame>(server.ReadOutbound <IByteBuffer>());

            Assert.Equal(closeMessage.StatusCode(), closeStatus.Code);
            closeMessage.Release();

            Assert.False(client.FinishAndReleaseAll());
            Assert.False(server.FinishAndReleaseAll());
        }
示例#3
0
        public void ExplicitCloseFrameSentWhenServerChannelClosed()
        {
            WebSocketCloseStatus closeStatus = WebSocketCloseStatus.EndpointUnavailable;
            EmbeddedChannel      client      = CreateClient();
            EmbeddedChannel      server      = CreateServer();

            Assert.False(server.WriteInbound(client.ReadOutbound <object>()));
            Assert.False(client.WriteInbound(server.ReadOutbound <object>()));

            // When server channel closed with explicit close-frame
            Assert.True(server.WriteOutbound(new CloseWebSocketFrame(closeStatus)));
            server.CloseAsync();

            // Then client receives provided close-frame
            Assert.True(client.WriteInbound(server.ReadOutbound <object>()));
            Assert.False(server.Open);

            CloseWebSocketFrame closeMessage = client.ReadInbound <CloseWebSocketFrame>();

            Assert.Equal(closeMessage.StatusCode(), closeStatus.Code);
            closeMessage.Release();

            client.CloseAsync();
            Assert.True(ReferenceCountUtil.Release(client.ReadOutbound <object>()));
            Assert.False(client.FinishAndReleaseAll());
            Assert.False(server.FinishAndReleaseAll());
        }