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 Hughes 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.archive.tests.java.util.jar; 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStream; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.CodeSigner; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.List; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.jar.JarEntry; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.jar.JarFile; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.zip.ZipEntry; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.resource.Support_Resources; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class JarEntryTest extends TestCase { 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private ZipEntry zipEntry; 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private JarEntry jarEntry; 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private JarFile jarFile; 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private final String jarName = "hyts_patch.jar"; 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private final String entryName = "foo/bar/A.class"; 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private final String entryName2 = "Blah.txt"; 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private final String attJarName = "hyts_att.jar"; 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private final String attEntryName = "HasAttributes.txt"; 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private final String attEntryName2 = "NoAttributes.txt"; 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private File resources; 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void setUp() throws Exception { 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes resources = Support_Resources.createTempFolder(); 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, null, jarName); 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes jarFile = new JarFile(new File(resources, jarName)); 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void tearDown() throws Exception { 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (jarFile != null) { 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes jarFile.close(); 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @throws IOException 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.jar.JarEntry#JarEntry(java.util.jar.JarEntry) 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_util_jar_JarEntry() throws IOException { 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes JarEntry newJarEntry = new JarEntry(jarFile.getJarEntry(entryName)); 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(newJarEntry); 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes jarEntry = null; 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes newJarEntry = new JarEntry(jarEntry); 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw NullPointerException"); 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.jar.JarEntry#JarEntry(java.util.zip.ZipEntry) 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_util_zip_ZipEntry() { 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Jar file is null", jarFile); 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes zipEntry = jarFile.getEntry(entryName); 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Zip entry is null", zipEntry); 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes jarEntry = new JarEntry(zipEntry); 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Jar entry is null", jarEntry); 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Wrong entry constructed--wrong name", entryName, jarEntry 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getName()); 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Wrong entry constructed--wrong size", 311, jarEntry 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getSize()); 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.jar.JarEntry#getAttributes() 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getAttributes() throws Exception { 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes JarFile attrJar = null; 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File file = null; 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, null, attJarName); 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes file = new File(resources, attJarName); 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes attrJar = new JarFile(file); 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes jarEntry = attrJar.getJarEntry(attEntryName); 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Should have Manifest attributes", jarEntry 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getAttributes()); 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes jarEntry = attrJar.getJarEntry(attEntryName2); 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Shouldn't have any Manifest attributes", jarEntry 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getAttributes()); 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes attrJar.close(); 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.jar.JarEntry#getCertificates() 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getCertificates() throws Exception { 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes zipEntry = jarFile.getEntry(entryName2); 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes jarEntry = new JarEntry(zipEntry); 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(jarEntry.getCertificates()); 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression Test for HARMONY-3424 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String jarFileName = "TestCodeSigners.jar"; 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, null, jarFileName); 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File file = new File(resources, jarFileName); 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes JarFile jarFile = new JarFile(file); 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes JarEntry jarEntry1 = jarFile.getJarEntry("Test.class"); 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes JarEntry jarEntry2 = jarFile.getJarEntry("Test.class"); 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InputStream in = jarFile.getInputStream(jarEntry1); 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] buffer = new byte[1024]; 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (in.available() > 0) { 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("getCertificates() should be null until the entry is read", 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes jarEntry1.getCertificates()); 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(jarEntry2.getCertificates()); 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.read(buffer); 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("the file is fully read", -1, in.read()); 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(jarEntry1.getCertificates()); 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(jarEntry2.getCertificates()); 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.close(); 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.jar.JarEntry#getCodeSigners() 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getCodeSigners() throws IOException { 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String jarFileName = "TestCodeSigners.jar"; 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Support_Resources.copyFile(resources, null, jarFileName); 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File file = new File(resources, jarFileName); 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes JarFile jarFile = new JarFile(file); 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes JarEntry jarEntry = jarFile.getJarEntry("Test.class"); 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InputStream in = jarFile.getInputStream(jarEntry); 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] buffer = new byte[1024]; 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (in.available() > 0) { 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("getCodeSigners() should be null until the entry is read", 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes jarEntry.getCodeSigners()); 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.read(buffer); 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("the file is fully read", -1, in.read()); 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CodeSigner[] codeSigners = jarEntry.getCodeSigners(); 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(2, codeSigners.length); 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes List<?> certs_bob = codeSigners[0].getSignerCertPath() 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getCertificates(); 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes List<?> certs_alice = codeSigners[1].getSignerCertPath() 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getCertificates(); 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (1 == certs_bob.size()) { 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes List<?> temp = certs_bob; 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes certs_bob = certs_alice; 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes certs_alice = temp; 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(2, certs_bob.size()); 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(1, certs_alice.size()); 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull( 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "getCodeSigners() should be null for a primitive JarEntry", 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new JarEntry("aaa").getCodeSigners()); 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 183