From daae9b9e4e6c8eb0cf84916f9552c59d9777042a Mon Sep 17 00:00:00 2001 From: AeonLucid Date: Fri, 16 Oct 2020 05:47:26 +0200 Subject: [PATCH] Added BufferMessageReader tests --- .../Impostor.Server.Hazel.csproj | 6 + .../Hazel/BufferMessageReaderTests.cs | 172 ++++++++++++++++++ src/Impostor.Tests/Impostor.Tests.csproj | 2 + 3 files changed, 180 insertions(+) create mode 100644 src/Impostor.Tests/Hazel/BufferMessageReaderTests.cs diff --git a/src/Impostor.Server.Hazel/Impostor.Server.Hazel.csproj b/src/Impostor.Server.Hazel/Impostor.Server.Hazel.csproj index df3f8c9..7d699cf 100644 --- a/src/Impostor.Server.Hazel/Impostor.Server.Hazel.csproj +++ b/src/Impostor.Server.Hazel/Impostor.Server.Hazel.csproj @@ -15,4 +15,10 @@ + + + <_Parameter1>Impostor.Tests + + + diff --git a/src/Impostor.Tests/Hazel/BufferMessageReaderTests.cs b/src/Impostor.Tests/Hazel/BufferMessageReaderTests.cs new file mode 100644 index 0000000..21bb126 --- /dev/null +++ b/src/Impostor.Tests/Hazel/BufferMessageReaderTests.cs @@ -0,0 +1,172 @@ +using Hazel; +using Impostor.Server.Hazel.Messages; +using Impostor.Server.Net.Messages; +using Xunit; + +namespace Impostor.Tests.Hazel +{ + public class BufferMessageReaderTests + { + [Fact] + public void ReadProperInt() + { + const int Test1 = int.MaxValue; + const int Test2 = int.MinValue; + + var msg = new MessageWriter(128); + msg.StartMessage(1); + msg.Write(Test1); + msg.Write(Test2); + msg.EndMessage(); + + Assert.Equal(11, msg.Length); + Assert.Equal(msg.Length, msg.Position); + + var message = new HazelMessage(MessageReader.Get(msg.Buffer, 0), MessageType.Reliable); + var reader = message.CreateReader(); + + Assert.Equal(Test1, reader.ReadInt32()); + Assert.Equal(Test2, reader.ReadInt32()); + } + + [Fact] + public void ReadProperBool() + { + const bool Test1 = true; + const bool Test2 = false; + + var msg = new MessageWriter(128); + msg.StartMessage(1); + msg.Write(Test1); + msg.Write(Test2); + msg.EndMessage(); + + Assert.Equal(5, msg.Length); + Assert.Equal(msg.Length, msg.Position); + + var message = new HazelMessage(MessageReader.Get(msg.Buffer, 0), MessageType.Reliable); + var reader = message.CreateReader(); + + Assert.Equal(Test1, reader.ReadBoolean()); + Assert.Equal(Test2, reader.ReadBoolean()); + + } + + [Fact] + public void ReadProperString() + { + const string Test1 = "Hello"; + string Test2 = new string(' ', 1024); + var msg = new MessageWriter(2048); + msg.StartMessage(1); + msg.Write(Test1); + msg.Write(Test2); + msg.Write(string.Empty); + msg.EndMessage(); + + Assert.Equal(msg.Length, msg.Position); + + var message = new HazelMessage(MessageReader.Get(msg.Buffer, 0), MessageType.Reliable); + var reader = message.CreateReader(); + + Assert.Equal(Test1, reader.ReadString()); + Assert.Equal(Test2, reader.ReadString()); + Assert.Equal(string.Empty, reader.ReadString()); + + } + + [Fact] + public void ReadProperFloat() + { + const float Test1 = 12.34f; + + var msg = new MessageWriter(2048); + msg.StartMessage(1); + msg.Write(Test1); + msg.EndMessage(); + + Assert.Equal(7, msg.Length); + Assert.Equal(msg.Length, msg.Position); + + var message = new HazelMessage(MessageReader.Get(msg.Buffer, 0), MessageType.Reliable); + var reader = message.CreateReader(); + + Assert.Equal(Test1, reader.ReadSingle()); + } + + [Fact] + public void CopySubMessage() + { + const byte Test1 = 12; + const byte Test2 = 146; + + var msg = new MessageWriter(2048); + msg.StartMessage(1); + + msg.StartMessage(2); + msg.Write(Test1); + msg.Write(Test2); + msg.EndMessage(); + + msg.EndMessage(); + + var message = new HazelMessage(MessageReader.Get(msg.Buffer, 0), MessageType.Reliable); + var handleMessage = message.CreateReader(); + Assert.Equal(1, handleMessage.Tag); + + var parentReader = handleMessage.Slice(handleMessage.Position); + + Assert.Equal(1, parentReader.Tag); + + var reader = parentReader.ReadMessage(); + + Assert.Equal(2, reader.Tag); + Assert.Equal(Test1, reader.ReadByte()); + Assert.Equal(Test2, reader.ReadByte()); + } + + [Fact] + public void ReadMessageLength() + { + var msg = new MessageWriter(2048); + msg.StartMessage(1); + msg.Write(65534); + msg.StartMessage(2); + msg.Write("HO"); + msg.EndMessage(); + msg.StartMessage(2); + msg.Write("NO"); + msg.EndMessage(); + msg.EndMessage(); + + Assert.Equal(msg.Length, msg.Position); + + var message = new HazelMessage(MessageReader.Get(msg.Buffer, 0), MessageType.Reliable); + var reader = message.CreateReader(); + Assert.Equal(1, reader.Tag); + Assert.Equal(65534, reader.ReadInt32()); // Content + + var sub = reader.ReadMessage(); + Assert.Equal(3, sub.Length); + Assert.Equal(2, sub.Tag); + Assert.Equal("HO", sub.ReadString()); + + sub = reader.ReadMessage(); + Assert.Equal(3, sub.Length); + Assert.Equal(2, sub.Tag); + Assert.Equal("NO", sub.ReadString()); + } + + [Fact] + public void GetLittleEndian() + { + Assert.True(MessageWriter.IsLittleEndian()); + } + + private void SetZero(MessageReader reader) + { + for (int i = 0; i < reader.Buffer.Length; ++i) + reader.Buffer[i] = 0; + } + } +} \ No newline at end of file diff --git a/src/Impostor.Tests/Impostor.Tests.csproj b/src/Impostor.Tests/Impostor.Tests.csproj index c05954a..536b4e5 100644 --- a/src/Impostor.Tests/Impostor.Tests.csproj +++ b/src/Impostor.Tests/Impostor.Tests.csproj @@ -14,6 +14,8 @@ + + -- 2.39.5