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); } }
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); } }
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); }
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); }
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); }
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); }
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); }
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); }
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]); } }