Exemple #1
0
        public void Test_Can_Serialize_All_Concrete_Payloads(Type t)
        {
            //arrange
            SerializerService serializer = new SerializerService();

            serializer.RegisterGamePacketSerializers()
            .RegisterPatchPacketSerializers();

            //Abstracts can't be created
            if (t.IsAbstract || typeof(IUnknownPayloadType).IsAssignableFrom(t))            //if it's unknown then it's probably default and thus unwritable
            {
                return;
            }

            object payload = Activator.CreateInstance(t, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.CreateInstance, null, new object[0], null);

            //act
            byte[] rentedBuffer = ArrayPool <byte> .Shared.Rent(36000);

            //We have to suppress these exceptions because some payloads have complex object graphs and
            //need more than default initialization to be serializable
            try
            {
                int offset = WritePayload(rentedBuffer, serializer, (dynamic)payload);

                //assert
                Assert.True(offset != 0);
            }
            catch (ArgumentNullException e)
            {
            }
            catch (Exception e)
            {
                Assert.Warn($"Type: {t.Name} may not be serializable. It's not determinable. This can happen if it has class/complex fields and should be ignored. \n\nException: {e.Message}");
            }
            finally
            {
                ArrayPool <byte> .Shared.Return(rentedBuffer);
            }
        }