Exemple #1
0
        public void GetHeaders_DecoratedPropertyWithoutPublishingDefaultValue_HeaderNotReturned()
        {
            var message = new TestEventWithHeaders();

            var result = HeaderAttributeHelper.GetHeaders(message).ToList();

            result.Select(header => header.Name).Should().NotContain("x-string");
            result.Select(header => header.Name).Should().NotContain("x-int");
        }
Exemple #2
0
        public void GetHeaders_DecoratedPropertyPublishingDefaultValue_HeaderWithDefaultValueReturned()
        {
            var message = new TestEventWithHeaders();

            var result = HeaderAttributeHelper.GetHeaders(message).ToList();

            result.Should().ContainEquivalentOf(new MessageHeader("x-string-default", null));
            result.Should().ContainEquivalentOf(new MessageHeader("x-int-default", "0"));
        }
Exemple #3
0
        public async Task OutboundAndInbound_MessageWithCustomHeaders_HeadersTransferred()
        {
            var message = new TestEventWithHeaders
            {
                Content       = "Hello E2E!",
                CustomHeader  = "Hello header!",
                CustomHeader2 = false
            };

            Host.ConfigureServices(
                services => services
                .AddLogging()
                .AddSilverback()
                .UseModel()
                .WithConnectionToMessageBroker(options => options.AddMockedKafka())
                .AddKafkaEndpoints(
                    endpoints => endpoints
                    .Configure(
                        config =>
            {
                config.BootstrapServers = "PLAINTEXT://e2e";
            })
                    .AddOutbound <IIntegrationEvent>(
                        endpoint => endpoint.ProduceTo(DefaultTopicName))
                    .AddInbound(
                        endpoint => endpoint
                        .ConsumeFrom(DefaultTopicName)
                        .Configure(
                            config =>
            {
                config.GroupId = "consumer1";
            })))
                .AddIntegrationSpy())
            .Run();

            var publisher = Host.ScopedServiceProvider.GetRequiredService <IEventPublisher>();
            await publisher.PublishAsync(message);

            await Helper.WaitUntilAllMessagesAreConsumedAsync();

            Helper.Spy.InboundEnvelopes.Should().HaveCount(1);
            Helper.Spy.InboundEnvelopes[0].Message.Should().BeEquivalentTo(message);
            Helper.Spy.InboundEnvelopes[0].Headers.Should().ContainEquivalentOf(
                new MessageHeader("x-custom-header", "Hello header!"));
            Helper.Spy.InboundEnvelopes[0].Headers.Should().ContainEquivalentOf(
                new MessageHeader("x-custom-header2", "False"));
        }
Exemple #4
0
        public async Task OutboundAndInbound_MessageWithCustomHeaders_HeadersTransferred()
        {
            var message = new TestEventWithHeaders
            {
                Content       = "Hello E2E!",
                CustomHeader  = "Hello header!",
                CustomHeader2 = false
            };

            var serviceProvider = Host.ConfigureServices(
                services => services
                .AddLogging()
                .AddSilverback()
                .UseModel()
                .WithConnectionToMessageBroker(options => options.AddMockedKafka())
                .AddEndpoints(
                    endpoints => endpoints
                    .AddOutbound <IIntegrationEvent>(new KafkaProducerEndpoint(DefaultTopicName))
                    .AddInbound(
                        new KafkaConsumerEndpoint(DefaultTopicName)
            {
                Configuration = new KafkaConsumerConfig
                {
                    GroupId = "consumer1",
                    AutoCommitIntervalMs = 100
                }
            }))
                .AddSingletonBrokerBehavior <SpyBrokerBehavior>()
                .AddSingletonSubscriber <OutboundInboundSubscriber>())
                                  .Run();

            var publisher = serviceProvider.GetRequiredService <IEventPublisher>();
            await publisher.PublishAsync(message);

            await KafkaTestingHelper.WaitUntilAllMessagesAreConsumedAsync();

            SpyBehavior.InboundEnvelopes.Should().HaveCount(1);
            SpyBehavior.InboundEnvelopes[0].Message.Should().BeEquivalentTo(message);
            SpyBehavior.InboundEnvelopes[0].Headers.Should().ContainEquivalentOf(
                new MessageHeader("x-custom-header", "Hello header!"));
            SpyBehavior.InboundEnvelopes[0].Headers.Should().ContainEquivalentOf(
                new MessageHeader("x-custom-header2", "False"));
        }
        public void GetHeaders_DecoratedMessage_HeadersReturned()
        {
            var message = new TestEventWithHeaders
            {
                StringHeader            = "string1",
                StringHeaderWithDefault = "string2",
                IntHeader            = 1,
                IntHeaderWithDefault = 2
            };

            var result = HeaderAttributeHelper.GetHeaders(message);

            result.Should().BeEquivalentTo(
                new MessageHeader("x-string", "string1"),
                new MessageHeader("x-string-default", "string2"),
                new MessageHeader("x-readonly-string", "readonly"),
                new MessageHeader("x-int", "1"),
                new MessageHeader("x-int-default", "2"),
                new MessageHeader("x-readonly-int", "42"));
        }
Exemple #6
0
        public void SetFromHeaders_DecoratedMessage_PropertiesSet()
        {
            var headers = new MessageHeaderCollection
            {
                { "x-string", "string1" },
                { "x-string-default", "string2" },
                { "x-readonly-string", "ignored" },
                { "x-int", "1" },
                { "x-int-default", "2" },
                { "x-readonly-int", "3" }
            };

            var message = new TestEventWithHeaders();

            HeaderAttributeHelper.SetFromHeaders(message, headers);

            message.StringHeader.Should().Be("string1");
            message.StringHeaderWithDefault.Should().Be("string2");
            message.ReadOnlyStringHeader.Should().Be("readonly");
            message.IntHeader.Should().Be(1);
            message.IntHeaderWithDefault.Should().Be(2);
            message.ReadOnlyIntHeader.Should().Be(42);
        }