コード例 #1
0
        public async Task OnMessageReceivedSadPath2()
        {
            var mockReceiver = new Mock <IReceiver>()
                               .SetupProperty(m => m.MessageHandler);
            var mockDatabase = new Mock <IDatabase>();

            var service = new ExampleService(mockReceiver.Object, mockDatabase.Object);

            await service.StartAsync(CancellationToken.None);

            var fakeMessage = new FakeReceiverMessage("MyPayload")
            {
                Headers = { ["operation"] = "invalid" }
            };

            await service.Receiver.MessageHandler.OnMessageReceivedAsync(mockReceiver.Object, fakeMessage);

            fakeMessage.HandledBy.Should().Be(nameof(fakeMessage.RejectAsync));

            mockDatabase.Verify(m => m.CreateAsync("MyPayload"), Times.Never());
            mockDatabase.Verify(m => m.UpdateAsync("MyPayload"), Times.Never());
            mockDatabase.Verify(m => m.DeleteAsync("MyPayload"), Times.Never());

            // TODO: Verify that the error log was sent
        }
コード例 #2
0
        public async Task DataReceivedAsyncHappyPath()
        {
            // Arrange
            var dataReceiver    = GetMockReceiver(ReceivingService.DataReceiverName).Object;
            var commandReceiver = GetMockReceiver(ReceivingService.CommandReceiverName).Object;

            var mockReceivingService = new Mock <ReceivingService>(GetReceiverLookup(dataReceiver, commandReceiver));

            mockReceivingService.Protected().As <IProtected>()
            .Setup(m => m.WriteLine(It.IsAny <string>()))
            .Verifiable();

            mockReceivingService.Protected().As <IProtected>()
            .Setup(m => m.FormatMessage(It.IsAny <string>()))
            .Returns("formatted-message")
            .Verifiable();

            var receivingService = mockReceivingService.Object.Unlock();

            var message = new FakeReceiverMessage("test-message");

            // Act
            await receivingService.DataReceivedAsync(message);

            // Assert
            mockReceivingService.Protected().As <IProtected>()
            .Verify(m => m.WriteLine("formatted-message"), Times.Once());

            mockReceivingService.Protected().As <IProtected>()
            .Verify(m => m.FormatMessage("test-message"), Times.Once());

            message.HandledBy.Should().Be(nameof(message.AcknowledgeAsync));
        }
        public async Task HappyPathNewSetting()
        {
            var receiver = new FakeReceiver("fake");

            MessagingConfigurationProvider provider = typeof(MessagingConfigurationProvider).New(receiver, null);

            var newSettings = @"{
  ""foo"": ""abc""
}";
            var message     = new FakeReceiverMessage(newSettings);

            var reloaded = false;

            ChangeToken.OnChange(provider.GetReloadToken, () => reloaded = true);

            var dataBefore = GetData(provider);

            // Simulate the FakeReceiver receiving a message.
            await receiver.MessageHandler.OnMessageReceivedAsync(receiver, message);

            // The protected Data property should have been replaced.
            GetData(provider).Should().NotBeSameAs(dataBefore);

            // Data should contain the new settings.
            GetData(provider).Should().ContainKey("foo");
            GetData(provider)["foo"].Should().Be("abc");

            // It should report that it has been reloaded.
            reloaded.Should().BeTrue();

            // The received message should have been handled by acknowledging it.
            message.Handled.Should().BeTrue();
            message.HandledBy.Should().Be(nameof(message.AcknowledgeAsync));
        }
        public async Task InvalidMessage()
        {
            var receiver = new FakeReceiver("fake");

            MessagingConfigurationProvider provider = typeof(MessagingConfigurationProvider).New(receiver, null);

            var reloaded = false;

            ChangeToken.OnChange(provider.GetReloadToken, () => reloaded = true);

            var newSettings = "This is {not] a [valid} JSON string: \"";

            var message = new FakeReceiverMessage(newSettings);

            var dataBefore = GetData(provider);

            // Simulate the FakeReceiver receiving a message.
            await receiver.MessageHandler.OnMessageReceivedAsync(receiver, message);

            // The protected Data property should not have been replaced.
            GetData(provider).Should().BeSameAs(dataBefore);

            // It should report that it has been reloaded.
            reloaded.Should().BeFalse();

            // The received message should have been handled by acknowledging it.
            message.Handled.Should().BeTrue();
            message.HandledBy.Should().Be(nameof(message.RejectAsync));
        }
