public async Task Throws_on_too_long_message()
        {
            Queue <WebSocketReceiveResult> receiveResult = new Queue <WebSocketReceiveResult>();

            for (int i = 0; i < 1024; i++)
            {
                receiveResult.Enqueue(new WebSocketReceiveResult(1024, WebSocketMessageType.Text, false));
            }

            receiveResult.Enqueue(new WebSocketReceiveResult(1, WebSocketMessageType.Text, true));
            receiveResult.Enqueue(new WebSocketReceiveResult(0, WebSocketMessageType.Close, true));
            WebSocketMock mock = new WebSocketMock(receiveResult);

            IWebSocketsClient webSocketsClient = Substitute.For <IWebSocketsClient>();

            Assert.ThrowsAsync <InvalidOperationException>(async() => await mock.ReceiveAsync(webSocketsClient));
            await webSocketsClient.DidNotReceive().ReceiveAsync(Arg.Any <Memory <byte> >());
        }
        public void Can_publish_on_various_channel_types()
        {
            NdmConsumerChannelManager manager = new NdmConsumerChannelManager();

            IWebSocketsClient client = Substitute.For <IWebSocketsClient>();

            INdmConsumerChannel[] channels = new INdmConsumerChannel[]
            {
                new JsonRpcNdmConsumerChannel(LimboLogs.Instance),
                new GrpcNdmConsumerChannel(Substitute.For <IGrpcServer>()),
                new NdmWebSocketsConsumerChannel(client),
            };

            ((JsonRpcNdmConsumerChannel)channels[0]).Pull(Keccak.Zero).Should().BeNull();

            for (int i = 0; i < 3; i++)
            {
                manager.Add(channels[i]);
            }

            channels[0].Type.Should().Be(NdmConsumerChannelType.JsonRpc);
            channels[1].Type.Should().Be(NdmConsumerChannelType.Grpc);

            manager.PublishAsync(Keccak.Zero, "client1", "data1");
            manager.PublishAsync(Keccak.Zero, "client2", "data2");

            for (int i = 0; i < 3; i++)
            {
                manager.Remove(channels[i]);
            }

            manager.PublishAsync(Keccak.Zero, "client3", "data3");

            for (int i = 0; i < 3; i++)
            {
                client.Received().SendAsync(Arg.Is <WebSocketsMessage>(wm => wm.Client == "client1"));
                client.Received().SendAsync(Arg.Is <WebSocketsMessage>(wm => wm.Client == "client2"));
                client.DidNotReceive().SendAsync(Arg.Is <WebSocketsMessage>(wm => wm.Client == "client3"));
            }

            ((JsonRpcNdmConsumerChannel)channels[0]).Pull(Keccak.Zero).Should().NotBeNull();
            ((JsonRpcNdmConsumerChannel)channels[0]).Pull(Keccak.Zero).Should().NotBeNull();
            ((JsonRpcNdmConsumerChannel)channels[0]).Pull(Keccak.Zero).Should().BeNull();
        }