public void Test_PubSubMessenger_MessageFiltering() { // Arrange var messenger = new PubSubMessenger(new PubSubJsonAuthConfig() { JsonAuthFile = _fixture.CredentialPath, ProjectId = _fixture.ProjectId }); var manager = messenger.EntityManager as PubSubManager; // Act // Create the filter topic for testing. manager.CreateTopicDefaults(_fixture.MessageFilterTopic, null, "defaultsub").GetAwaiter().GetResult(); manager.CreateSubscription(_fixture.MessageFilterTopic, "filteredsub", "attributes:pickme").GetAwaiter().GetResult(); // Send two messages, one that wont be picked up by the filter subscription and the other that // will. The result is two messages to the defaultsub, one to filteredsub messenger.Send(_fixture.MessageFilterTopic, "test").GetAwaiter().GetResult(); messenger.Send(_fixture.MessageFilterTopic, "testfilter", new KeyValuePair <string, object>[] { new KeyValuePair <string, object>("pickme", "please") }).GetAwaiter().GetResult(); // Receive from both subscriptions. var nonFilteredMessages = messenger.ReceiveBatch <string>("defaultsub", 100).GetAwaiter().GetResult(); var filteredMessages = messenger.ReceiveBatch <string>("filteredsub", 100).GetAwaiter().GetResult(); var filteredMessage = messenger.ReceiveOne <string>("filteredsub").GetAwaiter().GetResult(); // Assert nonFilteredMessages.Count().Should().Be(2); filteredMessages.Count().Should().Be(1); filteredMessage.Should().NotBe(null); filteredMessage.Should().Be("testfilter"); }
public void Test_PubSubMessenger_StreamMessages() { // Arrange var pubsub = new PubSubMessenger(new PubSubJsonAuthConfig() { JsonAuthFile = _fixture.CredentialPath, ProjectId = _fixture.ProjectId, ReceiverConfig = new ReceiverConfig { EntityName = _fixture.StreamTopicName, CreateEntityIfNotExists = true }, Sender = new SenderConfig { EntityName = _fixture.StreamTopicName, CreateEntityIfNotExists = true } }); var lorem = Lorem.GetSentences(10); var waitTimer = new Stopwatch(); var messagesProcessed = 0; var processedAfterCancelCount = 0; // Act pubsub.Send(lorem).GetAwaiter().GetResult(); pubsub.Receive <string>((m) => { pubsub.Complete(m).GetAwaiter().GetResult(); messagesProcessed++; processedAfterCancelCount++; }, (e) => { }); waitTimer.Start(); do { Task.Delay(500).GetAwaiter().GetResult(); } while (waitTimer.Elapsed.TotalSeconds < 5); pubsub.CancelReceive <string>(); Task.Delay(500).GetAwaiter().GetResult(); waitTimer.Reset(); waitTimer.Start(); processedAfterCancelCount = 0; // verify no more messages were processed after cancellation. do { Task.Delay(500).GetAwaiter().GetResult(); } while (waitTimer.Elapsed.TotalSeconds < 5); // Assert messagesProcessed.Should().BeGreaterOrEqualTo(1); processedAfterCancelCount.Should().Be(0); }