< Summary - Combined Code Coverage

Information
Class: NLightning.Infrastructure.Serialization.Payloads.ChannelReestablishPayloadSerializer
Assembly: NLightning.Infrastructure.Serialization
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Serialization/Payloads/ChannelReestablishPayloadSerializer.cs
Tag: 30_15166811759
Line coverage
85%
Covered lines: 30
Uncovered lines: 5
Coverable lines: 35
Total lines: 84
Line coverage: 85.7%
Branch coverage
50%
Covered branches: 3
Total branches: 6
Branch coverage: 50%
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.01490.91%
DeserializeAsync()50%2289.47%
NLightning-Domain-Serialization-Payloads-IPayloadSerializer-DeserializeAsync()100%210%

File(s)

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

#LineLine coverage
 1using System.Buffers;
 2using System.Runtime.Serialization;
 3using NBitcoin;
 4using NLightning.Domain.Serialization.Payloads;
 5
 6namespace NLightning.Infrastructure.Serialization.Payloads;
 7
 8using Converters;
 9using Domain.Crypto.Constants;
 10using Domain.Protocol.Payloads;
 11using Domain.Protocol.Payloads.Interfaces;
 12using Domain.Serialization.Factories;
 13using Domain.ValueObjects;
 14using Exceptions;
 15
 16public class ChannelReestablishPayloadSerializer : IPayloadSerializer<ChannelReestablishPayload>
 17{
 18    private readonly IValueObjectSerializerFactory _valueObjectSerializerFactory;
 19
 420    public ChannelReestablishPayloadSerializer(IValueObjectSerializerFactory valueObjectSerializerFactory)
 21    {
 422        _valueObjectSerializerFactory = valueObjectSerializerFactory;
 423    }
 24
 25    public async Task SerializeAsync(IMessagePayload payload, Stream stream)
 26    {
 827        if (payload is not ChannelReestablishPayload channelReestablishPayload)
 028            throw new SerializationException($"Payload is not of type {nameof(ChannelReestablishPayload)}");
 29
 30        // Get the value object serializer
 831        var channelIdSerializer =
 832            _valueObjectSerializerFactory.GetSerializer<ChannelId>()
 833            ?? throw new SerializationException($"No serializer found for value object type {nameof(ChannelId)}");
 834        await channelIdSerializer.SerializeAsync(channelReestablishPayload.ChannelId, stream);
 35
 36        // Serialize other types
 837        await stream.WriteAsync(EndianBitConverter.GetBytesBigEndian(channelReestablishPayload.NextCommitmentNumber));
 838        await stream.WriteAsync(EndianBitConverter.GetBytesBigEndian(channelReestablishPayload.NextRevocationNumber));
 839        await stream.WriteAsync(channelReestablishPayload.YourLastPerCommitmentSecret);
 840        await stream.WriteAsync(channelReestablishPayload.MyCurrentPerCommitmentPoint.ToBytes());
 841    }
 42
 43    public async Task<ChannelReestablishPayload?> DeserializeAsync(Stream stream)
 44    {
 1245        var buffer = ArrayPool<byte>.Shared.Rent(CryptoConstants.PUBKEY_LEN);
 46
 47        try
 48        {
 49            // Get the value object serializer
 1250            var channelIdSerializer =
 1251                _valueObjectSerializerFactory.GetSerializer<ChannelId>()
 1252                ?? throw new SerializationException($"No serializer found for value object type {nameof(ChannelId)}");
 1253            var channelId = await channelIdSerializer.DeserializeAsync(stream);
 54
 1255            await stream.ReadExactlyAsync(buffer.AsMemory()[..sizeof(ulong)]);
 1256            var nextCommitmentNumber = EndianBitConverter.ToUInt64BigEndian(buffer[..sizeof(ulong)]);
 57
 1258            await stream.ReadExactlyAsync(buffer.AsMemory()[..sizeof(ulong)]);
 1259            var nextRevocationNumber = EndianBitConverter.ToUInt64BigEndian(buffer[..sizeof(ulong)]);
 60
 1261            var yourLastPerCommitmentSecret = new byte[32];
 1262            await stream.ReadExactlyAsync(yourLastPerCommitmentSecret);
 63
 1264            await stream.ReadExactlyAsync(buffer.AsMemory()[..CryptoConstants.PUBKEY_LEN]);
 1265            var myCurrentPerCommitmentPoint = new PubKey(buffer[..CryptoConstants.PUBKEY_LEN]);
 66
 1267            return new ChannelReestablishPayload(channelId, myCurrentPerCommitmentPoint, nextCommitmentNumber,
 1268                                                 nextRevocationNumber, yourLastPerCommitmentSecret);
 69        }
 070        catch (Exception e)
 71        {
 072            throw new PayloadSerializationException("Error deserializing ChannelReestablishPayload", e);
 73        }
 74        finally
 75        {
 1276            ArrayPool<byte>.Shared.Return(buffer);
 77        }
 1278    }
 79
 80    async Task<IMessagePayload?> IPayloadSerializer.DeserializeAsync(Stream stream)
 81    {
 082        return await DeserializeAsync(stream);
 083    }
 84}