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.FileInputStream;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileOutputStream;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStream;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.zip.CRC32;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.zip.CheckedInputStream;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.resource.Support_Resources;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class CheckedInputStreamTest extends TestCase {
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void tearDown() {
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            File deletedFile = new File("empty.txt");
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            deletedFile.delete();
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (SecurityException e) {
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Cannot delete file for security reasons");
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.zip.CheckedInputStream#CheckedInputStream(java.io.InputStream,
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 *        java.util.zip.Checksum)
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_ConstructorLjava_io_InputStreamLjava_util_zip_Checksum() throws Exception {
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InputStream checkInput = Support_Resources.getStream("hyts_checkInput.txt");
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        CheckedInputStream checkIn = new CheckedInputStream(checkInput, new CRC32());
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("constructor of checkedInputStream has failed", 0, checkIn.getChecksum()
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getValue());
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        checkInput.close();
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.zip.CheckedInputStream#getChecksum()
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getChecksum() throws Exception {
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte outBuf[] = new byte[100];
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // testing getChecksum for an empty file
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        FileOutputStream outEmp = new FileOutputStream("empty.txt");
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        outEmp.close();
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InputStream inEmp = new FileInputStream("empty.txt");
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        CheckedInputStream checkEmpty = new CheckedInputStream(inEmp, new CRC32());
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        while (checkEmpty.read() >= 0) {
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("the checkSum value of an empty file is not zero", 0, checkEmpty
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getChecksum().getValue());
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        inEmp.close();
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // testing getChecksum for the file checkInput
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InputStream checkInput = Support_Resources.getStream("hyts_checkInput.txt");
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        CheckedInputStream checkIn = new CheckedInputStream(checkInput, new CRC32());
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        while (checkIn.read() >= 0) {
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // ran JDK and found that the checkSum value of this is 2036203193
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // System.out.print(" " + checkIn.getChecksum().getValue());
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("the checksum value is incorrect", 2036203193, checkIn.getChecksum()
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getValue());
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        checkInput.close();
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // testing getChecksum for file checkInput
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        checkInput = Support_Resources.getStream("hyts_checkInput.txt");
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        CheckedInputStream checkIn2 = new CheckedInputStream(checkInput, new CRC32());
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        checkIn2.read(outBuf, 0, 10);
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // ran JDK and found that the checkSum value of this is 2235765342
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // System.out.print(" " + checkIn2.getChecksum().getValue());
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("the checksum value is incorrect", 2235765342L, checkIn2.getChecksum()
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getValue());
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        checkInput.close();
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.zip.CheckedInputStream#skip(long)
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_skipJ() throws Exception {
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // testing that the return by skip is valid
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InputStream checkInput = Support_Resources.getStream("hyts_checkInput.txt");
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        CheckedInputStream checkIn = new CheckedInputStream(checkInput, new CRC32());
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        long skipValue = 5;
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("the value returned by skip(n) is not the same as its parameter",
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                skipValue, checkIn.skip(skipValue));
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        checkIn.skip(skipValue);
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // ran JDK and found the checkSum value is 2235765342
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // System.out.print(checkIn.getChecksum().getValue());
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("checkSum value is not correct", 2235765342L, checkIn.getChecksum()
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getValue());
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, checkIn.skip(0));
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        checkInput.close();
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_read() throws Exception {
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // testing that the return by skip is valid
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InputStream checkInput = Support_Resources
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getStream("hyts_checkInput.txt");
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        CheckedInputStream checkIn = new CheckedInputStream(checkInput,
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new CRC32());
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        checkIn.read();
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        checkIn.close();
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            checkIn.read();
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("IOException expected.");
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException ee) {
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        checkInput.close();
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_read$byteII() throws Exception {
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // testing that the return by skip is valid
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InputStream checkInput = Support_Resources
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getStream("hyts_checkInput.txt");
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        CheckedInputStream checkIn = new CheckedInputStream(checkInput,
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new CRC32());
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte buff[] = new byte[50];
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        checkIn.read(buff, 10, 5);
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        checkIn.close();
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            checkIn.read(buff, 10, 5);
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("IOException expected.");
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException ee) {
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        checkInput.close();
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
146