< 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: 36_15743069263
Line coverage
91%
Covered lines: 45
Uncovered lines: 4
Coverable lines: 49
Total lines: 108
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-Interfaces-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;
 2using NLightning.Domain.Protocol.Interfaces;
 3using NLightning.Domain.Serialization.Interfaces;
 4
 5namespace NLightning.Infrastructure.Serialization.Messages.Types;
 6
 7using Domain.Protocol.Constants;
 8using Domain.Protocol.Messages;
 9using Domain.Protocol.Payloads;
 10using Domain.Protocol.Tlv;
 11using Exceptions;
 12using Interfaces;
 13
 14public class AcceptChannel2MessageTypeSerializer : IMessageTypeSerializer<AcceptChannel2Message>
 15{
 16    private readonly IPayloadSerializerFactory _payloadSerializerFactory;
 17    private readonly ITlvConverterFactory _tlvConverterFactory;
 18    private readonly ITlvStreamSerializer _tlvStreamSerializer;
 19
 2020    public AcceptChannel2MessageTypeSerializer(IPayloadSerializerFactory payloadSerializerFactory,
 2021                                               ITlvConverterFactory tlvConverterFactory,
 2022                                               ITlvStreamSerializer tlvStreamSerializer)
 23    {
 2024        _payloadSerializerFactory = payloadSerializerFactory;
 2025        _tlvConverterFactory = tlvConverterFactory;
 2026        _tlvStreamSerializer = tlvStreamSerializer;
 2027    }
 28
 29    public async Task SerializeAsync(IMessage message, Stream stream)
 30    {
 831        if (message is not AcceptChannel2Message acceptChannel2Message)
 032            throw new SerializationException($"Message is not of type {nameof(AcceptChannel2Message)}");
 33
 34        // Get the payload serializer
 835        var payloadTypeSerializer = _payloadSerializerFactory.GetSerializer(message.Type)
 836                                 ?? throw new SerializationException("No serializer found for payload type");
 837        await payloadTypeSerializer.SerializeAsync(message.Payload, stream);
 38
 39        // Serialize the TLV stream
 840        await _tlvStreamSerializer.SerializeAsync(acceptChannel2Message.Extension, stream);
 841    }
 42
 43    /// <summary>
 44    /// Deserialize an OpenChannel2Message from a stream.
 45    /// </summary>
 46    /// <param name="stream">The stream to deserialize from.</param>
 47    /// <returns>The deserialized AcceptChannel2Message.</returns>
 48    /// <exception cref="MessageSerializationException">Error deserializing OpenChannel2Message</exception>
 49    public async Task<AcceptChannel2Message> DeserializeAsync(Stream stream)
 50    {
 51        try
 52        {
 53            // Deserialize payload
 1254            var payloadSerializer = _payloadSerializerFactory.GetSerializer<AcceptChannel2Payload>()
 1255                                 ?? throw new SerializationException("No serializer found for payload type");
 1256            var payload = await payloadSerializer.DeserializeAsync(stream)
 1257                       ?? throw new SerializationException("Error serializing payload");
 58
 59            // Deserialize extension
 1260            if (stream.Position >= stream.Length)
 461                return new AcceptChannel2Message(payload);
 62
 863            var extension = await _tlvStreamSerializer.DeserializeAsync(stream);
 464            if (extension is null)
 065                return new AcceptChannel2Message(payload);
 66
 467            UpfrontShutdownScriptTlv? upfrontShutdownScriptTlv = null;
 468            if (extension.TryGetTlv(TlvConstants.UpfrontShutdownScript, out var baseUpfrontShutdownTlv))
 69            {
 470                var tlvConverter = _tlvConverterFactory.GetConverter<UpfrontShutdownScriptTlv>()
 471                                ?? throw new SerializationException(
 472                                       $"No serializer found for tlv type {nameof(UpfrontShutdownScriptTlv)}");
 473                upfrontShutdownScriptTlv = tlvConverter.ConvertFromBase(baseUpfrontShutdownTlv!);
 74            }
 75
 476            ChannelTypeTlv? channelTypeTlv = null;
 477            if (extension.TryGetTlv(TlvConstants.ChannelType, out var baseChannelTypeTlv))
 78            {
 479                var tlvConverter =
 480                    _tlvConverterFactory.GetConverter<ChannelTypeTlv>()
 481                 ?? throw new SerializationException($"No serializer found for tlv type {nameof(ChannelTypeTlv)}");
 482                channelTypeTlv = tlvConverter.ConvertFromBase(baseChannelTypeTlv!);
 83            }
 84
 485            RequireConfirmedInputsTlv? requireConfirmedInputsTlv = null;
 486            if (extension.TryGetTlv(TlvConstants.RequireConfirmedInputs, out var baseRequireConfirmedInputsTlv))
 87            {
 488                var tlvConverter =
 489                    _tlvConverterFactory.GetConverter<RequireConfirmedInputsTlv>()
 490                 ?? throw new SerializationException(
 491                        $"No serializer found for tlv type {nameof(RequireConfirmedInputsTlv)}");
 492                requireConfirmedInputsTlv = tlvConverter.ConvertFromBase(baseRequireConfirmedInputsTlv!);
 93            }
 94
 495            return new AcceptChannel2Message(payload, upfrontShutdownScriptTlv, channelTypeTlv,
 496                                             requireConfirmedInputsTlv);
 97        }
 498        catch (SerializationException e)
 99        {
 4100            throw new MessageSerializationException("Error deserializing AcceptChannel2Message", e);
 101        }
 8102    }
 103
 104    async Task<IMessage> IMessageTypeSerializer.DeserializeAsync(Stream stream)
 105    {
 0106        return await DeserializeAsync(stream);
 0107    }
 108}