1d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath/* 2d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * Licensed to the Apache Software Foundation (ASF) under one or more 3d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * contributor license agreements. See the NOTICE file distributed with 4d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * this work for additional information regarding copyright ownership. 5d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * The ASF licenses this file to You under the Apache License, Version 2.0 6d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * (the "License"); you may not use this file except in compliance with 7d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * the License. You may obtain a copy of the License at 8d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * 9d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * http://www.apache.org/licenses/LICENSE-2.0 10d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * 11d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * Unless required by applicable law or agreed to in writing, software 12d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * distributed under the License is distributed on an "AS IS" BASIS, 13d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * See the License for the specific language governing permissions and 15d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * limitations under the License. 16d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */ 17d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathpackage org.apache.harmony.tests.java.util.zip; 18d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 19d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.File; 20d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.FileOutputStream; 21d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.IOException; 22d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.OutputStream; 23d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.PipedInputStream; 24d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.PipedOutputStream; 25d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.Checksum; 26d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.GZIPInputStream; 27d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.GZIPOutputStream; 28d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 29d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathpublic class GZIPOutputStreamTest extends junit.framework.TestCase { 30d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 31d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath class TestGZIPOutputStream extends GZIPOutputStream { 32d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath TestGZIPOutputStream(OutputStream out) throws IOException { 33d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath super(out); 34d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 35d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 36d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath TestGZIPOutputStream(OutputStream out, int size) throws IOException { 37d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath super(out, size); 38d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 39d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 40d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath Checksum getChecksum() { 41d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath return crc; 42d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 43d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 44d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 45d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath /** 46d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * java.util.zip.GZIPOutputStream#GZIPOutputStream(java.io.OutputStream) 47d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */ 48d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath public void test_ConstructorLjava_io_OutputStream() { 49d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 50e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath FileOutputStream outFile = new FileOutputStream( 51e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath File.createTempFile("GZIPCon", ".txt")); 52d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath TestGZIPOutputStream outGZIP = new TestGZIPOutputStream(outFile); 53d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertNotNull("the constructor for GZIPOutputStream is null", 54d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath outGZIP); 55d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertEquals("the CRC value of the outputStream is not zero", 0, outGZIP 56d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath .getChecksum().getValue()); 57d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath outGZIP.close(); 58d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (IOException e) { 59d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath fail( 60d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath "an IO error occured while trying to find the output file or creating GZIP constructor"); 61d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 62d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 63d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 64d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath /** 65d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * java.util.zip.GZIPOutputStream#GZIPOutputStream(java.io.OutputStream, 66d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath *int) 67d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */ 68d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath public void test_ConstructorLjava_io_OutputStreamI() { 69d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 70e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath FileOutputStream outFile = new FileOutputStream( 71e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath File.createTempFile("GZIPOutCon", ".txt")); 72d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath TestGZIPOutputStream outGZIP = new TestGZIPOutputStream(outFile, 73d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 100); 74d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertNotNull("the constructor for GZIPOutputStream is null", 75d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath outGZIP); 76d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertEquals("the CRC value of the outputStream is not zero", 0, outGZIP 77d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath .getChecksum().getValue()); 78d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath outGZIP.close(); 79d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (IOException e) { 80d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath fail( 81d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath "an IO error occured while trying to find the output file or creating GZIP constructor"); 82d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 83d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 84d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 85d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath /** 86d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * java.util.zip.GZIPOutputStream#finish() 87d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */ 88d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath public void test_finish() { 89d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // test method java.util.zip.GZIPOutputStream.finish() 90d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath byte byteArray[] = { 3, 5, 2, 'r', 'g', 'e', 'f', 'd', 'e', 'w' }; 91d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 92e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath FileOutputStream outFile = new FileOutputStream( 93e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath File.createTempFile("GZIPOutFinish", ".txt")); 94d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath TestGZIPOutputStream outGZIP = new TestGZIPOutputStream(outFile); 95d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 96d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath outGZIP.finish(); 97d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath int r = 0; 98d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 99d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath outGZIP.write(byteArray, 0, 1); 100d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (IOException e) { 101d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath r = 1; 102d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 103d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 104d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertEquals("GZIP instance can still be used after finish is called", 105d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 1, r); 106d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath outGZIP.close(); 107d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (IOException e) { 108d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath fail( 109d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath "an IO error occured while trying to find the output file or creating GZIP constructor"); 110d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 111d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 112d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 113d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath /** 114d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * java.util.zip.GZIPOutputStream#close() 115d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */ 116d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath public void test_close() { 117d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // test method java.util.zip.GZIPOutputStream.close() 118d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath byte byteArray[] = { 3, 5, 2, 'r', 'g', 'e', 'f', 'd', 'e', 'w' }; 119d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 120e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath FileOutputStream outFile = new FileOutputStream( 121e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath File.createTempFile("GZIPOutClose2", ".txt")); 122d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath TestGZIPOutputStream outGZIP = new TestGZIPOutputStream(outFile); 123d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath outGZIP.close(); 124d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath int r = 0; 125d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 126d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath outGZIP.write(byteArray, 0, 1); 127d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (IOException e) { 128d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath r = 1; 129d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 130d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertEquals("GZIP instance can still be used after close is called", 131d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 1, r); 132d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (IOException e) { 133d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath fail( 134d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath "an IO error occured while trying to find the output file or creating GZIP constructor"); 135d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 136d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 137d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 138d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath /** 139d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * java.util.zip.GZIPOutputStream#write(byte[], int, int) 140d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */ 141d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath public void test_write$BII() { 142d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // test method java.util.zip.GZIPOutputStream.writeBII 143d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath byte byteArray[] = { 3, 5, 2, 'r', 'g', 'e', 'f', 'd', 'e', 'w' }; 144d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 145e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath FileOutputStream outFile = new FileOutputStream( 146e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath File.createTempFile("GZIPOutWrite", ".txt")); 147d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath TestGZIPOutputStream outGZIP = new TestGZIPOutputStream(outFile); 148d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath outGZIP.write(byteArray, 0, 10); 149d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // ran JDK and found this CRC32 value is 3097700292 150d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // System.out.print(outGZIP.getChecksum().getValue()); 151d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertEquals("the checksum value was incorrect result of write from GZIP", 152d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 3097700292L, outGZIP.getChecksum().getValue()); 153d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 154d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // test for boundary check 155d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath int r = 0; 156d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 157d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath outGZIP.write(byteArray, 0, 11); 158d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (IndexOutOfBoundsException e) { 159d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath r = 1; 160d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 161d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertEquals("out of bounds exception is not present", 1, r); 162d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath outGZIP.close(); 163d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (IOException e) { 164d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath fail( 165d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath "an IO error occured while trying to find the output file or creating GZIP constructor"); 166d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 167d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 168d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 16999b471492b5e0910653f115094d77d633bd340ecNarayan Kamath public void testSyncFlush() throws IOException { 170d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath PipedOutputStream pout = new PipedOutputStream(); 171d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath PipedInputStream pin = new PipedInputStream(pout); 17299b471492b5e0910653f115094d77d633bd340ecNarayan Kamath GZIPOutputStream out = new GZIPOutputStream(pout, true /* syncFlush */); 173d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath GZIPInputStream in = new GZIPInputStream(pin); 174d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 175d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath out.write(1); 176d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath out.write(2); 177d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath out.write(3); 178d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath out.flush(); 17999b471492b5e0910653f115094d77d633bd340ecNarayan Kamath // flush() is guaranteed to flush data only if syncFlush is true. 18099b471492b5e0910653f115094d77d633bd340ecNarayan Kamath // The default flush param is NO_FLUSH so it's up to the deflater to 18199b471492b5e0910653f115094d77d633bd340ecNarayan Kamath // decide how much input it wants to read before generating a compressed 18299b471492b5e0910653f115094d77d633bd340ecNarayan Kamath // block. 18399b471492b5e0910653f115094d77d633bd340ecNarayan Kamath assertEquals(1, in.read()); 184d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertEquals(2, in.read()); 185d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertEquals(3, in.read()); 186d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 187d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath} 188