< Summary - Combined Code Coverage

Information
Class: NLightning.Infrastructure.Serialization.Payloads.TxSignaturesPayloadSerializer
Assembly: NLightning.Infrastructure.Serialization
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Serialization/Payloads/TxSignaturesPayloadSerializer.cs
Tag: 30_15166811759
Line coverage
87%
Covered lines: 34
Uncovered lines: 5
Coverable lines: 39
Total lines: 94
Line coverage: 87.1%
Branch coverage
64%
Covered branches: 9
Total branches: 14
Branch coverage: 64.2%
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()62.5%8.02892.86%
DeserializeAsync()66.67%6.04690%
NLightning-Domain-Serialization-Payloads-IPayloadSerializer-DeserializeAsync()100%210%

File(s)

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

#LineLine coverage
 1using System.Buffers;
 2using System.Runtime.Serialization;
 3using NLightning.Domain.Serialization.Payloads;
 4
 5namespace NLightning.Infrastructure.Serialization.Payloads;
 6
 7using Converters;
 8using Domain.Protocol.Constants;
 9using Domain.Protocol.Payloads;
 10using Domain.Protocol.Payloads.Interfaces;
 11using Domain.Serialization.Factories;
 12using Domain.ValueObjects;
 13using Exceptions;
 14
 15public class TxSignaturesPayloadSerializer : IPayloadSerializer<TxSignaturesPayload>
 16{
 17    private readonly IValueObjectSerializerFactory _valueObjectSerializerFactory;
 18
 419    public TxSignaturesPayloadSerializer(IValueObjectSerializerFactory valueObjectSerializerFactory)
 20    {
 421        _valueObjectSerializerFactory = valueObjectSerializerFactory;
 422    }
 23
 24    public async Task SerializeAsync(IMessagePayload payload, Stream stream)
 25    {
 426        if (payload is not TxSignaturesPayload txSignaturesPayload)
 027            throw new SerializationException($"Payload is not of type {nameof(TxSignaturesPayload)}");
 28
 29        // Get the ChannelId 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(txSignaturesPayload.ChannelId, stream);
 34
 435        await stream.WriteAsync(txSignaturesPayload.TxId);
 436        await stream.WriteAsync(EndianBitConverter.GetBytesBigEndian((ushort)txSignaturesPayload.Witnesses.Count));
 37
 38        // Get the Witness serializer
 439        var witnessSerializer =
 440            _valueObjectSerializerFactory.GetSerializer<Witness>()
 441            ?? throw new SerializationException($"No serializer found for value object type {nameof(Witness)}");
 42
 1643        foreach (var witness in txSignaturesPayload.Witnesses)
 44        {
 445            await witnessSerializer.SerializeAsync(witness, stream);
 46        }
 447    }
 48
 49    public async Task<TxSignaturesPayload?> DeserializeAsync(Stream stream)
 50    {
 451        var buffer = ArrayPool<byte>.Shared.Rent(sizeof(ushort));
 52
 53        try
 54        {
 55            // Get the ChannelId serializer
 456            var channelIdSerializer =
 457                _valueObjectSerializerFactory.GetSerializer<ChannelId>()
 458                ?? throw new SerializationException($"No serializer found for value object type {nameof(ChannelId)}");
 459            var channelId = await channelIdSerializer.DeserializeAsync(stream);
 60
 461            var txId = new byte[TransactionConstants.TX_ID_LENGTH];
 462            await stream.ReadExactlyAsync(txId);
 63
 464            await stream.ReadExactlyAsync(buffer.AsMemory()[..sizeof(ushort)]);
 465            var numWitnesses = EndianBitConverter.ToUInt16BigEndian(buffer[..sizeof(ushort)]);
 66
 67            // Get the Witness serializer
 468            var witnessSerializer =
 469                _valueObjectSerializerFactory.GetSerializer<Witness>()
 470                ?? throw new SerializationException($"No serializer found for value object type {nameof(Witness)}");
 71
 472            var witnesses = new List<Witness>(numWitnesses);
 1673            for (var i = 0; i < numWitnesses; i++)
 74            {
 475                witnesses.Add(await witnessSerializer.DeserializeAsync(stream));
 76            }
 77
 478            return new TxSignaturesPayload(channelId, txId, witnesses);
 79        }
 080        catch (Exception e)
 81        {
 082            throw new PayloadSerializationException($"Error deserializing {nameof(TxSignaturesPayload)}", e);
 83        }
 84        finally
 85        {
 486            ArrayPool<byte>.Shared.Return(buffer);
 87        }
 488    }
 89
 90    async Task<IMessagePayload?> IPayloadSerializer.DeserializeAsync(Stream stream)
 91    {
 092        return await DeserializeAsync(stream);
 093    }
 94}