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.util.zip.Adler32;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.zip.CRC32;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.zip.CheckedOutputStream;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class CheckedOutputStreamTest extends junit.framework.TestCase {
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.zip.CheckedOutputStream#CheckedOutputStream(java.io.OutputStream,
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 *        java.util.zip.Checksum)
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_ConstructorLjava_io_OutputStreamLjava_util_zip_Checksum() {
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// test method java.util.zip.checkedOutputStream.constructor
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			FileOutputStream outFile = new FileOutputStream("chkOut.txt");
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			CheckedOutputStream chkOut = new CheckedOutputStream(outFile,
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					new CRC32());
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertEquals("the checkSum value of the constructor is not 0", 0, chkOut
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.getChecksum().getValue());
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			outFile.close();
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("Unable to find file");
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (SecurityException e) {
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail(
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					"file cannot be opened for writing due to security reasons");
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.zip.CheckedOutputStream#getChecksum()
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getChecksum() {
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// test method java.util.zip.checkedOutputStream.getChecksum()
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		byte byteArray[] = { 1, 2, 3, 'e', 'r', 't', 'g', 3, 6 };
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			FileOutputStream outFile = new FileOutputStream("chkOut.txt");
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			CheckedOutputStream chkOut = new CheckedOutputStream(outFile,
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					new Adler32());
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			chkOut.write(byteArray[4]);
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// ran JDK and found that checkSum value is 7536755
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// System.out.print(chkOut.getChecksum().getValue());
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertEquals("the checkSum value for writeI is incorrect", 7536755, chkOut
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.getChecksum().getValue());
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			chkOut.getChecksum().reset();
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			chkOut.write(byteArray, 5, 4);
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// ran JDK and found that checkSum value is 51708133
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// System.out.print(" " +chkOut.getChecksum().getValue());
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertEquals("the checkSum value for writeBII is incorrect ", 51708133, chkOut
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.getChecksum().getValue());
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			outFile.close();
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("Unable to find file");
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (SecurityException e) {
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail(
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					"file cannot be opened for writing due to security reasons");
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.zip.CheckedOutputStream#write(int)
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_writeI() {
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// test method java.util.zip.checkedOutputStream.writeI()
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		byte byteArray[] = { 1, 2, 3, 'e', 'r', 't', 'g', 3, 6 };
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			FileOutputStream outFile = new FileOutputStream("chkOut.txt");
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			CheckedOutputStream chkOut = new CheckedOutputStream(outFile,
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					new CRC32());
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			for (byte element : byteArray) {
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				chkOut.write(element);
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					"the checkSum value is zero, no bytes are written to the output file",
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					chkOut.getChecksum().getValue() != 0);
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			outFile.close();
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("Unable to find file");
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (SecurityException e) {
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("File cannot be opened for writing due to security reasons");
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.zip.CheckedOutputStream#write(byte[], int, int)
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_write$BII() {
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// test method java.util.zip.checkOutputStream.writeBII()
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		byte byteArray[] = { 1, 2, 3, 'e', 'r', 't', 'g', 3, 6 };
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			FileOutputStream outFile = new FileOutputStream("chkOut.txt");
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			CheckedOutputStream chkOut = new CheckedOutputStream(outFile,
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					new CRC32());
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			chkOut.write(byteArray, 4, 5);
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					"the checkSum value is zero, no bytes are written to the output file",
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					chkOut.getChecksum().getValue() != 0);
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			int r = 0;
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			try {
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				chkOut.write(byteArray, 4, 6);
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			} catch (IndexOutOfBoundsException e) {
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				r = 1;
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertEquals("boundary check is not performed", 1, r);
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			outFile.close();
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("Unable to find file");
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (SecurityException e) {
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail(
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					"file cannot be opened for writing due to security reasons");
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IndexOutOfBoundsException e) {
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("Index for write is out of bounds");
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	@Override
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void setUp() {
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	@Override
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void tearDown() {
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			File deletedFile = new File("chkOut.txt");
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			deletedFile.delete();
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (SecurityException e) {
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("Cannot delete file for security reasons");
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
152