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