< Summary

Information
Class: IceRpc.RequestContext.RequestContextInterceptor
Assembly: IceRpc.RequestContext
File(s): /home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc.RequestContext/RequestContextInterceptor.cs
Tag: 1321_24790053727
Line coverage
100%
Covered lines: 38
Uncovered lines: 0
Coverable lines: 38
Total lines: 63
Line coverage: 100%
Branch coverage
100%
Covered branches: 8
Total branches: 8
Branch coverage: 100%
Method coverage
100%
Covered methods: 2
Fully covered methods: 2
Total methods: 2
Method coverage: 100%
Full method coverage: 100%

Metrics

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

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 IceRpc.Ice.Codec;
 5using ZeroC.Slice.Codec;
 6
 7namespace IceRpc.RequestContext;
 8
 9/// <summary>Represents an interceptor that encodes request context features into request context fields.</summary>
 10/// <remarks>Both the ice protocol and the icerpc protocol can transmit request context fields with requests; while
 11/// icerpc can transmit all request fields, ice can only transmit request context fields and idempotent fields.
 12/// </remarks>
 13public class RequestContextInterceptor : IInvoker
 14{
 15    private readonly IInvoker _next;
 16
 17    /// <summary>Constructs a request context interceptor.</summary>
 18    /// <param name="next">The next invoker in the invocation pipeline.</param>
 1219    public RequestContextInterceptor(IInvoker next) => _next = next;
 20
 21    /// <inheritdoc/>
 22    public Task<IncomingResponse> InvokeAsync(OutgoingRequest request, CancellationToken cancellationToken)
 8623    {
 8624        if (request.Features.Get<IRequestContextFeature>()?.Value is IDictionary<string, string> context)
 1425        {
 1426            if (context.Count == 0)
 127            {
 28                // make sure it's not set.
 129                request.Fields = request.Fields.Without(RequestFieldKey.Context);
 130            }
 31            else
 1332            {
 1333                if (request.Protocol == Protocol.Ice)
 634                {
 635                    request.Fields = request.Fields.With(
 636                        RequestFieldKey.Context,
 637                        new OutgoingFieldValue(bufferWriter =>
 638                        {
 639                            var encoder = new IceEncoder(bufferWriter);
 640                            encoder.EncodeDictionary(
 641                                context,
 642                                (ref IceEncoder encoder, string value) => encoder.EncodeString(value),
 1243                                (ref IceEncoder encoder, string value) => encoder.EncodeString(value));
 1244                        }));
 645                }
 46                else
 747                {
 748                    request.Fields = request.Fields.With(
 749                        RequestFieldKey.Context,
 750                        new OutgoingFieldValue(bufferWriter =>
 751                        {
 752                            var encoder = new SliceEncoder(bufferWriter);
 753                            encoder.EncodeDictionary(
 754                                context,
 755                                (ref SliceEncoder encoder, string value) => encoder.EncodeString(value),
 1456                                (ref SliceEncoder encoder, string value) => encoder.EncodeString(value));
 1457                        }));
 758                }
 1359            }
 1460        }
 8661        return _next.InvokeAsync(request, cancellationToken);
 8662    }
 63}