64 lines
2.3 KiB
C#
64 lines
2.3 KiB
C#
using System;
|
|
using Xunit;
|
|
using XWorld.Framework.Protocol;
|
|
|
|
namespace XWorld.Framework.Tests
|
|
{
|
|
public class DevDiscoveryCodecTests
|
|
{
|
|
[Fact]
|
|
public void Query_RoundTrips()
|
|
{
|
|
var q = new DevDiscoveryQuery { ProtoVersion = DevDiscovery.ProtoVersion, Nonce = 0xABCDEF, Token = "dev-token" };
|
|
byte[] bytes = DevDiscoveryCodec.EncodeQuery(q);
|
|
Assert.True(DevDiscoveryCodec.TryDecodeQuery(bytes, out var got));
|
|
Assert.Equal(q.ProtoVersion, got.ProtoVersion);
|
|
Assert.Equal(q.Nonce, got.Nonce);
|
|
Assert.Equal(q.Token, got.Token);
|
|
}
|
|
|
|
[Fact]
|
|
public void Reply_RoundTrips()
|
|
{
|
|
var reply = new DevDiscoveryReply
|
|
{
|
|
ProtoVersion = DevDiscovery.ProtoVersion,
|
|
Nonce = 42,
|
|
ServerName = "dev-pc",
|
|
GatewayUrl = "ws://192.168.1.23:5005/ws",
|
|
ResourceBaseUrl = "http://192.168.1.23:15081/minigame/",
|
|
Token = "dev-token",
|
|
};
|
|
byte[] bytes = DevDiscoveryCodec.EncodeReply(reply);
|
|
Assert.True(DevDiscoveryCodec.TryDecodeReply(bytes, out var got));
|
|
Assert.Equal(reply.GatewayUrl, got.GatewayUrl);
|
|
Assert.Equal(reply.ResourceBaseUrl, got.ResourceBaseUrl);
|
|
Assert.Equal(reply.ServerName, got.ServerName);
|
|
Assert.Equal(reply.Nonce, got.Nonce);
|
|
Assert.Equal(reply.Token, got.Token);
|
|
}
|
|
|
|
[Fact]
|
|
public void BadMagic_Rejected()
|
|
{
|
|
byte[] bytes = { 0x00, 0x01, 0x02, 0x03, DevDiscovery.TypeQuery, 1 };
|
|
Assert.False(DevDiscoveryCodec.TryDecodeQuery(bytes, out _));
|
|
}
|
|
|
|
[Fact]
|
|
public void Truncated_Rejected()
|
|
{
|
|
Assert.False(DevDiscoveryCodec.TryDecodeQuery(new byte[] { 0x58, 0x57 }, out _));
|
|
Assert.False(DevDiscoveryCodec.TryDecodeReply(Array.Empty<byte>(), out _));
|
|
}
|
|
|
|
[Fact]
|
|
public void WrongType_Rejected()
|
|
{
|
|
var q = new DevDiscoveryQuery { ProtoVersion = 1, Nonce = 1, Token = "t" };
|
|
byte[] queryBytes = DevDiscoveryCodec.EncodeQuery(q);
|
|
Assert.False(DevDiscoveryCodec.TryDecodeReply(queryBytes, out _));
|
|
}
|
|
}
|
|
}
|