예제 #1
0
        public void Can_publish()
        {
            IWebSocketsClient            webSocketsClient = Substitute.For <IWebSocketsClient>();
            NdmWebSocketsConsumerChannel channel          = new NdmWebSocketsConsumerChannel(webSocketsClient);

            channel.PublishAsync(Keccak.Zero, "client", "data");
            webSocketsClient.Received().SendAsync(Arg.Is <WebSocketsMessage>(ws => ws.Client == "client" && ws.Type == "data_received"));
        }
        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();
        }
예제 #3
0
        public void Forwards_raw_messages_to_ws_client()
        {
            IWebSocketsClient webSocketsClient = Substitute.For <IWebSocketsClient>();

            webSocketsClient.Id.Returns(nameof(NdmWebSocketsClientTests) + "_id");

            INdmDataPublisher   dataPublisher = Substitute.For <INdmDataPublisher>();
            NdmWebSocketsClient client        = new NdmWebSocketsClient(webSocketsClient, dataPublisher);

            client.SendRawAsync("raw");

            webSocketsClient.Received().SendRawAsync("raw");
        }
예제 #4
0
        public void Forwards_messages_to_ws_client()
        {
            IWebSocketsClient webSocketsClient = Substitute.For <IWebSocketsClient>();

            webSocketsClient.Id.Returns(nameof(NdmWebSocketsClientTests) + "_id");

            INdmDataPublisher   dataPublisher = Substitute.For <INdmDataPublisher>();
            NdmWebSocketsClient client        = new NdmWebSocketsClient(webSocketsClient, dataPublisher);
            WebSocketsMessage   message       = new WebSocketsMessage("type", "client", "data");

            client.SendAsync(message);

            webSocketsClient.Received().SendAsync(message);
        }
        public async Task Can_receive_whole_message()
        {
            Queue <WebSocketReceiveResult> receiveResult = new Queue <WebSocketReceiveResult>();

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

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

            await mock.ReceiveAsync(webSocketsClient);

            await webSocketsClient.Received().ReceiveAsync(Arg.Is <Memory <byte> >(ba => ba.Length == 2 * 4096 + 1024));
        }
        public async Task Can_receive_many_messages()
        {
            Queue <WebSocketReceiveResult> receiveResult = new Queue <WebSocketReceiveResult>();

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

            receiveResult.Enqueue(new WebSocketReceiveResult(0, WebSocketMessageType.Close, true));

            WebSocketMock     mock             = new WebSocketMock(receiveResult);
            IWebSocketsClient webSocketsClient = Substitute.For <IWebSocketsClient>();

            await mock.ReceiveAsync(webSocketsClient);

            await webSocketsClient.Received(1000).ReceiveAsync(Arg.Is <Memory <byte> >(ba => ba.Length == 1234));
        }
        public async Task Can_receive_whole_message_non_buffer_sizes()
        {
            Queue <WebSocketReceiveResult> receiveResult = new Queue <WebSocketReceiveResult>();

            for (int i = 0; i < 6; i++)
            {
                receiveResult.Enqueue(new WebSocketReceiveResult(2000, 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>();

            await mock.ReceiveAsync(webSocketsClient);

            await webSocketsClient.Received().ReceiveAsync(Arg.Is <Memory <byte> >(ba => ba.Length == 6 * 2000 + 1));
        }