Author: pauls Date: Tue Mar 20 10:16:34 2018 New Revision: 1827290 URL: http://svn.apache.org/viewvc?rev=1827290&view=rev Log: FELIX-5808: Add checks for proper manifest header handling and native libs extraction.
Modified: felix/trunk/osgi-r7/framework/src/test/java/org/apache/felix/framework/cache/BundleCacheTest.java Modified: felix/trunk/osgi-r7/framework/src/test/java/org/apache/felix/framework/cache/BundleCacheTest.java URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/framework/src/test/java/org/apache/felix/framework/cache/BundleCacheTest.java?rev=1827290&r1=1827289&r2=1827290&view=diff ============================================================================== --- felix/trunk/osgi-r7/framework/src/test/java/org/apache/felix/framework/cache/BundleCacheTest.java (original) +++ felix/trunk/osgi-r7/framework/src/test/java/org/apache/felix/framework/cache/BundleCacheTest.java Tue Mar 20 10:16:34 2018 @@ -31,7 +31,6 @@ import java.net.URL; import java.util.Arrays; import java.util.Enumeration; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.TreeSet; @@ -84,6 +83,15 @@ public class BundleCacheTest extends Tes createJar(archiveFile, new File(archiveFile, "inner/i+?äö \\§$%nner.jar")); + Manifest manifest = new Manifest(); + manifest.getMainAttributes().putValue("foo", "bar"); + manifest.getMainAttributes().putValue("Manifest-Version", "v1"); + + File mf = new File(archiveFile, "META-INF/MANIFEST.MF"); + mf.getParentFile().mkdirs(); + FileOutputStream output = new FileOutputStream(mf); + manifest.write(output); + output.close(); jarFile = new File(filesDir, "bundle1.jar"); createJar(archiveFile, jarFile); } @@ -118,24 +126,46 @@ public class BundleCacheTest extends Tes testRevision(archive); + String nativeLib = archive.getCurrentRevision().getContent().getEntryAsNativeLibrary("file1"); + + assertNotNull(nativeLib); + assertTrue(new File(nativeLib).isFile()); + archive.revise(location, file != null ? new FileInputStream(file) : null); assertEquals(Long.valueOf(1), archive.getCurrentRevisionNumber()); testRevision(archive); + String nativeLib2 = archive.getCurrentRevision().getContent().getEntryAsNativeLibrary("file1"); + + assertNotNull(nativeLib2); + assertTrue(new File(nativeLib).isFile()); + assertTrue(new File(nativeLib2).isFile()); + archive.purge(); assertEquals(Long.valueOf(1), archive.getCurrentRevisionNumber()); testRevision(archive); + + String nativeLib3 = archive.getCurrentRevision().getContent().getEntryAsNativeLibrary("file1"); + + assertNotNull(nativeLib3); + assertNotSame(nativeLib, nativeLib2); + assertNotSame(nativeLib2, nativeLib3); + assertFalse(new File(nativeLib).isFile()); + assertTrue(new File(nativeLib2).isFile()); + assertTrue(new File(nativeLib3).isFile()); } private void testRevision(BundleArchive archive) throws Exception { BundleArchiveRevision revision = archive.getCurrentRevision(); assertNotNull(revision); - perRevision(revision.getContent(), new TreeSet<String>(Arrays.asList("file1", "inner/", "inner/empty/", "inner/file1", "inner/i+?äö \\§$%nner.jar"))); + assertNotNull(revision.getManifestHeader()); + assertEquals("bar", revision.getManifestHeader().get("foo")); + perRevision(revision.getContent(), new TreeSet<String>(Arrays.asList("META-INF/", "META-INF/MANIFEST.MF", "file1", "inner/", "inner/empty/", "inner/file1", "inner/i+?äö \\§$%nner.jar"))); perRevision(revision.getContent().getEntryAsContent("inner"), new TreeSet<String>(Arrays.asList("file1", "empty/", "i+?äö \\§$%nner.jar"))); assertNull(revision.getContent().getEntryAsContent("inner/inner")); assertNotNull(revision.getContent().getEntryAsContent("inner/empty/")); @@ -190,6 +220,11 @@ public class BundleCacheTest extends Tes assertEquals("file1", new String(entry, 0 , j, "UTF-8")); assertNull(content.getEntryAsURL("foo")); assertNull(content.getEntryAsURL("foo/bar")); + + assertNull(content.getEntryAsNativeLibrary("blub")); + String nativeLib = content.getEntryAsNativeLibrary("file1"); + assertNotNull(nativeLib); + assertTrue(new File(nativeLib).isFile()); content.close(); } @@ -254,17 +289,20 @@ public class BundleCacheTest extends Tes { for (File file : children) { - String next = path + file.getName(); - if (file.isDirectory()) - { - next += "/"; - } - output.putNextEntry(new ZipEntry(next)); - if (file.isDirectory()) + if (!file.getName().equals("MANIFEST.MF")) { - output.closeEntry(); + String next = path + file.getName(); + if (file.isDirectory()) + { + next += "/"; + } + output.putNextEntry(new ZipEntry(next)); + if (file.isDirectory()) + { + output.closeEntry(); + } + writeRecursive(file, next, output); } - writeRecursive(file, next, output); } } }