示例#1
0
        public void Run()
        {
            //Test constuctor values
            var m = new MyMessageV2();

            TestDefault(m);

            //Test deserialization
            m.FieldA = 0;
            m.FieldB = 0;
            m.FieldC = 0;
            m.FieldD = 0;
            m.FieldE = 0;
            m.FieldF = 0;
            m.FieldG = 0;
            m.FieldI = 0;
            m.FieldJ = 0;
            m.FieldK = 0;
            m.FieldL = 0;
            m.FieldM = 0;
            m.FieldN = true;
            m.FieldO = null;
            MyMessageV2.Deserialize(new byte[0], m);
            TestDefault(m);
        }
示例#2
0
        public void Run()
        {
            MyMessageV2 msgIn1 = MyMessageV2.TestInstance();

            msgIn1.NullableEnum = MyMessageV2.AliasedEnum.Nada;
            msgIn1.NullableInt  = 123;

            var ms1 = new MemoryStream();

            MyMessageV2.Serialize(ms1, msgIn1);

            var msgOut1 = MyMessageV2.Deserialize(ms1.ToArray());

            Assert.AreEqual(msgIn1.NullableEnum, msgOut1.NullableEnum);
            Assert.AreEqual(msgIn1.NullableInt, msgOut1.NullableInt);

            MyMessageV2 msgIn2 = MyMessageV2.TestInstance();

            var ms2 = new MemoryStream();

            MyMessageV2.Serialize(ms2, msgIn2);

            var msgOut2 = MyMessageV2.Deserialize(ms2.ToArray());

            Assert.IsNull(msgOut2.NullableEnum);
            Assert.IsNull(msgOut2.NullableInt);
        }
示例#3
0
        public void Run()
        {
            MyMessageV2 version2before = MyMessageV2.TestInstance();

            //Write
            MemoryStream ms = new MemoryStream();

            MyMessageV2.Serialize(ms, version2before);

            Console.WriteLine("Wire bytes: " + ms.Length);

            //Read
            MemoryStream msread        = new MemoryStream(ms.ToArray());
            MyMessageV2  version2after = MyMessageV2.Deserialize(msread);

            //Verify
            Assert.IsTrue(version2before.Equals(version2after), "MyMessageV2 WriteRead");

            //Read by older version
            MemoryStream msread1  = new MemoryStream(ms.ToArray());
            MyMessageV1  version1 = MyMessageV1.Deserialize(msread1);

            Console.WriteLine("Version 1");
            Assert.AreEqual(version2before.FieldA, version1.FieldA);
        }
示例#4
0
        public void SkipKey()
        {
            var version2before = MyMessageV2.TestInstance();

            //Write
            var buffer = MyMessageV2.SerializeToBytes(version2before);

            //Read by older version, lots of values will be skipped
            var noseek   = new NonSeekableMemoryStream(buffer);
            var ps       = new PositionStream(noseek);
            var version1 = MyMessageV1NoPreserve.Deserialize(ps);

            Assert.AreEqual(version2before.FieldA, version1.FieldA);
        }
示例#5
0
        public void SkipKeyFail()
        {
            MyMessageV2 version2before = MyMessageV2.TestInstance();

            //Write
            var buffer = MyMessageV2.SerializeToBytes(version2before);

            //Read by older version, lots of values will be skipped
            var noseek = new NonSeekableMemoryStream(buffer);

            //This should trigger a NotSupportedException
            var version1 = MyMessageV1NoPreserve.Deserialize(noseek);

            Assert.AreEqual(version2before.FieldA, version1.FieldA);
        }
