From 9c0eeab774895b3c3c9b218f82f71fd7314c388c Mon Sep 17 00:00:00 2001 From: gjoranv Date: Fri, 2 Jun 2023 12:50:17 +0200 Subject: Add test for non-PublicApi usage. --- bundle-plugin-test/integration-test/pom.xml | 7 ++++ .../plugin/NonPublicApiDetectionTest.java | 44 ++++++++++++++++++++++ .../test-bundles/non-public-api-usage/pom.xml | 42 +++++++++++++++++++++ .../UsingBothPublicApiAndNonPublicApiPackages.java | 15 ++++++++ bundle-plugin-test/test-bundles/pom.xml | 1 + 5 files changed, 109 insertions(+) create mode 100644 bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/NonPublicApiDetectionTest.java create mode 100644 bundle-plugin-test/test-bundles/non-public-api-usage/pom.xml create mode 100644 bundle-plugin-test/test-bundles/non-public-api-usage/src/main/java/com/yahoo/test/UsingBothPublicApiAndNonPublicApiPackages.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 7384bf3aea6..acd075d0365 100644 --- a/bundle-plugin-test/integration-test/pom.xml +++ b/bundle-plugin-test/integration-test/pom.xml @@ -56,7 +56,14 @@ bundle ${project.version} + + com.yahoo.vespa.bundle-plugin + non-public-api-usage + bundle + ${project.version} + + 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 new file mode 100644 index 00000000000..42ac99c65e5 --- /dev/null +++ b/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/NonPublicApiDetectionTest.java @@ -0,0 +1,44 @@ +package com.yahoo.container.plugin; + +import org.junit.jupiter.api.BeforeAll; +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.assertTrue; + +/** + * @author gjoranv + */ +public class NonPublicApiDetectionTest { + + private static Set usedNonPublicApi; + + @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()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Test + void usage_of_non_publicApi_packages_is_detected() { + assertEquals(2, usedNonPublicApi.size()); + assertTrue(usedNonPublicApi.contains("ai.vespa.http")); + assertTrue(usedNonPublicApi.contains("com.yahoo.io")); + } + +} 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 new file mode 100644 index 00000000000..4eeac781d43 --- /dev/null +++ b/bundle-plugin-test/test-bundles/non-public-api-usage/pom.xml @@ -0,0 +1,42 @@ + + + + 4.0.0 + + com.yahoo.vespa.bundle-plugin + test-bundles + 8-SNAPSHOT + ../pom.xml + + non-public-api-usage + 8-SNAPSHOT + container-plugin + + + + com.yahoo.vespa + defaults + ${project.version} + provided + + + com.yahoo.vespa + vespajlib + ${project.version} + provided + + + + + + + com.yahoo.vespa + bundle-plugin + true + + + + 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 new file mode 100644 index 00000000000..f2c64661ad6 --- /dev/null +++ b/bundle-plugin-test/test-bundles/non-public-api-usage/src/main/java/com/yahoo/test/UsingBothPublicApiAndNonPublicApiPackages.java @@ -0,0 +1,15 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.test; + +public class UsingBothPublicApiAndNonPublicApiPackages { + + com.yahoo.vespa.defaults.Defaults publicFromDefaults = null; + + com.yahoo.text.BooleanParser publicFromVespajlib = null; + + + ai.vespa.http.DomainName nonPublic1 = null; + + com.yahoo.io.ByteWriter nonPublic2 = null; + +} diff --git a/bundle-plugin-test/test-bundles/pom.xml b/bundle-plugin-test/test-bundles/pom.xml index 3af10826adc..34c6b2e4540 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 + non-public-api-usage main -- cgit v1.2.3