1d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath/* 2d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * Licensed to the Apache Software Foundation (ASF) under one or more 3d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * contributor license agreements. See the NOTICE file distributed with 4d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * this work for additional information regarding copyright ownership. 5d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * The ASF licenses this file to You under the Apache License, Version 2.0 6d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * (the "License"); you may not use this file except in compliance with 7d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * the License. You may obtain a copy of the License at 8d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * 9d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * http://www.apache.org/licenses/LICENSE-2.0 10d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * 11d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * Unless required by applicable law or agreed to in writing, software 12d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * distributed under the License is distributed on an "AS IS" BASIS, 13d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * See the License for the specific language governing permissions and 15d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * limitations under the License. 16d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */ 17d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathpackage org.apache.harmony.tests.java.util.zip; 18d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 19d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.ByteArrayInputStream; 20d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.ByteArrayOutputStream; 21d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.File; 22d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.FileOutputStream; 23d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.IOException; 24d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.CRC32; 25d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.ZipEntry; 26d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.ZipException; 27d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.ZipInputStream; 28d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.ZipOutputStream; 29d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 30d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathpublic class ZipOutputStreamTest extends junit.framework.TestCase { 31d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 32d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ZipOutputStream zos; 33d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 34d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ByteArrayOutputStream bos; 35d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 36d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ZipInputStream zis; 37d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 38d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath static final String data = "HelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorld"; 39d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 40d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath /** 41d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * java.util.zip.ZipOutputStream#close() 42d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */ 43d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath public void test_close() throws Exception { 44d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos = new ZipOutputStream(bos); 45d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.putNextEntry(new ZipEntry("XX")); 46d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.closeEntry(); 47d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.close(); 48d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 49d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // Regression for HARMONY-97 50d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ZipOutputStream zos = new ZipOutputStream(new ByteArrayOutputStream()); 51d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.putNextEntry(new ZipEntry("myFile")); 52d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.close(); 53d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.close(); // Should be a no-op 54d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 55d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 56d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath /** 57d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * java.util.zip.ZipOutputStream#closeEntry() 58d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */ 59d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath public void test_closeEntry() throws IOException { 60d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ZipEntry ze = new ZipEntry("testEntry"); 61d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ze.setTime(System.currentTimeMillis()); 62d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.putNextEntry(ze); 63d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.write("Hello World".getBytes("UTF-8")); 64d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.closeEntry(); 65d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertTrue("closeEntry failed to update required fields", 66d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ze.getSize() == 11 && ze.getCompressedSize() == 13); 67d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 68d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 69d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 70d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath /** 71d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * java.util.zip.ZipOutputStream#finish() 72d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */ 73d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath public void test_finish() throws Exception { 74d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ZipEntry ze = new ZipEntry("test"); 75d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.putNextEntry(ze); 76d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.write("Hello World".getBytes()); 77d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.finish(); 78d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertEquals("Finish failed to closeCurrentEntry", 11, ze.getSize()); 79d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 80d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ZipOutputStream zos = new ZipOutputStream(new ByteArrayOutputStream()); 81d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.putNextEntry(new ZipEntry("myFile")); 82d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.finish(); 83d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.close(); 84d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 85d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.finish(); 86d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath fail("Assert 0: Expected IOException"); 87d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (IOException e) { 88d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // Expected 89d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 90d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 91d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 92d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath /** 93d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * java.util.zip.ZipOutputStream#putNextEntry(java.util.zip.ZipEntry) 94d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */ 95d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath public void test_putNextEntryLjava_util_zip_ZipEntry() throws IOException { 96d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ZipEntry ze = new ZipEntry("testEntry"); 97d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ze.setTime(System.currentTimeMillis()); 98d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.putNextEntry(ze); 99d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.write("Hello World".getBytes()); 100d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.closeEntry(); 101d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.close(); 102d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zis = new ZipInputStream(new ByteArrayInputStream(bos.toByteArray())); 103d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ZipEntry ze2 = zis.getNextEntry(); 104d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zis.closeEntry(); 105d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertEquals("Failed to write correct entry", ze.getName(), ze2.getName()); 106d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertEquals("Failed to write correct entry", ze.getCrc(), ze2.getCrc()); 107d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 108d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.putNextEntry(ze); 109d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath fail("Entry with incorrect setting failed to throw exception"); 110d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (IOException e) { 111d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // expected 112d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 113d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 114d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 115d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath /** 116d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * java.util.zip.ZipOutputStream#setComment(java.lang.String) 117d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */ 118d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath public void test_setCommentLjava_lang_String() { 119d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // There is no way to get the comment back, so no way to determine if 120d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // the comment is set correct 121d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.setComment("test setComment"); 122d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 123d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 124d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.setComment(new String(new byte[0xFFFF + 1])); 125d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath fail("Comment over 0xFFFF in length should throw exception"); 126d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (IllegalArgumentException e) { 127d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // Passed 128d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 129d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 130d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 131d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath /** 132d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * java.util.zip.ZipOutputStream#setLevel(int) 133d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */ 134d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath public void test_setLevelI() throws IOException { 135d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ZipEntry ze = new ZipEntry("test"); 136d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.putNextEntry(ze); 137d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.write(data.getBytes()); 138d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.closeEntry(); 139d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath long csize = ze.getCompressedSize(); 140d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.setLevel(9); // Max Compression 141d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.putNextEntry(ze = new ZipEntry("test2")); 142d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.write(data.getBytes()); 143d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.closeEntry(); 144d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertTrue("setLevel failed", csize <= ze.getCompressedSize()); 145d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 146d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 147d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath /** 148d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * java.util.zip.ZipOutputStream#setMethod(int) 149d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */ 150d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath public void test_setMethodI() throws IOException { 151d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ZipEntry ze = new ZipEntry("test"); 152d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.setMethod(ZipOutputStream.STORED); 153d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath CRC32 tempCrc = new CRC32(); 154d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath tempCrc.update(data.getBytes()); 155d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ze.setCrc(tempCrc.getValue()); 156d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ze.setSize(new String(data).length()); 157d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.putNextEntry(ze); 158d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.write(data.getBytes()); 159d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.closeEntry(); 160d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath long csize = ze.getCompressedSize(); 161d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.setMethod(ZipOutputStream.DEFLATED); 162d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.putNextEntry(ze = new ZipEntry("test2")); 163d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.write(data.getBytes()); 164d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.closeEntry(); 165d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertTrue("setLevel failed", csize >= ze.getCompressedSize()); 166d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 167d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 168d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath /** 169d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * java.util.zip.ZipOutputStream#write(byte[], int, int) 170d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */ 171d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath public void test_write$BII() throws IOException { 172d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ZipEntry ze = new ZipEntry("test"); 173d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.putNextEntry(ze); 174d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.write(data.getBytes()); 175d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.closeEntry(); 176d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.close(); 177d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos = null; 178d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zis = new ZipInputStream(new ByteArrayInputStream(bos.toByteArray())); 179d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zis.getNextEntry(); 180d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath byte[] b = new byte[data.length()]; 181d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath int r = 0; 182d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath int count = 0; 183d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath while (count != b.length && (r = zis.read(b, count, b.length)) != -1) { 184d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath count += r; 185d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 186d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zis.closeEntry(); 187d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath assertEquals("Write failed to write correct bytes", new String(b), data); 188d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 189d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath File f = File.createTempFile("testZip", "tst"); 190d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath f.deleteOnExit(); 191d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath FileOutputStream stream = new FileOutputStream(f); 192d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ZipOutputStream zip = new ZipOutputStream(stream); 193d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zip.setMethod(ZipEntry.STORED); 194d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 195d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 196d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zip.putNextEntry(new ZipEntry("Second")); 197d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath fail("Not set an entry. Should have thrown ZipException."); 198d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (ZipException e) { 199d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // expected -- We have not set an entry 200d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 201d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 202d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 203d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // We try to write data without entry 204d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zip.write(new byte[2]); 205d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath fail("Writing data without an entry. Should have thrown IOException"); 206d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (IOException e) { 207d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // expected 208d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 209d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 210d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 211d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // Try to write without an entry and with nonsense offset and 212d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // length 213d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zip.write(new byte[2], 0, 12); 214d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath fail("Writing data without an entry. Should have thrown IndexOutOfBoundsException"); 215d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (IndexOutOfBoundsException e) { 216d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // expected 217d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 218d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 219d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // Regression for HARMONY-4405 220d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 221d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zip.write(null, 0, -2); 222d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath fail(); 223d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (NullPointerException expected) { 224d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (IndexOutOfBoundsException expected) { 225d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 226d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 227d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zip.write(null, 0, 2); 228d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath fail(); 229d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (NullPointerException expected) { 230d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 231d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 232d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zip.write(new byte[2], 0, -2); 233d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath fail(); 234d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (IndexOutOfBoundsException expected) { 235d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 236d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 237d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // Close stream because ZIP is invalid 238d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath stream.close(); 239d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 240d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 241d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath /** 242d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * java.util.zip.ZipOutputStream#write(byte[], int, int) 243d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */ 244d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath public void test_write$BII_2() throws IOException { 245d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // Regression for HARMONY-577 246d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath File f1 = File.createTempFile("testZip1", "tst"); 247d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath f1.deleteOnExit(); 248d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath FileOutputStream stream1 = new FileOutputStream(f1); 249d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath ZipOutputStream zip1 = new ZipOutputStream(stream1); 250d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zip1.putNextEntry(new ZipEntry("one")); 251d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zip1.setMethod(ZipOutputStream.STORED); 252d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zip1.setMethod(ZipEntry.STORED); 253d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 254d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zip1.write(new byte[2]); 255d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 256d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 257d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zip1.putNextEntry(new ZipEntry("Second")); 258d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath fail("ZipException expected"); 259d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (ZipException e) { 260d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // expected - We have not set an entry 261d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 262d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 263d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 264d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zip1.write(new byte[2]); // try to write data without entry 265d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath fail("expected IOE there"); 266d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (IOException e2) { 267d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath // expected 268d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 269d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 270d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zip1.close(); 271d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 272d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 273d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath @Override 274d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath protected void setUp() throws Exception { 275d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath super.setUp(); 276d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos = new ZipOutputStream(bos = new ByteArrayOutputStream()); 277d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 278d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath 279d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath @Override 280d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath protected void tearDown() throws Exception { 281d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath try { 282d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath if (zos != null) { 283d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zos.close(); 284d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 285d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath if (zis != null) { 286d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath zis.close(); 287d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 288d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } catch (Exception e) { 289d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 290d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath super.tearDown(); 291d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath } 292d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath} 293