示例#6
0
 static void TestDefault(MyMessageV2 m)
 {
     Assert.AreEqual(-1, m.FieldA);
     Assert.AreEqual(4.5, m.FieldB);
     Assert.AreEqual(5.4f, m.FieldC);
     Assert.AreEqual(-2, m.FieldD);
     Assert.AreEqual(-3, m.FieldE);
     Assert.AreEqual(4, m.FieldF);
     Assert.AreEqual(5, m.FieldG);
     Assert.AreEqual(-6, m.FieldH);
     Assert.AreEqual(-7, m.FieldI);
     Assert.AreEqual(8, m.FieldJ);
     Assert.AreEqual(9, m.FieldK);
     Assert.AreEqual(-10, m.FieldL);
     Assert.AreEqual(-11, m.FieldM);
     Assert.AreEqual(false, m.FieldN);
     Assert.AreEqual("test", m.FieldO);
 }
 /// <summary>Helper: Serialize into a MemoryStream and return its byte array</summary>
 public static byte[] SerializeToBytes(MyMessageV2 instance)
 {
     using (var ms = new MemoryStream())
     {
         Serialize(ms, instance);
         return ms.ToArray();
     }
 }
 /// <summary>Helper: Serialize with a varint length prefix</summary>
 public static void SerializeLengthDelimited(Stream stream, MyMessageV2 instance)
 {
     var data = SerializeToBytes(instance);
     global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, (uint)data.Length);
     stream.Write(data, 0, data.Length);
 }
        /// <summary>Serialize the instance into the stream</summary>
        public static void Serialize(Stream stream, MyMessageV2 instance)
        {
            BinaryWriter bw = new BinaryWriter(stream);
            // Key for field: 1, Varint
            stream.WriteByte(8);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldA);
            // Key for field: 2, Fixed64
            stream.WriteByte(17);
            bw.Write(instance.FieldB);
            // Key for field: 3, Fixed32
            stream.WriteByte(29);
            bw.Write(instance.FieldC);
            // Key for field: 4, Varint
            stream.WriteByte(32);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldD);
            // Key for field: 5, Varint
            stream.WriteByte(40);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldE);
            // Key for field: 6, Varint
            stream.WriteByte(48);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, instance.FieldF);
            // Key for field: 7, Varint
            stream.WriteByte(56);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream, instance.FieldG);
            // Key for field: 8, Varint
            stream.WriteByte(64);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteZInt32(stream, instance.FieldH);
            // Key for field: 9, Varint
            stream.WriteByte(72);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteZInt64(stream, instance.FieldI);
            // Key for field: 10, Fixed32
            stream.WriteByte(85);
            bw.Write(instance.FieldJ);
            // Key for field: 11, Fixed64
            stream.WriteByte(89);
            bw.Write(instance.FieldK);
            // Key for field: 12, Fixed32
            stream.WriteByte(101);
            bw.Write(instance.FieldL);
            // Key for field: 13, Fixed64
            stream.WriteByte(105);
            bw.Write(instance.FieldM);
            // Key for field: 14, Varint
            stream.WriteByte(112);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBool(stream, instance.FieldN);
            if (instance.FieldO == null)
                throw new ArgumentNullException("FieldO", "Required by proto specification.");
            // Key for field: 15, LengthDelimited
            stream.WriteByte(122);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBytes(stream, Encoding.UTF8.GetBytes(instance.FieldO));
            if (instance.FieldP == null)
                throw new ArgumentNullException("FieldP", "Required by proto specification.");
            // Key for field: 16, LengthDelimited
            stream.Write(new byte[]{130, 1}, 0, 2);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBytes(stream, instance.FieldP);
            // Key for field: 17, Varint
            stream.Write(new byte[]{136, 1}, 0, 2);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldQ);
            if (instance.FieldR != MyEnum.ETest2)
            {
                // Key for field: 18, Varint
                stream.Write(new byte[]{144, 1}, 0, 2);
                global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldR);
            }
            if (instance.Dummy != null)
            {
                // Key for field: 19, LengthDelimited
                stream.Write(new byte[]{154, 1}, 0, 2);
                global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBytes(stream, Encoding.UTF8.GetBytes(instance.Dummy));
            }
            if (instance.FieldT != null)
            {
                // Key for field: 20, LengthDelimited
                stream.Write(new byte[]{162, 1}, 0, 2);
                global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, 4u * (uint)instance.FieldT.Count);
                foreach (var i20 in instance.FieldT)
                {
                    bw.Write(i20);
                }
            }
            if (instance.FieldS != null)
            {
                foreach (var i21 in instance.FieldS)
                {
                    // Key for field: 21, Varint
                    stream.Write(new byte[]{168, 1}, 0, 2);
                    global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, i21);
                }
            }
            if (instance.FieldU != null)
            {
                // Key for field: 22, LengthDelimited
                stream.Write(new byte[]{178, 1}, 0, 2);
                using (var ms22 = new MemoryStream())
                {
                    Theirs.TheirMessage.Serialize(ms22, instance.FieldU);
                    // Length delimited byte array
                    uint ms22Length = (uint)ms22.Length;
                    global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, ms22Length);
                    stream.Write(ms22.GetBuffer(), 0, (int)ms22Length);
                }

            }
            if (instance.FieldV != null)
            {
                foreach (var i23 in instance.FieldV)
                {
                    // Key for field: 23, LengthDelimited
                    stream.Write(new byte[]{186, 1}, 0, 2);
                    using (var ms23 = new MemoryStream())
                    {
                        Theirs.TheirMessage.Serialize(ms23, i23);
                        // Length delimited byte array
                        uint ms23Length = (uint)ms23.Length;
                        global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, ms23Length);
                        stream.Write(ms23.GetBuffer(), 0, (int)ms23Length);
                    }

                }
            }
        }
