PoolingByteArrayOutputStreamTest.java revision d56b88ae161057e848e7410d1b9ce5b0b8c427fc
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
22d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport android.test.AndroidTestCase;
23d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport android.test.suitebuilder.annotation.SmallTest;
24d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
25d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru@SmallTest
26d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Querupublic class PoolingByteArrayOutputStreamTest extends AndroidTestCase {
27d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    @Override
28d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    public void tearDown() {
29d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        PoolingByteArrayOutputStream.setSizeLimit(0);
30d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
31d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
32d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    public void testPooledOneBuffer() throws IOException {
33d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        PoolingByteArrayOutputStream.setSizeLimit(32768);
34d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        writeOneBuffer();
35d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        writeOneBuffer();
36d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        writeOneBuffer();
37d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
38d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
39d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    public void testPooledIndividualWrites() throws IOException {
40d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        PoolingByteArrayOutputStream.setSizeLimit(32768);
41d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        writeBytesIndividually();
42d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        writeBytesIndividually();
43d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        writeBytesIndividually();
44d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
45d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
46d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    public void testUnpooled() throws IOException {
47d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        PoolingByteArrayOutputStream.setSizeLimit(0);
48d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        writeOneBuffer();
49d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        writeOneBuffer();
50d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        writeOneBuffer();
51d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
52d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
53d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    public void testUnpooledIndividualWrites() throws IOException {
54d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        PoolingByteArrayOutputStream.setSizeLimit(0);
55d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        writeBytesIndividually();
56d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        writeBytesIndividually();
57d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        writeBytesIndividually();
58d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
59d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
60d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    private void writeOneBuffer() throws IOException {
61d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        byte[] data = new byte[16384];
62d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        for (int i = 0; i < data.length; i++) {
63d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru            data[i] = (byte) (i & 0xff);
64d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        }
65d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        PoolingByteArrayOutputStream os = new PoolingByteArrayOutputStream();
66d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        os.write(data);
67d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
68d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        assertTrue(Arrays.equals(data, os.toByteArray()));
69d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
70d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
71d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    private void writeBytesIndividually() {
72d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        byte[] data = new byte[16384];
73d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        for (int i = 0; i < data.length; i++) {
74d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru            data[i] = (byte) (i & 0xff);
75d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        }
76d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        PoolingByteArrayOutputStream os = new PoolingByteArrayOutputStream();
77d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        for (int i = 0; i < data.length; i++) {
78d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru            os.write(data[i]);
79d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        }
80d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
81d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        assertTrue(Arrays.equals(data, os.toByteArray()));
82d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
83d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru}
84