public async Task Stream_Lifecycle_AddRemoveProducers() { string testName = "Stream_Lifecycle_AddRemoveProducers"; StreamTestUtils.LogStartTest(testName, StreamId, StreamProviderName, logger, HostedCluster); int numProducers = 10; var consumer = GrainClient.GrainFactory.GetGrain <IStreamLifecycleConsumerInternalGrain>(Guid.NewGuid()); await consumer.BecomeConsumer(StreamId, StreamNamespace, StreamProviderName); var producers = new IStreamLifecycleProducerInternalGrain[numProducers]; for (int i = 1; i <= producers.Length; i++) { var producer = GrainClient.GrainFactory.GetGrain <IStreamLifecycleProducerInternalGrain>(Guid.NewGuid()); producers[i - 1] = producer; } int expectedReceived = 0; string when = "round 1"; await IncrementalAddProducers(producers, when); expectedReceived += numProducers; Assert.AreEqual(expectedReceived, await consumer.GetReceivedCount(), "ReceivedCount after " + when); for (int i = producers.Length; i > 0; i--) { var producer = producers[i - 1]; // Force Remove await producer.TestInternalRemoveProducer(StreamId, StreamProviderName); await StreamTestUtils.CheckPubSubCounts(output, "producer #" + i + " remove", (i - 1), 1, StreamId, StreamProviderName, StreamNamespace); } when = "round 2"; await IncrementalAddProducers(producers, when); expectedReceived += numProducers; Assert.AreEqual(expectedReceived, await consumer.GetReceivedCount(), "ReceivedCount after " + when); List <Task> promises = new List <Task>(); for (int i = producers.Length; i > 0; i--) { var producer = producers[i - 1]; // Remove when Deactivate promises.Add(producer.DoDeactivateNoClose()); } await Task.WhenAll(promises); await WaitForDeactivation(); await StreamTestUtils.CheckPubSubCounts(output, "all producers deactivated", 0, 1, StreamId, StreamProviderName, StreamNamespace); when = "round 3"; await IncrementalAddProducers(producers, when); expectedReceived += numProducers; Assert.AreEqual(expectedReceived, await consumer.GetReceivedCount(), "ReceivedCount after " + when); }
public async Task Stream_Lifecycle_AddRemoveProducers() { string testName = TestContext.TestName; StreamTestUtils.LogStartTest(testName, StreamId, StreamProviderName, logger); int numProducers = 10; var consumer = GrainClient.GrainFactory.GetGrain<IStreamLifecycleConsumerInternalGrain>(Guid.NewGuid()); await consumer.BecomeConsumer(StreamId, StreamNamespace, StreamProviderName); var producers = new IStreamLifecycleProducerInternalGrain[numProducers]; for (int i = 1; i <= producers.Length; i++) { var producer = GrainClient.GrainFactory.GetGrain<IStreamLifecycleProducerInternalGrain>(Guid.NewGuid()); producers[i - 1] = producer; } int expectedReceived = 0; string when = "round 1"; await IncrementalAddProducers(producers, when); expectedReceived += numProducers; Assert.AreEqual(expectedReceived, await consumer.GetReceivedCount(), "ReceivedCount after " + when); for (int i = producers.Length; i > 0; i--) { var producer = producers[i - 1]; // Force Remove await producer.TestInternalRemoveProducer(StreamId, StreamProviderName); await StreamTestUtils.CheckPubSubCounts("producer #" + i + " remove", (i - 1), 1, StreamId, StreamProviderName, StreamNamespace); } when = "round 2"; await IncrementalAddProducers(producers, when); expectedReceived += numProducers; Assert.AreEqual(expectedReceived, await consumer.GetReceivedCount(), "ReceivedCount after " + when); List<Task> promises = new List<Task>(); for (int i = producers.Length; i > 0; i--) { var producer = producers[i - 1]; // Remove when Deactivate promises.Add(producer.DoDeactivateNoClose()); } await Task.WhenAll(promises); await WaitForDeactivation(); await StreamTestUtils.CheckPubSubCounts("all producers deactivated", 0, 1, StreamId, StreamProviderName, StreamNamespace); when = "round 3"; await IncrementalAddProducers(producers, when); expectedReceived += numProducers; Assert.AreEqual(expectedReceived, await consumer.GetReceivedCount(), "ReceivedCount after " + when); }