DiscardUnknownFieldsTest.java
Go to the documentation of this file.
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 // * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 // * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31 package com.google.protobuf;
32 
33 import static org.junit.Assert.assertEquals;
34 
35 import protobuf_unittest.UnittestProto;
36 import proto3_unittest.UnittestProto3;
37 import org.junit.Test;
38 import org.junit.runner.RunWith;
39 import org.junit.runners.JUnit4;
40 
42 @RunWith(JUnit4.class)
44  @Test
45  public void testProto2() throws Exception {
46  testProto2Message(UnittestProto.TestEmptyMessage.getDefaultInstance());
47  testProto2Message(UnittestProto.TestEmptyMessageWithExtensions.getDefaultInstance());
48  testProto2Message(
49  DynamicMessage.getDefaultInstance(UnittestProto.TestEmptyMessage.getDescriptor()));
50  testProto2Message(
52  UnittestProto.TestEmptyMessageWithExtensions.getDescriptor()));
53  }
54 
55  @Test
56  public void testProto3() throws Exception {
57  testProto3Message(UnittestProto3.TestEmptyMessage.getDefaultInstance());
58  testProto3Message(
59  DynamicMessage.getDefaultInstance(UnittestProto3.TestEmptyMessage.getDescriptor()));
60  }
61 
62  private static void testProto2Message(Message message) throws Exception {
63  assertUnknownFieldsPreserved(message);
64  assertUnknownFieldsExplicitlyDiscarded(message);
65  assertReuseCodedInputStreamPreserve(message);
66  assertUnknownFieldsInUnknownFieldSetArePreserve(message);
67  }
68 
69  private static void testProto3Message(Message message) throws Exception {
70  assertUnknownFieldsPreserved(message);
71  assertUnknownFieldsExplicitlyDiscarded(message);
72  assertReuseCodedInputStreamPreserve(message);
73  assertUnknownFieldsInUnknownFieldSetArePreserve(message);
74  }
75 
76  private static void assertReuseCodedInputStreamPreserve(Message message) throws Exception {
77  final int messageSize = payload.size();
78  byte[] copied = new byte[messageSize * 2];
79  payload.copyTo(copied, 0);
80  payload.copyTo(copied, messageSize);
82 
83  // Use DiscardUnknownFieldsParser to parse the first payload.
84  int oldLimit = input.pushLimit(messageSize);
85  Message parsed = DiscardUnknownFieldsParser.wrap(message.getParserForType()).parseFrom(input);
86  assertEquals(message.getClass().getName(), 0, parsed.getSerializedSize());
87  input.popLimit(oldLimit);
88 
89  // Use the normal parser to parse the remaining payload should have unknown fields preserved.
90  parsed = message.getParserForType().parseFrom(input);
91  assertEquals(message.getClass().getName(), payload, parsed.toByteString());
92  }
93 
99  throws Exception {
100  UnknownFieldSet unknownFields = UnknownFieldSet.newBuilder().mergeFrom(payload).build();
101  Message built = message.newBuilderForType().setUnknownFields(unknownFields).build();
102  assertEquals(message.getClass().getName(), payload, built.toByteString());
103  }
104 
105  private static void assertUnknownFieldsPreserved(MessageLite message) throws Exception {
106  MessageLite parsed = message.getParserForType().parseFrom(payload);
107  assertEquals(message.getClass().getName(), payload, parsed.toByteString());
108 
109  parsed = message.newBuilderForType().mergeFrom(payload).build();
110  assertEquals(message.getClass().getName(), payload, parsed.toByteString());
111  }
112 
113  private static void assertUnknownFieldsExplicitlyDiscarded(Message message) throws Exception {
114  Message parsed = DiscardUnknownFieldsParser.wrap(message.getParserForType()).parseFrom(payload);
115  assertEquals(message.getClass().getName(), 0, parsed.getSerializedSize());
116  }
117 
118  private static final ByteString payload =
119  TestUtilLite.getAllLiteSetBuilder().build().toByteString();
120 }
com.google.protobuf.DiscardUnknownFieldsTest.assertUnknownFieldsInUnknownFieldSetArePreserve
static void assertUnknownFieldsInUnknownFieldSetArePreserve(Message message)
Definition: DiscardUnknownFieldsTest.java:98
com.google.protobuf.CodedInputStream.newInstance
static CodedInputStream newInstance(final InputStream input)
Definition: CodedInputStream.java:79
com.google.protobuf.DiscardUnknownFieldsParser
Definition: DiscardUnknownFieldsParser.java:34
com.google.protobuf.DiscardUnknownFieldsTest.testProto3Message
static void testProto3Message(Message message)
Definition: DiscardUnknownFieldsTest.java:69
input
std::string input
Definition: tokenizer_unittest.cc:197
com.google.protobuf.DiscardUnknownFieldsTest
Definition: DiscardUnknownFieldsTest.java:43
com.google.protobuf.TestUtilLite.getAllLiteSetBuilder
static TestAllTypesLite.Builder getAllLiteSetBuilder()
Definition: TestUtilLite.java:153
com.google.protobuf.DiscardUnknownFieldsTest.testProto2
void testProto2()
Definition: DiscardUnknownFieldsTest.java:45
com.google.protobuf.Message.Builder.setUnknownFields
Builder setUnknownFields(UnknownFieldSet unknownFields)
com.google.protobuf.UnknownFieldSet.Builder.build
UnknownFieldSet build()
Definition: UnknownFieldSet.java:358
com.google.protobuf.Message.newBuilderForType
Builder newBuilderForType()
com.google.protobuf.MessageLite.Builder.build
MessageLite build()
com.google.protobuf.UnknownFieldSet.newBuilder
static Builder newBuilder()
Definition: UnknownFieldSet.java:66
com.google.protobuf.Message.getParserForType
Parser<? extends Message > getParserForType()
com.google.protobuf.CodedInputStream
Definition: CodedInputStream.java:61
com.google.protobuf.UnknownFieldSet
Definition: UnknownFieldSet.java:58
com.google.protobuf.DynamicMessage.getDefaultInstance
static DynamicMessage getDefaultInstance(Descriptor type)
Definition: DynamicMessage.java:78
com.google.protobuf.Message.Builder.build
Message build()
com.google.protobuf.TestUtilLite
Definition: TestUtilLite.java:141
com.google.protobuf.MessageLite.newBuilderForType
Builder newBuilderForType()
com.google.protobuf.DiscardUnknownFieldsTest.assertUnknownFieldsExplicitlyDiscarded
static void assertUnknownFieldsExplicitlyDiscarded(Message message)
Definition: DiscardUnknownFieldsTest.java:113
com.google.protobuf.MessageLite.toByteString
ByteString toByteString()
com.google.protobuf.DiscardUnknownFieldsTest.testProto3
void testProto3()
Definition: DiscardUnknownFieldsTest.java:56
protobuf_unittest
Definition: map_test_util_impl.h:39
com.google.protobuf.DynamicMessage
Definition: DynamicMessage.java:51
com.google.protobuf.MessageLite.Builder.mergeFrom
Builder mergeFrom(CodedInputStream input)
com.google.protobuf.DiscardUnknownFieldsParser.wrap
static final< T extends Message > Parser< T > wrap(final Parser< T > parser)
Definition: DiscardUnknownFieldsParser.java:54
com.google.protobuf.UnknownFieldSet.Builder.mergeFrom
Builder mergeFrom(final UnknownFieldSet other)
Definition: UnknownFieldSet.java:426
com.google.protobuf.DiscardUnknownFieldsTest.assertReuseCodedInputStreamPreserve
static void assertReuseCodedInputStreamPreserve(Message message)
Definition: DiscardUnknownFieldsTest.java:76
com.google.protobuf.DiscardUnknownFieldsTest.assertUnknownFieldsPreserved
static void assertUnknownFieldsPreserved(MessageLite message)
Definition: DiscardUnknownFieldsTest.java:105
com.google.protobuf.MessageLite.getSerializedSize
int getSerializedSize()
com.google.protobuf.DiscardUnknownFieldsTest.testProto2Message
static void testProto2Message(Message message)
Definition: DiscardUnknownFieldsTest.java:62
message
GLenum GLuint GLenum GLsizei const GLchar * message
Definition: glcorearb.h:2695
com.google.protobuf.Message
Definition: Message.java:50
com.google.protobuf.MessageLite
Definition: MessageLite.java:65
com.google.protobuf.ByteString
Definition: ByteString.java:67
com.google.protobuf.MessageLite.getParserForType
Parser<? extends MessageLite > getParserForType()


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:50