1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.apache.harmony.archive.tests.java.util.zip;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayInputStream;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayOutputStream;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.File;
28407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilsonimport java.io.FileInputStream;
29407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilsonimport java.io.FileOutputStream;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.InputStream;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.URL;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.zip.Checksum;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.zip.GZIPInputStream;
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.zip.GZIPOutputStream;
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport tests.support.resource.Support_Resources;
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(GZIPInputStream.class)
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class GZIPInputStreamTest extends junit.framework.TestCase {
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    File resources;
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    class TestGZIPInputStream extends GZIPInputStream {
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        TestGZIPInputStream(InputStream in) throws IOException {
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(in);
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        TestGZIPInputStream(InputStream in, int size) throws IOException {
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(in, size);
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Checksum getChecksum() {
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return crc;
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        boolean endofInput() {
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return eos;
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.zip.GZIPInputStream#GZIPInputStream(java.io.InputStream)
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "GZIPInputStream",
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.InputStream.class}
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_ConstructorLjava_io_InputStream() {
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test method java.util.zip.GZIPInputStream.constructor
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Support_Resources.copyFile(resources, "GZIPInputStream",
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "hyts_gInput.txt.gz");
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            final URL gInput = new File(resources.toString()
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    + "/GZIPInputStream/hyts_gInput.txt.gz").toURL();
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            TestGZIPInputStream inGZIP = new TestGZIPInputStream(gInput
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .openConnection().getInputStream());
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNotNull("the constructor for GZIPInputStream is null", inGZIP);
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals("the CRC value of the inputStream is not zero", 0,
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    inGZIP.getChecksum().getValue());
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            inGZIP.close();
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("an IO error occured while trying to open the input file");
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.zip.GZIPInputStream#GZIPInputStream(java.io.InputStream,
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *        int)
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "GZIPInputStream",
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.InputStream.class, int.class}
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_ConstructorLjava_io_InputStreamI() {
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test method java.util.zip.GZIPInputStream.constructorI
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Support_Resources.copyFile(resources, "GZIPInputStream",
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "hyts_gInput.txt.gz");
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            final URL gInput = new File(resources.toString()
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    + "/GZIPInputStream/hyts_gInput.txt.gz").toURL();
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            TestGZIPInputStream inGZIP = new TestGZIPInputStream(gInput
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .openConnection().getInputStream(), 200);
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNotNull("the constructor for GZIPInputStream is null", inGZIP);
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals("the CRC value of the inputStream is not zero", 0,
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    inGZIP.getChecksum().getValue());
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            inGZIP.close();
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("an IO error occured while trying to open the input file");
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Support_Resources.copyFile(resources, "GZIPInputStream",
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "hyts_gInput.txt.gz");
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            final URL gInput = new File(resources.toString()
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    + "/GZIPInputStream/hyts_gInput.txt.gz").toURL();
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            TestGZIPInputStream inGZIP = new TestGZIPInputStream(gInput
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .openConnection().getInputStream(), 0);
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Expected IllegalArgumentException");
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("an IO error occured while trying to open the input file");
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ee) {
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Support_Resources.copyFile(resources, "GZIPInputStream",
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "hyts_gInput.txt.gz");
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            final URL gInput = new File(resources.toString()
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    + "/GZIPInputStream/hyts_gInput.txt.gz").toURL();
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            TestGZIPInputStream inGZIP = new TestGZIPInputStream(gInput
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .openConnection().getInputStream(), -1);
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Expected IllegalArgumentException");
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("an IO error occured while trying to open the input file");
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ee) {
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.zip.GZIPInputStream#read(byte[], int, int)
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "read",
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {byte[].class, int.class, int.class}
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_read$BII() throws IOException {
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test method java.util.zip.GZIPInputStream.readBII
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte orgBuf[] = {'3', '5', '2', 'r', 'g', 'e', 'f', 'd', 'e', 'w'};
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte outBuf[] = new byte[100];
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int result = 0;
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Support_Resources.copyFile(resources, "GZIPInputStream",
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "hyts_gInput.txt.gz");
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String resPath = resources.toString();
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (resPath.charAt(0) == '/' || resPath.charAt(0) == '\\') {
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            resPath = resPath.substring(1);
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        final URL gInput = new URL("file:/" + resPath
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "/GZIPInputStream/hyts_gInput.txt.gz");
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        TestGZIPInputStream inGZIP = new TestGZIPInputStream(gInput
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .openConnection().getInputStream());
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (!(inGZIP.endofInput())) {
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            result += inGZIP.read(outBuf, result, outBuf.length - result);
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "the checkSum value of the compressed and decompressed data does not equal",
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                2074883667L, inGZIP.getChecksum().getValue());
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < orgBuf.length; i++) {
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "the decompressed data does not equal the original data decompressed",
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    orgBuf[i] == outBuf[i]);
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // System.out.println(orgBuf[i] + " " + outBuf[i]);
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int r = 0;
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            inGZIP.read(outBuf, 100, 1);
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IndexOutOfBoundsException e) {
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            r = 1;
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        inGZIP.close();
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // line below fails on RI also, comment out.
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // assertEquals("Boundary Check was not present", 1, r);
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Create compressed data which is exactly 512 bytes (after the
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // header),
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // the size of the InflaterStream internal buffer
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] test = new byte[507];
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 256; i++) {
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            test[i] = (byte) i;
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 256; i < test.length; i++) {
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            test[i] = (byte) (256 - i);
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream bout = new ByteArrayOutputStream();
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        GZIPOutputStream out = new GZIPOutputStream(bout);
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.write(test);
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.close();
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] comp = bout.toByteArray();
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        GZIPInputStream gin2 = new GZIPInputStream(new ByteArrayInputStream(
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                comp), 512);
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int total = 0;
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while ((result = gin2.read(test)) != -1) {
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            total += result;
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Should return -1", -1, gin2.read());
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        gin2.close();
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Incorrectly decompressed", total == test.length);
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        gin2 = new GZIPInputStream(new ByteArrayInputStream(comp), 512);
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        total = 0;
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while ((result = gin2.read(new byte[200])) != -1) {
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            total += result;
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Should return -1", -1, gin2.read());
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        gin2.close();
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Incorrectly decompressed", total == test.length);
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        gin2 = new GZIPInputStream(new ByteArrayInputStream(comp), 516);
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        total = 0;
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while ((result = gin2.read(new byte[200])) != -1) {
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            total += result;
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Should return -1", -1, gin2.read());
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        gin2.close();
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Incorrectly decompressed", total == test.length);
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        comp[40] = 0;
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        gin2 = new GZIPInputStream(new ByteArrayInputStream(comp), 512);
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        boolean exception = false;
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            while (gin2.read(test) != -1) {
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                ;
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            exception = true;
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Exception expected", exception);
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream baos = new ByteArrayOutputStream();
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        GZIPOutputStream zipout = new GZIPOutputStream(baos);
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        zipout.write(test);
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        zipout.close();
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        outBuf = new byte[530];
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        GZIPInputStream in = new GZIPInputStream(new ByteArrayInputStream(baos
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .toByteArray()));
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            in.read(outBuf, 530, 1);
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test failed IOOBE was not thrown");
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IndexOutOfBoundsException e) {
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (true) {
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            result = in.read(outBuf, 0, 5);
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (result == -1) {
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // "EOF was reached";
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        result = -10;
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        result = in.read(null, 100, 1);
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        result = in.read(outBuf, -100, 1);
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        result = in.read(outBuf, -1, 1);// 100, 1);
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.zip.GZIPInputStream#close()
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "close",
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_close() {
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test method java.util.zip.GZIPInputStream.close
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte outBuf[] = new byte[100];
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int result = 0;
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Support_Resources.copyFile(resources, "GZIPInputStream",
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "hyts_gInput.txt.gz");
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            String resPath = resources.toString();
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (resPath.charAt(0) == '/' || resPath.charAt(0) == '\\') {
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                resPath = resPath.substring(1);
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            final URL gInput = new URL("file:/" + resPath
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    + "/GZIPInputStream/hyts_gInput.txt.gz");
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            TestGZIPInputStream inGZIP = new TestGZIPInputStream(gInput
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .openConnection().getInputStream());
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            while (!(inGZIP.endofInput())) {
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                result += inGZIP.read(outBuf, result, outBuf.length - result);
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "the checkSum value of the compressed and decompressed data does not equal",
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    2074883667L, inGZIP.getChecksum().getValue());
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            inGZIP.close();
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int r = 0;
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                inGZIP.read(outBuf, 0, 1);
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IOException e) {
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                r = 1;
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "GZIPInputStream can still be used after close is called",
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    1, r);
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            e.printStackTrace();
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("unexpected: " + e);
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
315407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson    /**
316407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson     * Regression test for HARMONY-3703.
317407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson     * @tests java.util.zip.GZIPInputStream#read()
318407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson     */
319407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson    @TestTargetNew(
320407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson            level = TestLevel.COMPLETE,
321407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson            notes = "",
322407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson            method = "read",
323407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson            args = {byte[].class}
324407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson    )
325407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson    public void test_read() throws IOException {
326407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        GZIPInputStream gis = null;
327407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        int result = 0;
328407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        byte[] buffer = new byte[] {1,2,3,4,5,6,7,8,9,10};
329407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        File f = new File(resources.getAbsolutePath() + "test.gz");
330407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        FileOutputStream out = new FileOutputStream(f);
331407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        GZIPOutputStream gout = new GZIPOutputStream(out);
332407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson
333407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        // write 100 bytes to the stream
334407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        for(int i = 0; i < 10; i++) {
335407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson            gout.write(buffer);
336407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        }
337407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        gout.finish();
338407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        out.write(1);
339407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        out.close();
340407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson
341407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        gis = new GZIPInputStream(new FileInputStream(f));
342407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        buffer = new byte[100];
343407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        gis.read(buffer);
344407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        result = gis.read();
345407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        gis.close();
346407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        f.delete();
347407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson
348407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson        assertEquals("Incorrect value returned at the end of the file", -1, result);
349407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson    }
350407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson
351407a2013b289b6b0e860b4275671b7b0194c42fcJesse Wilson	@Override
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void setUp() {
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        resources = Support_Resources.createTempFolder();
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void tearDown() {
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
361