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 */ 17 18 package libcore.java.util.zip; 19 20 import java.io.ByteArrayOutputStream; 21 import java.io.File; 22 import java.io.FileInputStream; 23 import java.io.IOException; 24 import java.io.InputStream; 25 import java.util.zip.ZipEntry; 26 import java.util.zip.ZipException; 27 import java.util.zip.ZipInputStream; 28 import java.util.zip.ZipOutputStream; 29 import junit.framework.TestCase; 30 import tests.support.resource.Support_Resources; 31 32 public class OldZipInputStreamTest extends TestCase { 33 private ZipInputStream zis; 34 private byte[] dataBytes = "Some data in my file".getBytes(); 35 36 @Override 37 protected void setUp() throws IOException { 38 InputStream is = Support_Resources.getStream("hyts_ZipFile.zip"); 39 if (is == null) { 40 System.out.println("file hyts_ZipFile.zip can not be found"); 41 } 42 zis = new ZipInputStream(is); 43 44 ByteArrayOutputStream bos = new ByteArrayOutputStream(); 45 ZipOutputStream zos = new ZipOutputStream(bos); 46 ZipEntry entry = new ZipEntry("myFile"); 47 zos.putNextEntry(entry); 48 zos.write(dataBytes); 49 zos.closeEntry(); 50 zos.close(); 51 } 52 53 @Override 54 protected void tearDown() throws IOException { 55 if (zis != null) { 56 zis.close(); 57 } 58 } 59 60 public void test_skipJ() throws Exception { 61 File resources = Support_Resources.createTempFolder(); 62 Support_Resources.copyFile(resources, null, "Broken_manifest.jar"); 63 FileInputStream fis = new FileInputStream(new File(resources, 64 "Broken_manifest.jar")); 65 66 ZipInputStream zis1 = new ZipInputStream(fis); 67 68 zis1.getNextEntry(); 69 zis1.getNextEntry(); 70 71 try { 72 zis1.skip(10); 73 fail("ZipException expected"); 74 } catch (ZipException ee) { 75 // expected 76 } 77 78 try { 79 zis1.close(); // Android throws exception here, already! 80 zis1.skip(10); // But RI here, only! 81 fail("IOException expected"); 82 } catch (IOException ee) { 83 // expected 84 } 85 } 86 87 public void test_read$BII() throws Exception { 88 byte[] rbuf; 89 90 File resources = Support_Resources.createTempFolder(); 91 Support_Resources.copyFile(resources, null, "Broken_manifest.jar"); 92 FileInputStream fis = new FileInputStream(new File(resources, 93 "Broken_manifest.jar")); 94 95 ZipInputStream zis1 = new ZipInputStream(fis); 96 97 zis1.getNextEntry(); 98 zis1.getNextEntry(); 99 100 rbuf = new byte[100]; 101 102 try { 103 zis1.read(rbuf, 10, 90); 104 fail("ZipException expected"); 105 } catch (ZipException ee) { 106 // expected 107 } 108 109 try { 110 zis1.close(); // Android throws exception here, already! 111 zis1.read(rbuf, 10, 90); // But RI here, only! 112 fail("IOException expected"); 113 } catch (IOException ee) { 114 // expected 115 } 116 } 117 118 public void test_closeEntry() throws Exception { 119 zis.getNextEntry(); 120 zis.closeEntry(); 121 zis.getNextEntry(); 122 zis.close(); 123 try { 124 zis.closeEntry(); 125 fail("IOException expected"); 126 } catch (IOException ee) { 127 // expected 128 } 129 File resources = Support_Resources.createTempFolder(); 130 Support_Resources.copyFile(resources, null, "Broken_manifest.jar"); 131 FileInputStream fis = new FileInputStream(new File(resources, 132 "Broken_manifest.jar")); 133 134 ZipInputStream zis1 = new ZipInputStream(fis); 135 136 try { 137 for (int i = 0; i < 6; i++) { 138 zis1.getNextEntry(); 139 zis1.closeEntry(); 140 } 141 fail("ZipException expected"); 142 } catch (ZipException ee) { 143 // expected 144 } 145 } 146 147 class Mock_ZipInputStream extends ZipInputStream { 148 boolean createFlag = false; 149 150 public Mock_ZipInputStream(InputStream arg0) { 151 super(arg0); 152 } 153 154 boolean getCreateFlag() { 155 return createFlag; 156 } 157 158 protected ZipEntry createZipEntry(String name) { 159 createFlag = true; 160 return super.createZipEntry(name); 161 } 162 } 163 164 public void test_createZipEntryLjava_lang_String() throws Exception { 165 166 File resources = Support_Resources.createTempFolder(); 167 Support_Resources.copyFile(resources, null, "Broken_manifest.jar"); 168 File fl = new File(resources, "Broken_manifest.jar"); 169 FileInputStream fis = new FileInputStream(fl); 170 171 Mock_ZipInputStream zis1 = new Mock_ZipInputStream(fis); 172 assertFalse(zis1.getCreateFlag()); 173 zis1.getNextEntry(); 174 assertTrue(zis1.getCreateFlag()); 175 } 176 } 177