public void Test_FlushChannelMessages() { TestMessage1 msg1 = new TestMessage1(); msg1.Data.Add(100); msg1.Data.Add(200); string channel1Name = "TestChannel1"; TestMessage2 msg2 = new TestMessage2(); msg2.Data.Add(1000); msg2.Data.Add(2000); string channel2Name = "TestChannel2"; // Setup the mocks MockDistributedMemoryManager distributedMemoryManagerMock = new MockDistributedMemoryManager(); DeferredChannelMessageContextEntry entry = new DeferredChannelMessageContextEntry(distributedMemoryManagerMock); entry.AddOrUpdateMessage(channel1Name, msg1, null); entry.AddOrUpdateMessage(channel2Name, msg2, null); entry.FlushMessages(); TestMessage1 msg1Out; TestMessage2 msg2Out; Assert.IsFalse(entry.TryGetMessage(channel1Name, out msg1Out), "Channel1 should have no messages"); Assert.IsFalse(entry.TryGetMessage(channel2Name, out msg2Out), "Channel2 should have no messages"); // Validation MockChannel <TestMessage1> channel1 = distributedMemoryManagerMock.CreatedChannels[channel1Name] as MockChannel <TestMessage1>; Assert.IsNotNull(channel1, "{0} was not found", channel1Name); Assert.AreEqual(1, channel1.PublishedMessages.Count); Assert.AreSame(msg1, channel1.PublishedMessages[0]); MockChannel <TestMessage2> channel2 = distributedMemoryManagerMock.CreatedChannels[channel2Name] as MockChannel <TestMessage2>; Assert.IsNotNull(channel2, "{0} was not found", channel2Name); Assert.AreEqual(1, channel2.PublishedMessages.Count); Assert.AreSame(msg2, channel2.PublishedMessages[0]); }
public void Test_AddOrUpdateMessage_Merge_FlushChannelMessages() { TestMessage1 msg11 = new TestMessage1(); msg11.Data.Add(100); msg11.Data.Add(200); TestMessage1 msg12 = new TestMessage1(); msg12.Data.Add(300); msg12.Data.Add(400); string channel1Name = "TestChannel1"; TestMessage2 msg21 = new TestMessage2(); msg21.Data.Add(1000); msg21.Data.Add(2000); TestMessage2 msg22 = new TestMessage2(); msg22.Data.Add(3000); msg22.Data.Add(4000); msg22.Data.Add(5000); string channel2Name = "TestChannel2"; // Setup the mocks MockDistributedMemoryManager distributedMemoryManagerMock = new MockDistributedMemoryManager(); DeferredChannelMessageContextEntry entry = new DeferredChannelMessageContextEntry(distributedMemoryManagerMock); entry.AddOrUpdateMessage(channel1Name, msg11, (e, n) => e.Data.UnionWith(n.Data)); entry.AddOrUpdateMessage(channel1Name, msg12, (e, n) => e.Data.UnionWith(n.Data)); // This will merge entry.AddOrUpdateMessage(channel2Name, msg21, (e, n) => e.Data.UnionWith(n.Data)); entry.AddOrUpdateMessage(channel2Name, msg22, (e, n) => e.Data.UnionWith(n.Data)); // This will merge entry.FlushMessages(); TestMessage1 msg1Out; TestMessage2 msg2Out; Assert.IsFalse(entry.TryGetMessage(channel1Name, out msg1Out), "Channel1 should have no messages"); Assert.IsFalse(entry.TryGetMessage(channel2Name, out msg2Out), "Channel2 should have no messages"); // Validation MockChannel <TestMessage1> channel1 = distributedMemoryManagerMock.CreatedChannels[channel1Name] as MockChannel <TestMessage1>; Assert.IsNotNull(channel1, "{0} was not found", channel1Name); Assert.AreEqual(1, channel1.PublishedMessages.Count); // Should still have only one message as it has been merged SortedSet <int> msg1Data = new SortedSet <int>(); msg1Data.UnionWith(msg11.Data); msg1Data.UnionWith(msg12.Data); Assert.AreEqual(msg1Data.Count, channel1.PublishedMessages[0].Data.Count); Assert.IsTrue(channel1.PublishedMessages[0].Data.SetEquals(msg1Data)); MockChannel <TestMessage2> channel2 = distributedMemoryManagerMock.CreatedChannels[channel2Name] as MockChannel <TestMessage2>; Assert.IsNotNull(channel2, "{0} was not found", channel2Name); Assert.AreEqual(1, channel2.PublishedMessages.Count); // Should still have only one message as it has been merged SortedSet <int> msg2Data = new SortedSet <int>(); msg2Data.UnionWith(msg21.Data); msg2Data.UnionWith(msg22.Data); Assert.AreEqual(msg2Data.Count, channel2.PublishedMessages[0].Data.Count); Assert.IsTrue(channel2.PublishedMessages[0].Data.SetEquals(msg2Data)); }