< Summary - Combined Code Coverage

Information
Class: NLightning.Daemon.Ipc.Handlers.GetAddressIpcHandler
Assembly: NLightning.Daemon
File(s): /home/runner/work/NLightning/NLightning/src/NLightning.Daemon/Ipc/Handlers/GetAddressIpcHandler.cs
Tag: 57_24045730253
Line coverage
0%
Covered lines: 0
Uncovered lines: 36
Coverable lines: 36
Total lines: 78
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 6
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_Command()100%210%
.ctor(...)100%210%
HandleAsync()0%4260%

File(s)

/home/runner/work/NLightning/NLightning/src/NLightning.Daemon/Ipc/Handlers/GetAddressIpcHandler.cs

#LineLine coverage
 1using MessagePack;
 2using Microsoft.Extensions.DependencyInjection;
 3using Microsoft.Extensions.Logging;
 4
 5namespace NLightning.Daemon.Ipc.Handlers;
 6
 7using Domain.Bitcoin.Enums;
 8using Domain.Client.Constants;
 9using Domain.Client.Enums;
 10using Infrastructure.Bitcoin.Wallet.Interfaces;
 11using Interfaces;
 12using Services.Ipc.Factories;
 13using Transport.Ipc;
 14using Transport.Ipc.Requests;
 15using Transport.Ipc.Responses;
 16
 17internal class GetAddressIpcHandler : IIpcCommandHandler
 18{
 19    private readonly ILogger<GetAddressIpcHandler> _logger;
 20    private readonly IServiceProvider _serviceProvider;
 21
 022    public ClientCommand Command => ClientCommand.GetAddress;
 23
 024    public GetAddressIpcHandler(ILogger<GetAddressIpcHandler> logger, IServiceProvider serviceProvider)
 25    {
 026        _logger = logger;
 027        _serviceProvider = serviceProvider;
 028    }
 29
 30    public async Task<IpcEnvelope> HandleAsync(IpcEnvelope envelope, CancellationToken ct)
 31    {
 32        try
 33        {
 34            // Deserialize the request
 035            var request =
 036                MessagePackSerializer.Deserialize<GetAddressIpcRequest>(envelope.Payload, cancellationToken: ct);
 37
 038            string? p2Tr = null;
 039            string? p2Wpkh = null;
 40
 41            // Create a scope for this call
 042            using var scope = _serviceProvider.CreateScope();
 043            var walletAddressService = scope.ServiceProvider.GetService<IBitcoinWalletService>() ??
 044                                       throw new NullReferenceException(
 045                                           $"Error activating service {nameof(IBitcoinWalletService)}");
 46
 47            // Get unused addresses by type
 048            if (request.AddressType.HasFlag(AddressType.P2Tr))
 049                p2Tr = (await walletAddressService.GetUnusedAddressAsync(AddressType.P2Tr, false)).Address;
 50
 051            if (request.AddressType.HasFlag(AddressType.P2Wpkh))
 052                p2Wpkh = (await walletAddressService.GetUnusedAddressAsync(AddressType.P2Wpkh, false)).Address;
 53
 54            // Create a success response
 055            var response = new GetAddressIpcResponse
 056            {
 057                AddressP2Tr = p2Tr,
 058                AddressP2Wsh = p2Wpkh
 059            };
 60
 061            var payload = MessagePackSerializer.Serialize(response, cancellationToken: ct);
 062            return new IpcEnvelope
 063            {
 064                Version = envelope.Version,
 065                Command = envelope.Command,
 066                CorrelationId = envelope.CorrelationId,
 067                Kind = IpcEnvelopeKind.Response,
 068                Payload = payload
 069            };
 70        }
 071        catch (Exception e)
 72        {
 073            _logger.LogError(e, "Error getting a unused address");
 074            return IpcErrorFactory.CreateErrorEnvelope(envelope, ErrorCodes.ServerError,
 075                                                       $"Error getting a unused address: {e.Message}");
 76        }
 077    }
 78}