summaryrefslogtreecommitdiffstats
path: root/bundle-plugin-test
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
commit72231250ed81e10d66bfe70701e64fa5fe50f712 (patch)
tree2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /bundle-plugin-test
Publish
Diffstat (limited to 'bundle-plugin-test')
-rw-r--r--bundle-plugin-test/.gitignore2
-rw-r--r--bundle-plugin-test/OWNERS1
-rw-r--r--bundle-plugin-test/pom.xml115
-rw-r--r--bundle-plugin-test/src/main/java/InDefaultPackage.java3
-rw-r--r--bundle-plugin-test/src/main/java/com/yahoo/test/SimpleSearcher.java37
-rw-r--r--bundle-plugin-test/src/main/java/com/yahoo/test/SimpleSearcher2.java12
-rw-r--r--bundle-plugin-test/src/main/java/com/yahoo/test/package-info.java6
-rw-r--r--bundle-plugin-test/src/main/resources/configdefinitions/test.def5
-rw-r--r--bundle-plugin-test/src/test/java/com/yahoo/BundleIT.java138
9 files changed, 319 insertions, 0 deletions
diff --git a/bundle-plugin-test/.gitignore b/bundle-plugin-test/.gitignore
new file mode 100644
index 00000000000..3cc25b51fc4
--- /dev/null
+++ b/bundle-plugin-test/.gitignore
@@ -0,0 +1,2 @@
+/pom.xml.build
+/target
diff --git a/bundle-plugin-test/OWNERS b/bundle-plugin-test/OWNERS
new file mode 100644
index 00000000000..3b2ba1ede81
--- /dev/null
+++ b/bundle-plugin-test/OWNERS
@@ -0,0 +1 @@
+gjoranv
diff --git a/bundle-plugin-test/pom.xml b/bundle-plugin-test/pom.xml
new file mode 100644
index 00000000000..0ca63d82fec
--- /dev/null
+++ b/bundle-plugin-test/pom.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0"?>
+<!-- Copyright 2016 Yahoo Inc. 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</groupId>
+ <artifactId>parent</artifactId>
+ <version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+ <groupId>com.yahoo.container.maven.plugin</groupId>
+ <artifactId>bundle-plugin-test</artifactId>
+ <version>6-SNAPSHOT</version>
+ <packaging>container-plugin</packaging>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>container-dev</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>vespajlib</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.json</groupId>
+ <artifactId>json</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>jrt</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-library</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>scalalib</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.scala-tools</groupId>
+ <artifactId>maven-scala-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>add-source</goal>
+ <goal>compile</goal>
+ <goal>testCompile</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <args>
+ <arg>-unchecked</arg>
+ <arg>-deprecation</arg>
+ <arg>-feature</arg>
+ </args>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>bundle-plugin</artifactId>
+ <version>${project.version}</version>
+ <extensions>true</extensions>
+ <configuration>
+ <Import-Package>
+ manualImport.withoutVersion,
+ manualImport.withVersion;version="12.3.4",
+ multiple.packages.with.the.same.version1;multiple.packages.with.the.same.version2;version="[1,2)"
+ </Import-Package>
+ <WebInfUrl>/WEB-INF/web.xml</WebInfUrl>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <version>2.9</version>
+ <executions>
+ <execution>
+ <id>integration-test</id>
+ <goals>
+ <goal>integration-test</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>verify</id>
+ <goals>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/bundle-plugin-test/src/main/java/InDefaultPackage.java b/bundle-plugin-test/src/main/java/InDefaultPackage.java
new file mode 100644
index 00000000000..64e7bb8a72b
--- /dev/null
+++ b/bundle-plugin-test/src/main/java/InDefaultPackage.java
@@ -0,0 +1,3 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+public class InDefaultPackage {}
diff --git a/bundle-plugin-test/src/main/java/com/yahoo/test/SimpleSearcher.java b/bundle-plugin-test/src/main/java/com/yahoo/test/SimpleSearcher.java
new file mode 100644
index 00000000000..9ddb15c16cb
--- /dev/null
+++ b/bundle-plugin-test/src/main/java/com/yahoo/test/SimpleSearcher.java
@@ -0,0 +1,37 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.test;
+
+import com.yahoo.prelude.hitfield.XMLString;
+import com.yahoo.search.Query;
+import com.yahoo.search.Result;
+import com.yahoo.search.Searcher;
+import com.yahoo.search.result.Hit;
+import com.yahoo.search.searchchain.Execution;
+import com.yahoo.text.BooleanParser;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * A searcher adding a new hit.
+ *
+ * @author Joe Developer
+ */
+public class SimpleSearcher extends Searcher {
+
+ public Result search(Query query,Execution execution) {
+ try {
+ BooleanParser.parseBoolean("true");
+ XMLString xmlString = new XMLString("<sampleXmlString/>");
+
+ Hit hit = new Hit("Hello world!");
+ hit.setField("json", new JSONObject().put("price", 42).toString());
+
+ Result result = execution.search(query);
+ result.hits().add(hit);
+ return result;
+
+ } catch (JSONException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/bundle-plugin-test/src/main/java/com/yahoo/test/SimpleSearcher2.java b/bundle-plugin-test/src/main/java/com/yahoo/test/SimpleSearcher2.java
new file mode 100644
index 00000000000..52211de45ca
--- /dev/null
+++ b/bundle-plugin-test/src/main/java/com/yahoo/test/SimpleSearcher2.java
@@ -0,0 +1,12 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.test;
+
+
+/**
+ * A searcher adding a new hit.
+ * TODO: add annotation check
+ * @author Joe Developer
+ */
+public class SimpleSearcher2 extends SimpleSearcher {
+ public void dummy() {}
+}
diff --git a/bundle-plugin-test/src/main/java/com/yahoo/test/package-info.java b/bundle-plugin-test/src/main/java/com/yahoo/test/package-info.java
new file mode 100644
index 00000000000..8ed830ab7d7
--- /dev/null
+++ b/bundle-plugin-test/src/main/java/com/yahoo/test/package-info.java
@@ -0,0 +1,6 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+@ExportPackage(version = @Version(major = 1, minor = 2, micro = 3, qualifier = "RELEASE"))
+package com.yahoo.test;
+
+import com.yahoo.osgi.annotation.ExportPackage;
+import com.yahoo.osgi.annotation.Version;
diff --git a/bundle-plugin-test/src/main/resources/configdefinitions/test.def b/bundle-plugin-test/src/main/resources/configdefinitions/test.def
new file mode 100644
index 00000000000..ddbde9706e2
--- /dev/null
+++ b/bundle-plugin-test/src/main/resources/configdefinitions/test.def
@@ -0,0 +1,5 @@
+# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+version=1
+namespace=example
+
+exampleKey string default="exampleValue"
diff --git a/bundle-plugin-test/src/test/java/com/yahoo/BundleIT.java b/bundle-plugin-test/src/test/java/com/yahoo/BundleIT.java
new file mode 100644
index 00000000000..f8c205307e8
--- /dev/null
+++ b/bundle-plugin-test/src/test/java/com/yahoo/BundleIT.java
@@ -0,0 +1,138 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo;
+
+import com.yahoo.vespa.scalalib.osgi.maven.ProjectBundleClassPaths;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import scala.collection.JavaConversions;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.Paths;
+import java.util.Collection;
+import java.util.jar.Attributes;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;
+
+import static org.hamcrest.CoreMatchers.allOf;
+import static org.hamcrest.CoreMatchers.endsWith;
+import static org.hamcrest.CoreMatchers.hasItems;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import static org.hamcrest.CoreMatchers.containsString;
+
+/**
+ * Verifies the bundle jar file built and its manifest.
+ * @author tonytv
+ */
+public class BundleIT {
+ private JarFile jarFile;
+ private Attributes mainAttributes;
+
+ @Before
+ public void setup() {
+ try {
+ File componentJar = findBundleJar();
+ jarFile = new JarFile(componentJar);
+ Manifest manifest = jarFile.getManifest();
+ mainAttributes = manifest.getMainAttributes();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private File findBundleJar() {
+ File[] componentFile = new File("target").listFiles(new FilenameFilter() {
+ @Override
+ public boolean accept(File file, String fileName) {
+ return fileName.endsWith("-deploy.jar") || fileName.endsWith("-jar-with-dependencies.jar");
+ }
+ });
+
+ if (componentFile.length != 1) {
+ throw new RuntimeException("Failed finding component jar file");
+ }
+
+ return componentFile[0];
+ }
+
+ @Test
+ @Ignore
+ public void require_that_manifest_version_matches_pom_version() {
+ assertThat(mainAttributes.getValue("Bundle-Version"), is("5.1.0"));
+ }
+
+ @Test
+ public void require_that_bundle_symbolic_name_matches_pom_artifactId() {
+ assertThat(mainAttributes.getValue("Bundle-SymbolicName"), is("bundle-plugin-test"));
+ }
+
+ @Test
+ public void require_that_manifest_contains_inferred_imports() {
+ String importPackage = mainAttributes.getValue("Import-Package");
+ assertThat(importPackage, containsString("com.yahoo.prelude.hitfield"));
+ //Not available from jdisc at the moment, scope temporarily changed to compile.
+ //assertThat(importPackage, containsString("org.json"));
+ }
+
+ @Test
+ public void require_that_manifest_contains_manual_imports() {
+ String importPackage = mainAttributes.getValue("Import-Package");
+
+ assertThat(importPackage, containsString("manualImport.withoutVersion"));
+ assertThat(importPackage, containsString("manualImport.withVersion;version=\"12.3.4\""));
+
+ for (int i=1; i<=2; ++i)
+ assertThat(importPackage, containsString("multiple.packages.with.the.same.version" + i + ";version=\"[1,2)\""));
+ }
+
+ @Test
+ public void require_that_manifest_contains_exports() {
+ String exportPackage = mainAttributes.getValue("Export-Package");
+ assertThat(exportPackage, containsString("com.yahoo.test;version=1.2.3.RELEASE"));
+ }
+
+ @Test
+ public void require_that_manifest_contains_bundle_class_path() {
+ String bundleClassPath = mainAttributes.getValue("Bundle-ClassPath");
+ assertThat(bundleClassPath, containsString(".,"));
+ assertThat(bundleClassPath, containsString("dependencies/jrt-6-SNAPSHOT.jar"));
+ }
+
+ @Test
+ public void require_that_component_jar_file_contains_compile_artifacts() {
+ assertNotNull(jarFile.getEntry("dependencies/jrt-6-SNAPSHOT.jar"));
+ }
+
+
+ @Test
+ public void require_that_web_inf_url_is_propagated_to_the_manifest() {
+ String webInfUrl = mainAttributes.getValue("WebInfUrl");
+ assertThat(webInfUrl, containsString("/WEB-INF/web.xml"));
+ }
+
+ @Test
+ public void bundle_class_path_mappings_are_generated() throws URISyntaxException {
+ URL mappingsUrl = getClass().getResource("/" + ProjectBundleClassPaths.classPathMappingsFileName());
+ assertNotNull(
+ "Could not find " + ProjectBundleClassPaths.classPathMappingsFileName() + " in the test output directory",
+ mappingsUrl);
+
+ ProjectBundleClassPaths bundleClassPaths = ProjectBundleClassPaths.load(Paths.get(mappingsUrl.toURI()));
+
+ assertThat(bundleClassPaths.mainBundle().bundleSymbolicName(), is("bundle-plugin-test"));
+
+ Collection<String> mainBundleClassPaths =
+ JavaConversions.asJavaCollection(bundleClassPaths.mainBundle().classPathElements());
+
+ assertThat(mainBundleClassPaths,
+ hasItems(
+ endsWith("target/classes"),
+ allOf(containsString("jrt"), containsString(".jar"), containsString("m2/repository"))));
+ }
+}