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