Exemplo n.º 1
0
        public void should_not_forward_messages_to_upper_layer_when_stopping()
        {
            var receivedMessages = new List<TransportMessage>();

            var receivingPeerId = new PeerId("Abc.Receiving.0");
            var stopwatch = Stopwatch.StartNew();
            var receivingTransport = CreateAndStartZmqTransport(onMessageReceived: receivedMessages.Add, peerId: receivingPeerId.ToString(),
                                                                transportFactory: conf => new CapturingIsListeningTimeZmqTransport(conf, stopwatch));
            var receivingPeer = new Peer(receivingPeerId, receivingTransport.InboundEndPoint);
            var messageSerializer = new MessageSerializer();
            bool receivedWhileNotListening = false;
            receivingTransport.MessageReceived += message =>
            {
                var cmdWithTimetamp = (FakeCommandWithTimestamp)messageSerializer.Deserialize(message.MessageTypeId, message.MessageBytes);

                if (cmdWithTimetamp.Timestamp > ((CapturingIsListeningTimeZmqTransport)receivingTransport).IsListeningSwitchTimestamp)
                    receivedWhileNotListening = true;
            };

            var sendingTransport = CreateAndStartZmqTransport();
            var shouldSendMessages = true;
            var sendTask = Task.Factory.StartNew(() =>
            {
                while (shouldSendMessages)
                    sendingTransport.Send(new FakeCommandWithTimestamp(stopwatch.Elapsed).ToTransportMessage(), new[] { receivingPeer });

            });
            Wait.Until(() => sendTask.Status == TaskStatus.Running, 10.Seconds());
            Wait.Until(() => receivedMessages.Count > 1, 10.Seconds());

            receivingTransport.Stop();

            receivedWhileNotListening.ShouldBeFalse();
            shouldSendMessages = false;
            sendingTransport.Stop();
        }