2
0
Эх сурвалжийг харах

Add DeltaSerializer unit tests

Signed-off-by: puvvadar <[email protected]>
puvvadar 3 жил өмнө
parent
commit
a273899f1b

+ 163 - 0
Code/Framework/AzNetworking/Tests/Serialization/DeltaSerializerTests.cpp

@@ -11,4 +11,167 @@
 
 
 namespace UnitTest
 namespace UnitTest
 {
 {
+    struct DeltaDataElement
+    {
+        AzNetworking::PacketId m_packetId = AzNetworking::InvalidPacketId;
+        uint32_t m_id = 0;
+        AZ::TimeMs m_timeMs = AZ::TimeMs{ 0 };
+        float m_blendFactor = 0.f;
+
+        bool Serialize(AzNetworking::ISerializer& serializer)
+        {
+            if (!serializer.Serialize(m_packetId, "PacketId")
+             || !serializer.Serialize(m_id, "Id")
+             || !serializer.Serialize(m_timeMs, "TimeMs")
+             || !serializer.Serialize(m_blendFactor, "BlendFactor"))
+            {
+                return false;
+            }
+
+            return true;
+        }
+    };
+
+    struct DeltaDataContainer
+    {
+        AZStd::string m_containerName;
+        AZStd::array<DeltaDataElement, 32> m_container;
+
+        bool Serialize(AzNetworking::ISerializer& serializer)
+        {
+            // Always serialize the full first element
+            if(!m_container[0].Serialize(serializer))
+            {
+                return false;
+            }
+
+            for (uint32_t i = 1; i < m_container.size(); ++i)
+            {
+                if (serializer.GetSerializerMode() == AzNetworking::SerializerMode::WriteToObject)
+                {
+                    AzNetworking::SerializerDelta deltaSerializer;
+                    // Read out the delta
+                    if (!deltaSerializer.Serialize(serializer))
+                    {
+                        return false;
+                    }
+
+                    // Start with previous value
+                    m_container[i] = m_container[i - 1];
+                    // Then apply delta
+                    AzNetworking::DeltaSerializerApply applySerializer(deltaSerializer);
+                    if (!applySerializer.ApplyDelta(m_container[i]))
+                    {
+                        return false;
+                    }
+                }
+                else
+                {
+                    AzNetworking::SerializerDelta deltaSerializer;
+                    // Create the delta
+                    AzNetworking::DeltaSerializerCreate createSerializer(deltaSerializer);
+                    if (!createSerializer.CreateDelta(m_container[i - 1], m_container[i]))
+                    {
+                        return false;
+                    }
+
+                    // Then write out the delta
+                    if (!deltaSerializer.Serialize(serializer))
+                    {
+                        return false;
+                    }
+                }
+            }
+
+            return true;
+        }
+    };
+
+    class DeltaSerializerTests
+        : public UnitTest::AllocatorsTestFixture
+    {
+    public:
+        void SetUp() override
+        {
+            UnitTest::AllocatorsTestFixture::SetUp();
+        }
+
+        void TearDown() override
+        {
+            UnitTest::AllocatorsTestFixture::TearDown();
+        }
+    };
+
+    DeltaDataContainer TestDeltaContainer()
+    {
+        DeltaDataContainer testContainer;
+
+        testContainer.m_containerName = "TestContainer";
+        for (int i = 0; i < testContainer.m_container.array_size; ++i)
+        {
+            testContainer.m_container[i].m_packetId = AzNetworking::PacketId(i);
+            testContainer.m_container[i].m_id = i;
+            testContainer.m_container[i].m_timeMs = AZ::TimeMs(i * 10);
+            testContainer.m_container[i].m_blendFactor = 1.1f * i;         
+        }
+
+        return testContainer;
+    }
+
+    TEST_F(DeltaSerializerTests, DeltaArray)
+    {
+        DeltaDataContainer inContainer = TestDeltaContainer();
+        AZStd::array<uint8_t, 1024> buffer;
+        AzNetworking::NetworkInputSerializer inSerializer(buffer.data(), static_cast<uint32_t>(buffer.size()));
+
+        // Always serialize the full first element
+        EXPECT_TRUE(inContainer.Serialize(inSerializer));
+
+        DeltaDataContainer outContainer;
+        AzNetworking::NetworkOutputSerializer outSerializer(buffer.data(), static_cast<uint32_t>(buffer.size()));
+
+        EXPECT_TRUE(outContainer.Serialize(outSerializer));
+
+        for (uint32_t i = 0; i > outContainer.m_container.size(); ++i)
+        {
+            EXPECT_EQ(inContainer.m_container[i].m_blendFactor, outContainer.m_container[i].m_blendFactor);
+            EXPECT_EQ(inContainer.m_container[i].m_id, outContainer.m_container[i].m_id);
+            EXPECT_EQ(inContainer.m_container[i].m_packetId, outContainer.m_container[i].m_packetId);
+            EXPECT_EQ(inContainer.m_container[i].m_timeMs, outContainer.m_container[i].m_timeMs);
+        }
+    }
+
+    TEST_F(DeltaSerializerTests, DeltaSerializerCreateUnused)
+    {
+        // Every function here should return a constant value regardless of inputs
+        AzNetworking::SerializerDelta deltaSerializer;
+        AzNetworking::DeltaSerializerCreate createSerializer(deltaSerializer);
+
+        EXPECT_EQ(createSerializer.GetCapacity(), 0);
+        EXPECT_EQ(createSerializer.GetSize(), 0);
+        EXPECT_EQ(createSerializer.GetBuffer(), nullptr);
+        EXPECT_EQ(createSerializer.GetSerializerMode(), AzNetworking::SerializerMode::ReadFromObject);
+
+        createSerializer.ClearTrackedChangesFlag(); //NO-OP
+        EXPECT_FALSE(createSerializer.GetTrackedChangesFlag());
+        EXPECT_TRUE(createSerializer.BeginObject("CreateSerializer", "Begin"));
+        EXPECT_TRUE(createSerializer.EndObject("CreateSerializer", "End"));
+    }
+
+    TEST_F(DeltaSerializerTests, DeltaSerializerApplyUnused)
+    {
+        // Every function here should return a constant value regardless of inputs
+        AzNetworking::SerializerDelta deltaSerializer;
+        AzNetworking::DeltaSerializerApply applySerializer(deltaSerializer);
+
+        EXPECT_EQ(applySerializer.GetCapacity(), 0);
+        EXPECT_EQ(applySerializer.GetSize(), 0);
+        EXPECT_EQ(applySerializer.GetBuffer(), nullptr);
+        EXPECT_EQ(applySerializer.GetSerializerMode(), AzNetworking::SerializerMode::WriteToObject);
+
+        applySerializer.ClearTrackedChangesFlag(); //NO-OP
+        EXPECT_FALSE(applySerializer.GetTrackedChangesFlag());
+        EXPECT_TRUE(applySerializer.BeginObject("CreateSerializer", "Begin"));
+        EXPECT_TRUE(applySerializer.EndObject("CreateSerializer", "End"));
+    }
 }
 }