示例#1
0
        public void TestMultiThreading()
        {
            const int numTestIterations = 5;

            for (int j = 0; j < numTestIterations; j++)
            {
                const int numThreads   = 10;
                const int numPerThread = 1000;
                var       threads      = new List <Thread>(numThreads);
                var       source       = AnimalMessage.CreateTestMessage();
                for (int i = 0; i < numThreads; i++)
                {
                    threads.Add(new Thread(() =>
                    {
                        RoundTrip(source, numPerThread, j > 0);
                    }));
                }
                numVerified = 0;
                foreach (var thread in threads)
                {
                    thread.Start();
                }
                foreach (var thread in threads)
                {
                    thread.Join(20000);
                }
                Assert.AreEqual(numThreads * numPerThread, numVerified);
            }
        }
示例#2
0
 private void RoundTrip(AnimalMessage input, int numTrips, bool verify)
 {
     for (int i = 0; i < numTrips; i++)
     {
         byte[] buffer = input.ToMsgPack();
         if (verify)
         {
             VerifyAnimalMessage(input, MsgPackSerializer.Deserialize <AnimalMessage>(buffer));
         }
         Interlocked.Increment(ref numVerified);
     }
 }
示例#3
0
        public void TestAsMaps()
        {
            MsgPackSerializer.DefaultContext.SerializationMethod = SerializationMethod.Map;
            AnimalMessage msg = AnimalMessage.CreateTestMessage();

            byte[] payload = msg.ToMsgPack();
            Assert.IsNotNull(payload);
            Assert.AreNotEqual(0, payload.Length);
            AnimalMessage restored = MsgPackSerializer.Deserialize <AnimalMessage>(payload);

            VerifyAnimalMessage(msg, restored);
        }
示例#4
0
        public void TestNulls()
        {
            MsgPackSerializer.DefaultContext.SerializationMethod = SerializationMethod.Array;
            var msg = AnimalMessage.CreateTestMessage();

            msg.AnimalColor = null;
            byte[] payload = msg.ToMsgPack();
            Assert.IsNotNull(payload);
            Assert.AreNotEqual(0, payload.Length);
            var restored = MsgPackSerializer.Deserialize <AnimalMessage>(payload);

            Assert.IsNull(restored.AnimalColor);
        }
示例#5
0
        private void VerifyAnimalMessage(AnimalMessage msg, AnimalMessage restored)
        {
            Assert.IsNotNull(restored);
            Assert.AreEqual(msg.IsAlive, restored.IsAlive);
            Assert.AreEqual(msg.HeightInches, restored.HeightInches);
            Assert.AreEqual(msg.AnimalKind, restored.AnimalKind);
            Assert.AreEqual(msg.AnimalName, restored.AnimalName);
            Assert.IsNotNull(msg.AnimalColor);
            Assert.AreEqual(msg.AnimalColor.Red, restored.AnimalColor.Red);
            Assert.AreEqual(msg.AnimalColor.Green, restored.AnimalColor.Green);
            Assert.AreEqual(msg.AnimalColor.Blue, restored.AnimalColor.Blue);
            Assert.AreEqual(msg.BirthDay, restored.BirthDay);
            Assert.AreEqual(msg.SpotColors.Count, restored.SpotColors.Count);
            for (int i = 0; i < msg.SpotColors.Count; i++)
            {
                Assert.AreEqual(msg.SpotColors[i], restored.SpotColors[i]);
            }
            Assert.IsNull(restored.MoreColors);
            Assert.IsNotNull(restored.Metadata);
            foreach (KeyValuePair <string, string> pair in msg.Metadata)
            {
                Assert.IsTrue(restored.Metadata.ContainsKey(pair.Key));
                Assert.AreEqual(pair.Value, restored.Metadata[pair.Key]);
            }
            Assert.AreEqual(msg.ListOfInts.Count, restored.ListOfInts.Count);
            for (int i = 0; i < msg.ListOfInts.Count; i++)
            {
                Assert.AreEqual(msg.ListOfInts[i], restored.ListOfInts[i]);
            }

            Assert.AreEqual(msg.CurrentHabitat, restored.CurrentHabitat);
            Assert.AreEqual(msg.TheLongString, restored.TheLongString);

            Assert.IsFalse(restored.NullableIntOne.HasValue);
            if (MsgPackSerializer.DefaultContext.SerializationMethod == SerializationMethod.Array)
            {
                Assert.IsTrue(restored.NullableIntTwo.HasValue);
            }
            else
            {
                Assert.IsFalse(restored.NullableIntTwo.HasValue);
            }
            Assert.IsTrue(restored.NullableIntThree.HasValue && msg.NullableIntThree.Value == 1);
        }
