summaryrefslogtreecommitdiffstats
path: root/bundle-plugin-test
diff options
context:
space:
mode:
Diffstat (limited to 'bundle-plugin-test')
-rw-r--r--bundle-plugin-test/integration-test/pom.xml6
-rw-r--r--bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/BundleTest.java30
-rw-r--r--bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/NonPublicApiDetectionTest.java16
-rw-r--r--bundle-plugin-test/test-bundles/export-packages-lib/pom.xml31
-rw-r--r--bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/non_public/Foo.java5
-rw-r--r--bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/non_public/package-info.java5
-rw-r--r--bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/public_api/Foo.java5
-rw-r--r--bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/ai/vespa/lib/public_api/package-info.java7
-rw-r--r--bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/non_public/Foo.java5
-rw-r--r--bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/non_public/package-info.java5
-rw-r--r--bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/public_api/Foo.java5
-rw-r--r--bundle-plugin-test/test-bundles/export-packages-lib/src/main/java/com/yahoo/lib/public_api/package-info.java7
-rw-r--r--bundle-plugin-test/test-bundles/main/pom.xml4
-rw-r--r--bundle-plugin-test/test-bundles/main/src/main/java/com/yahoo/non_public/package-info.java5
-rw-r--r--bundle-plugin-test/test-bundles/non-public-api-usage/pom.xml10
-rw-r--r--bundle-plugin-test/test-bundles/non-public-api-usage/src/main/java/com/yahoo/test/UsingBothPublicApiAndNonPublicApiPackages.java9
-rw-r--r--bundle-plugin-test/test-bundles/pom.xml1
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>