diff options
Diffstat (limited to 'bundle-plugin-test')
17 files changed, 129 insertions, 27 deletions
diff --git a/bundle-plugin-test/integration-test/pom.xml b/bundle-plugin-test/integration-test/pom.xml index acd075d0365..57ca134ed05 100644 --- a/bundle-plugin-test/integration-test/pom.xml +++ b/bundle-plugin-test/integration-test/pom.xml @@ -58,6 +58,12 @@ </dependency> <dependency> <groupId>com.yahoo.vespa.bundle-plugin</groupId> + <artifactId>export-packages-lib</artifactId> + <classifier>bundle</classifier> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.yahoo.vespa.bundle-plugin</groupId> <artifactId>non-public-api-usage</artifactId> <classifier>bundle</classifier> <version>${project.version}</version> diff --git a/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/BundleTest.java b/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/BundleTest.java index 673d7d8e09e..a9b482377fa 100644 --- a/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/BundleTest.java +++ b/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/BundleTest.java @@ -10,12 +10,15 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Arrays; import java.util.Enumeration; +import java.util.List; import java.util.jar.Attributes; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.jar.Manifest; import java.util.regex.Pattern; +import java.util.stream.Collectors; import java.util.zip.ZipEntry; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -105,21 +108,38 @@ public class BundleTest { @Test void require_that_manifest_contains_public_api_for_this_bundle_and_embedded_bundles() { - assertEquals("com.yahoo.test,com.yahoo.vespa.defaults", mainAttributes.getValue("X-JDisc-PublicApi-Package")); + var publicApiAttribute = mainAttributes.getValue("X-JDisc-PublicApi-Package"); + assertNotNull(publicApiAttribute); + var publicApi = Arrays.stream(publicApiAttribute.split(",")).collect(Collectors.toSet()); + + var expected = List.of("ai.vespa.lib.public_api", "com.yahoo.lib.public_api", "com.yahoo.test"); + assertEquals(expected.size(), publicApi.size()); + expected.forEach(pkg -> assertTrue(publicApi.contains(pkg), "Public api did not contain %s".formatted(pkg))); } @Test + void require_that_manifest_contains_non_public_api_for_this_bundle_and_embedded_bundles() { + var nonPublicApiAttribute = mainAttributes.getValue("X-JDisc-Non-PublicApi-Export-Package"); + assertNotNull(nonPublicApiAttribute); + var nonPublicApi = Arrays.stream(nonPublicApiAttribute.split(",")).collect(Collectors.toSet()); + + var expected = List.of("ai.vespa.lib.non_public", "com.yahoo.lib.non_public", "com.yahoo.non_public"); + assertEquals(expected.size(), nonPublicApi.size()); + expected.forEach(pkg -> assertTrue(nonPublicApi.contains(pkg), "Non-public api did not contain %s".formatted(pkg))); + } + + @Test void require_that_manifest_contains_bundle_class_path() { String bundleClassPath = mainAttributes.getValue("Bundle-ClassPath"); assertTrue(bundleClassPath.contains(".,")); - Pattern jrtPattern = Pattern.compile("dependencies/defaults" + snapshotOrVersionOrNone); - assertTrue(jrtPattern.matcher(bundleClassPath).find(), "Bundle class path did not contain 'defaults''."); + Pattern jrtPattern = Pattern.compile("dependencies/export-packages-lib" + snapshotOrVersionOrNone); + assertTrue(jrtPattern.matcher(bundleClassPath).find(), "Bundle class path did not contain 'export-packages-lib''."); } @Test void require_that_component_jar_file_contains_compile_artifacts() { - String requiredDep = "dependencies/defaults"; + String requiredDep = "dependencies/export-packages-lib"; Pattern depPattern = Pattern.compile(requiredDep + snapshotOrVersionOrNone); ZipEntry depEntry = null; @@ -133,7 +153,7 @@ public class BundleTest { } } } - assertNotNull(depEntry, "Component jar file did not contain 'defaults' dependency."); + assertNotNull(depEntry, "Component jar file did not contain 'export-packages-lib' dependency."); } diff --git a/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/NonPublicApiDetectionTest.java b/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/NonPublicApiDetectionTest.java index 42ac99c65e5..9111cd00f82 100644 --- a/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/NonPublicApiDetectionTest.java +++ b/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/NonPublicApiDetectionTest.java @@ -6,13 +6,13 @@ import org.junit.jupiter.api.Test; import java.io.File; import java.io.IOException; import java.util.Arrays; -import java.util.Set; import java.util.jar.Attributes; import java.util.jar.JarFile; import java.util.stream.Collectors; import static com.yahoo.container.plugin.BundleTest.findBundleJar; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; /** @@ -20,15 +20,13 @@ import static org.junit.jupiter.api.Assertions.assertTrue; */ public class NonPublicApiDetectionTest { - private static Set<String> usedNonPublicApi; + private static Attributes mainAttributes; @BeforeAll public static void setup() { try { File componentJar = findBundleJar("non-public-api-usage"); - Attributes mainAttributes = new JarFile(componentJar).getManifest().getMainAttributes(); - var nonPublicApiAttribute = mainAttributes.getValue("X-JDisc-Non-PublicApi-Import-Package"); - usedNonPublicApi = Arrays.stream(nonPublicApiAttribute.split(",")).collect(Collectors.toSet()); + mainAttributes = new JarFile(componentJar).getManifest().getMainAttributes(); } catch (IOException e) { throw new RuntimeException(e); } @@ -36,9 +34,13 @@ public class NonPublicApiDetectionTest { @Test void usage_of_non_publicApi_packages_is_detected() { + var nonPublicApiAttribute = mainAttributes.getValue("X-JDisc-Non-PublicApi-Import-Package"); + assertNotNull(nonPublicApiAttribute); + var usedNonPublicApi = Arrays.stream(nonPublicApiAttribute.split(",")).collect(Collectors.toSet()); + assertEquals(2, usedNonPublicApi.size()); - assertTrue(usedNonPublicApi.contains("ai.vespa.http")); - assertTrue(usedNonPublicApi.contains("com.yahoo.io")); + assertTrue(usedNonPublicApi.contains("ai.vespa.lib.non_public")); + assertTrue(usedNonPublicApi.contains("com.yahoo.lib.non_public")); } } diff --git a/bundle-plugin-test/test-bundles/export-packages-lib/pom.xml b/bundle-plugin-test/test-bundles/export-packages-lib/pom.xml new file mode 100644 index 00000000000..09eedda0b98 --- /dev/null +++ b/bundle-plugin-test/test-bundles/export-packages-lib/pom.xml @@ -0,0 +1,31 @@ +<?xml version="1.0"?> +<!-- Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. --> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 + http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.yahoo.vespa.bundle-plugin</groupId> + <artifactId>test-bundles</artifactId> + <version>8-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>export-packages-lib</artifactId> + <version>8-SNAPSHOT</version> + <packaging>container-plugin</packaging> + + <build> + <plugins> + <plugin> + <groupId>com.yahoo.vespa</groupId> + <artifactId>bundle-plugin</artifactId> + <extensions>true</extensions> + <configuration> + <!-- Must be an internal bundle to get manifest header for non-public export packages --> + <bundleType>INTERNAL</bundleType> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/non_public/Foo.java b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/non_public/Foo.java new file mode 100644 index 00000000000..60c9692cba7 --- /dev/null +++ b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/non_public/Foo.java @@ -0,0 +1,5 @@ +package ai.vespa.lib.non_public; + +public interface Foo { + +} diff --git a/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/non_public/package-info.java b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/non_public/package-info.java new file mode 100644 index 00000000000..18841cf6f37 --- /dev/null +++ b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/non_public/package-info.java @@ -0,0 +1,5 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +@ExportPackage +package ai.vespa.lib.non_public; + +import com.yahoo.osgi.annotation.ExportPackage; diff --git a/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/public_api/Foo.java b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/public_api/Foo.java new file mode 100644 index 00000000000..cd3b5a2d065 --- /dev/null +++ b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/public_api/Foo.java @@ -0,0 +1,5 @@ +package ai.vespa.lib.public_api; + +public interface Foo { + +} diff --git a/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/public_api/package-info.java b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/public_api/package-info.java new file mode 100644 index 00000000000..c586faf6bb6 --- /dev/null +++ b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/public_api/package-info.java @@ -0,0 +1,7 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +@ExportPackage +@PublicApi +package ai.vespa.lib.public_api; + +import com.yahoo.api.annotations.PublicApi; +import com.yahoo.osgi.annotation.ExportPackage; diff --git a/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/non_public/Foo.java b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/non_public/Foo.java new file mode 100644 index 00000000000..3f8c4540d75 --- /dev/null +++ b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/non_public/Foo.java @@ -0,0 +1,5 @@ +package com.yahoo.lib.non_public; + +public interface Foo { + +} diff --git a/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/non_public/package-info.java b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/non_public/package-info.java new file mode 100644 index 00000000000..a3368af200c --- /dev/null +++ b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/non_public/package-info.java @@ -0,0 +1,5 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +@ExportPackage +package com.yahoo.lib.non_public; + +import com.yahoo.osgi.annotation.ExportPackage; diff --git a/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/public_api/Foo.java b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/public_api/Foo.java new file mode 100644 index 00000000000..623783d0c01 --- /dev/null +++ b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/public_api/Foo.java @@ -0,0 +1,5 @@ +package com.yahoo.lib.public_api; + +public interface Foo { + +} diff --git a/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/public_api/package-info.java b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/public_api/package-info.java new file mode 100644 index 00000000000..b0ff91eb53e --- /dev/null +++ b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/public_api/package-info.java @@ -0,0 +1,7 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +@ExportPackage +@PublicApi +package com.yahoo.lib.public_api; + +import com.yahoo.api.annotations.PublicApi; +import com.yahoo.osgi.annotation.ExportPackage; diff --git a/bundle-plugin-test/test-bundles/main/pom.xml b/bundle-plugin-test/test-bundles/main/pom.xml index a6cf45947f3..18963343283 100644 --- a/bundle-plugin-test/test-bundles/main/pom.xml +++ b/bundle-plugin-test/test-bundles/main/pom.xml @@ -16,8 +16,8 @@ <packaging>container-plugin</packaging> <dependencies> <dependency> - <groupId>com.yahoo.vespa</groupId> - <artifactId>defaults</artifactId> + <groupId>com.yahoo.vespa.bundle-plugin</groupId> + <artifactId>export-packages-lib</artifactId> <version>${project.version}</version> </dependency> <dependency> diff --git a/bundle-plugin-test/test-bundles/main/src/main/java/com/yahoo/non_public/package-info.java b/bundle-plugin-test/test-bundles/main/src/main/java/com/yahoo/non_public/package-info.java new file mode 100644 index 00000000000..143bb7b5c86 --- /dev/null +++ b/bundle-plugin-test/test-bundles/main/src/main/java/com/yahoo/non_public/package-info.java @@ -0,0 +1,5 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +@ExportPackage +package com.yahoo.non_public; + +import com.yahoo.osgi.annotation.ExportPackage; diff --git a/bundle-plugin-test/test-bundles/non-public-api-usage/pom.xml b/bundle-plugin-test/test-bundles/non-public-api-usage/pom.xml index 5386346b8f7..2a621fd97c2 100644 --- a/bundle-plugin-test/test-bundles/non-public-api-usage/pom.xml +++ b/bundle-plugin-test/test-bundles/non-public-api-usage/pom.xml @@ -17,14 +17,8 @@ <dependencies> <dependency> - <groupId>com.yahoo.vespa</groupId> - <artifactId>defaults</artifactId> - <version>${project.version}</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>com.yahoo.vespa</groupId> - <artifactId>vespajlib</artifactId> + <groupId>com.yahoo.vespa.bundle-plugin</groupId> + <artifactId>export-packages-lib</artifactId> <version>${project.version}</version> <scope>provided</scope> </dependency> diff --git a/bundle-plugin-test/test-bundles/non-public-api-usage/src/main/java/com/yahoo/test/UsingBothPublicApiAndNonPublicApiPackages.java b/bundle-plugin-test/test-bundles/non-public-api-usage/src/main/java/com/yahoo/test/UsingBothPublicApiAndNonPublicApiPackages.java index f2c64661ad6..7bea3252ea5 100644 --- a/bundle-plugin-test/test-bundles/non-public-api-usage/src/main/java/com/yahoo/test/UsingBothPublicApiAndNonPublicApiPackages.java +++ b/bundle-plugin-test/test-bundles/non-public-api-usage/src/main/java/com/yahoo/test/UsingBothPublicApiAndNonPublicApiPackages.java @@ -3,13 +3,12 @@ package com.yahoo.test; public class UsingBothPublicApiAndNonPublicApiPackages { - com.yahoo.vespa.defaults.Defaults publicFromDefaults = null; + ai.vespa.lib.non_public.Foo non_public_ai_vespa = null; - com.yahoo.text.BooleanParser publicFromVespajlib = null; + ai.vespa.lib.public_api.Foo public_ai_vespa = null; + com.yahoo.lib.non_public.Foo non_public_com_yahoo = null; - ai.vespa.http.DomainName nonPublic1 = null; - - com.yahoo.io.ByteWriter nonPublic2 = null; + com.yahoo.lib.public_api.Foo public_com_yahoo = null; } diff --git a/bundle-plugin-test/test-bundles/pom.xml b/bundle-plugin-test/test-bundles/pom.xml index 34c6b2e4540..71c0e549be6 100644 --- a/bundle-plugin-test/test-bundles/pom.xml +++ b/bundle-plugin-test/test-bundles/pom.xml @@ -50,6 +50,7 @@ <modules> <module>artifact-version-for-exports</module> <module>artifact-version-for-exports-dep</module> + <module>export-packages-lib</module> <module>non-public-api-usage</module> <module>main</module> </modules> |