Exemple #1
0
        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]);
        }
Exemple #2
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));
        }