public void TestSingleEventWithCompetingConsumers() { var ircSettings = new InterRoleCommunicationSettings() { UseCompetingConsumers = true, EventWaitTimeout = TimeSpan.FromSeconds(10) }; using (InterRoleCommunicationExtension irc1 = new InterRoleCommunicationExtension(topicEndpoint, ircSettings)) using (InterRoleCommunicationExtension irc2 = new InterRoleCommunicationExtension(topicEndpoint, ircSettings)) using (InterRoleCommunicationExtension irc3 = new InterRoleCommunicationExtension(topicEndpoint, ircSettings)) using (InterRoleCommunicationExtension irc4 = new InterRoleCommunicationExtension(topicEndpoint, ircSettings)) { var subscriber1 = new EventCountingSubscriber(); irc1.Subscribe(subscriber1); irc2.Subscribe(subscriber1); irc3.Subscribe(subscriber1); irc4.Subscribe(subscriber1); InterRoleCommunicationEvent ev = new InterRoleCommunicationEvent(new RoleGracefulRecycleEvent(typeof(TopicBasedInterRoleCommunicationTests).FullName)); irc1.Publish(ev); irc1.Publish(ev); irc1.Publish(ev); Thread.Sleep(irc4.Settings.EventWaitTimeout.Add(TimeSpan.FromSeconds(5))); Assert.AreEqual<int>(3, subscriber1.OnNextCount); } }
public void TestMultipleEvents() { using (InterRoleCommunicationExtension ircExtension = new InterRoleCommunicationExtension(topicEndpoint, new InterRoleCommunicationSettings() { EnableCarbonCopy = true })) { var subscriber1 = new EventCountingSubscriber(); ircExtension.Subscribe(subscriber1); int eventCount = 100; int waitAttemptCount = 0; for (int i = 0; i < eventCount; i++) { ircExtension.Publish(new InterRoleCommunicationEvent(new RoleConfigurationSectionRefreshEvent(String.Format("Message #{0}", i)))); } while (subscriber1.OnNextCount != eventCount) { Thread.Sleep(ircExtension.Settings.EventWaitTimeout.Add(TimeSpan.FromSeconds(5))); waitAttemptCount++; if (waitAttemptCount > 10) break; } Assert.AreEqual<int>(eventCount, subscriber1.OnNextCount); } }
public void TestSingleEventWithMultipleSubscribers() { using (InterRoleCommunicationExtension ircExtension = new InterRoleCommunicationExtension(topicEndpoint, new InterRoleCommunicationSettings() { EnableCarbonCopy = true })) { var subscriber1 = new EventCountingSubscriber(); var subscriber2 = new EventCountingSubscriber(); var subscriber3 = new EventCountingSubscriber(); ircExtension.Subscribe(subscriber1); ircExtension.Subscribe(subscriber2); ircExtension.Subscribe(subscriber3); InterRoleCommunicationEvent ev = new InterRoleCommunicationEvent(new RoleGracefulRecycleEvent(typeof(TopicBasedInterRoleCommunicationTests).FullName)); ircExtension.Publish(ev); Thread.Sleep(ircExtension.Settings.EventWaitTimeout.Add(TimeSpan.FromSeconds(5))); Assert.AreEqual<int>(1, subscriber1.OnNextCount); Assert.AreEqual<int>(1, subscriber2.OnNextCount); Assert.AreEqual<int>(1, subscriber3.OnNextCount); } }
public void TestSingleEventWithNetworkFaultSimulation() { try { using (InterRoleCommunicationExtension ircExtension = new InterRoleCommunicationExtension(topicEndpoint, new InterRoleCommunicationSettings() { EnableCarbonCopy = true, EnableAsyncPublish = false, EventWaitTimeout = TimeSpan.FromSeconds(3) })) { bool retryOccurred = false; ircExtension.Settings.RetryPolicy.RetryOccurred += (currentRetryCount, ex, delay) => { retryOccurred = true; NetworkUtility.EnableNetworkAdapter(); }; var subscriber1 = new EventCountingSubscriber(); ircExtension.Subscribe(subscriber1); NetworkUtility.DisableNetworkAdapter(); InterRoleCommunicationEvent ev = new InterRoleCommunicationEvent(new RoleGracefulRecycleEvent(typeof(TopicBasedInterRoleCommunicationTests).FullName)); ircExtension.Publish(ev); while (subscriber1.OnNextCount == 0) { Thread.Sleep(ircExtension.Settings.EventWaitTimeout.Add(TimeSpan.FromSeconds(5))); } Assert.IsTrue(retryOccurred, "A retry condition does not seem to have occurred."); Assert.AreEqual<int>(1, subscriber1.OnNextCount); } } finally { NetworkUtility.EnableNetworkAdapter(); } }