< Summary

Information
Class: IceRpc.Transports.Internal.DefaultMultiplexedClientTransport
Assembly: IceRpc
File(s): /home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc/Transports/Internal/DefaultMultiplexedClientTransport.cs
Tag: 1321_24790053727
Line coverage
75%
Covered lines: 18
Uncovered lines: 6
Coverable lines: 24
Total lines: 66
Line coverage: 75%
Branch coverage
58%
Covered branches: 7
Total branches: 12
Branch coverage: 58.3%
Method coverage
85%
Covered methods: 6
Fully covered methods: 4
Total methods: 7
Method coverage: 85.7%
Full method coverage: 57.1%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_DefaultName()100%11100%
IsSslRequired(...)100%210%
get_Instance()50%7671.42%
.cctor()100%11100%
.ctor()100%11100%
CreateConnection(...)100%11100%
Resolve(...)66.66%8662.5%

File(s)

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

#LineLine coverage
 1// Copyright (c) ZeroC, Inc.
 2
 3using IceRpc.Transports.Quic;
 4using IceRpc.Transports.Slic;
 5using IceRpc.Transports.Tcp;
 6using System.Net.Security;
 7using System.Runtime.Versioning;
 8
 9namespace IceRpc.Transports.Internal;
 10
 11/// <summary>Implements <see cref="IMultiplexedClientTransport" /> using two multiplexed transports: QUIC and
 12/// Slic over TCP.</summary>
 13internal class DefaultMultiplexedClientTransport : IMultiplexedClientTransport
 14{
 15    /// <inheritdoc/>
 1116    public string DefaultName => _quicTransport.DefaultName;
 17
 18    /// <inheritdoc/>
 019    public bool IsSslRequired(string? transportName) => Resolve(transportName).IsSslRequired(transportName);
 20
 21    internal static DefaultMultiplexedClientTransport Instance
 22    {
 23        get
 2424        {
 2425            if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS() || OperatingSystem.IsWindows())
 2426            {
 2427                return _instance;
 28            }
 029            throw new PlatformNotSupportedException(
 030                "The default multiplexed client transport, QUIC, is only available on Linux, macOS, and Windows.");
 2431        }
 32    }
 33
 34    [SupportedOSPlatform("linux")]
 35    [SupportedOSPlatform("macos")]
 36    [SupportedOSPlatform("windows")]
 437    private static readonly DefaultMultiplexedClientTransport _instance = new();
 38
 39    private readonly IMultiplexedClientTransport _quicTransport;
 440    private readonly IMultiplexedClientTransport _tcpTransport = new SlicClientTransport(new TcpClientTransport());
 41
 42    /// <inheritdoc/>
 43    public IMultiplexedConnection CreateConnection(
 44        TransportAddress transportAddress,
 45        MultiplexedConnectionOptions options,
 46        SslClientAuthenticationOptions? clientAuthenticationOptions) =>
 547        Resolve(transportAddress.TransportName).CreateConnection(
 548            transportAddress,
 549            options,
 550            clientAuthenticationOptions);
 51
 52    [SupportedOSPlatform("linux")]
 53    [SupportedOSPlatform("macos")]
 54    [SupportedOSPlatform("windows")]
 855    private DefaultMultiplexedClientTransport() => _quicTransport = new QuicClientTransport();
 56
 57    private IMultiplexedClientTransport Resolve(string? transportName) =>
 558        transportName switch
 559        {
 060            null => _quicTransport,
 461            "quic" => _quicTransport,
 162            "tcp" => _tcpTransport,
 063            _ => throw new NotSupportedException(
 064                $"The default multiplexed client transport does not support transport '{transportName}'.")
 565        };
 66}