示例#10
0
 /// <summary>Helper: create a new instance to deserializing into</summary>
 public static MyMessageV2 DeserializeLengthDelimited(Stream stream)
 {
     MyMessageV2 instance = new MyMessageV2();
     DeserializeLengthDelimited(stream, instance);
     return instance;
 }
示例#11
0
 /// <summary>Helper: create a new instance to deserializing into</summary>
 public static MyMessageV2 DeserializeLength(Stream stream, int length)
 {
     MyMessageV2 instance = new MyMessageV2();
     DeserializeLength(stream, length, instance);
     return instance;
 }
示例#12
0
 /// <summary>Helper: put the buffer into a MemoryStream and create a new instance to deserializing into</summary>
 public static MyMessageV2 Deserialize(byte[] buffer)
 {
     MyMessageV2 instance = new MyMessageV2();
     using (var ms = new MemoryStream(buffer))
         Deserialize(ms, instance);
     return instance;
 }
示例#13
0
 /// <summary>Helper: create a new instance to deserializing into</summary>
 public static MyMessageV2 Deserialize(Stream stream)
 {
     MyMessageV2 instance = new MyMessageV2();
     Deserialize(stream, instance);
     return instance;
 }
        /// <summary>Serialize the instance into the stream</summary>
        public static void Serialize(Stream stream, MyMessageV2 instance)
        {
            var bw = new BinaryWriter(stream);
            var msField = global::SilentOrbit.ProtocolBuffers.ProtocolParser.Stack.Pop();
            // Key for field: 1, Varint
            stream.WriteByte(8);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldA);
            // Key for field: 2, Fixed64
            stream.WriteByte(17);
            bw.Write(instance.FieldB);
            // Key for field: 3, Fixed32
            stream.WriteByte(29);
            bw.Write(instance.FieldC);
            // Key for field: 4, Varint
            stream.WriteByte(32);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldD);
            // Key for field: 5, Varint
            stream.WriteByte(40);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldE);
            // Key for field: 6, Varint
            stream.WriteByte(48);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, instance.FieldF);
            // Key for field: 7, Varint
            stream.WriteByte(56);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream, instance.FieldG);
            // Key for field: 8, Varint
            stream.WriteByte(64);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteZInt32(stream, instance.FieldH);
            // Key for field: 9, Varint
            stream.WriteByte(72);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteZInt64(stream, instance.FieldI);
            // Key for field: 10, Fixed32
            stream.WriteByte(85);
            bw.Write(instance.FieldJ);
            // Key for field: 11, Fixed64
            stream.WriteByte(89);
            bw.Write(instance.FieldK);
            // Key for field: 12, Fixed32
            stream.WriteByte(101);
            bw.Write(instance.FieldL);
            // Key for field: 13, Fixed64
            stream.WriteByte(105);
            bw.Write(instance.FieldM);
            // Key for field: 14, Varint
            stream.WriteByte(112);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBool(stream, instance.FieldN);
            if (instance.FieldO == null)
                throw new global::SilentOrbit.ProtocolBuffers.ProtocolBufferException("FieldO is required by the proto specification.");
            // Key for field: 15, LengthDelimited
            stream.WriteByte(122);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBytes(stream, Encoding.UTF8.GetBytes(instance.FieldO));
            #pragma warning disable 612
            if (instance.FieldP == null)
                throw new global::SilentOrbit.ProtocolBuffers.ProtocolBufferException("FieldP is required by the proto specification.");
            // Key for field: 16, LengthDelimited
            stream.WriteByte(130);
            stream.WriteByte(1);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBytes(stream, instance.FieldP);
            #pragma warning restore 612
            // Key for field: 17, Varint
            stream.WriteByte(136);
            stream.WriteByte(1);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldQ);
            if (instance.FieldR != MyEnum.ETest2)
            {
                // Key for field: 18, Varint
                stream.WriteByte(144);
                stream.WriteByte(1);
                global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldR);
            }
            #pragma warning disable 612
            if (instance.Dummy != null)
            {
                // Key for field: 19, LengthDelimited
                stream.WriteByte(154);
                stream.WriteByte(1);
                global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBytes(stream, Encoding.UTF8.GetBytes(instance.Dummy));
            }
            #pragma warning restore 612
            if (instance.FieldT != null)
            {
                // Key for field: 20, LengthDelimited
                stream.WriteByte(162);
                stream.WriteByte(1);
                global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, 4u * (uint)instance.FieldT.Count);
                foreach (var i20 in instance.FieldT)
                {
                    bw.Write(i20);
                }
            }
            if (instance.FieldS != null)
            {
                foreach (var i21 in instance.FieldS)
                {
                    // Key for field: 21, Varint
                    stream.WriteByte(168);
                    stream.WriteByte(1);
                    global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, i21);
                }
            }
            if (instance.FieldU != null)
            {
                // Key for field: 22, LengthDelimited
                stream.WriteByte(178);
                stream.WriteByte(1);
                msField.SetLength(0);
                Theirs.TheirMessage.Serialize(msField, instance.FieldU);
                // Length delimited byte array
                uint length22 = (uint)msField.Length;
                global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, length22);
                msField.WriteTo(stream);

            }
            if (instance.FieldV != null)
            {
                foreach (var i23 in instance.FieldV)
                {
                    // Key for field: 23, LengthDelimited
                    stream.WriteByte(186);
                    stream.WriteByte(1);
                    msField.SetLength(0);
                    Theirs.TheirMessage.Serialize(msField, i23);
                    // Length delimited byte array
                    uint length23 = (uint)msField.Length;
                    global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, length23);
                    msField.WriteTo(stream);

                }
            }
            // Key for field: 24, Varint
            stream.WriteByte(192);
            stream.WriteByte(1);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.NullableInt);
            // Key for field: 25, Varint
            stream.WriteByte(200);
            stream.WriteByte(1);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.NullableEnum);
            global::SilentOrbit.ProtocolBuffers.ProtocolParser.Stack.Push(msField);
        }
