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