private async Task Test_PubSub_MultiProducerSameGrain(string testName, string streamProviderName) { _streamId = Guid.NewGuid(); _streamProviderName = streamProviderName; StreamTestUtils.LogStartTest(testName, _streamId, _streamProviderName, logger, HostedCluster); // Grain Producer -> Grain 2 x Consumer long consumerGrainId = random.Next(); long producerGrainId = random.Next(); string when; logger.Info("Initializing: ConsumerGrain={0} ProducerGrain={1}", consumerGrainId, producerGrainId); var consumerGrain = GetGrain(consumerGrainId); var producerGrain = GetGrain(producerGrainId); logger.Info("BecomeProducer: StreamId={0} Provider={1}", _streamId, _streamProviderName); await producerGrain.BecomeProducer(_streamId, _streamProviderName); when = "After first BecomeProducer"; // Note: Only semantics guarenteed for producer is that they will have been registered by time that first msg is sent. await producerGrain.SendItem(0); await StreamTestUtils.CheckPubSubCounts(this.InternalClient, output, when, 1, 0, _streamId, _streamProviderName, StreamTestsConstants.StreamReliabilityNamespace); await producerGrain.BecomeProducer(_streamId, _streamProviderName); when = "After second BecomeProducer"; await producerGrain.SendItem(0); await StreamTestUtils.CheckPubSubCounts(this.InternalClient, output, when, 1, 0, _streamId, _streamProviderName, StreamTestsConstants.StreamReliabilityNamespace); logger.Info("AddConsumer x 2 : StreamId={0} Provider={1}", _streamId, _streamProviderName); await consumerGrain.AddConsumer(_streamId, _streamProviderName); when = "After first AddConsumer"; await StreamTestUtils.CheckPubSubCounts(this.InternalClient, output, when, 1, 1, _streamId, _streamProviderName, StreamTestsConstants.StreamReliabilityNamespace); await consumerGrain.AddConsumer(_streamId, _streamProviderName); when = "After second AddConsumer"; await StreamTestUtils.CheckPubSubCounts(this.InternalClient, output, when, 1, 2, _streamId, _streamProviderName, StreamTestsConstants.StreamReliabilityNamespace); StreamTestUtils.LogEndTest(testName, logger); }
private async Task Test_AllSilosRestart_PubSubCounts(string testName, string streamProviderName) { _streamId = Guid.NewGuid(); _streamProviderName = streamProviderName; StreamTestUtils.LogStartTest(testName, _streamId, _streamProviderName, logger, HostedCluster); long consumerGrainId = random.Next(); long producerGrainId = random.Next(); #if USE_GENERICS IStreamReliabilityTestGrain <int> producerGrain = #else IStreamReliabilityTestGrain producerGrain = #endif await Do_BaselineTest(consumerGrainId, producerGrainId); string when = "Before restart all silos"; await StreamTestUtils.CheckPubSubCounts(this.InternalClient, output, when, 1, 1, _streamId, _streamProviderName, StreamTestsConstants.StreamReliabilityNamespace); // Restart silos //RestartDefaultSilosButKeepCurrentClient(testName); RestartAllSilos(); when = "After restart all silos"; CheckSilosRunning(when, numExpectedSilos); // Note: It is not guaranteed that the list of producers will not get modified / cleaned up during silo shutdown, so can't assume count will be 1 here. // Expected == -1 means don't care. await StreamTestUtils.CheckPubSubCounts(this.InternalClient, output, when, -1, 1, _streamId, _streamProviderName, StreamTestsConstants.StreamReliabilityNamespace); await producerGrain.SendItem(1); when = "After SendItem"; await StreamTestUtils.CheckPubSubCounts(this.InternalClient, output, when, 1, 1, _streamId, _streamProviderName, StreamTestsConstants.StreamReliabilityNamespace); var consumerGrain = GetGrain(consumerGrainId); await CheckReceivedCounts(when, consumerGrain, 1, 0); StreamTestUtils.LogEndTest(testName, logger); }
private async Task Test_PubSub_Unsubscribe(string testName, string streamProviderName) { _streamId = Guid.NewGuid(); _streamProviderName = streamProviderName; StreamTestUtils.LogStartTest(testName, _streamId, _streamProviderName, logger, HostedCluster); // Grain Producer -> Grain 2 x Consumer // Note: PubSub should only count distinct grains, even if a grain has multiple consumer handles long consumerGrainId = random.Next(); long producerGrainId = random.Next(); string when; logger.Info("Initializing: ConsumerGrain={0} ProducerGrain={1}", consumerGrainId, producerGrainId); var consumerGrain = GetGrain(consumerGrainId); var producerGrain = GetGrain(producerGrainId); logger.Info("BecomeProducer: StreamId={0} Provider={1}", _streamId, _streamProviderName); await producerGrain.BecomeProducer(_streamId, _streamProviderName); await producerGrain.BecomeProducer(_streamId, _streamProviderName); when = "After BecomeProducer"; // Note: Only semantics guarenteed are that producer will have been registered by time that first msg is sent. await producerGrain.SendItem(0); await StreamTestUtils.CheckPubSubCounts(this.InternalClient, output, when, 1, 0, _streamId, _streamProviderName, StreamTestsConstants.StreamReliabilityNamespace); logger.Info("AddConsumer x 2 : StreamId={0} Provider={1}", _streamId, _streamProviderName); var c1 = await consumerGrain.AddConsumer(_streamId, _streamProviderName); when = "After first AddConsumer"; await StreamTestUtils.CheckPubSubCounts(this.InternalClient, output, when, 1, 1, _streamId, _streamProviderName, StreamTestsConstants.StreamReliabilityNamespace); await CheckConsumerCounts(when, consumerGrain, 1); var c2 = await consumerGrain.AddConsumer(_streamId, _streamProviderName); when = "After second AddConsumer"; await StreamTestUtils.CheckPubSubCounts(this.InternalClient, output, when, 1, 2, _streamId, _streamProviderName, StreamTestsConstants.StreamReliabilityNamespace); await CheckConsumerCounts(when, consumerGrain, 2); logger.Info("RemoveConsumer: StreamId={0} Provider={1}", _streamId, _streamProviderName); await consumerGrain.RemoveConsumer(_streamId, _streamProviderName, c1); when = "After first RemoveConsumer"; await StreamTestUtils.CheckPubSubCounts(this.InternalClient, output, when, 1, 1, _streamId, _streamProviderName, StreamTestsConstants.StreamReliabilityNamespace); await CheckConsumerCounts(when, consumerGrain, 1); #if REMOVE_PRODUCER logger.Info("RemoveProducer: StreamId={0} Provider={1}", _streamId, _streamProviderName); await producerGrain.RemoveProducer(_streamId, _streamProviderName); when = "After RemoveProducer"; await CheckPubSubCounts(when, 0, 1); await CheckConsumerCounts(when, consumerGrain, 1); #endif logger.Info("RemoveConsumer: StreamId={0} Provider={1}", _streamId, _streamProviderName); await consumerGrain.RemoveConsumer(_streamId, _streamProviderName, c2); when = "After second RemoveConsumer"; #if REMOVE_PRODUCER await CheckPubSubCounts(when, 0, 0); #else await StreamTestUtils.CheckPubSubCounts(this.InternalClient, output, when, 1, 0, _streamId, _streamProviderName, StreamTestsConstants.StreamReliabilityNamespace); #endif await CheckConsumerCounts(when, consumerGrain, 0); StreamTestUtils.LogEndTest(testName, logger); }