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