示例#6
0
        public void TestCompat()
        {
            MsgPackSerializer.DefaultContext.SerializationMethod = SerializationMethod.Array;
            AnimalMessage msg = AnimalMessage.CreateTestMessage();

            byte[] payload          = msg.ToMsgPack();
            string msgFilename      = Path.Combine(Environment.CurrentDirectory, "animal.msg");
            string verifierFilename = Path.Combine(Environment.CurrentDirectory, "msgpack-sharp-verifier.exe");

            File.WriteAllBytes(msgFilename, payload);
            string args = verifierFilename + " " + msgFilename;

            Process.Start("mono", args);
            Assert.IsTrue(File.Exists(msgFilename + ".out"), "The verifier program that uses other people's msgpack libs failed to successfully handle our message while running [mono " + args + "]");
            payload = File.ReadAllBytes(msgFilename + ".out");
            AnimalMessage restored = MsgPackSerializer.Deserialize <AnimalMessage>(payload);

            VerifyAnimalMessage(msg, restored);
        }
示例#7
0
        public static AnimalMessage CreateTestMessage()
        {
            AnimalMessage msg = new AnimalMessage();

            msg.IsAlive      = true;
            msg.HeightInches = 7;
            msg.AnimalKind   = "Cat";
            msg.AnimalName   = "Lunchbox";
            msg.AnimalColor  = new AnimalColor()
            {
                Red = 1.0f, Green = 0.1f, Blue = 0.1f
            };
            msg.BirthDay   = new DateTime(1974, 1, 4);
            msg.SpotColors = new List <AnimalColor>();
            for (int i = 0; i < 3; i++)
            {
                msg.SpotColors.Add(new AnimalColor()
                {
                    Red = 1.0f, Green = 1.0f, Blue = 0.0f
                });
            }
            msg.Metadata         = new Dictionary <string, string>();
            msg.Metadata["Key1"] = "Value1";
            msg.Metadata["Key2"] = "Value2";
            msg.ListOfInts       = new List <int>();
            for (int i = 0; i < 5; i++)
            {
                msg.ListOfInts.Add(i * 2);
            }
            msg.CurrentHabitat = Habitat.Wild;

            msg.TheLongString = String.Empty;
            for (int i = 0; i < 257; i++)
            {
                msg.TheLongString += "+";
            }

            msg.NullableIntOne   = null;
            msg.NullableIntTwo   = null;
            msg.NullableIntThree = 1;

            return(msg);
        }
示例#8
0
        public void TestManualConfig()
        {
            var tank = new Tank()
            {
                Name     = "M1",
                MaxSpeed = 65.0f,
                Cargo    = AnimalMessage.CreateTestMessage()
            };

            MsgPackSerializer.DefaultContext.RegisterSerializer <Tank>("MaxSpeed", "Name", "Cargo");
            byte[] payload = tank.ToMsgPack();
            Assert.IsNotNull(payload);
            Assert.AreNotEqual(0, payload.Length);
            var restoredTank = MsgPackSerializer.Deserialize <Tank>(payload);

            Assert.IsNotNull(restoredTank);
            Assert.AreEqual(tank.Name, restoredTank.Name);
            Assert.AreEqual(tank.MaxSpeed, restoredTank.MaxSpeed);
            VerifyAnimalMessage(tank.Cargo, restoredTank.Cargo);
        }
示例#9
0
        private void TestLimit(int count)
        {
            var msg = new AnimalMessage();

            msg.SpotColors = new List <AnimalColor>();
            for (int i = 0; i < count; i++)
            {
                msg.SpotColors.Add(new AnimalColor()
                {
                    Red = 1.0f
                });
            }
            byte[] payload = msg.ToMsgPack();

            var restored = MsgPackSerializer.Deserialize <AnimalMessage>(payload);

            Assert.IsNotNull(restored.SpotColors);
            Assert.AreEqual(msg.SpotColors.Count, restored.SpotColors.Count);

            for (int i = 0; i < count; i++)
            {
                Assert.AreEqual(msg.SpotColors[i], restored.SpotColors[i]);
            }
        }