< 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: 1321_24790053727
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/>
 8313    public string DefaultName => ColocTransport.Name;
 14
 15    /// <inheritdoc/>
 16    public bool IsSslRequired(string? transportName) =>
 7617        transportName is null || transportName == ColocTransport.Name ? false :
 7618            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)
 52728    {
 52729        if (clientAuthenticationOptions is not null)
 030        {
 031            throw new NotSupportedException("The Coloc client transport does not support SSL.");
 32        }
 33
 52734        if (transportAddress.TransportName is string name && name != DefaultName)
 035        {
 036            throw new NotSupportedException($"The Coloc client transport does not support transport '{name}'.");
 37        }
 38
 52739        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
 52546        var localPipe = new Pipe(new PipeOptions(
 52547            pool: duplexConnectionOptions.Pool,
 52548            minimumSegmentSize: duplexConnectionOptions.MinSegmentSize,
 52549            pauseWriterThreshold: _options.PauseWriterThreshold,
 52550            resumeWriterThreshold: _options.ResumeWriterThreshold,
 52551            useSynchronizationContext: false));
 52552        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)
 49657        {
 49658            if (_listeners.TryGetValue((transportAddress.Host, transportAddress.Port), out ColocListener? listener) &&
 49659                listener.TryQueueConnect(
 49660                    clientPipeReader,
 49661                    cancellationToken,
 49662                    out Task<PipeReader>? serverPipeReaderTask))
 48763            {
 48764                return serverPipeReaderTask;
 65            }
 66            else
 967            {
 968                throw new IceRpcException(IceRpcError.ConnectionRefused);
 69            }
 48770        }
 52571    }
 72
 50973    internal ColocClientTransport(
 50974        ConcurrentDictionary<(string Host, ushort Port), ColocListener> listeners,
 50975        ColocTransportOptions options)
 50976    {
 50977        _listeners = listeners;
 50978        _options = options;
 50979    }
 80}