1d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru/* 2d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Copyright (C) 2011 The Android Open Source Project 3d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * 4d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Licensed under the Apache License, Version 2.0 (the "License"); 5d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * you may not use this file except in compliance with the License. 6d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * You may obtain a copy of the License at 7d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * 8d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * http://www.apache.org/licenses/LICENSE-2.0 9d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * 10d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Unless required by applicable law or agreed to in writing, software 11d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * distributed under the License is distributed on an "AS IS" BASIS, 12d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * See the License for the specific language governing permissions and 14d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * limitations under the License. 15d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru */ 16d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 17d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Querupackage com.android.volley.toolbox; 18d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 19d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport java.io.IOException; 20d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport java.util.Arrays; 21d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 22b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrickimport org.junit.Test; 23d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 24b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrickimport static org.junit.Assert.*; 25b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick 26b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrickpublic class PoolingByteArrayOutputStreamTest { 27b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick @Test public void pooledOneBuffer() throws IOException { 286772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru ByteArrayPool pool = new ByteArrayPool(32768); 296772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru writeOneBuffer(pool); 306772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru writeOneBuffer(pool); 316772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru writeOneBuffer(pool); 32d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 33d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 34b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick @Test public void pooledIndividualWrites() throws IOException { 356772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru ByteArrayPool pool = new ByteArrayPool(32768); 366772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru writeBytesIndividually(pool); 376772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru writeBytesIndividually(pool); 386772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru writeBytesIndividually(pool); 39d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 40d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 41b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick @Test public void unpooled() throws IOException { 426772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru ByteArrayPool pool = new ByteArrayPool(0); 436772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru writeOneBuffer(pool); 446772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru writeOneBuffer(pool); 456772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru writeOneBuffer(pool); 46d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 47d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 48b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick @Test public void unpooledIndividualWrites() throws IOException { 496772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru ByteArrayPool pool = new ByteArrayPool(0); 506772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru writeBytesIndividually(pool); 516772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru writeBytesIndividually(pool); 526772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru writeBytesIndividually(pool); 53d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 54d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 556772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru private void writeOneBuffer(ByteArrayPool pool) throws IOException { 56d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru byte[] data = new byte[16384]; 57d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru for (int i = 0; i < data.length; i++) { 58d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru data[i] = (byte) (i & 0xff); 59d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 606772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru PoolingByteArrayOutputStream os = new PoolingByteArrayOutputStream(pool); 61d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru os.write(data); 62d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 63d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru assertTrue(Arrays.equals(data, os.toByteArray())); 64d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 65d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 666772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru private void writeBytesIndividually(ByteArrayPool pool) { 67d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru byte[] data = new byte[16384]; 68d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru for (int i = 0; i < data.length; i++) { 69d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru data[i] = (byte) (i & 0xff); 70d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 716772bce3d3322ccbcf6481545ffe895d5d401b39Jean-Baptiste Queru PoolingByteArrayOutputStream os = new PoolingByteArrayOutputStream(pool); 72d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru for (int i = 0; i < data.length; i++) { 73d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru os.write(data[i]); 74d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 75d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 76d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru assertTrue(Arrays.equals(data, os.toByteArray())); 77d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 78d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru} 79