From 8d757d3d12e28543776ded50b750b6df1e33b4c3 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Tue, 11 Jun 2024 13:28:21 -0500 Subject: [PATCH] Add test for empty packages --- .../tests/index/bundles/IndexLaunchTest.java | 53 +++++++++++++------ .../atomos/tests/index/bundles/TestClass.java | 18 +++++++ .../src/test/resources/atomos/bundles.index | 1 + .../src/test/resources/testIndex/test.index | 1 + 4 files changed, 56 insertions(+), 17 deletions(-) create mode 100644 atomos.tests/atomos.tests.index.bundles/src/test/java/org/apache/felix/atomos/tests/index/bundles/TestClass.java 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 80fe0003..5bc58b09 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 @@ -25,7 +25,9 @@ import java.io.InputStreamReader; import java.net.URL; import java.nio.file.Path; +import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -48,11 +50,17 @@ import org.osgi.framework.BundleContext; import org.osgi.framework.BundleException; import org.osgi.framework.Constants; +import org.osgi.framework.FrameworkUtil; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceReference; import org.osgi.framework.Version; import org.osgi.framework.launch.Framework; +import org.osgi.framework.namespace.PackageNamespace; import org.osgi.framework.wiring.BundleWiring; +import org.osgi.framework.wiring.FrameworkWiring; +import org.osgi.resource.Namespace; +import org.osgi.resource.Requirement; +import org.osgi.resource.Resource; public class IndexLaunchTest { @@ -274,23 +282,26 @@ void doTestFindEntries(@TempDir Path storage, String indexPath, { AtomosContent content = runtime.getBootLayer().findAtomosContent( "bundle." + i).get(); - List 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" // - ); + List expectedEntries = new ArrayList<>(); + expectedEntries.add("/META-INF/"); + expectedEntries.add("/META-INF/MANIFEST.MF"); + expectedEntries.add("/OSGI-INF/"); + expectedEntries.add("/OSGI-INF/common.txt"); + expectedEntries.add("/OSGI-INF/bundle." + i + "-1.txt"); + expectedEntries.add("/OSGI-INF/bundle." + i + "-2.txt"); + expectedEntries.add("/org/"); + expectedEntries.add("/org/apache/"); + expectedEntries.add("/org/apache/felix/"); + expectedEntries.add("/org/apache/felix/atomos/"); + expectedEntries.add("/org/apache/felix/atomos/tests/"); + expectedEntries.add("/org/apache/felix/atomos/tests/index/"); + expectedEntries.add("/org/apache/felix/atomos/tests/index/bundles/"); + if (i == 3) { + expectedEntries.add("/org/apache/felix/atomos/tests/index/bundles/TestClass.class"); + } + expectedEntries.add("/org/apache/felix/atomos/tests/index/bundles/b" + i + "/"); + expectedEntries.add("/org/apache/felix/atomos/tests/index/bundles/b" + i + "/ActivatorBundle" + i + ".class"); + Bundle bundle = content.getBundle(); BundleWiring wiring = bundle.adapt(BundleWiring.class); List entryURLs = wiring.findEntries("/", "*", @@ -305,6 +316,14 @@ void doTestFindEntries(@TempDir Path storage, String indexPath, } } + @Test + void testEmptyDirectoryPackages(@TempDir Path storage) throws BundleException { + testFramework = getTestFramework(storage, null); + Bundle b3 = FrameworkUtil.getBundle(TestClass.class); + assertNotNull(b3, "no bundle found."); + assertEquals("bundle.3", b3.getSymbolicName(), "Wrong BSN"); + } + private void assertContent(String expected, URL url) throws IOException { try (BufferedReader br = new BufferedReader( diff --git a/atomos.tests/atomos.tests.index.bundles/src/test/java/org/apache/felix/atomos/tests/index/bundles/TestClass.java b/atomos.tests/atomos.tests.index.bundles/src/test/java/org/apache/felix/atomos/tests/index/bundles/TestClass.java new file mode 100644 index 00000000..432ce92f --- /dev/null +++ b/atomos.tests/atomos.tests.index.bundles/src/test/java/org/apache/felix/atomos/tests/index/bundles/TestClass.java @@ -0,0 +1,18 @@ +/* + * 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. + */ +package org.apache.felix.atomos.tests.index.bundles; + +public class TestClass { + // nothing needed here; just need a class to load +} 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 cb46df9d..018f78e6 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 @@ -53,6 +53,7 @@ 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/TestClass.class org/apache/felix/atomos/tests/index/bundles/b3/ org/apache/felix/atomos/tests/index/bundles/b3/ActivatorBundle3.class ATOMOS_BUNDLE 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 66e8d9a1..d0e0a902 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 @@ -15,6 +15,7 @@ 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/TestClass.class org/apache/felix/atomos/tests/index/bundles/b3/ org/apache/felix/atomos/tests/index/bundles/b3/ActivatorBundle3.class ATOMOS_BUNDLE