1e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// found in the LICENSE file. 4e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 5e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochpackage org.chromium.cronet_sample_apk; 6e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 7e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport android.test.InstrumentationTestCase; 8e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport android.test.suitebuilder.annotation.SmallTest; 9e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 10e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport org.chromium.base.test.util.Feature; 11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport org.chromium.net.ChunkedWritableByteChannel; 12e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 13e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport java.io.IOException; 14e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport java.nio.ByteBuffer; 15e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport java.nio.channels.ClosedChannelException; 16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport java.nio.charset.Charset; 17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport java.util.Arrays; 18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 19e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch/** 20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch * Tests for {@link ChunkedWritableByteChannel} 21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch */ 22e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochpublic class ChunkedWritableByteChannelTest extends InstrumentationTestCase { 23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch private ChunkedWritableByteChannel mChannel; 24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch @Override 26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch public void setUp() { 27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch mChannel = new ChunkedWritableByteChannel(); 28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 30e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch @SmallTest 31e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch @Feature({"Cronet"}) 32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch public void testSetCapacity() { 33e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch int capacity = 100; 34e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch mChannel.setCapacity(capacity); 35e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch assertEquals("Bytebuffer capacity wasn't set properly", capacity, 36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch mChannel.getByteBuffer().capacity()); 37e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch mChannel.close(); 38e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 39e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 40e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch @SmallTest 41e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch @Feature({"Cronet"}) 42e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch public void testWrite() throws IOException { 43e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch String test = "Write in the buffer."; 44e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch mChannel.write( 45e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ByteBuffer.wrap(test.getBytes(Charset.forName("UTF-8")))); 46e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch mChannel.write( 47e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ByteBuffer.wrap(test.getBytes(Charset.forName("UTF-8")))); 48e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch assertEquals("Buffer didn't write the bytes properly", test + test, 49e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch new String(mChannel.getBytes(), "UTF-8")); 50e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch mChannel.close(); 51e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 52e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 53e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch @SmallTest 54e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch @Feature({"Cronet"}) 55e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch public void testCloseChannel() { 56e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch assertTrue("Channel should be open", mChannel.isOpen()); 57e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch mChannel.close(); 58e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch assertFalse("Channel shouldn't be open", mChannel.isOpen()); 59e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 60e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 61e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch @SmallTest 62e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch @Feature({"Cronet"}) 63e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch public void testWriteToClosedChannel() throws IOException { 64e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch try { 65e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch mChannel.close(); 66e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch mChannel.write(ByteBuffer.wrap(new byte[1])); 67e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch fail("ClosedChannelException should have been thrown."); 68e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } catch (ClosedChannelException e) { 69e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Intended 70e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 71e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 72e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 73e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch @SmallTest 74e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch @Feature({"Cronet"}) 75e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch public void testCapacityGrows() throws Exception { 76e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch mChannel.setCapacity(123); 77e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch byte[] data = new byte[1234]; 78e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch Arrays.fill(data, (byte)'G'); 79e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch mChannel.write(ByteBuffer.wrap(data)); 80e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch assertTrue(Arrays.equals(data, mChannel.getBytes())); 81e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 82e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 83