From 2e1407055f1efc5a15dfdf5848b2ee705b13abfb Mon Sep 17 00:00:00 2001 From: arolfes Date: Tue, 21 Mar 2023 13:42:22 +0100 Subject: [PATCH] Closes #2135 replace thorntail with arquillian test in taskana-cdi thorntail is completly removed deploy wildfly locally run wildfly with arquillian deploy ear to wildfly --- lib/taskana-cdi/README.md | 168 ++++ lib/taskana-cdi/pom.xml | 117 ++- .../src/main/resources/META-INF/beans.xml | 3 +- .../common/internal/TaskanaProducersTest.java | 46 +- .../src/test/resources/arquillian.xml | 23 + .../src/test/resources/int-test-jboss-web.xml | 7 + .../test/resources/int-test-standalone.xml | 834 ++++++++++++++++++ lib/taskana-cdi/src/test/resources/module.xml | 13 + .../src/test/resources/project-defaults.yml | 16 - 9 files changed, 1180 insertions(+), 47 deletions(-) create mode 100644 lib/taskana-cdi/README.md create mode 100644 lib/taskana-cdi/src/test/resources/arquillian.xml create mode 100644 lib/taskana-cdi/src/test/resources/int-test-jboss-web.xml create mode 100644 lib/taskana-cdi/src/test/resources/int-test-standalone.xml create mode 100644 lib/taskana-cdi/src/test/resources/module.xml delete mode 100644 lib/taskana-cdi/src/test/resources/project-defaults.yml diff --git a/lib/taskana-cdi/README.md b/lib/taskana-cdi/README.md new file mode 100644 index 000000000..d5a46aa4d --- /dev/null +++ b/lib/taskana-cdi/README.md @@ -0,0 +1,168 @@ +# taskana-cdi + +this module is for EJB deployments. + +## Testing procedure + +1. deploy wildfly server locally +2. replace h2 with latest version +3. start wildfly +4. deploy ear +5. test application + +### deploy wildfly server locally + +we extract the wildfly server into the target directory via maven configuration + +```xml + + org.apache.maven.plugins + maven-dependency-plugin + ${version.maven.dependency} + + + unpack-wildfly + process-test-classes + + unpack + + + + + org.wildfly + wildfly-dist + ${version.wildfly} + zip + false + ${project.build.directory} + + + + + . + . + . + + +``` + +### 2. replace h2 with latest version + +for our tests we need the latest h2 version, so we need to replace the h2 jar in wildfly. + +this happens in 2 steps. + +first extract the dependency into the correct directory + +```xml + + org.apache.maven.plugins + maven-dependency-plugin + ${version.maven.dependency} + + . + . + . + + copy-latest-h2-db-driver + process-test-classes + + copy + + + + + com.h2database + h2 + + ${project.build.directory}/wildfly-${version.wildfly}/modules/system/layers/base/com/h2database/h2/main + + + + + + + +``` + +second step is to copy the `src/test/resources/module.xml` to required directory + +```xml + + org.apache.maven.plugins + maven-resources-plugin + ${version.maven.resources} + + + copy-h2-module-xml + process-test-classes + + copy-resources + + + + ${project.build.directory}/wildfly-${version.wildfly}/modules/system/layers/base/com/h2database/h2/main + + + + src/test/resources + + module.xml + + + + + + + +``` + +### 3. start wildfly + +starting and stopping wildfly happens with [arquillian](https://arquillian.org/) + +```java +@RunWith(Arquillian.class) +public class TaskanaProducersTest {} + +``` + +the file `src/test/resources/arquillian.xml` contains additional server start settings. change vm settings here for remote debugging. + +the file `src/test/resources/int-test-standalone.xml` conatins the wildfly server config. Here are the datasources configured, for example. + +### 4. deploy ear + +create the ear deployment happens inside the testcase + +```java + @Deployment(testable = false) + public static Archive createDeployment() throws Exception { + EnterpriseArchive deployment = ShrinkWrap.create(EnterpriseArchive.class, "taskana.ear"); + + File[] libs = + Maven.resolver() + .loadPomFromFile("pom.xml") + .importRuntimeAndTestDependencies() + .resolve() + .withTransitivity() + .asFile(); + deployment.addAsLibraries(libs); + + JavaArchive ejbModule = ShrinkWrap.create(JavaArchive.class, "taskana.jar"); + ejbModule.addClasses(TaskanaProducers.class, TaskanaEjb.class); + ejbModule.addAsResource("taskana.properties"); + deployment.addAsModule(ejbModule); + + WebArchive webArchive = + ShrinkWrap.create(WebArchive.class, "taskana.war") + .addClasses(TaskanaCdiTestRestController.class, RestApplication.class) + .addAsWebInfResource("beans.xml") + .addAsWebInfResource("int-test-jboss-web.xml", "jboss-web.xml"); + deployment.addAsModule(webArchive); + + deployment.addAsManifestResource("beans.xml"); + return deployment; + } +``` + diff --git a/lib/taskana-cdi/pom.xml b/lib/taskana-cdi/pom.xml index 6c3aa7afd..63ef061a8 100644 --- a/lib/taskana-cdi/pom.xml +++ b/lib/taskana-cdi/pom.xml @@ -14,6 +14,24 @@ ../pom.xml + + + + org.wildfly.bom + wildfly-javaee8 + ${version.wildfly} + import + pom + + + org.jboss.arquillian + arquillian-bom + ${version.arquillian} + import + pom + + + pro.taskana @@ -58,15 +76,8 @@ test - io.thorntail - jaxrs - ${version.thorntail} - test - - - io.thorntail - cdi - ${version.thorntail} + javax.servlet + javax.servlet-api test @@ -75,15 +86,24 @@ test - io.thorntail - arquillian - ${version.thorntail} + org.jboss.arquillian.junit + arquillian-junit-container test - org.jboss.arquillian.junit - arquillian-junit-container - ${version.arquillian} + org.jboss.shrinkwrap.resolver + shrinkwrap-resolver-impl-maven + test + + + org.jboss.shrinkwrap.resolver + shrinkwrap-resolver-api-maven + test + + + org.wildfly.arquillian + wildfly-arquillian-container-managed + 3.0.1.Final test @@ -91,14 +111,73 @@ - io.thorntail - thorntail-maven-plugin - ${version.thorntail} + org.apache.maven.plugins + maven-dependency-plugin + ${version.maven.dependency} + unpack-wildfly + process-test-classes - package + unpack + + + + org.wildfly + wildfly-dist + ${version.wildfly} + zip + false + ${project.build.directory} + + + + + + copy-latest-h2-db-driver + process-test-classes + + copy + + + + + com.h2database + h2 + + ${project.build.directory}/wildfly-${version.wildfly}/modules/system/layers/base/com/h2database/h2/main + + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + ${version.maven.resources} + + + copy-h2-module-xml + process-test-classes + + copy-resources + + + + ${project.build.directory}/wildfly-${version.wildfly}/modules/system/layers/base/com/h2database/h2/main + + + + src/test/resources + + module.xml + + + + diff --git a/lib/taskana-cdi/src/main/resources/META-INF/beans.xml b/lib/taskana-cdi/src/main/resources/META-INF/beans.xml index a2425b8d8..b02d9578c 100644 --- a/lib/taskana-cdi/src/main/resources/META-INF/beans.xml +++ b/lib/taskana-cdi/src/main/resources/META-INF/beans.xml @@ -3,5 +3,6 @@ xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee - http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> + http://java.sun.com/xml/ns/javaee/beans_1_0.xsd" + version="1.2" bean-discovery-mode="all"> diff --git a/lib/taskana-cdi/src/test/java/pro/taskana/common/internal/TaskanaProducersTest.java b/lib/taskana-cdi/src/test/java/pro/taskana/common/internal/TaskanaProducersTest.java index 6f2ba30a3..e438ef42c 100644 --- a/lib/taskana-cdi/src/test/java/pro/taskana/common/internal/TaskanaProducersTest.java +++ b/lib/taskana-cdi/src/test/java/pro/taskana/common/internal/TaskanaProducersTest.java @@ -2,6 +2,7 @@ package pro.taskana.common.internal; import static org.assertj.core.api.Assertions.assertThat; +import java.io.File; import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; @@ -19,15 +20,21 @@ import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.EnterpriseArchive; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; -import org.wildfly.swarm.undertow.WARArchive; +import pro.taskana.RestApplication; +import pro.taskana.TaskanaCdiTestRestController; +import pro.taskana.TaskanaEjb; @RunWith(Arquillian.class) public class TaskanaProducersTest { - private static final String REST_TEST_URL = "http://127.0.0.1:8090/rest/test"; + private static final String REST_TEST_URL = "http://127.0.0.1:8080/taskana/rest/test"; private static final HttpClient HTTP_CLIENT = HttpClient.newBuilder() @@ -37,13 +44,30 @@ public class TaskanaProducersTest { @Deployment(testable = false) public static Archive createDeployment() throws Exception { - WARArchive deployment = ShrinkWrap.create(WARArchive.class); - deployment.addPackage("pro.taskana"); - deployment.addClass(TaskanaProducers.class); - deployment.addAllDependencies(); - deployment.addAsResource("META-INF/beans.xml"); - deployment.addAsResource("taskana.properties"); - deployment.addAsResource("project-defaults.yml"); + EnterpriseArchive deployment = ShrinkWrap.create(EnterpriseArchive.class, "taskana.ear"); + + File[] libs = + Maven.resolver() + .loadPomFromFile("pom.xml") + .importRuntimeAndTestDependencies() + .resolve() + .withTransitivity() + .asFile(); + deployment.addAsLibraries(libs); + + JavaArchive ejbModule = ShrinkWrap.create(JavaArchive.class, "taskana.jar"); + ejbModule.addClasses(TaskanaProducers.class, TaskanaEjb.class); + ejbModule.addAsResource("taskana.properties"); + deployment.addAsModule(ejbModule); + + WebArchive webArchive = + ShrinkWrap.create(WebArchive.class, "taskana.war") + .addClasses(TaskanaCdiTestRestController.class, RestApplication.class) + .addAsWebInfResource("META-INF/beans.xml", "beans.xml") + .addAsWebInfResource("int-test-jboss-web.xml", "jboss-web.xml"); + deployment.addAsModule(webArchive); + + deployment.addAsManifestResource("META-INF/beans.xml", "beans.xml"); return deployment; } @@ -85,8 +109,8 @@ public class TaskanaProducersTest { return DriverManager.getConnection( "jdbc:h2:~/taskana-h2-data/testdb;NON_KEYWORDS=KEY,VALUE;AUTO_SERVER=TRUE;" + "IGNORECASE=TRUE;LOCK_MODE=0", - "SA", - "SA"); + "sa", + ""); } private int countTasksByName(String taskName) throws Exception { diff --git a/lib/taskana-cdi/src/test/resources/arquillian.xml b/lib/taskana-cdi/src/test/resources/arquillian.xml new file mode 100644 index 000000000..e5fd388c3 --- /dev/null +++ b/lib/taskana-cdi/src/test/resources/arquillian.xml @@ -0,0 +1,23 @@ + + + + + target/wildfly-15.0.1.Final + ../../../../src/test/resources/int-test-standalone.xml + + + + + + + + -Dh2.bindAddress=127.0.0.1 + -Djava.util.logging.manager=org.jboss.logmanager.LogManager + + + + \ No newline at end of file diff --git a/lib/taskana-cdi/src/test/resources/int-test-jboss-web.xml b/lib/taskana-cdi/src/test/resources/int-test-jboss-web.xml new file mode 100644 index 000000000..a4c595ccc --- /dev/null +++ b/lib/taskana-cdi/src/test/resources/int-test-jboss-web.xml @@ -0,0 +1,7 @@ + + + /taskana + diff --git a/lib/taskana-cdi/src/test/resources/int-test-standalone.xml b/lib/taskana-cdi/src/test/resources/int-test-standalone.xml new file mode 100644 index 000000000..40c308e41 --- /dev/null +++ b/lib/taskana-cdi/src/test/resources/int-test-standalone.xml @@ -0,0 +1,834 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE; + + h2 + + sa + + + + + jdbc:h2:~/taskana-h2-data/testdb;NON_KEYWORDS=KEY,VALUE;AUTO_SERVER=TRUE;IGNORECASE=TRUE;LOCK_MODE=0 + + h2 + + sa + + + + false + + + + + + org.h2.jdbcx.JdbcDataSource + + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${jboss.bind.address:127.0.0.1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/taskana-cdi/src/test/resources/module.xml b/lib/taskana-cdi/src/test/resources/module.xml new file mode 100644 index 000000000..75ede73ba --- /dev/null +++ b/lib/taskana-cdi/src/test/resources/module.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/lib/taskana-cdi/src/test/resources/project-defaults.yml b/lib/taskana-cdi/src/test/resources/project-defaults.yml deleted file mode 100644 index 30950dd30..000000000 --- a/lib/taskana-cdi/src/test/resources/project-defaults.yml +++ /dev/null @@ -1,16 +0,0 @@ -swarm: - port: - offset: 10 - datasources: - data-sources: - TestDS: - driver-name: myh2 - connection-url: jdbc:h2:~/taskana-h2-data/testdb;NON_KEYWORDS=KEY,VALUE;AUTO_SERVER=TRUE;IGNORECASE=TRUE;LOCK_MODE=0 - user-name: SA - password: SA - jdbc-drivers: - myh2: - driver-class-name: org.h2.Driver - xa-datasource-name: org.h2.jdbcx.JdbcDataSource - driver-module-name: com.h2database.h2 -