Repository: tomee Updated Branches: refs/heads/master 50c0d734b -> f0718d1ad
TOMEE-1926 TomEEEmbeddedSingleRunner programmatic configuration Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/f0718d1a Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/f0718d1a Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/f0718d1a Branch: refs/heads/master Commit: f0718d1adac7f9c51f5026235be249717e681d7f Parents: 50c0d73 Author: Romain manni-Bucau <rmannibu...@gmail.com> Authored: Fri Sep 9 20:16:58 2016 +0200 Committer: Romain manni-Bucau <rmannibu...@gmail.com> Committed: Fri Sep 9 20:18:15 2016 +0200 ---------------------------------------------------------------------- tomee/tomee-embedded/pom.xml | 28 ++++++++++++++++++++ .../junit/TomEEEmbeddedSingleRunner.java | 21 +++++++++++++-- .../embedded/SingleInstanceRunnerTest.java | 11 +++++++- 3 files changed, 57 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/f0718d1a/tomee/tomee-embedded/pom.xml ---------------------------------------------------------------------- diff --git a/tomee/tomee-embedded/pom.xml b/tomee/tomee-embedded/pom.xml index d66d7dc..19fd351 100644 --- a/tomee/tomee-embedded/pom.xml +++ b/tomee/tomee-embedded/pom.xml @@ -200,6 +200,34 @@ </filters> </configuration> </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <executions> + <execution> + <id>default-test</id> + <goals> + <goal>test</goal> + </goals> + <configuration> + <excludes> + <exclude>**/SingleInstanceRunnerTest*</exclude> + </excludes> + </configuration> + </execution> + <execution> + <id>single-server</id> + <goals> + <goal>test</goal> + </goals> + <configuration> + <includes> + <include>**/SingleInstanceRunnerTest*</include> + </includes> + </configuration> + </execution> + </executions> + </plugin> </plugins> </build> http://git-wip-us.apache.org/repos/asf/tomee/blob/f0718d1a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/junit/TomEEEmbeddedSingleRunner.java ---------------------------------------------------------------------- diff --git a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/junit/TomEEEmbeddedSingleRunner.java b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/junit/TomEEEmbeddedSingleRunner.java index 4a7f5fc..fd3d824 100644 --- a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/junit/TomEEEmbeddedSingleRunner.java +++ b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/junit/TomEEEmbeddedSingleRunner.java @@ -16,7 +16,6 @@ */ package org.apache.tomee.embedded.junit; -import org.apache.openejb.config.sys.Openejb; import org.apache.openejb.testing.Application; import org.apache.openejb.testing.Classes; import org.apache.openejb.testing.ContainerProperties; @@ -198,7 +197,6 @@ public class TomEEEmbeddedSingleRunner extends BlockJUnit4ClassRunner { } } - Openejb openejb = null; final List<Method> annotatedMethods = finder.findAnnotatedMethods(org.apache.openejb.testing.Configuration.class); if (annotatedMethods.size() > 1) { throw new IllegalArgumentException("Only one @Configuration is supported: " + annotatedMethods); @@ -244,9 +242,18 @@ public class TomEEEmbeddedSingleRunner extends BlockJUnit4ClassRunner { configuration.randomHttpPort(); } + // at least after LifecycleTasks to inherit from potential states (system properties to get a port etc...) + final Configurers configurers = appClass.getAnnotation(Configurers.class); + if (tasks != null) { + for (final Class<? extends Configurer> type : configurers.value()) { + type.newInstance().configure(configuration); + } + } + final Classes classes = appClass.getAnnotation(Classes.class); String context = classes != null ? classes.context() : ""; context = !context.isEmpty() && context.startsWith("/") ? context.substring(1) : context; + // TODO: potentially respect classes() giving to deployClasspath a built Finder final WebResource resources = appClass.getAnnotation(WebResource.class); if (resources != null && resources.value().length > 1) { @@ -382,4 +389,14 @@ public class TomEEEmbeddedSingleRunner extends BlockJUnit4ClassRunner { public @interface LifecycleTasks { Class<? extends org.apache.tomee.embedded.LifecycleTask>[] value(); } + + @Retention(RUNTIME) + @Target(TYPE) + public @interface Configurers { + Class<? extends Configurer>[] value(); + } + + public interface Configurer { + void configure(Configuration configuration); + } } http://git-wip-us.apache.org/repos/asf/tomee/blob/f0718d1a/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SingleInstanceRunnerTest.java ---------------------------------------------------------------------- diff --git a/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SingleInstanceRunnerTest.java b/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SingleInstanceRunnerTest.java index 295d7cc..94031ea 100644 --- a/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SingleInstanceRunnerTest.java +++ b/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SingleInstanceRunnerTest.java @@ -40,7 +40,7 @@ import static org.junit.Assert.assertTrue; // just a manual test to check it works, can't be executed with the rest of the suite, // we could use a different surefire execution if we want to add it to the default run -@Ignore("can't run with by test containers") +//@Ignore("can't run with by test containers") @RunWith(TomEEEmbeddedSingleRunner.class) public class SingleInstanceRunnerTest { @Application // app can have several injections/helpers @@ -55,6 +55,7 @@ public class SingleInstanceRunnerTest { assertEquals("set", SystemInstance.get().getProperty("t")); assertEquals("p", SystemInstance.get().getProperty("prog")); assertEquals("128463", SystemInstance.get().getProperty("my.server.port")); + assertEquals("true", SystemInstance.get().getProperty("configurer")); assertNotEquals(8080, app.port); assertTrue(app.base.toExternalForm().endsWith("/app")); assertEquals(app.port, port); @@ -64,6 +65,7 @@ public class SingleInstanceRunnerTest { @Classes(context = "app") @ContainerProperties(@ContainerProperties.Property(name = "t", value = "set")) @TomEEEmbeddedSingleRunner.LifecycleTasks(MyTask.class) // can start a ftp/sftp/elasticsearch/mongo/... server before tomee + @TomEEEmbeddedSingleRunner.Configurers(SetMyProperty.class) public static class TheApp { @RandomPort("http") private int port; @@ -90,4 +92,11 @@ public class SingleInstanceRunnerTest { }; } } + + public static class SetMyProperty implements TomEEEmbeddedSingleRunner.Configurer { + @Override + public void configure(final Configuration configuration) { + configuration.property("configurer", "true"); + } + } }