From 7ac829699dc908bd747f97714a1b8fc9a12ded18 Mon Sep 17 00:00:00 2001 From: gjoranv Date: Fri, 9 Jun 2023 16:52:52 +0200 Subject: Add test for non-public api manifest header.. and add new test bundle to avoid depending on proper Vespa bundles. --- bundle-plugin-test/integration-test/pom.xml | 6 +++++ .../com/yahoo/container/plugin/BundleTest.java | 30 +++++++++++++++++---- .../test-bundles/export-packages-lib/pom.xml | 31 ++++++++++++++++++++++ .../java/ai/vespa/lib/non_public/package-info.java | 5 ++++ .../java/ai/vespa/lib/public_api/package-info.java | 7 +++++ .../com/yahoo/lib/non_pubilc/package-info.java | 5 ++++ .../com/yahoo/lib/public_api/package-info.java | 7 +++++ bundle-plugin-test/test-bundles/main/pom.xml | 4 +-- .../java/com/yahoo/non_public/package-info.java | 5 ++++ bundle-plugin-test/test-bundles/pom.xml | 1 + 10 files changed, 94 insertions(+), 7 deletions(-) create mode 100644 bundle-plugin-test/test-bundles/export-packages-lib/pom.xml create mode 100644 bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/non_public/package-info.java create mode 100644 bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/public_api/package-info.java create mode 100644 bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/non_pubilc/package-info.java create mode 100644 bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/public_api/package-info.java create mode 100644 bundle-plugin-test/test-bundles/main/src/main/java/com/yahoo/non_public/package-info.java (limited to 'bundle-plugin-test') 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 @@ -56,6 +56,12 @@ bundle ${project.version} + + com.yahoo.vespa.bundle-plugin + export-packages-lib + bundle + ${project.version} + com.yahoo.vespa.bundle-plugin non-public-api-usage 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/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 @@ + + + + 4.0.0 + + com.yahoo.vespa.bundle-plugin + test-bundles + 8-SNAPSHOT + ../pom.xml + + export-packages-lib + 8-SNAPSHOT + container-plugin + + + + + com.yahoo.vespa + bundle-plugin + true + + + INTERNAL + + + + + 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/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_pubilc/package-info.java b/bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/non_pubilc/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_pubilc/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/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 @@ container-plugin - com.yahoo.vespa - defaults + com.yahoo.vespa.bundle-plugin + export-packages-lib ${project.version} 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/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 @@ artifact-version-for-exports artifact-version-for-exports-dep + export-packages-lib non-public-api-usage main -- cgit v1.2.3