1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Protocol Buffers - Google's data interchange format 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Copyright 2008 Google Inc. All rights reserved. 3afb4b72037e3f13db208590fc782c4bc8e27f862Jeff Davidson// https://developers.google.com/protocol-buffers/ 4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Redistribution and use in source and binary forms, with or without 6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// modification, are permitted provided that the following conditions are 7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// met: 8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Redistributions of source code must retain the above copyright 10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// notice, this list of conditions and the following disclaimer. 11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Redistributions in binary form must reproduce the above 12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// copyright notice, this list of conditions and the following disclaimer 13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// in the documentation and/or other materials provided with the 14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// distribution. 15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Neither the name of Google Inc. nor the names of its 16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// contributors may be used to endorse or promote products derived from 17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// this software without specific prior written permission. 18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillepackage com.google.protobuf; 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 33b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerimport junit.framework.TestCase; 34b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 35b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerimport java.io.ByteArrayOutputStream; 36b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerimport java.io.IOException; 37b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerimport java.nio.ByteBuffer; 38b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerimport java.util.Arrays; 39b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerimport java.util.Random; 40b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville/** 42b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Tests for {@link ByteBufferWriter}. 43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville */ 44b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerpublic class ByteBufferWriterTest extends TestCase { 45b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 46b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer public void testHeapBuffer() throws IOException { 47b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Test a small and large buffer. 48b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer testWrite(ByteBuffer.allocate(100)); 49b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer testWrite(ByteBuffer.allocate(1024 * 100)); 50b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 51b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 52b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer public void testDirectBuffer() throws IOException { 53b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Test a small and large buffer. 54b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer testWrite(ByteBuffer.allocateDirect(100)); 55b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer testWrite(ByteBuffer.allocateDirect(1024 * 100)); 56b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 58b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer private void testWrite(ByteBuffer buffer) throws IOException { 59b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer fillRandom(buffer); 60b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer ByteArrayOutputStream os = new ByteArrayOutputStream(buffer.remaining()); 61b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer ByteBufferWriter.write(buffer, os); 62b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer assertEquals(0, buffer.position()); 63b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer assertTrue(Arrays.equals(toArray(buffer), os.toByteArray())); 64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 65a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 66b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer private void fillRandom(ByteBuffer buf) { 67b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer byte[] bytes = new byte[buf.remaining()]; 68b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer new Random().nextBytes(bytes); 69b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer buf.put(bytes); 70b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer buf.flip(); 71b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 72a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 73a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 74b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer private byte[] toArray(ByteBuffer buf) { 75b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer int originalPosition = buf.position(); 76b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer byte[] bytes = new byte[buf.remaining()]; 77b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer buf.get(bytes); 78b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer buf.position(originalPosition); 79b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return bytes; 80a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 82