public async Task CanCloseTheChannel()
        {
            var webSocket = Mock.Of <WebSocket>(ws => ws.State == WebSocketState.Open);
            var channel   = new ServerWebSocketChannel(webSocket, Mock.Of <EndPoint>());
            var loop      = new SingleThreadEventLoop();
            await loop.RegisterAsync(channel);

            await channel.CloseAsync();

            Assert.False(channel.Active);
            Mock.Get(webSocket).Verify(
                ws => ws.CloseAsync(WebSocketCloseStatus.NormalClosure, It.IsAny <string>(), It.IsAny <CancellationToken>()));
        }
        public async Task DoesNotCloseAnAlreadyClosedWebSocket()
        {
            var webSocket = Mock.Of <WebSocket>(ws => ws.State == WebSocketState.Open);
            var channel   = new ServerWebSocketChannel(webSocket, Mock.Of <EndPoint>());
            var loop      = new SingleThreadEventLoop();
            await loop.RegisterAsync(channel);

            Mock <WebSocket> wsMock = Mock.Get(webSocket);

            wsMock.Setup(ws => ws.State).Returns(WebSocketState.Closed);
            wsMock.Setup(ws => ws.CloseAsync(It.IsAny <WebSocketCloseStatus>(), It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .Throws(new Exception("WebSocket.CloseAsync should not be called"));

            await channel.CloseAsync();
        }