Java tutorial
package org.codehaus.plexus.archiver.jar; /* * Copyright 2006 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ import java.io.InputStream; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.codehaus.plexus.PlexusTestCase; import org.codehaus.plexus.archiver.Archiver; import static org.codehaus.plexus.archiver.util.Streams.bufferedInputStream; /** * @author Richard van der Hoff <richardv@mxtelecom.com> * @version $Id$ */ public class IndexTest extends PlexusTestCase { public void testCreateArchiveWithIndexedJars() throws Exception { /* create a dummy jar */ JarArchiver archiver1 = (JarArchiver) lookup(Archiver.ROLE, "jar"); archiver1.addFile(getTestFile("src/test/resources/manifests/manifest1.mf"), "one.txt"); archiver1.setDestFile(getTestFile("target/output/archive1.jar")); archiver1.createArchive(); /* now create another jar, with an index, and whose manifest includes a Class-Path entry for the first jar. */ Manifest m = new Manifest(); Manifest.Attribute classpathAttr = new Manifest.Attribute("Class-Path", "archive1.jar"); m.addConfiguredAttribute(classpathAttr); JarArchiver archiver2 = (JarArchiver) lookup(Archiver.ROLE, "jar"); archiver2.addFile(getTestFile("src/test/resources/manifests/manifest2.mf"), "two.txt"); archiver2.setIndex(true); archiver2.addConfiguredIndexJars(archiver1.getDestFile()); archiver2.setDestFile(getTestFile("target/output/archive2.jar")); archiver2.addConfiguredManifest(m); archiver2.createArchive(); // read the index file back and check it looks like it ought to org.apache.commons.compress.archivers.zip.ZipFile zf = new org.apache.commons.compress.archivers.zip.ZipFile( archiver2.getDestFile()); ZipArchiveEntry indexEntry = zf.getEntry("META-INF/INDEX.LIST"); assertNotNull(indexEntry); InputStream bis = bufferedInputStream(zf.getInputStream(indexEntry)); byte buf[] = new byte[1024]; int i = bis.read(buf); String res = new String(buf, 0, i); assertEquals("JarIndex-Version: 1.0\n\narchive2.jar\ntwo.txt\n\narchive1.jar\none.txt\n\n", res.replaceAll("\r\n", "\n")); } /** * this is pretty much a duplicate of testCreateArchiveWithIndexedJars(), but adds some extra * tests for files in META-INF */ public void testCreateArchiveWithIndexedJarsAndMetaInf() throws Exception { /* create a dummy jar */ JarArchiver archiver1 = (JarArchiver) lookup(Archiver.ROLE, "jar"); archiver1.addFile(getTestFile("src/test/resources/manifests/manifest1.mf"), "one.txt"); // add a file in the META-INF directory, as this previously didn't make it into the index archiver1.addFile(getTestFile("src/test/resources/manifests/manifest2.mf"), "META-INF/foo"); archiver1.setDestFile(getTestFile("target/output/archive1.jar")); archiver1.createArchive(); /* create another dummy jar, with an index but nothing else in META-INF. Also checks non-leaf files. */ JarArchiver archiver3 = (JarArchiver) lookup(Archiver.ROLE, "jar"); archiver3.addFile(getTestFile("src/test/resources/manifests/manifest1.mf"), "org/apache/maven/one.txt"); archiver3.addFile(getTestFile("src/test/resources/manifests/manifest2.mf"), "META-INF/INDEX.LIST"); archiver3.setDestFile(getTestFile("target/output/archive3.jar")); archiver3.createArchive(); /* now create another jar, with an index, and whose manifest includes a Class-Path entry for the first two jars. */ Manifest m = new Manifest(); Manifest.Attribute classpathAttr = new Manifest.Attribute("Class-Path", "archive1.jar archive3.jar"); m.addConfiguredAttribute(classpathAttr); JarArchiver archiver2 = (JarArchiver) lookup(Archiver.ROLE, "jar"); archiver2.addFile(getTestFile("src/test/resources/manifests/manifest2.mf"), "two.txt"); archiver2.setIndex(true); archiver2.addConfiguredIndexJars(archiver1.getDestFile()); archiver2.addConfiguredIndexJars(archiver3.getDestFile()); archiver2.setDestFile(getTestFile("target/output/archive2.jar")); archiver2.addConfiguredManifest(m); archiver2.createArchive(); // read the index file back and check it looks like it ought to org.apache.commons.compress.archivers.zip.ZipFile zf = new org.apache.commons.compress.archivers.zip.ZipFile( archiver2.getDestFile()); ZipArchiveEntry indexEntry = zf.getEntry("META-INF/INDEX.LIST"); assertNotNull(indexEntry); InputStream bis = bufferedInputStream(zf.getInputStream(indexEntry)); byte buf[] = new byte[1024]; int i = bis.read(buf); String res = new String(buf, 0, i); //System.out.println(res); assertEquals("JarIndex-Version: 1.0\n\n" + "archive2.jar\ntwo.txt\n\n" + "archive1.jar\nMETA-INF\none.txt\n\n" + "archive3.jar\norg\norg/apache\norg/apache/maven\n\n", res.replaceAll("\r\n", "\n")); } }