< Summary - Combined Code Coverage

Information
Class: NLightning.Infrastructure.Serialization.Payloads.PingPayloadSerializer
Assembly: NLightning.Infrastructure.Serialization
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Serialization/Payloads/PingPayloadSerializer.cs
Tag: 30_15166811759
Line coverage
72%
Covered lines: 18
Uncovered lines: 7
Coverable lines: 25
Total lines: 60
Line coverage: 72%
Branch coverage
50%
Covered branches: 2
Total branches: 4
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
SerializeAsync()50%2.02283.33%
DeserializeAsync()50%2.05276.47%
NLightning-Domain-Serialization-Payloads-IPayloadSerializer-DeserializeAsync()100%210%

File(s)

/home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Serialization/Payloads/PingPayloadSerializer.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.Payloads;
 9using Domain.Protocol.Payloads.Interfaces;
 10using Exceptions;
 11
 12public class PingPayloadSerializer : IPayloadSerializer<PingPayload>
 13{
 14    public async Task SerializeAsync(IMessagePayload payload, Stream stream)
 15    {
 416        if (payload is not PingPayload pingPayload)
 017            throw new SerializationException($"Payload is not of type {nameof(PingPayload)}");
 18
 419        await stream.WriteAsync(EndianBitConverter.GetBytesBigEndian(pingPayload.NumPongBytes));
 420        await stream.WriteAsync(EndianBitConverter.GetBytesBigEndian(pingPayload.BytesLength));
 421        await stream.WriteAsync(pingPayload.Ignored);
 422    }
 23
 24    public async Task<PingPayload?> DeserializeAsync(Stream stream)
 25    {
 426        var buffer = ArrayPool<byte>.Shared.Rent(sizeof(ushort));
 27
 28        try
 29        {
 430            await stream.ReadExactlyAsync(buffer.AsMemory()[..sizeof(ushort)]);
 431            var numPongBytes = EndianBitConverter.ToUInt16BigEndian(buffer[..sizeof(ushort)]);
 32
 433            await stream.ReadExactlyAsync(buffer.AsMemory()[..sizeof(ushort)]);
 434            var bytesLength = EndianBitConverter.ToUInt16BigEndian(buffer[..sizeof(ushort)]);
 35
 436            if (stream.Length - stream.Position < bytesLength)
 037                throw new SerializationException(
 038                    $"Invalid Ignored data for PingPayload. Expected {bytesLength} bytes.");
 39
 440            return new PingPayload
 441            {
 442                NumPongBytes = numPongBytes,
 443                BytesLength = bytesLength
 444            };
 45        }
 046        catch (Exception e)
 47        {
 048            throw new PayloadSerializationException("Error deserializing PingPayload", e);
 49        }
 50        finally
 51        {
 452            ArrayPool<byte>.Shared.Return(buffer);
 53        }
 454    }
 55
 56    async Task<IMessagePayload?> IPayloadSerializer.DeserializeAsync(Stream stream)
 57    {
 058        return await DeserializeAsync(stream);
 059    }
 60}