public void should_send_message_to_persistence() { // standard case: the message is forwarded to the persistence through SendContext.PersistencePeer // the target peer is down var senderTransport = CreateAndStartZmqTransport(); var receiverPeerId = new PeerId("Abc.R.0"); var persistenceMessages = new ConcurrentBag <TransportMessage>(); var persistenceTransport = CreateAndStartZmqTransport(onMessageReceived: persistenceMessages.Add); var persistencePeer = new Peer(persistenceTransport.PeerId, persistenceTransport.InboundEndPoint); var message = new FakeCommand(999).ToTransportMessage(); senderTransport.Send(message, Enumerable.Empty <Peer>(), new SendContext { PersistentPeerIds = { receiverPeerId }, PersistencePeer = persistencePeer }); Wait.Until(() => persistenceMessages.Count == 1, 2.Seconds()); var messageFromPersistence = persistenceMessages.ExpectedSingle(); messageFromPersistence.ShouldHaveSamePropertiesAs(message, "Environment", "WasPersisted", "PersistentPeerIds", "IsPersistTransportMessage"); messageFromPersistence.Environment.ShouldEqual("Test"); messageFromPersistence.PersistentPeerIds.ShouldBeEquivalentTo(new[] { receiverPeerId }); }
public void should_send_messages() { var transport1ReceivedMessages = new ConcurrentBag <TransportMessage>(); var transport1 = CreateAndStartZmqTransport(onMessageReceived: transport1ReceivedMessages.Add); var transport1Peer = new Peer(transport1.PeerId, transport1.InboundEndPoint); var transport2ReceivedMessages = new ConcurrentBag <TransportMessage>(); var transport2 = CreateAndStartZmqTransport(onMessageReceived: transport2ReceivedMessages.Add); var transport2Peer = new Peer(transport2.PeerId, transport2.InboundEndPoint); var message1 = new FakeCommand(1).ToTransportMessage(); transport1.Send(message1, new[] { transport2Peer }); Wait.Until(() => transport2ReceivedMessages.Count == 1, 2.Seconds()); var transport2ReceivedMessage = transport2ReceivedMessages.ExpectedSingle(); transport2ReceivedMessage.ShouldHaveSamePropertiesAs(message1, "Environment", "WasPersisted"); transport2ReceivedMessage.Environment.ShouldEqual("Test"); transport2ReceivedMessage.WasPersisted.ShouldEqual(false); var message2 = new FakeCommand(2).ToTransportMessage(); transport2.Send(message2, new[] { transport1Peer }); Wait.Until(() => transport1ReceivedMessages.Count == 1, 2.Seconds()); var transport1ReceivedMessage = transport1ReceivedMessages.ExpectedSingle(); transport1ReceivedMessage.ShouldHaveSamePropertiesAs(message2, "Environment", "WasPersisted"); transport1ReceivedMessage.Environment.ShouldEqual("Test"); transport1ReceivedMessage.WasPersisted.ShouldEqual(false); }
public void should_send_persist_transport_message_to_persistence() { // edge case: the message is directly forwarded to the persistence var senderTransport = CreateAndStartZmqTransport(); var receiverPeerId = new PeerId("Abc.Receiver.123"); var persistenceMessages = new ConcurrentBag <TransportMessage>(); var persistenceTransport = CreateAndStartZmqTransport(onMessageReceived: persistenceMessages.Add); var persistencePeer = new Peer(persistenceTransport.PeerId, persistenceTransport.InboundEndPoint); var message = new FakeCommand(999).ToTransportMessage().ToPersistTransportMessage(receiverPeerId); senderTransport.Send(message, new[] { persistencePeer }); Wait.Until(() => persistenceMessages.Count == 1, 2.Seconds()); var messageFromPersistence = persistenceMessages.ExpectedSingle(); messageFromPersistence.ShouldHaveSamePropertiesAs(message, "Environment", "WasPersisted"); messageFromPersistence.Environment.ShouldEqual("Test"); messageFromPersistence.PersistentPeerIds.ShouldBeEquivalentTo(new[] { receiverPeerId }); }