< Summary - Combined Code Coverage

Information
Class: NLightning.Node.Extensions.NodeServiceExtensions
Assembly: NLightning.Node
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Node/Extensions/NodeServiceExtensions.cs
Tag: 36_15743069263
Line coverage
0%
Covered lines: 0
Uncovered lines: 80
Coverable lines: 80
Total lines: 119
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 8
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ConfigureNltgServices(...)0%7280%

File(s)

/home/runner/work/nlightning/nlightning/src/NLightning.Node/Extensions/NodeServiceExtensions.cs

#LineLine coverage
 1using Microsoft.Extensions.Configuration;
 2using Microsoft.Extensions.DependencyInjection;
 3using Microsoft.Extensions.Hosting;
 4using Microsoft.Extensions.Logging;
 5using Microsoft.Extensions.Options;
 6using NLightning.Application;
 7using NLightning.Domain.Bitcoin.Interfaces;
 8using NLightning.Domain.Bitcoin.Transactions.Factories;
 9using NLightning.Domain.Bitcoin.Transactions.Interfaces;
 10using NLightning.Domain.Channels.Factories;
 11using NLightning.Domain.Channels.Interfaces;
 12using NLightning.Domain.Crypto.Hashes;
 13using NLightning.Domain.Protocol.Interfaces;
 14using NLightning.Domain.Protocol.ValueObjects;
 15using NLightning.Infrastructure;
 16using NLightning.Infrastructure.Bitcoin;
 17using NLightning.Infrastructure.Bitcoin.Builders;
 18using NLightning.Infrastructure.Bitcoin.Managers;
 19using NLightning.Infrastructure.Bitcoin.Options;
 20using NLightning.Infrastructure.Bitcoin.Services;
 21using NLightning.Infrastructure.Bitcoin.Signers;
 22using NLightning.Infrastructure.Persistence;
 23using NLightning.Infrastructure.Repositories;
 24using NLightning.Infrastructure.Serialization;
 25
 26namespace NLightning.Node.Extensions;
 27
 28using Domain.Node.Options;
 29using Services;
 30
 31public static class NodeServiceExtensions
 32{
 33    /// <summary>
 34    /// Registers all NLTG application services for dependency injection
 35    /// </summary>
 36    public static IHostBuilder ConfigureNltgServices(this IHostBuilder hostBuilder, SecureKeyManager secureKeyManager)
 37    {
 038        return hostBuilder.ConfigureServices((hostContext, services) =>
 039        {
 040            // Get configuration
 041            var configuration = hostContext.Configuration;
 042
 043            // Register configuration as a service
 044            services.AddSingleton(configuration);
 045
 046            // Register the main daemon service
 047            services.AddHostedService<NltgDaemonService>();
 048
 049            // Add HttpClient for FeeService with configuration
 050            services.AddHttpClient<IFeeService, FeeService>(client =>
 051            {
 052                client.Timeout = TimeSpan.FromSeconds(30);
 053                client.DefaultRequestHeaders.Add("Accept", "application/json");
 054            });
 055
 056            // Singleton services (one instance throughout the application)
 057            services.AddSingleton<ISecureKeyManager>(secureKeyManager);
 058            services.AddSingleton<IChannelFactory>(sp =>
 059            {
 060                var feeService = sp.GetRequiredService<IFeeService>();
 061                var lightningSigner = sp.GetRequiredService<ILightningSigner>();
 062                var nodeOptions = sp.GetRequiredService<IOptions<NodeOptions>>().Value;
 063                var sha256 = sp.GetRequiredService<ISha256>();
 064                return new ChannelFactory(feeService, lightningSigner, nodeOptions, sha256);
 065            });
 066            services.AddSingleton<ICommitmentTransactionModelFactory, CommitmentTransactionModelFactory>();
 067
 068            // Add the Signer
 069            services.AddSingleton<ILightningSigner>(serviceProvider =>
 070            {
 071                var fundingOutputBuilder = serviceProvider.GetRequiredService<IFundingOutputBuilder>();
 072                var keyDerivationService = serviceProvider.GetRequiredService<IKeyDerivationService>();
 073                var logger = serviceProvider.GetRequiredService<ILogger<LocalLightningSigner>>();
 074                var nodeOptions = serviceProvider.GetRequiredService<IOptions<NodeOptions>>().Value;
 075
 076                // Create the signer with the correct network
 077                return new LocalLightningSigner(fundingOutputBuilder, keyDerivationService, logger, nodeOptions,
 078                                                secureKeyManager);
 079            });
 080
 081            // Add the Application services
 082            services.AddApplicationServices();
 083
 084            // Add the Infrastructure services
 085            services.AddBitcoinInfrastructure();
 086            services.AddInfrastructureServices();
 087            services.AddPersistenceInfrastructureServices(configuration);
 088            services.AddRepositoriesInfrastructureServices();
 089            services.AddSerializationInfrastructureServices();
 090
 091            // Scoped services (one instance per scope)
 092
 093            // Transient services (new instance each time)
 094
 095            // Register options with values from configuration
 096            services.AddOptions<BitcoinOptions>().BindConfiguration("Bitcoin").ValidateOnStart();
 097            services.AddOptions<FeeEstimationOptions>().BindConfiguration("FeeEstimation").ValidateOnStart();
 098            services.AddOptions<NodeOptions>()
 099                    .BindConfiguration("Node")
 0100                    .PostConfigure(options =>
 0101                     {
 0102                         var configuredAddresses = configuration.GetSection("Node:ListenAddresses").Get<string[]?>();
 0103                         if (configuredAddresses is { Length: > 0 })
 0104                         {
 0105                             options.ListenAddresses = configuredAddresses.ToList();
 0106                         }
 0107
 0108                         var networkString = configuration.GetValue<string>("Node:Network");
 0109                         if (!string.IsNullOrWhiteSpace(networkString))
 0110                         {
 0111                             options.BitcoinNetwork = new BitcoinNetwork(networkString);
 0112                         }
 0113
 0114                         options.Features.ChainHashes = [options.BitcoinNetwork.ChainHash];
 0115                     })
 0116                    .ValidateOnStart();
 0117        });
 118    }
 119}