| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | using System;using System.Buffers;using System.IO;using System.Text.Json;using Emby.Server.Implementations.HttpServer;using Microsoft.Extensions.Logging.Abstractions;using Xunit;namespace Jellyfin.Server.Implementations.Tests.HttpServer{    public class WebSocketConnectionTests    {        [Fact]        public void DeserializeWebSocketMessage_SingleSegment_Success()        {            var con = new WebSocketConnection(new NullLogger<WebSocketConnection>(), null!, null!);            var bytes = File.ReadAllBytes("Test Data/HttpServer/ForceKeepAlive.json");            con.DeserializeWebSocketMessage(new ReadOnlySequence<byte>(bytes), out var bytesConsumed);            Assert.Equal(109, bytesConsumed);        }        [Fact]        public void DeserializeWebSocketMessage_MultipleSegments_Success()        {            const int SplitPos = 64;            var con = new WebSocketConnection(new NullLogger<WebSocketConnection>(), null!, null!);            var bytes = File.ReadAllBytes("Test Data/HttpServer/ForceKeepAlive.json");            var seg1 = new BufferSegment(new Memory<byte>(bytes, 0, SplitPos));            var seg2 = seg1.Append(new Memory<byte>(bytes, SplitPos, bytes.Length - SplitPos));            con.DeserializeWebSocketMessage(new ReadOnlySequence<byte>(seg1, 0, seg2, seg2.Memory.Length - 1), out var bytesConsumed);            Assert.Equal(109, bytesConsumed);        }        [Fact]        public void DeserializeWebSocketMessage_ValidPartial_Success()        {            var con = new WebSocketConnection(new NullLogger<WebSocketConnection>(), null!, null!);            var bytes = File.ReadAllBytes("Test Data/HttpServer/ValidPartial.json");            con.DeserializeWebSocketMessage(new ReadOnlySequence<byte>(bytes), out var bytesConsumed);            Assert.Equal(109, bytesConsumed);        }        [Fact]        public void DeserializeWebSocketMessage_Partial_ThrowJsonException()        {            var con = new WebSocketConnection(new NullLogger<WebSocketConnection>(), null!, null!);            var bytes = File.ReadAllBytes("Test Data/HttpServer/Partial.json");            Assert.Throws<JsonException>(() => con.DeserializeWebSocketMessage(new ReadOnlySequence<byte>(bytes), out var bytesConsumed));        }        internal class BufferSegment : ReadOnlySequenceSegment<byte>        {            public BufferSegment(Memory<byte> memory)            {                Memory = memory;            }            public BufferSegment Append(Memory<byte> memory)            {                var segment = new BufferSegment(memory)                {                    RunningIndex = RunningIndex + Memory.Length                };                Next = segment;                return segment;            }        }    }}
 |