< Summary

Information
Class: IceRpc.Transports.Coloc.Internal.ColocClientTransport
Assembly: IceRpc.Transports.Coloc
File(s): /home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc.Transports.Coloc/Internal/ColocClientTransport.cs
Tag: 1856_27024993493
Line coverage
90%
Covered lines: 37
Uncovered lines: 4
Coverable lines: 41
Total lines: 80
Line coverage: 90.2%
Branch coverage
81%
Covered branches: 13
Total branches: 16
Branch coverage: 81.2%
Method coverage
100%
Covered methods: 5
Fully covered methods: 4
Total methods: 5
Method coverage: 100%
Full method coverage: 80%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_DefaultName()100%11100%
IsSslRequired(...)75%44100%
CreateConnection(...)75%9880%
ConnectAsync()100%44100%
.ctor(...)100%11100%

File(s)

/home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc.Transports.Coloc/Internal/ColocClientTransport.cs

#LineLine coverage
 1// Copyright (c) ZeroC, Inc.
 2
 3using System.Collections.Concurrent;
 4using System.IO.Pipelines;
 5using System.Net.Security;
 6
 7namespace IceRpc.Transports.Coloc.Internal;
 8
 9/// <summary>Implements <see cref="IDuplexClientTransport" /> for the coloc transport.</summary>
 10internal class ColocClientTransport : IDuplexClientTransport
 11{
 12    /// <inheritdoc/>
 9113    public string DefaultName => ColocTransport.Name;
 14
 15    /// <inheritdoc/>
 16    public bool IsSslRequired(string? transportName) =>
 8017        transportName is null || transportName == ColocTransport.Name ? false :
 8018            throw new NotSupportedException($"The Coloc client transport does not support transport '{transportName}'.")
 19
 20    private readonly ConcurrentDictionary<(string Host, ushort Port), ColocListener> _listeners;
 21    private readonly ColocTransportOptions _options;
 22
 23    /// <inheritdoc/>
 24    public IDuplexConnection CreateConnection(
 25        TransportAddress transportAddress,
 26        DuplexConnectionOptions duplexConnectionOptions,
 27        SslClientAuthenticationOptions? clientAuthenticationOptions)
 55528    {
 55529        if (clientAuthenticationOptions is not null)
 030        {
 031            throw new NotSupportedException("The Coloc client transport does not support SSL.");
 32        }
 33
 55534        if (transportAddress.TransportName is string name && name != DefaultName)
 035        {
 036            throw new NotSupportedException($"The Coloc client transport does not support transport '{name}'.");
 37        }
 38
 55539        if (transportAddress.Params.Count > 0)
 240        {
 241            throw new ArgumentException(
 242                "The transport address contains parameters that are not valid for the Coloc client transport.",
 243                nameof(transportAddress));
 44        }
 45
 55346        var localPipe = new Pipe(new PipeOptions(
 55347            pool: duplexConnectionOptions.Pool,
 55348            minimumSegmentSize: duplexConnectionOptions.MinSegmentSize,
 55349            pauseWriterThreshold: _options.PauseWriterThreshold,
 55350            resumeWriterThreshold: _options.ResumeWriterThreshold,
 55351            useSynchronizationContext: false));
 55352        return new ClientColocConnection(transportAddress, localPipe, ConnectAsync);
 53
 54        // The client connection connect operation calls this method to queue a connection establishment request with
 55        // the listener. The returned task is completed once the listener accepts the connection establishment request.
 56        Task<PipeReader> ConnectAsync(PipeReader clientPipeReader, CancellationToken cancellationToken)
 52457        {
 52458            if (_listeners.TryGetValue((transportAddress.Host, transportAddress.Port), out ColocListener? listener) &&
 52459                listener.TryQueueConnect(
 52460                    clientPipeReader,
 52461                    cancellationToken,
 52462                    out Task<PipeReader>? serverPipeReaderTask))
 51563            {
 51564                return serverPipeReaderTask;
 65            }
 66            else
 967            {
 968                throw new IceRpcException(IceRpcError.ConnectionRefused);
 69            }
 51570        }
 55371    }
 72
 53673    internal ColocClientTransport(
 53674        ConcurrentDictionary<(string Host, ushort Port), ColocListener> listeners,
 53675        ColocTransportOptions options)
 53676    {
 53677        _listeners = listeners;
 53678        _options = options;
 53679    }
 80}