public void Test_PubSubMessenger_InvalidOperation() { // Arrange var messenger = new PubSubMessenger(new PubSubJsonAuthConfig() { JsonAuthFile = new ConfigurationBuilder().AddJsonFile("appSettings.json").Build()["CredentialPath"], ProjectId = "12345" }); // Act/Assert Assert.Throws <InvalidOperationException>(() => messenger.Receive <object>(null, null)); Assert.Throws <ArgumentException>(() => messenger.ReceiveOne <object>("").GetAwaiter().GetResult()); Assert.Throws <InvalidOperationException>(() => messenger.StartReceive <object>()); Assert.Throws <InvalidOperationException>(() => messenger.ReceiveOne <object>()); Assert.Throws <InvalidOperationException>(() => messenger.ReceiveBatchEntity <object>().GetAwaiter().GetResult()); // Additional runs here purely to increase code coverage. Not particularly useful tests but it does confirm functionality. messenger.Complete <object>(null).GetAwaiter().GetResult(); messenger.CompleteAll(new object[] { null }).GetAwaiter().GetResult(); messenger.Abandon(new object()); messenger.Error <object>(null).GetAwaiter().GetResult(); messenger.Error(new object()).GetAwaiter().GetResult(); var props = messenger.ReadProperties <object>(null); props.Should().BeNull(); }
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); }