< 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: 36_15743069263
Line coverage
85%
Covered lines: 30
Uncovered lines: 5
Coverable lines: 35
Total lines: 83
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-Interfaces-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 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 ChannelReestablishPayloadSerializer : IPayloadSerializer<ChannelReestablishPayload>
 16{
 17    private readonly IValueObjectSerializerFactory _valueObjectSerializerFactory;
 18
 419    public ChannelReestablishPayloadSerializer(IValueObjectSerializerFactory valueObjectSerializerFactory)
 20    {
 421        _valueObjectSerializerFactory = valueObjectSerializerFactory;
 422    }
 23
 24    public async Task SerializeAsync(IMessagePayload payload, Stream stream)
 25    {
 826        if (payload is not ChannelReestablishPayload channelReestablishPayload)
 027            throw new SerializationException($"Payload is not of type {nameof(ChannelReestablishPayload)}");
 28
 29        // Get the value object serializer
 830        var channelIdSerializer =
 831            _valueObjectSerializerFactory.GetSerializer<ChannelId>()
 832         ?? throw new SerializationException($"No serializer found for value object type {nameof(ChannelId)}");
 833        await channelIdSerializer.SerializeAsync(channelReestablishPayload.ChannelId, stream);
 34
 35        // Serialize other types
 836        await stream.WriteAsync(EndianBitConverter.GetBytesBigEndian(channelReestablishPayload.NextCommitmentNumber));
 837        await stream.WriteAsync(EndianBitConverter.GetBytesBigEndian(channelReestablishPayload.NextRevocationNumber));
 838        await stream.WriteAsync(channelReestablishPayload.YourLastPerCommitmentSecret);
 839        await stream.WriteAsync(channelReestablishPayload.MyCurrentPerCommitmentPoint);
 840    }
 41
 42    public async Task<ChannelReestablishPayload?> DeserializeAsync(Stream stream)
 43    {
 1244        var buffer = ArrayPool<byte>.Shared.Rent(CryptoConstants.CompactPubkeyLen);
 45
 46        try
 47        {
 48            // Get the value object serializer
 1249            var channelIdSerializer =
 1250                _valueObjectSerializerFactory.GetSerializer<ChannelId>()
 1251             ?? throw new SerializationException($"No serializer found for value object type {nameof(ChannelId)}");
 1252            var channelId = await channelIdSerializer.DeserializeAsync(stream);
 53
 1254            await stream.ReadExactlyAsync(buffer.AsMemory()[..sizeof(ulong)]);
 1255            var nextCommitmentNumber = EndianBitConverter.ToUInt64BigEndian(buffer[..sizeof(ulong)]);
 56
 1257            await stream.ReadExactlyAsync(buffer.AsMemory()[..sizeof(ulong)]);
 1258            var nextRevocationNumber = EndianBitConverter.ToUInt64BigEndian(buffer[..sizeof(ulong)]);
 59
 1260            var yourLastPerCommitmentSecret = new byte[32];
 1261            await stream.ReadExactlyAsync(yourLastPerCommitmentSecret);
 62
 1263            await stream.ReadExactlyAsync(buffer.AsMemory()[..CryptoConstants.CompactPubkeyLen]);
 1264            var myCurrentPerCommitmentPoint = new CompactPubKey(buffer[..CryptoConstants.CompactPubkeyLen]);
 65
 1266            return new ChannelReestablishPayload(channelId, myCurrentPerCommitmentPoint, nextCommitmentNumber,
 1267                                                 nextRevocationNumber, yourLastPerCommitmentSecret);
 68        }
 069        catch (Exception e)
 70        {
 071            throw new PayloadSerializationException("Error deserializing ChannelReestablishPayload", e);
 72        }
 73        finally
 74        {
 1275            ArrayPool<byte>.Shared.Return(buffer);
 76        }
 1277    }
 78
 79    async Task<IMessagePayload?> IPayloadSerializer.DeserializeAsync(Stream stream)
 80    {
 081        return await DeserializeAsync(stream);
 082    }
 83}