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