Exemple #1
0
        public void UnknownFieldInWrapperInt64SlowPath()
        {
            var stream     = new MemoryStream();
            var output     = new CodedOutputStream(stream);
            var wrapperTag = WireFormat.MakeTag(TestWellKnownTypes.Int64FieldFieldNumber, WireFormat.WireType.LengthDelimited);
            var unknownTag = WireFormat.MakeTag(15, WireFormat.WireType.Varint);
            var valueTag   = WireFormat.MakeTag(Int64Value.ValueFieldNumber, WireFormat.WireType.Varint);

            output.WriteTag(wrapperTag);
            // Wrapper message is too short to be used on the wrapper fast-path.
            output.WriteLength(4);            // unknownTag + value 5 + valueType + value 6, each 1 byte
            output.WriteTag(unknownTag);
            output.WriteInt64((int)valueTag); // Sneakily "pretend" it's a tag when it's really a value
            output.WriteTag(valueTag);
            output.WriteInt64(6);

            output.Flush();
            Assert.Less(stream.Length, 12); // tag (1 byte) + length (1 byte) + message
            stream.Position = 0;

            MessageParsingHelpers.AssertReadingMessage(
                TestWellKnownTypes.Parser,
                stream.ToArray(),
                message => Assert.AreEqual(6L, message.Int64Field));
        }
Exemple #2
0
        public void UnknownFieldInWrapperInt64FastPath()
        {
            var stream     = new MemoryStream();
            var output     = new CodedOutputStream(stream);
            var wrapperTag = WireFormat.MakeTag(TestWellKnownTypes.Int64FieldFieldNumber, WireFormat.WireType.LengthDelimited);
            var unknownTag = WireFormat.MakeTag(15, WireFormat.WireType.Varint);
            var valueTag   = WireFormat.MakeTag(Int64Value.ValueFieldNumber, WireFormat.WireType.Varint);

            output.WriteTag(wrapperTag);
            // Wrapper message is just long enough - 10 bytes - to use the wrapper fast-path.
            output.WriteLength(11);           // unknownTag + value 5 + valueType, each 1 byte, + value 0xfffffffffffff, 8 bytes
            output.WriteTag(unknownTag);
            output.WriteInt64((int)valueTag); // Sneakily "pretend" it's a tag when it's really a value
            output.WriteTag(valueTag);
            output.WriteInt64(0xfffffffffffffL);

            output.Flush();
            Assert.AreEqual(13, stream.Length); // tag (1 byte) + length (1 byte) + message (11 bytes)
            stream.Position = 0;

            MessageParsingHelpers.AssertReadingMessage(
                TestWellKnownTypes.Parser,
                stream.ToArray(),
                message => Assert.AreEqual(0xfffffffffffffL, message.Int64Field));
        }