You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by tj...@apache.org on 2020/04/08 14:58:23 UTC

[felix-atomos] branch master updated: Index lists all content and stores only duplicates

This is an automated email from the ASF dual-hosted git repository.

tjwatson pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/felix-atomos.git


The following commit(s) were added to refs/heads/master by this push:
     new ff13b0f  Index lists all content and stores only duplicates
ff13b0f is described below

commit ff13b0fa348e32560e44f8722058ce748ffea9a3
Author: Thomas Watson <tj...@us.ibm.com>
AuthorDate: Wed Apr 8 09:42:45 2020 -0500

    Index lists all content and stores only duplicates
    
    Change the Atomos bundles.index file to list
    all entries of each bundle.  Only store duplicate
    paths in the atomos/ index directory.  If a resource
    entry cannot be found in the atomos/ index directory
    then look in the root.  Only look in the root
    if the lookup path is contained in the list
    stored in the bundles.index file
---
 .../runtime/content/ConnectContentIndexed.java     |  8 ++-
 .../tests/index/bundles/IndexLaunchTest.java       | 63 ++++++++++++++++++++++
 .../{atomos/1 => }/OSGI-INF/bundle.1-1.txt         |  0
 .../{atomos/1 => }/OSGI-INF/bundle.1-2.txt         |  0
 .../{atomos/2 => }/OSGI-INF/bundle.2-1.txt         |  0
 .../{atomos/2 => }/OSGI-INF/bundle.2-2.txt         |  0
 .../{testIndex/3 => }/OSGI-INF/bundle.3-1.txt      |  0
 .../{testIndex/3 => }/OSGI-INF/bundle.3-2.txt      |  0
 .../{testIndex/4 => }/OSGI-INF/bundle.4-1.txt      |  0
 .../{testIndex/4 => }/OSGI-INF/bundle.4-2.txt      |  0
 .../src/test/resources/OSGI-INF/notFound.txt       |  1 +
 .../resources/atomos/3/OSGI-INF/bundle.3-1.txt     |  1 -
 .../resources/atomos/3/OSGI-INF/bundle.3-2.txt     |  1 -
 .../resources/atomos/4/OSGI-INF/bundle.4-1.txt     |  1 -
 .../resources/atomos/4/OSGI-INF/bundle.4-2.txt     |  1 -
 .../src/test/resources/atomos/bundles.index        | 40 ++++++++++++++
 .../src/test/resources/testIndex/test.index        | 20 +++++++
 17 files changed, 130 insertions(+), 6 deletions(-)

