< Summary - Combined Code Coverage

Information
Class: NLightning.Infrastructure.Serialization.Messages.Types.AcceptChannel2MessageTypeSerializer
Assembly: NLightning.Infrastructure.Serialization
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Serialization/Messages/Types/AcceptChannel2MessageTypeSerializer.cs
Tag: 30_15166811759
Line coverage
91%
Covered lines: 45
Uncovered lines: 4
Coverable lines: 49
Total lines: 109
Line coverage: 91.8%
Branch coverage
66%
Covered branches: 16
Total branches: 24
Branch coverage: 66.6%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
SerializeAsync()50%4.05485.71%
DeserializeAsync()70%20.012096.97%
NLightning-Domain-Serialization-Messages-Types-IMessageTypeSerializer-DeserializeAsync()100%210%

File(s)

/home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Serialization/Messages/Types/AcceptChannel2MessageTypeSerializer.cs

#LineLine coverage
 1using System.Runtime.Serialization;
 2
 3namespace NLightning.Infrastructure.Serialization.Messages.Types;
 4
 5using Domain.Protocol.Constants;
 6using Domain.Protocol.Factories;
 7using Domain.Protocol.Messages;
 8using Domain.Protocol.Messages.Interfaces;
 9using Domain.Protocol.Payloads;
 10using Domain.Protocol.Tlv;
 11using Domain.Serialization.Factories;
 12using Domain.Serialization.Messages.Types;
 13using Exceptions;
 14using Interfaces;
 15
 16public class AcceptChannel2MessageTypeSerializer : IMessageTypeSerializer<AcceptChannel2Message>
 17{
 18    private readonly IPayloadSerializerFactory _payloadSerializerFactory;
 19    private readonly ITlvConverterFactory _tlvConverterFactory;
 20    private readonly ITlvStreamSerializer _tlvStreamSerializer;
 21
 2022    public AcceptChannel2MessageTypeSerializer(IPayloadSerializerFactory payloadSerializerFactory,
 2023                                               ITlvConverterFactory tlvConverterFactory,
 2024                                               ITlvStreamSerializer tlvStreamSerializer)
 25    {
 2026        _payloadSerializerFactory = payloadSerializerFactory;
 2027        _tlvConverterFactory = tlvConverterFactory;
 2028        _tlvStreamSerializer = tlvStreamSerializer;
 2029    }
 30
 31    public async Task SerializeAsync(IMessage message, Stream stream)
 32    {
 833        if (message is not AcceptChannel2Message acceptChannel2Message)
 034            throw new SerializationException($"Message is not of type {nameof(AcceptChannel2Message)}");
 35
 36        // Get the payload serializer
 837        var payloadTypeSerializer = _payloadSerializerFactory.GetSerializer(message.Type)
 838                                    ?? throw new SerializationException("No serializer found for payload type");
 839        await payloadTypeSerializer.SerializeAsync(message.Payload, stream);
 40
 41        // Serialize the TLV stream
 842        await _tlvStreamSerializer.SerializeAsync(acceptChannel2Message.Extension, stream);
 843    }
 44
 45    /// <summary>
 46    /// Deserialize an OpenChannel2Message from a stream.
 47    /// </summary>
 48    /// <param name="stream">The stream to deserialize from.</param>
 49    /// <returns>The deserialized AcceptChannel2Message.</returns>
 50    /// <exception cref="MessageSerializationException">Error deserializing OpenChannel2Message</exception>
 51    public async Task<AcceptChannel2Message> DeserializeAsync(Stream stream)
 52    {
 53        try
 54        {
 55            // Deserialize payload
 1256            var payloadSerializer = _payloadSerializerFactory.GetSerializer<AcceptChannel2Payload>()
 1257                                    ?? throw new SerializationException("No serializer found for payload type");
 1258            var payload = await payloadSerializer.DeserializeAsync(stream)
 1259                          ?? throw new SerializationException("Error serializing payload");
 60
 61            // Deserialize extension
 1262            if (stream.Position >= stream.Length)
 463                return new AcceptChannel2Message(payload);
 64
 865            var extension = await _tlvStreamSerializer.DeserializeAsync(stream);
 466            if (extension is null)
 067                return new AcceptChannel2Message(payload);
 68
 469            UpfrontShutdownScriptTlv? upfrontShutdownScriptTlv = null;
 470            if (extension.TryGetTlv(TlvConstants.UPFRONT_SHUTDOWN_SCRIPT, out var baseUpfrontShutdownTlv))
 71            {
 472                var tlvConverter = _tlvConverterFactory.GetConverter<UpfrontShutdownScriptTlv>()
 473                                   ?? throw new SerializationException(
 474                                       $"No serializer found for tlv type {nameof(UpfrontShutdownScriptTlv)}");
 475                upfrontShutdownScriptTlv = tlvConverter.ConvertFromBase(baseUpfrontShutdownTlv!);
 76            }
 77
 478            ChannelTypeTlv? channelTypeTlv = null;
 479            if (extension.TryGetTlv(TlvConstants.CHANNEL_TYPE, out var baseChannelTypeTlv))
 80            {
 481                var tlvConverter =
 482                    _tlvConverterFactory.GetConverter<ChannelTypeTlv>()
 483                    ?? throw new SerializationException($"No serializer found for tlv type {nameof(ChannelTypeTlv)}");
 484                channelTypeTlv = tlvConverter.ConvertFromBase(baseChannelTypeTlv!);
 85            }
 86
 487            RequireConfirmedInputsTlv? requireConfirmedInputsTlv = null;
 488            if (extension.TryGetTlv(TlvConstants.REQUIRE_CONFIRMED_INPUTS, out var baseRequireConfirmedInputsTlv))
 89            {
 490                var tlvConverter =
 491                    _tlvConverterFactory.GetConverter<RequireConfirmedInputsTlv>()
 492                    ?? throw new SerializationException(
 493                        $"No serializer found for tlv type {nameof(RequireConfirmedInputsTlv)}");
 494                requireConfirmedInputsTlv = tlvConverter.ConvertFromBase(baseRequireConfirmedInputsTlv!);
 95            }
 96
 497            return new AcceptChannel2Message(payload, upfrontShutdownScriptTlv, channelTypeTlv,
 498                    requireConfirmedInputsTlv);
 99        }
 4100        catch (SerializationException e)
 101        {
 4102            throw new MessageSerializationException("Error deserializing AcceptChannel2Message", e);
 103        }
 8104    }
 105    async Task<IMessage> IMessageTypeSerializer.DeserializeAsync(Stream stream)
 106    {
 0107        return await DeserializeAsync(stream);
 0108    }
 109}