< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.Channels.UnixDomainSocketFramingOptionsSetup
Assembly: CoreWCF.UnixDomainSocket
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.UnixDomainSocket/src/CoreWCF/Channels/UnixDomainSocketFramingOptionsSetup.cs
Line coverage
67%
Covered lines: 33
Uncovered lines: 16
Coverable lines: 49
Total lines: 107
Line coverage: 67.3%
Branch coverage
80%
Covered branches: 8
Total branches: 10
Branch coverage: 80%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)50%22100%
Configure(...)83.33%6683.33%
ConvertExceptionsAndAddLogging(...)100%110%
OnServiceBuilderOpening(...)100%11100%
UpdateServiceBuilderBaseAddresses()100%22100%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.UnixDomainSocket/src/CoreWCF/Channels/UnixDomainSocketFramingOptionsSetup.cs

#LineLine coverage
 1using System;
 2using CoreWCF.Channels;
 3using CoreWCF.Channels.Framing;
 4using CoreWCF.Configuration;
 5using Microsoft.AspNetCore.Server.Kestrel.Core;
 6using Microsoft.Extensions.Logging;
 7using Microsoft.Extensions.Options;
 8using System.Collections.Generic;
 9using Microsoft.AspNetCore.Connections;
 10using System.IO;
 11
 12namespace CoreWCF.Channels
 13{
 14    internal class UnixDomainSocketFramingOptionsSetup : IConfigureOptions<KestrelServerOptions>
 15    {
 16        private readonly ILogger<UnixDomainSocketOptions> _logger;
 17        private readonly ILogger<FramingConnection> _framingConnectionLogger;
 18        private readonly IServiceProvider _serviceProvider;
 19        private readonly UnixDomainSocketOptions _options;
 20        private readonly IServiceBuilder _serviceBuilder;
 21
 322        public UnixDomainSocketFramingOptionsSetup(IOptions<UnixDomainSocketOptions> options, IServiceBuilder serviceBui
 23        {
 324            _options = options.Value ?? new UnixDomainSocketOptions();
 325            _serviceBuilder = serviceBuilder;
 326            _logger = logger;
 327            _framingConnectionLogger = framingConnectionLogger;
 328            _serviceProvider = serviceProvider;
 329        }
 30
 1231        public List<ListenOptions> ListenOptions { get; } = new List<ListenOptions>();
 32
 633        public bool AttachUDS { get; set; }
 34
 35        public void Configure(KestrelServerOptions options)
 36        {
 337            if (AttachUDS)
 38            {
 339                options.ApplicationServices = _serviceProvider;
 1240                foreach (UnixDomainSocketListenOptions listenOption in _options.CodeBackedListenOptions)
 41                {
 342                    string filePath = listenOption.FilePath;
 43                    try
 44                    {
 345                        if (File.Exists(filePath))
 46                        {
 047                            File.Delete(filePath);
 48                        }
 349                    }
 050                    catch(Exception ex)
 51                    {
 052                        throw;
 53                    }
 54
 55
 56                    //Provide Path here
 357                    options.ListenUnixSocket(filePath, builder =>
 358                    {
 359                        // builder.Use(ConvertExceptionsAndAddLogging);
 360                        builder.UseConnectionHandler<NetMessageFramingConnectionHandler>();
 361                        // Save the ListenOptions to be able to get final port number for adding BaseAddresses later
 362                        ListenOptions.Add(builder);
 663                    });
 64                }
 65
 366                _serviceBuilder.Opening += OnServiceBuilderOpening;
 67            }
 368        }
 69
 70
 71        private ConnectionDelegate ConvertExceptionsAndAddLogging(ConnectionDelegate next)
 72        {
 073            return (ConnectionContext context) =>
 074            {
 075                var logger = new ConnectionIdWrappingLogger(_framingConnectionLogger, context.ConnectionId);
 076                context.Features.Set<ILogger>(logger);
 077
 078                //TODO: Add a public api mechanism to enable connection logging in RELEASE build
 079#if DEBUG
 080                context.Transport = new UnixDomainSocketExceptionConvertingDuplexPipe(new LoggingDuplexPipe(context.Tran
 081#else
 082                context.Transport = new UnixDomainSocketExceptionConvertingDuplexPipe(context.Transport);
 083#endif
 084                return next(context);
 085            };
 86        }
 87
 88        private void OnServiceBuilderOpening(object sender, EventArgs e)
 89        {
 390            UpdateServiceBuilderBaseAddresses();
 391        }
 92
 93        internal void UpdateServiceBuilderBaseAddresses()
 94        {
 1295            foreach (ListenOptions listenOptions in ListenOptions)
 96            {
 397                string address = listenOptions.SocketPath;
 398                var baseAddress = new Uri($"net.uds://{address}/");
 399                _logger.LogDebug("Adding base address {baseAddress} to ServiceBuilderOptions", baseAddress);
 3100                _serviceBuilder.BaseAddresses.Add(baseAddress);
 101            }
 102
 3103            ListenOptions.Clear();
 3104        }
 105    }
 106}
 107