diff --git a/atomos.runtime/src/main/java/org/apache/felix/atomos/impl/runtime/content/ConnectContentIndexed.java b/atomos.runtime/src/main/java/org/apache/felix/atomos/impl/runtime/content/ConnectContentIndexed.java
index 368284d..039be3b 100644
--- a/atomos.runtime/src/main/java/org/apache/felix/atomos/impl/runtime/content/ConnectContentIndexed.java
+++ b/atomos.runtime/src/main/java/org/apache/felix/atomos/impl/runtime/content/ConnectContentIndexed.java
@@ -104,8 +104,12 @@ public class ConnectContentIndexed implements ConnectContent
     {
         if (entries.contains(name))
         {
-            URL resource = getClass().getResource(
-                index + '/' + name);
+            String slashName = '/' + name;
+            URL resource = getClass().getResource(index + slashName);
+            if (resource == null)
+            {
+                resource = getClass().getResource(slashName);
+            }
             if (resource != null)
             {
                 return Optional.of(new URLConnectEntry(name, resource));
diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/java/org/apache/felix/atomos/tests/index/bundles/IndexLaunchTest.java b/atomos.tests/atomos.tests.index.bundles/src/test/java/org/apache/felix/atomos/tests/index/bundles/IndexLaunchTest.java
index c03a1cc..91f0162 100644
--- a/atomos.tests/atomos.tests.index.bundles/src/test/java/org/apache/felix/atomos/tests/index/bundles/IndexLaunchTest.java
+++ b/atomos.tests/atomos.tests.index.bundles/src/test/java/org/apache/felix/atomos/tests/index/bundles/IndexLaunchTest.java
@@ -16,6 +16,7 @@ package org.apache.felix.atomos.tests.index.bundles;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.BufferedReader;
@@ -27,6 +28,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 import org.apache.felix.atomos.impl.runtime.base.AtomosRuntimeBase;
 import org.apache.felix.atomos.launch.AtomosLauncher;
@@ -44,6 +46,7 @@ import org.osgi.framework.Constants;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.launch.Framework;
+import org.osgi.framework.wiring.BundleWiring;
 
 public class IndexLaunchTest
 {
@@ -229,6 +232,66 @@ public class IndexLaunchTest
             URL bundleResource2 = bundle.getEntry("OSGI-INF/bundle." + i + "-2.txt");
             assertNotNull(bundleResource2, "No bundle resource 2 found: " + i);
             assertContent(Integer.toString(i), bundleResource2);
+            assertNull(bundle.getEntry("OSGI-INF/notFound.txt"),
+                "Found unexpected resource.");
+        }
+    }
+
+    @Test
+    void testFindEntriesDefault(@TempDir Path storage) throws BundleException, IOException
+    {
+        doTestFindEntries(storage, null, 1, 2, 3, 4);
+    }
+
+    @Test
+    void testFindEntriesTestIndex(
+        @TempDir Path storage)
+        throws BundleException, IOException
+    {
+        doTestFindEntries(storage, "testIndex/test.index", 3, 4);
+    }
+
+    void doTestFindEntries(@TempDir Path storage, String indexPath,
+        int... expected)
+        throws BundleException, IOException
+    {
+        testFramework = getTestFramework(storage, indexPath);
+        BundleContext bc = testFramework.getBundleContext();
+        assertNotNull(bc, "No context found.");
+        AtomosRuntime runtime = getRuntime(bc);
+
+        for (int i : expected)
+        {
+            AtomosContent content = runtime.getBootLayer().findAtomosContent(
+                "bundle." + i).get();
+            List<String> expectedEntries = List.of( //
+                "/META-INF/", //
+                "/META-INF/MANIFEST.MF", //
+                "/OSGI-INF/", //
+                "/OSGI-INF/common.txt", //
+                "/OSGI-INF/bundle." + i + "-1.txt", //
+                "/OSGI-INF/bundle." + i + "-2.txt", //
+                "/org/", //
+                "/org/apache/", //
+                "/org/apache/felix/", //
+                "/org/apache/felix/atomos/", //
+                "/org/apache/felix/atomos/tests/", //
+                "/org/apache/felix/atomos/tests/index/", //
+                "/org/apache/felix/atomos/tests/index/bundles/", //
+                "/org/apache/felix/atomos/tests/index/bundles/b" + i + "/", //
+                "/org/apache/felix/atomos/tests/index/bundles/b" + i + "/ActivatorBundle" + i + ".class" //
+            );
+            Bundle bundle = content.getBundle();
+            BundleWiring wiring = bundle.adapt(BundleWiring.class);
+            List<URL> entryURLs = wiring.findEntries("/", "*",
+                BundleWiring.FINDENTRIES_RECURSE);
+            List<String> actualEntries = entryURLs.stream().map(
+                URL::getPath).collect(Collectors.toList());
+
+            assertEquals(expectedEntries, actualEntries, "Wrong list of entries.");
+
+            expectedEntries.forEach(
+                e -> assertNotNull(bundle.getEntry(e), "No entry found: " + e));
         }
     }
 
diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/1/OSGI-INF/bundle.1-1.txt b/atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/bundle.1-1.txt
similarity index 100%
rename from atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/1/OSGI-INF/bundle.1-1.txt
rename to atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/bundle.1-1.txt
diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/1/OSGI-INF/bundle.1-2.txt b/atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/bundle.1-2.txt
similarity index 100%
rename from atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/1/OSGI-INF/bundle.1-2.txt
rename to atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/bundle.1-2.txt
diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/2/OSGI-INF/bundle.2-1.txt b/atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/bundle.2-1.txt
similarity index 100%
rename from atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/2/OSGI-INF/bundle.2-1.txt
rename to atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/bundle.2-1.txt
diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/2/OSGI-INF/bundle.2-2.txt b/atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/bundle.2-2.txt
similarity index 100%
rename from atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/2/OSGI-INF/bundle.2-2.txt
rename to atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/bundle.2-2.txt
diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/resources/testIndex/3/OSGI-INF/bundle.3-1.txt b/atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/bundle.3-1.txt
similarity index 100%
rename from atomos.tests/atomos.tests.index.bundles/src/test/resources/testIndex/3/OSGI-INF/bundle.3-1.txt
rename to atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/bundle.3-1.txt
diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/resources/testIndex/3/OSGI-INF/bundle.3-2.txt b/atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/bundle.3-2.txt
similarity index 100%
rename from atomos.tests/atomos.tests.index.bundles/src/test/resources/testIndex/3/OSGI-INF/bundle.3-2.txt
rename to atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/bundle.3-2.txt
diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/resources/testIndex/4/OSGI-INF/bundle.4-1.txt b/atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/bundle.4-1.txt
similarity index 100%
rename from atomos.tests/atomos.tests.index.bundles/src/test/resources/testIndex/4/OSGI-INF/bundle.4-1.txt
rename to atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/bundle.4-1.txt
diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/resources/testIndex/4/OSGI-INF/bundle.4-2.txt b/atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/bundle.4-2.txt
similarity index 100%
rename from atomos.tests/atomos.tests.index.bundles/src/test/resources/testIndex/4/OSGI-INF/bundle.4-2.txt
rename to atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/bundle.4-2.txt
diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/notFound.txt b/atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/notFound.txt
new file mode 100644
index 0000000..f0f48f2
--- /dev/null
+++ b/atomos.tests/atomos.tests.index.bundles/src/test/resources/OSGI-INF/notFound.txt
@@ -0,0 +1 @@
+Should not be found by getEntry
diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/3/OSGI-INF/bundle.3-1.txt b/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/3/OSGI-INF/bundle.3-1.txt
deleted file mode 100644
index e440e5c..0000000
--- a/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/3/OSGI-INF/bundle.3-1.txt
+++ /dev/null
@@ -1 +0,0 @@
-3
\ No newline at end of file
diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/3/OSGI-INF/bundle.3-2.txt b/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/3/OSGI-INF/bundle.3-2.txt
deleted file mode 100644
index e440e5c..0000000
--- a/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/3/OSGI-INF/bundle.3-2.txt
+++ /dev/null
@@ -1 +0,0 @@
-3
\ No newline at end of file
diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/4/OSGI-INF/bundle.4-1.txt b/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/4/OSGI-INF/bundle.4-1.txt
deleted file mode 100644
index bf0d87a..0000000
--- a/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/4/OSGI-INF/bundle.4-1.txt
+++ /dev/null
@@ -1 +0,0 @@
-4
\ No newline at end of file
diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/4/OSGI-INF/bundle.4-2.txt b/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/4/OSGI-INF/bundle.4-2.txt
deleted file mode 100644
index bf0d87a..0000000
--- a/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/4/OSGI-INF/bundle.4-2.txt
+++ /dev/null
@@ -1 +0,0 @@
-4
\ No newline at end of file
diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/bundles.index b/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/bundles.index
index 126c1fc..cb46df9 100644
--- a/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/bundles.index
+++ b/atomos.tests/atomos.tests.index.bundles/src/test/resources/atomos/bundles.index
@@ -2,35 +2,75 @@ ATOMOS_BUNDLE
 1
 bundle.1
 1.0.0
+META-INF/
 META-INF/MANIFEST.MF
+OSGI-INF/
 OSGI-INF/common.txt
 OSGI-INF/bundle.1-1.txt
 OSGI-INF/bundle.1-2.txt
+org/
+org/apache/
+org/apache/felix/
+org/apache/felix/atomos/
+org/apache/felix/atomos/tests/
+org/apache/felix/atomos/tests/index/
+org/apache/felix/atomos/tests/index/bundles/
 org/apache/felix/atomos/tests/index/bundles/b1/
+org/apache/felix/atomos/tests/index/bundles/b1/ActivatorBundle1.class
 ATOMOS_BUNDLE
 2
 bundle.2
 1.0.0
+META-INF/
 META-INF/MANIFEST.MF
+OSGI-INF/
 OSGI-INF/common.txt
 OSGI-INF/bundle.2-1.txt
 OSGI-INF/bundle.2-2.txt
+org/
+org/apache/
+org/apache/felix/
+org/apache/felix/atomos/
+org/apache/felix/atomos/tests/
+org/apache/felix/atomos/tests/index/
+org/apache/felix/atomos/tests/index/bundles/
 org/apache/felix/atomos/tests/index/bundles/b2/
+org/apache/felix/atomos/tests/index/bundles/b2/ActivatorBundle2.class
 ATOMOS_BUNDLE
 3
 bundle.3
 1.0.0
+META-INF/
 META-INF/MANIFEST.MF
+OSGI-INF/
 OSGI-INF/common.txt
 OSGI-INF/bundle.3-1.txt
 OSGI-INF/bundle.3-2.txt
+org/
+org/apache/
+org/apache/felix/
+org/apache/felix/atomos/
+org/apache/felix/atomos/tests/
+org/apache/felix/atomos/tests/index/
+org/apache/felix/atomos/tests/index/bundles/
 org/apache/felix/atomos/tests/index/bundles/b3/
+org/apache/felix/atomos/tests/index/bundles/b3/ActivatorBundle3.class
 ATOMOS_BUNDLE
 4
 bundle.4
 1.0.0
+META-INF/
 META-INF/MANIFEST.MF
+OSGI-INF/
 OSGI-INF/common.txt
 OSGI-INF/bundle.4-1.txt
 OSGI-INF/bundle.4-2.txt
+org/
+org/apache/
+org/apache/felix/
+org/apache/felix/atomos/
+org/apache/felix/atomos/tests/
+org/apache/felix/atomos/tests/index/
+org/apache/felix/atomos/tests/index/bundles/
 org/apache/felix/atomos/tests/index/bundles/b4/
+org/apache/felix/atomos/tests/index/bundles/b4/ActivatorBundle4.class
diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/resources/testIndex/test.index b/atomos.tests/atomos.tests.index.bundles/src/test/resources/testIndex/test.index
index 3fe7e33..66e8d9a 100644
--- a/atomos.tests/atomos.tests.index.bundles/src/test/resources/testIndex/test.index
+++ b/atomos.tests/atomos.tests.index.bundles/src/test/resources/testIndex/test.index
@@ -2,17 +2,37 @@ ATOMOS_BUNDLE
 3
 bundle.3
 1.0.0
+META-INF/
 META-INF/MANIFEST.MF
+OSGI-INF/
 OSGI-INF/common.txt
 OSGI-INF/bundle.3-1.txt
 OSGI-INF/bundle.3-2.txt
+org/
+org/apache/
+org/apache/felix/
+org/apache/felix/atomos/
+org/apache/felix/atomos/tests/
+org/apache/felix/atomos/tests/index/
+org/apache/felix/atomos/tests/index/bundles/
 org/apache/felix/atomos/tests/index/bundles/b3/
+org/apache/felix/atomos/tests/index/bundles/b3/ActivatorBundle3.class
 ATOMOS_BUNDLE
 4
 bundle.4
 1.0.0
+META-INF/
 META-INF/MANIFEST.MF
+OSGI-INF/
 OSGI-INF/common.txt
 OSGI-INF/bundle.4-1.txt
 OSGI-INF/bundle.4-2.txt
+org/
+org/apache/
+org/apache/felix/
+org/apache/felix/atomos/
+org/apache/felix/atomos/tests/
+org/apache/felix/atomos/tests/index/
+org/apache/felix/atomos/tests/index/bundles/
 org/apache/felix/atomos/tests/index/bundles/b4/
+org/apache/felix/atomos/tests/index/bundles/b4/ActivatorBundle4.class