< Summary - Combined Code Coverage

Information
Class: NLightning.Infrastructure.Serialization.Payloads.CommitmentSignedPayloadSerializer
Assembly: NLightning.Infrastructure.Serialization
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Serialization/Payloads/CommitmentSignedPayloadSerializer.cs
Tag: 36_15743069263
Line coverage
85%
Covered lines: 30
Uncovered lines: 5
Coverable lines: 35
Total lines: 87
Line coverage: 85.7%
Branch coverage
70%
Covered branches: 7
Total branches: 10
Branch coverage: 70%
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()66.67%6.03690.91%
DeserializeAsync()75%4.02489.47%
NLightning-Domain-Serialization-Interfaces-IPayloadSerializer-DeserializeAsync()100%210%

File(s)

/home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Serialization/Payloads/CommitmentSignedPayloadSerializer.cs

#LineLine coverage
 1using System.Buffers;
 2using System.Runtime.Serialization;
 3using NLightning.Domain.Protocol.Interfaces;
 4using NLightning.Domain.Serialization.Interfaces;
 5
 6namespace NLightning.Infrastructure.Serialization.Payloads;
 7
 8using Converters;
 9using Domain.Channels.ValueObjects;
 10using Domain.Crypto.Constants;
 11using Domain.Crypto.ValueObjects;
 12using Domain.Protocol.Payloads;
 13using Exceptions;
 14
 15public class CommitmentSignedPayloadSerializer : IPayloadSerializer<CommitmentSignedPayload>
 16{
 17    private readonly IValueObjectSerializerFactory _valueObjectSerializerFactory;
 18
 419    public CommitmentSignedPayloadSerializer(IValueObjectSerializerFactory valueObjectSerializerFactory)
 20    {
 421        _valueObjectSerializerFactory = valueObjectSerializerFactory;
 422    }
 23
 24    public async Task SerializeAsync(IMessagePayload payload, Stream stream)
 25    {
 426        if (payload is not CommitmentSignedPayload commitmentSignedPayload)
 027            throw new SerializationException($"Payload is not of type {nameof(CommitmentSignedPayload)}");
 28
 29        // Get the value object serializer
 430        var channelIdSerializer =
 431            _valueObjectSerializerFactory.GetSerializer<ChannelId>()
 432         ?? throw new SerializationException($"No serializer found for value object type {nameof(ChannelId)}");
 433        await channelIdSerializer.SerializeAsync(commitmentSignedPayload.ChannelId, stream);
 34
 35        // Serialize other types
 436        await stream.WriteAsync(commitmentSignedPayload.Signature);
 437        await stream.WriteAsync(EndianBitConverter.GetBytesBigEndian(commitmentSignedPayload.NumHtlcs));
 2438        foreach (var htlcsSignature in commitmentSignedPayload.HtlcSignatures)
 39        {
 840            await stream.WriteAsync(htlcsSignature);
 41        }
 442    }
 43
 44    public async Task<CommitmentSignedPayload?> DeserializeAsync(Stream stream)
 45    {
 446        var buffer = ArrayPool<byte>.Shared.Rent(CryptoConstants.MaxSignatureSize);
 47
 48        try
 49        {
 50            // Get the value object serializer
 451            var channelIdSerializer =
 452                _valueObjectSerializerFactory.GetSerializer<ChannelId>()
 453             ?? throw new SerializationException($"No serializer found for value object type {nameof(ChannelId)}");
 454            var channelId = await channelIdSerializer.DeserializeAsync(stream);
 55
 456            await stream.ReadExactlyAsync(buffer.AsMemory()[..CryptoConstants.MaxSignatureSize]);
 457            var signature = new CompactSignature(buffer[..CryptoConstants.MaxSignatureSize]);
 58
 459            await stream.ReadExactlyAsync(buffer.AsMemory()[..sizeof(ushort)]);
 460            var numHtlcs = EndianBitConverter.ToUInt16BigEndian(buffer[..sizeof(ushort)]);
 61
 462            var htlcSignatures = new List<CompactSignature>(numHtlcs);
 2463            for (var i = 0; i < numHtlcs; i++)
 64            {
 865                await stream.ReadExactlyAsync(buffer.AsMemory()[..CryptoConstants.MaxSignatureSize]);
 866                var htlcSignature = new CompactSignature(buffer[..CryptoConstants.MaxSignatureSize]);
 67
 868                htlcSignatures.Add(htlcSignature);
 69            }
 70
 471            return new CommitmentSignedPayload(channelId, htlcSignatures, signature);
 72        }
 073        catch (Exception e)
 74        {
 075            throw new PayloadSerializationException("Error deserializing CommitmentSignedPayload", e);
 76        }
 77        finally
 78        {
 479            ArrayPool<byte>.Shared.Return(buffer);
 80        }
 481    }
 82
 83    async Task<IMessagePayload?> IPayloadSerializer.DeserializeAsync(Stream stream)
 84    {
 085        return await DeserializeAsync(stream);
 086    }
 87}