示例#15
0
        /// <summary>
        /// Test wire format of the person example against protobuf-net - another c# protocol buffers library
        /// </summary>
        public static void Run()
        {
            LocalFeatures local = new LocalFeatures("139pt2m7");

            local.Uptime   = TimeSpan.FromHours(37.8);
            local.DueDate  = DateTime.Now.AddMinutes(1);
            local.Internal = "assembly";
            local.PR       = "Hi";
            local.Amount   = Math.E;
            local.Deny("they exist");
            local.MyInterface = new MyImplementeInterface();
            local.MyEnum      = LocalFeatureTest.TopEnum.Last;
            MemoryStream ms1 = new MemoryStream();

            LocalFeatures.Serialize(ms1, local);

            MemoryStream  ms2 = new MemoryStream(ms1.ToArray());
            LocalFeatures l2  = new LocalFeatures("Secret");

            //Since this property is an interface AND required we must set it before calling Deserialize
            l2.MyInterface = new MyImplementeInterface();
            LocalFeatures.Deserialize(ms2, l2);

            //Test in Equals to have access to all fields
            Test("Local Features", local.Equals(l2));


            //Test preservation of unknown fields
            byte[]      streamBuffer;
            byte[]      streamBufferV2Orig;
            byte[]      streamBufferV1Mod;
            MyMessageV2 v2original = MyMessageV2.TestInstance();

            //Write
            using (MemoryStream ms = new MemoryStream())
            {
                MyMessageV2.Serialize(ms, v2original);
                streamBuffer       = ms.ToArray();
                streamBufferV2Orig = streamBuffer;
            }

            //Read V1, modify and write back
            MyMessageV1 v1 = MyMessageV1.Deserialize(new MemoryStream(streamBuffer));

            v1.FieldA = 42;
            using (MemoryStream ms = new MemoryStream())
            {
                MyMessageV1.Serialize(ms, v1);
                streamBuffer      = ms.ToArray();
                streamBufferV1Mod = streamBuffer;
            }

            //Compare stream buffers
            //Test (
            //  "Stream buffer length",
            //  streamBufferV2Orig.Length == streamBufferV1Mod.Length
            //);
            for (int n = 0; n < streamBufferV2Orig.Length; n++)
            {
                if (n == 1)
                {
                    continue; //expected difference for FieldA
                }
                if (streamBufferV2Orig [n] != streamBufferV1Mod [n])
                {
                    throw new InvalidDataException("Stream buffers do not match at byte " + n);
                }
            }

            //Read V2 and test
            MyMessageV2 v2test = MyMessageV2.Deserialize(new MemoryStream(streamBuffer));

            //Test FieldA
            Test("Modified in v1", v2test.FieldA == v1.FieldA);
            //Restore and test entire v2
            v2test.FieldA = v2original.FieldA;
            Test("MyMessageV2 WriteRead", v2original.Equals(v2test));
        }