Exemplo n.º 1
0
        public void can_filter_out_message_types()
        {
            // server side
            var serverInbound = new QueuedHandler(
                new AdHocHandler <IMessage>(_tcs.SetResult),
                "InboundMessageQueuedHandler",
                true,
                TimeSpan.FromMilliseconds(1000));

            var tcpBusServerSide = new TcpBusServerSide(
                _hostAddress,
                port,
                inboundNondiscardingMessageTypes: new[] { typeof(WoftamEvent) },
                inboundNondiscardingMessageQueuedHandler: serverInbound);

            serverInbound.Start();

            // client side
            var tcpBusClientSide = new TcpBusClientSide(_hostAddress, port);

            // wait for tcp connection to be established
            AssertEx.IsOrBecomesTrue(() => tcpBusClientSide.IsConnected, 200);

            // put disallowed message into client
            tcpBusClientSide.Handle(new WoftamCommand("abc"));

            // expect to receive it in the server but drop it on the floor
            var gotMessage = _tcs.Task.Wait(TimeSpan.FromMilliseconds(1000));

            Assert.False(gotMessage);

            tcpBusClientSide.Dispose();
            tcpBusServerSide.Dispose();
        }
        public TcpBusClientSideTests()
        {
            var hostAddress = IPAddress.Loopback;
            var port        = 10000;

            _tcs = new TaskCompletionSource <IMessage>();

            // server side
            var serverInbound = new QueuedHandler(
                new AdHocHandler <IMessage>(m => { if (m is Command cmd)
                                                   {
                                                       _localBus.TrySend(cmd, out _);
                                                   }
                                            }),
                "InboundMessageServerHandler",
                true,
                TimeSpan.FromMilliseconds(1000));

            _tcpBusServerSide = new TcpBusServerSide(
                hostAddress,
                port,
                inboundNondiscardingMessageTypes: new[] { typeof(WoftamCommand) },
                inboundNondiscardingMessageQueuedHandler: serverInbound);

            _localBus.SubscribeToAll(_tcpBusServerSide);

            serverInbound.Start();

            // client side
            var clientInbound = new QueuedHandler(
                new AdHocHandler <IMessage>(_tcs.SetResult),
                "InboundMessageQueuedHandler",
                true,
                TimeSpan.FromMilliseconds(1000));

            _tcpBusClientSide = new TcpBusClientSide(
                hostAddress,
                port,
                inboundNondiscardingMessageTypes: new[] { typeof(CommandResponse) },
                inboundNondiscardingMessageQueuedHandler: clientInbound,
                messageSerializers: new Dictionary <Type, IMessageSerializer>
            {
                { typeof(WoftamCommandResponse), new WoftamCommandResponse.Serializer() }
            });

            clientInbound.Start();

            // wait for tcp connection to be established
            AssertEx.IsOrBecomesTrue(() => _tcpBusClientSide.IsConnected, 200);
        }
Exemplo n.º 3
0
        public void can_handle_split_frames()
        {
            // 16kb large enough to cause the transport to split up the frame.
            // it would be better if we did the splitting manually so we were sure it really happened.
            // would require mocking more things.
            var prop1 = "prop1";
            var prop2 = string.Join("", Enumerable.Repeat("a", 16 * 1024));

            // server side
            var serverInbound = new QueuedHandler(
                new AdHocHandler <IMessage>(_tcs.SetResult),
                "InboundMessageQueuedHandler",
                true,
                TimeSpan.FromMilliseconds(1000));

            var tcpBusServerSide = new TcpBusServerSide(
                _hostAddress,
                port,
                inboundNondiscardingMessageTypes: new[] { typeof(WoftamEvent) },
                inboundNondiscardingMessageQueuedHandler: serverInbound);

            serverInbound.Start();

            // client side
            var tcpBusClientSide = new TcpBusClientSide(_hostAddress, port);

            // wait for tcp connection to be established
            AssertEx.IsOrBecomesTrue(() => tcpBusClientSide.IsConnected, 200);

            // put message into client
            tcpBusClientSide.Handle(new WoftamEvent(prop1, prop2));

            // expect to receive it in the server
            var gotMessage = _tcs.Task.Wait(TimeSpan.FromMilliseconds(1000));

            Assert.True(gotMessage);
            var evt = Assert.IsType <WoftamEvent>(_tcs.Task.Result);

            Assert.Equal(prop1, evt.Property1);
            Assert.Equal(prop2, evt.Property2);

            tcpBusClientSide.Dispose();
            tcpBusServerSide.Dispose();
        }
        public void can_handle_split_frames()
        {
            // 16kb large enough to cause the transport to split up the frame.
            // it would be better if we did the splitting manually so we were sure it really happened.
            // would require mocking more things.
            var hostAddress = IPAddress.Loopback;
            var prop1       = "prop1";
            var prop2       = string.Join("", Enumerable.Repeat("a", 16 * 1024));
            var port        = 10000;
            var tcs         = new TaskCompletionSource <IMessage>();

            // server side
            var serverInbound = new QueuedHandler(
                new AdHocHandler <IMessage>(tcs.SetResult),
                "InboundMessageQueuedHandler",
                true,
                TimeSpan.FromMilliseconds(1000));

            var tcpBusServerSide = new TcpBusServerSide(hostAddress, port, null)
            {
                InboundMessageQueuedHandler = serverInbound,
                InboundSpamMessageTypes     = new List <Type>(),
            };

            serverInbound.Start();

            // client side
            var tcpBusClientSide = new TcpBusClientSide(null, hostAddress, port);

            // wait for tcp connection to be established (maybe an api to detect this would be nice)
            Thread.Sleep(TimeSpan.FromMilliseconds(200));

            // put message into client
            tcpBusClientSide.Handle(new WoftamEvent(prop1, prop2));

            // expect to receive it in the server
            var gotMessage = tcs.Task.Wait(TimeSpan.FromMilliseconds(1000));

            Assert.True(gotMessage);
            var evt = Assert.IsType <WoftamEvent>(tcs.Task.Result);

            Assert.Equal(prop1, evt.Property1);
            Assert.Equal(prop2, evt.Property2);
        }