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 com.google.protobuf.testing.Proto2Testing.Proto2Message; 36 import com.google.protobuf.testing.Proto3Testing.Proto3Message; 37 import org.junit.Assert; 38 import org.junit.Before; 39 import org.junit.Test; 40 import org.junit.runner.RunWith; 41 import org.junit.runners.JUnit4; 42 43 @RunWith(JUnit4.class) 44 public final class BinaryProtocolTest { 45 @Before setup()46 public void setup() { 47 TestSchemas.registerGenericProto2Schemas(); 48 49 Protobuf.getInstance() 50 .registerSchemaOverride(Proto3Message.class, TestSchemas.genericProto3Schema); 51 } 52 53 @Test proto3Roundtrip()54 public void proto3Roundtrip() throws Exception { 55 Proto3Message expected = new Proto3MessageFactory(5, 10, 2, 2).newMessage(); 56 byte[] expectedBytes = expected.toByteArray(); 57 58 // Deserialize with BinaryReader and verify that the message matches the original. 59 Proto3Message result = 60 ExperimentalSerializationUtil.fromByteArray(expectedBytes, Proto3Message.class); 61 assertEquals(expected, result); 62 63 // Now write it back out using BinaryWriter and verify the output length. 64 byte[] actualBytes = ExperimentalSerializationUtil.toByteArray(result); 65 Assert.assertEquals(expectedBytes.length, actualBytes.length); 66 67 // Read back in the bytes and verify that it matches the original message. 68 Proto3Message actual = Proto3Message.parseFrom(actualBytes); 69 assertEquals(expected, actual); 70 } 71 72 @Test proto2Roundtrip()73 public void proto2Roundtrip() throws Exception { 74 Proto2Message expected = new Proto2MessageFactory(5, 10, 2, 2).newMessage(); 75 byte[] expectedBytes = expected.toByteArray(); 76 77 // Deserialize with BinaryReader and verify that the message matches the original. 78 Proto2Message result = 79 ExperimentalSerializationUtil.fromByteArray(expectedBytes, Proto2Message.class); 80 assertEquals(expected, result); 81 82 // Now write it back out using BinaryWriter and verify the output length. 83 byte[] actualBytes = ExperimentalSerializationUtil.toByteArray(result); 84 Assert.assertEquals(expectedBytes.length, actualBytes.length); 85 86 // Read back in the bytes and verify that it matches the original message. 87 Proto2Message actual = Proto2Message.parseFrom(actualBytes); 88 assertEquals(expected, actual); 89 } 90 } 91