< 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: 1986_28452893481
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)
 56728    {
 56729        if (clientAuthenticationOptions is not null)
 030        {
 031            throw new NotSupportedException("The Coloc client transport does not support SSL.");
 32        }
 33
 56734        if (transportAddress.TransportName is string name && name != DefaultName)
 035        {
 036            throw new NotSupportedException($"The Coloc client transport does not support transport '{name}'.");
 37        }
 38
 56739        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
 56546        var localPipe = new Pipe(new PipeOptions(
 56547            pool: duplexConnectionOptions.Pool,
 56548            minimumSegmentSize: duplexConnectionOptions.MinSegmentSize,
 56549            pauseWriterThreshold: _options.PauseWriterThreshold,
 56550            resumeWriterThreshold: _options.ResumeWriterThreshold,
 56551            useSynchronizationContext: false));
 56552        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)
 53657        {
 53658            if (_listeners.TryGetValue((transportAddress.Host, transportAddress.Port), out ColocListener? listener) &&
 53659                listener.TryQueueConnect(
 53660                    clientPipeReader,
 53661                    cancellationToken,
 53662                    out Task<PipeReader>? serverPipeReaderTask))
 52763            {
 52764                return serverPipeReaderTask;
 65            }
 66            else
 967            {
 968                throw new IceRpcException(IceRpcError.ConnectionRefused);
 69            }
 52770        }
 56571    }
 72
 54873    internal ColocClientTransport(
 54874        ConcurrentDictionary<(string Host, ushort Port), ColocListener> listeners,
 54875        ColocTransportOptions options)
 54876    {
 54877        _listeners = listeners;
 54878        _options = options;
 54879    }
 80}