1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* 2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership. 5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with 7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License. You may obtain a copy of the License at 8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software 12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and 15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License. 16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.archive.tests.java.util.zip; 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File; 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileOutputStream; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.OutputStream; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.PipedInputStream; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.PipedOutputStream; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.zip.Checksum; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.zip.GZIPInputStream; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.zip.GZIPOutputStream; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class GZIPOutputStreamTest extends junit.framework.TestCase { 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class TestGZIPOutputStream extends GZIPOutputStream { 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes TestGZIPOutputStream(OutputStream out) throws IOException { 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(out); 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes TestGZIPOutputStream(OutputStream out, int size) throws IOException { 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(out, size); 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Checksum getChecksum() { 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return crc; 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.zip.GZIPOutputStream#GZIPOutputStream(java.io.OutputStream) 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_io_OutputStream() { 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileOutputStream outFile = new FileOutputStream("GZIPOutCon.txt"); 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes TestGZIPOutputStream outGZIP = new TestGZIPOutputStream(outFile); 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("the constructor for GZIPOutputStream is null", 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes outGZIP); 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("the CRC value of the outputStream is not zero", 0, outGZIP 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getChecksum().getValue()); 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes outGZIP.close(); 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail( 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "an IO error occured while trying to find the output file or creating GZIP constructor"); 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.zip.GZIPOutputStream#GZIPOutputStream(java.io.OutputStream, 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * int) 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_io_OutputStreamI() { 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileOutputStream outFile = new FileOutputStream("GZIPOutCon.txt"); 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes TestGZIPOutputStream outGZIP = new TestGZIPOutputStream(outFile, 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 100); 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("the constructor for GZIPOutputStream is null", 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes outGZIP); 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("the CRC value of the outputStream is not zero", 0, outGZIP 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getChecksum().getValue()); 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes outGZIP.close(); 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail( 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "an IO error occured while trying to find the output file or creating GZIP constructor"); 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.zip.GZIPOutputStream#finish() 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_finish() { 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test method java.util.zip.GZIPOutputStream.finish() 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte byteArray[] = { 3, 5, 2, 'r', 'g', 'e', 'f', 'd', 'e', 'w' }; 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileOutputStream outFile = new FileOutputStream("GZIPOutFinish.txt"); 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes TestGZIPOutputStream outGZIP = new TestGZIPOutputStream(outFile); 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes outGZIP.finish(); 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int r = 0; 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes outGZIP.write(byteArray, 0, 1); 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes r = 1; 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("GZIP instance can still be used after finish is called", 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1, r); 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes outGZIP.close(); 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail( 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "an IO error occured while trying to find the output file or creating GZIP constructor"); 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.zip.GZIPOutputStream#close() 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_close() { 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test method java.util.zip.GZIPOutputStream.close() 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte byteArray[] = { 3, 5, 2, 'r', 'g', 'e', 'f', 'd', 'e', 'w' }; 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileOutputStream outFile = new FileOutputStream("GZIPOutClose2.txt"); 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes TestGZIPOutputStream outGZIP = new TestGZIPOutputStream(outFile); 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes outGZIP.close(); 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int r = 0; 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes outGZIP.write(byteArray, 0, 1); 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes r = 1; 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("GZIP instance can still be used after close is called", 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1, r); 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail( 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "an IO error occured while trying to find the output file or creating GZIP constructor"); 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.zip.GZIPOutputStream#write(byte[], int, int) 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_write$BII() { 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test method java.util.zip.GZIPOutputStream.writeBII 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte byteArray[] = { 3, 5, 2, 'r', 'g', 'e', 'f', 'd', 'e', 'w' }; 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileOutputStream outFile = new FileOutputStream("GZIPOutWrite.txt"); 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes TestGZIPOutputStream outGZIP = new TestGZIPOutputStream(outFile); 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes outGZIP.write(byteArray, 0, 10); 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // ran JDK and found this CRC32 value is 3097700292 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // System.out.print(outGZIP.getChecksum().getValue()); 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("the checksum value was incorrect result of write from GZIP", 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 3097700292L, outGZIP.getChecksum().getValue()); 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test for boundary check 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int r = 0; 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes outGZIP.write(byteArray, 0, 11); 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IndexOutOfBoundsException e) { 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes r = 1; 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("out of bounds exception is not present", 1, r); 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes outGZIP.close(); 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail( 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "an IO error occured while trying to find the output file or creating GZIP constructor"); 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testFlush() throws IOException { 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes PipedOutputStream pout = new PipedOutputStream(); 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes PipedInputStream pin = new PipedInputStream(pout); 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes GZIPOutputStream out = new GZIPOutputStream(pout); 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes GZIPInputStream in = new GZIPInputStream(pin); 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.write(1); 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.write(2); 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.write(3); 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.flush(); 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(1, in.read()); // without flush, this blocks forever!! 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(2, in.read()); 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(3, in.read()); 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void setUp() { 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void tearDown() { 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File dFile = new File("GZIPOutCon.txt"); 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes dFile.delete(); 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File dFile2 = new File("GZIPOutFinish.txt"); 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes dFile2.delete(); 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File dFile3 = new File("GZIPOutWrite.txt"); 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes dFile3.delete(); 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File dFile4 = new File("GZIPOutClose2.txt"); 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes dFile4.delete(); 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SecurityException e) { 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Cannot delete file for security reasons"); 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 201