47 lines
1.5 KiB
C#
47 lines
1.5 KiB
C#
using System;
|
|
using Xunit;
|
|
using XWorld.Framework.Protocol;
|
|
|
|
namespace XWorld.Framework.Tests
|
|
{
|
|
public class FrameCodecTests
|
|
{
|
|
[Fact]
|
|
public void Frame_RoundTrips()
|
|
{
|
|
var original = new Frame(Channel.Game, 7, new byte[] { 10, 20, 30 });
|
|
byte[] wire = FrameCodec.Encode(original);
|
|
Frame decoded = FrameCodec.Decode(wire);
|
|
|
|
Assert.Equal(Channel.Game, decoded.Channel);
|
|
Assert.Equal((ushort)7, decoded.Opcode);
|
|
Assert.Equal(new byte[] { 10, 20, 30 }, decoded.Payload);
|
|
}
|
|
|
|
[Fact]
|
|
public void Frame_EmptyPayload_RoundTrips()
|
|
{
|
|
var original = new Frame(Channel.Framework, 1, null);
|
|
Frame decoded = FrameCodec.Decode(FrameCodec.Encode(original));
|
|
Assert.Equal(Channel.Framework, decoded.Channel);
|
|
Assert.Equal((ushort)1, decoded.Opcode);
|
|
Assert.Empty(decoded.Payload);
|
|
}
|
|
|
|
[Fact]
|
|
public void Encode_WireLayout_IsChannelOpcodeLenPayload()
|
|
{
|
|
var f = new Frame(Channel.Game, 0x0102, new byte[] { 0xAA });
|
|
byte[] wire = FrameCodec.Encode(f);
|
|
// channel=1, opcode 小端 = 02 01, len varuint = 1, payload = AA
|
|
Assert.Equal(new byte[] { 0x01, 0x02, 0x01, 0x01, 0xAA }, wire);
|
|
}
|
|
|
|
[Fact]
|
|
public void Decode_Truncated_Throws()
|
|
{
|
|
Assert.Throws<FormatException>(() => FrameCodec.Decode(new byte[] { 0x00 }));
|
|
}
|
|
}
|
|
}
|