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"); }
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")); }
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")); }
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")); }
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); }