diff --git a/jkube-kit/generator/webapp/pom.xml b/jkube-kit/generator/webapp/pom.xml
index 946e7c2323..b69055c60c 100644
--- a/jkube-kit/generator/webapp/pom.xml
+++ b/jkube-kit/generator/webapp/pom.xml
@@ -44,6 +44,11 @@
junit-jupiter-engine
test
+
+ org.junit.jupiter
+ junit-jupiter-params
+ test
+
org.assertj
assertj-core
diff --git a/jkube-kit/generator/webapp/src/test/java/org/eclipse/jkube/generator/webapp/AppServerAutoDetectionTest.java b/jkube-kit/generator/webapp/src/test/java/org/eclipse/jkube/generator/webapp/AppServerAutoDetectionTest.java
index 7f252867db..ad913ee33b 100644
--- a/jkube-kit/generator/webapp/src/test/java/org/eclipse/jkube/generator/webapp/AppServerAutoDetectionTest.java
+++ b/jkube-kit/generator/webapp/src/test/java/org/eclipse/jkube/generator/webapp/AppServerAutoDetectionTest.java
@@ -13,17 +13,22 @@
*/
package org.eclipse.jkube.generator.webapp;
-import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.Collections;
+import java.util.stream.Stream;
import org.eclipse.jkube.generator.api.GeneratorContext;
+import org.eclipse.jkube.generator.webapp.handler.TomcatAppSeverHandler;
import org.eclipse.jkube.kit.common.JavaProject;
import org.eclipse.jkube.kit.common.Plugin;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
import static org.assertj.core.api.Assertions.assertThat;
@@ -36,136 +41,118 @@ class AppServerAutoDetectionTest {
@TempDir
Path folder;
- @Test
- void isWildFly() throws Exception {
- Object[] descriptorNames = new Object[] {
- "WEB-INF/jboss-deployment-structure.xml", true,
- "META-INF/jboss-deployment-structure.xml", true,
- "WEB-INF/jboss-web.xml", true,
- "WEB-INF/ejb-jar.xml", true,
- "WEB-INF/jboss-ejb3.xml", true,
- "META-INF/persistence.xml", true,
- "META-INF/foo-jms.xml", true,
- "WEB-INF/bar-jms.xml", true,
- "META-INF/my-datasource-ds.xml", true,
- "WEB-INF/my-datasource-ds.xml", true,
- "WEB-INF/jboss-ejb-client.xml", true,
- "META-INF/jbosscmp-jdbc.xml", true,
- "WEB-INF/jboss-webservices.xml", true,
- "META-INF/non-existent-descriptor.xml", false,
- };
-
- Object[] pluginNames = new Object[] {
- "org.jboss.as.plugins:jboss-as-maven-plugin", true,
- "org.wildfly.plugins:wildfly-maven-plugin", true,
- "org.wildfly.swarm:wildfly-swarm-plugin", false,
- "io.thorntail:thorntail-maven-plugin", false,
- "org.wildfly.plugins:wildfly-jar-maven-plugin", false,
- };
-
- assertAppServerDescriptorApplicability(descriptorNames);
- assertPluginApplicability(pluginNames);
- }
-
- @Test
- void isTomcat() throws Exception {
- Object[] descriptorNames = new Object[] {
- "META-INF/context.xml", true,
- "META-INF/non-existent-descriptor.xml", false,
- };
-
- Object[] pluginNames = new Object[] {
- "org.apache.tomcat.maven:tomcat6-maven-plugin", true,
- "org.apache.tomcat.maven:tomcat7-maven-plugin", true,
- };
-
- assertAppServerDescriptorApplicability(descriptorNames);
- assertPluginApplicability(pluginNames);
- }
+ @ParameterizedTest(name = "{index}: with ''{1}'' descriptor file should return ''{0}'' handler")
+ @MethodSource("descriptorFiles")
+ void detect_withDescriptorFiles_shouldReturnApplicableHandler(String handlerName, Path relativeDescriptor) throws IOException {
+ final Path descriptor = folder.resolve("webapp").resolve(relativeDescriptor);
+ final Path xxxInf = descriptor.getParent();
+ Files.createDirectories(descriptor.getParent());
+ Files.createFile(descriptor);
+
+ GeneratorContext generatorContext = GeneratorContext.builder().project(JavaProject.builder()
+ .buildDirectory(xxxInf.toFile())
+ .build()).build();
+
+ AppServerHandler appServerHandler = new AppServerDetector(generatorContext).detect(null);
+ assertThat(appServerHandler)
+ .hasFieldOrPropertyWithValue("name", handlerName)
+ .returns(true, AppServerHandler::isApplicable);
+ }
+
+ static Stream descriptorFiles() {
+ return Stream.of(
+ Arguments.arguments("wildfly", Paths.get("WEB-INF", "jboss-deployment-structure.xml")),
+ Arguments.arguments("wildfly", Paths.get("META-INF", "jboss-deployment-structure.xml")),
+ Arguments.arguments("wildfly", Paths.get("WEB-INF", "jboss-web.xml")),
+ Arguments.arguments("wildfly", Paths.get("WEB-INF", "ejb-jar.xml")),
+ Arguments.arguments("wildfly", Paths.get("WEB-INF", "jboss-ejb3.xml")),
+ Arguments.arguments("wildfly", Paths.get("META-INF", "persistence.xml")),
+ Arguments.arguments("wildfly", Paths.get("META-INF", "foo-jms.xml")),
+ Arguments.arguments("wildfly", Paths.get("WEB-INF", "bar-jms.xml")),
+ Arguments.arguments("wildfly", Paths.get("META-INF", "my-datasource-ds.xml")),
+ Arguments.arguments("wildfly", Paths.get("WEB-INF", "my-datasource-ds.xml")),
+ Arguments.arguments("wildfly", Paths.get("WEB-INF", "jboss-ejb-client.xml")),
+ Arguments.arguments("wildfly", Paths.get("META-INF", "jbosscmp-jdbc.xml")),
+ Arguments.arguments("wildfly", Paths.get("WEB-INF", "jboss-webservices.xml")),
+ Arguments.arguments("tomcat", Paths.get("META-INF", "context.xml")),
+ Arguments.arguments("jetty", Paths.get("META-INF", "jetty-logging.properties")),
+ Arguments.arguments("jetty", Paths.get("WEB-INF", "jetty-web.xml"))
+ );
+ }
+
+ @ParameterizedTest(name = "{index}: with ''{1}:{2}:1.0.0'' plugin should return ''{0}'' handler")
+ @MethodSource("plugins")
+ void detect_withPlugin_shouldReturnApplicableHandler(String handlerName, String groupId, String artifactId) {
+ GeneratorContext generatorContext = GeneratorContext.builder().project(JavaProject.builder()
+ .buildDirectory(folder.toFile())
+ .plugins(Collections.singletonList(Plugin.builder()
+ .groupId(groupId).artifactId(artifactId).version("1.0.0")
+ .build()))
+ .build()).build();
+ AppServerHandler appServerHandler = new AppServerDetector(generatorContext).detect(null);
+ assertThat(appServerHandler)
+ .hasFieldOrPropertyWithValue("name", handlerName)
+ .returns(true, AppServerHandler::isApplicable);
+ }
+
+ static Stream plugins() {
+ return Stream.of(
+ Arguments.arguments("wildfly", "org.jboss.as.plugins", "jboss-as-maven-plugin"),
+ Arguments.arguments("wildfly", "org.wildfly.plugins", "wildfly-maven-plugin"),
+ Arguments.arguments("tomcat", "org.apache.tomcat.maven", "tomcat6-maven-plugin"),
+ Arguments.arguments("tomcat", "org.apache.tomcat.maven", "tomcat7-maven-plugin"),
+ Arguments.arguments("jetty", "org.mortbay.jetty", "jetty-maven-plugin"),
+ Arguments.arguments("jetty", "org.eclipse.jetty", "jetty-maven-plugin")
+ );
+ }
@Test
void detect_withSpecifiedServer_shouldReturnSpecifiedServer() {
GeneratorContext generatorContext = GeneratorContext.builder().project(JavaProject.builder().build()).build();
- AppServerHandler appServerHandler = new AppServerDetector(generatorContext).detect("tomcat");
- assertThat(appServerHandler.getName()).isEqualTo("tomcat");
+ AppServerHandler appServerHandler = new AppServerDetector(generatorContext).detect("wildfly");
+ assertThat(appServerHandler.getName()).isEqualTo("wildfly");
}
-
@Test
- void isJetty() throws Exception {
- Object[] descriptorNames = new Object[] {
- "META-INF/jetty-logging.properties", true,
- "WEB-INF/jetty-web.xml", true,
- "META-INF/non-existent-descriptor.xml", false,
- };
-
- Object[] pluginNames = new Object[] {
- "org.mortbay.jetty:jetty-maven-plugin", true,
- "org.eclipse.jetty:jetty-maven-plugin", true,
- };
-
- assertAppServerDescriptorApplicability(descriptorNames);
- assertPluginApplicability(pluginNames);
- }
+ void detect_withNotApplicableDescriptor_shouldReturnDefaultServer() throws IOException {
+ final Path descriptor = folder.resolve("webapp").resolve("META-INF").resolve("not-valid-descriptor.xml");
+ final Path xxxInf = descriptor.getParent();
+ Files.createDirectories(descriptor.getParent());
+ Files.createFile(descriptor);
- @Test
- void detect_withDefaultServer_shouldReturnTomcat() throws IOException {
- File appDir = Files.createDirectory(folder.resolve("webapp")).toFile();
- GeneratorContext generatorContext = GeneratorContext.builder().project(JavaProject.builder()
- .buildDirectory(appDir)
- .plugins(Collections.singletonList(Plugin.builder()
- .groupId("org.apache.tomcat.maven")
- .artifactId("org.apache.tomcat.maven")
- .version("testversion")
- .configuration(Collections.emptyMap()).build()))
- .build()).build();
+ GeneratorContext generatorContext = GeneratorContext.builder().project(JavaProject.builder()
+ .buildDirectory(xxxInf.toFile())
+ .build()).build();
AppServerHandler appServerHandler = new AppServerDetector(generatorContext).detect(null);
- assertThat(appServerHandler.getName()).isEqualTo("tomcat");
+ assertThat(appServerHandler)
+ .isInstanceOf(TomcatAppSeverHandler.class)
+ .hasFieldOrPropertyWithValue("name", "tomcat")
+ .returns(false, AppServerHandler::isApplicable);
}
- private void assertAppServerDescriptorApplicability(Object[] descriptors) throws IOException {
- for (int i = 0; i < descriptors.length; i += 2) {
- String[] descriptor = descriptors[i].toString().split("/");
- String appDir = descriptor[0];
- String file = descriptor[1];
- boolean expected = (boolean) descriptors[i + 1];
-
- Path webInf = Files.createDirectories(folder.resolve("webapp" + i).resolve(appDir));
- Files.createFile(webInf.resolve(file));
-
- GeneratorContext generatorContext = GeneratorContext.builder().project(JavaProject.builder()
- .buildDirectory(webInf.toFile())
- .plugins(Collections.emptyList())
- .build()).build();
-
- AppServerHandler appServerHandler = new AppServerDetector(generatorContext).detect(null);
-
- String message = String.format("Expected descriptor %s to make isApplicable() return %s", descriptor, expected);
- assertThat(appServerHandler.isApplicable()).as(message).isEqualTo(expected);
- }
- }
-
- private void assertPluginApplicability(Object[] plugins) {
- for (int i = 0; i < plugins.length; i += 2) {
- String[] pluginCoordinate = plugins[i].toString().split(":");
- String groupId = pluginCoordinate[0];
- String artifactId = pluginCoordinate[1];
- boolean expected = (boolean) plugins[i + 1];
-
- GeneratorContext generatorContext = GeneratorContext.builder().project(JavaProject.builder()
- .buildDirectory(folder.toFile())
- .plugins(Collections.singletonList(Plugin.builder()
- .groupId(groupId).artifactId(artifactId)
- .version("testversion")
- .configuration(Collections.emptyMap()).build()))
- .build()).build();
-
- AppServerHandler appServerHandler = new AppServerDetector(generatorContext).detect(null);
-
- String message = String.format("Expected plugin %s to make isApplicable() return %s", pluginCoordinate, expected);
- assertThat(appServerHandler.isApplicable()).as(message).isEqualTo(expected);
- }
- }
+ @ParameterizedTest(name = "{index}: with ''{0}:{1}:1.0.0'' plugin should return tomcat handler")
+ @MethodSource("notApplicablePlugins")
+ void detect_withNotApplicablePlugin_shouldReturnDefaultServer(String groupId, String artifactId) {
+ GeneratorContext generatorContext = GeneratorContext.builder().project(JavaProject.builder()
+ .buildDirectory(folder.toFile())
+ .plugins(Collections.singletonList(Plugin.builder()
+ .groupId(groupId).artifactId(artifactId).version("1.0.0")
+ .build()))
+ .build()).build();
+ AppServerHandler appServerHandler = new AppServerDetector(generatorContext).detect(null);
+ assertThat(appServerHandler)
+ .isInstanceOf(TomcatAppSeverHandler.class)
+ .hasFieldOrPropertyWithValue("name", "tomcat")
+ .returns(false, AppServerHandler::isApplicable);
+ }
+
+ static Stream notApplicablePlugins() {
+ return Stream.of(
+ Arguments.arguments("org.wildfly.swarm", "wildfly-swarm-plugin"),
+ Arguments.arguments("io.thorntail", "thorntail-maven-plugin"),
+ Arguments.arguments("org.wildfly.plugins", "wildfly-jar-maven-plugin")
+ );
+ }
}