< Summary - AsyncResponse (Release / net8.0+net10.0 / unit+integration)

Information
Class: AsyncResponse.Transports.Kafka.KafkaCorrelationIdExtractor
Assembly: AsyncResponse.Transports.Kafka
File(s): /_/src/Transports/AsyncResponse.Transports.Kafka/KafkaCorrelationIdExtractor.cs
Line coverage
100%
Covered lines: 12
Uncovered lines: 0
Coverable lines: 12
Total lines: 38
Line coverage: 100%
Branch coverage
100%
Covered branches: 6
Total branches: 6
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Extract(...)100%22100%
TryReadHeader(...)100%44100%

File(s)

/_/src/Transports/AsyncResponse.Transports.Kafka/KafkaCorrelationIdExtractor.cs

#LineLine coverage
 1namespace AsyncResponse.Transports.Kafka;
 2
 3/// <summary>
 4/// Extracts the AsyncResponse correlation id from an inbound response message: first from the
 5/// configured Kafka header, then from the JSON body via the configured paths (walked by the shared
 6/// <see cref="CorrelationIdJsonPaths"/>).
 7/// </summary>
 8internal static class KafkaCorrelationIdExtractor
 9{
 10    /// <summary>Extracts the correlation id from the supplied message.</summary>
 11    public static string? Extract(
 12        IReadOnlyList<KafkaTransportHeader> headers,
 13        string messageJson,
 14        KafkaAsyncResponseTransportOptions options)
 15    {
 2616        var headerName = KafkaTransportOptionsValidator.Required(
 2617            options.CorrelationIdHeader,
 2618            nameof(options.CorrelationIdHeader));
 19
 2620        var headerValue = TryReadHeader(headers, headerName);
 2621        if (!string.IsNullOrWhiteSpace(headerValue))
 622            return headerValue;
 23
 2024        return CorrelationIdJsonPaths.Extract(messageJson, options.CorrelationIdJsonPaths);
 25    }
 26
 27    internal static string? TryReadHeader(IReadOnlyList<KafkaTransportHeader> headers, string headerName)
 28    {
 29        // Kafka headers allow duplicate keys; the first match wins, mirroring broker tooling.
 111030        foreach (var header in headers)
 31        {
 11832            if (StringComparer.Ordinal.Equals(header.Key, headerName))
 11633                return header.ValueUtf8;
 34        }
 35
 37936        return null;
 11637    }
 38}