]> git.deb.at Git - rhonda/impostor.git/commitdiff
Added BufferMessageReader tests
authorAeonLucid <aeonlucid@gmail.com>
Fri, 16 Oct 2020 03:47:26 +0000 (05:47 +0200)
committerAeonLucid <aeonlucid@gmail.com>
Sun, 18 Oct 2020 19:17:41 +0000 (21:17 +0200)
src/Impostor.Server.Hazel/Impostor.Server.Hazel.csproj
src/Impostor.Tests/Hazel/BufferMessageReaderTests.cs [new file with mode: 0644]
src/Impostor.Tests/Impostor.Tests.csproj

index df3f8c9619e095924c8db851f85f426acfe53a45..7d699cf39957c6323559442e3fa56a82c5dab056 100644 (file)
       <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0-rc.1.20451.14" />
     </ItemGroup>
 
+    <ItemGroup>
+        <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
+            <_Parameter1>Impostor.Tests</_Parameter1>
+        </AssemblyAttribute>
+    </ItemGroup>
+
 </Project>
diff --git a/src/Impostor.Tests/Hazel/BufferMessageReaderTests.cs b/src/Impostor.Tests/Hazel/BufferMessageReaderTests.cs
new file mode 100644 (file)
index 0000000..21bb126
--- /dev/null
@@ -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
index c05954a86cee733394d5e4ac2cf70338594dc93d..536b4e5f2aca55174751a5f8aad540cdefcd1c15 100644 (file)
@@ -14,6 +14,8 @@
     </ItemGroup>
 
     <ItemGroup>
+      <ProjectReference Include="..\..\submodules\Hazel-Networking\Hazel\Hazel.csproj" />
+      <ProjectReference Include="..\Impostor.Server.Hazel\Impostor.Server.Hazel.csproj" />
       <ProjectReference Include="..\Impostor.Shared\Impostor.Shared.csproj" />
     </ItemGroup>