コード例 #5
0
        public async Task CommandReceivedAsyncHappyPath1(string stringPayload, Casing expectedCasing)
        {
            // Arrange
            var dataReceiver    = GetMockReceiver(ReceivingService.DataReceiverName).Object;
            var commandReceiver = GetMockReceiver(ReceivingService.CommandReceiverName).Object;

            var receivingService = new ReceivingService(GetReceiverLookup(dataReceiver, commandReceiver));

            var message = new FakeReceiverMessage(stringPayload);

            // Act
            await receivingService.Unlock().CommandReceivedAsync(message);

            // Assert
            receivingService.Casing.Should().Be(expectedCasing);

            message.HandledBy.Should().Be(nameof(message.AcknowledgeAsync));
        }
コード例 #6
0
        public async Task ReplayMethodHappyPath2()
        {
            Func <IReceiverMessage, Task> capturedCallback = null;

            Action <DateTime, DateTime?, Func <IReceiverMessage, Task>, string, string, bool, AutoOffsetReset> mockReplayEngineCallback =
                (start, end, callback, topic, bootstrapServers, enableAutoOffsetStore, autoOffsetReset) =>
            {
                capturedCallback = callback;
            };

            var mockReplayEngine = new Mock <IReplayEngine>();

            mockReplayEngine.Setup(m => m.Replay(It.IsAny <DateTime>(), It.IsAny <DateTime?>(), It.IsAny <Func <IReceiverMessage, Task> >(),
                                                 It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <AutoOffsetReset>()))
            .Returns(Task.CompletedTask)
            .Callback(mockReplayEngineCallback);

            var mockMessageHandler = new Mock <IMessageHandler>();

            mockMessageHandler.Setup(m => m.OnMessageReceivedAsync(It.IsAny <IReceiver>(), It.IsAny <IReceiverMessage>()))
            .Returns(Task.CompletedTask);

            var receiver =
                new KafkaReceiver("name", "one_topic", "groupId", "servers", true, AutoOffsetReset.Earliest, mockReplayEngine.Object);

            receiver.MessageHandler = mockMessageHandler.Object;

            var expectedStart = new DateTime(2020, 9, 3, 20, 22, 58, DateTimeKind.Local).ToUniversalTime();
            var expectedEnd   = new DateTime(2020, 9, 3, 20, 23, 19, DateTimeKind.Local).ToUniversalTime();

            await receiver.Replay(expectedStart, expectedEnd, null);

            mockReplayEngine.Verify(m =>
                                    m.Replay(expectedStart, expectedEnd, It.IsAny <Func <IReceiverMessage, Task> >(), "one_topic", "servers", true, AutoOffsetReset.Earliest),
                                    Times.Once());

            capturedCallback.Should().NotBeNull();

            var message = new FakeReceiverMessage("Hello, world!");

            await capturedCallback(message);

            mockMessageHandler.Verify(m => m.OnMessageReceivedAsync(receiver, message), Times.Once());
        }
コード例 #7
0
        public async Task CommandReceivedAsyncHappyPath2()
        {
            // Arrange
            var dataReceiver    = GetMockReceiver(ReceivingService.DataReceiverName).Object;
            var commandReceiver = GetMockReceiver(ReceivingService.CommandReceiverName).Object;

            var receivingService = new ReceivingService(GetReceiverLookup(dataReceiver, commandReceiver));

            var message = new FakeReceiverMessage("UnknownCasing");

            // Assume
            receivingService.Casing.Should().Be(Casing.Default);

            // Act
            await receivingService.Unlock().CommandReceivedAsync(message);

            // Assert
            receivingService.Casing.Should().Be(Casing.Default);

            message.HandledBy.Should().Be(nameof(message.AcknowledgeAsync));
        }
コード例 #8
0
        public async Task OnMessageReceivedHappyPath1()
        {
            var mockReceiver = new Mock <IReceiver>()
                               .SetupProperty(m => m.MessageHandler);
            var mockDatabase = new Mock <IDatabase>();

            var service = new ExampleService(mockReceiver.Object, mockDatabase.Object);

            await service.StartAsync(CancellationToken.None);

            var fakeMessage = new FakeReceiverMessage("MyPayload")
            {
                Headers = { ["operation"] = "create" }
            };

            await service.Receiver.MessageHandler.OnMessageReceivedAsync(mockReceiver.Object, fakeMessage);

            mockDatabase.Verify(m => m.CreateAsync("MyPayload"), Times.Once());
            fakeMessage.HandledBy.Should().Be(nameof(fakeMessage.AcknowledgeAsync));

            mockDatabase.Verify(m => m.UpdateAsync("MyPayload"), Times.Never());
            mockDatabase.Verify(m => m.DeleteAsync("MyPayload"), Times.Never());
        }