< Summary

Information
Class: IceRpc.RequestContext.RequestContextInterceptor
Assembly: IceRpc.RequestContext
File(s): /home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc.RequestContext/RequestContextInterceptor.cs
Tag: 275_13775359185
Line coverage
100%
Covered lines: 21
Uncovered lines: 0
Coverable lines: 21
Total lines: 44
Line coverage: 100%
Branch coverage
100%
Covered branches: 8
Total branches: 8
Branch coverage: 100%
Method coverage
100%
Covered methods: 2
Total methods: 2
Method coverage: 100%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
InvokeAsync(...)87.5%88100%

File(s)

/home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc.RequestContext/RequestContextInterceptor.cs

#LineLine coverage
 1// Copyright (c) ZeroC, Inc.
 2
 3using IceRpc.Features;
 4using ZeroC.Slice;
 5
 6namespace IceRpc.RequestContext;
 7
 8/// <summary>Represents an interceptor that encodes request context features into request context fields.</summary>
 9/// <remarks>Both the ice protocol and the icerpc protocol can transmit request context fields with requests; while
 10/// icerpc can transmit all request fields, ice can only transmit request context fields and idempotent fields.
 11/// </remarks>
 12public class RequestContextInterceptor : IInvoker
 13{
 14    private readonly IInvoker _next;
 15
 16    /// <summary>Constructs a request context interceptor.</summary>
 17    /// <param name="next">The next invoker in the invocation pipeline.</param>
 1218    public RequestContextInterceptor(IInvoker next) => _next = next;
 19
 20    /// <inheritdoc/>
 21    public Task<IncomingResponse> InvokeAsync(OutgoingRequest request, CancellationToken cancellationToken)
 8622    {
 8623        if (request.Features.Get<IRequestContextFeature>()?.Value is IDictionary<string, string> context)
 1424        {
 1425            if (context.Count == 0)
 126            {
 27                // make sure it's not set.
 128                request.Fields = request.Fields.Without(RequestFieldKey.Context);
 129            }
 30            else
 1331            {
 1332                request.Fields = request.Fields.With(
 1333                    RequestFieldKey.Context,
 1334                    context,
 1335                    (ref SliceEncoder encoder, IDictionary<string, string> dictionary) => encoder.EncodeDictionary(
 1336                        dictionary,
 1337                        (ref SliceEncoder encoder, string value) => encoder.EncodeString(value),
 2638                        (ref SliceEncoder encoder, string value) => encoder.EncodeString(value)),
 1339                    request.Protocol == Protocol.Ice ? SliceEncoding.Slice1 : SliceEncoding.Slice2);
 1340            }
 1441        }
 8642        return _next.InvokeAsync(request, cancellationToken);
 8643    }
 44}