You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by gp...@apache.org on 2013/12/11 10:01:31 UTC
git commit: DELTASPIKE-466 ExternalContainer spi added
Updated Branches:
refs/heads/master 896bf88ae -> 307c757ae
DELTASPIKE-466 ExternalContainer spi added
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/307c757a
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/307c757a
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/307c757a
Branch: refs/heads/master
Commit: 307c757ae1a18595852f01d7c50ed73311eb9364
Parents: 896bf88
Author: gpetracek <gp...@apache.org>
Authored: Wed Dec 11 09:46:45 2013 +0100
Committer: gpetracek <gp...@apache.org>
Committed: Wed Dec 11 09:49:02 2013 +0100
----------------------------------------------------------------------
.../deltaspike/testcontrol/api/TestControl.java | 5 ++
.../testcontrol/api/junit/CdiTestRunner.java | 62 ++++++++++++++++++++
.../api/literal/TestControlLiteral.java | 6 ++
.../testcontrol/spi/ExternalContainer.java | 34 +++++++++++
4 files changed, 107 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/307c757a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/TestControl.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/TestControl.java b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/TestControl.java
index d32b2fb..c492c97 100644
--- a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/TestControl.java
+++ b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/TestControl.java
@@ -52,4 +52,9 @@ public @interface TestControl
* only supported on test-class-level
*/
Class<? extends Handler> logHandler() default ConsoleHandler.class;
+
+ /**
+ * Requires additional service-loader config
+ */
+ boolean startExternalContainers() default true;
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/307c757a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java
index fcd85c8..8093357 100644
--- a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java
+++ b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java
@@ -29,6 +29,7 @@ import org.apache.deltaspike.core.util.ProjectStageProducer;
import org.apache.deltaspike.core.util.ServiceUtils;
import org.apache.deltaspike.testcontrol.api.TestControl;
import org.apache.deltaspike.testcontrol.api.literal.TestControlLiteral;
+import org.apache.deltaspike.testcontrol.spi.ExternalContainer;
import org.apache.deltaspike.testcontrol.spi.junit.TestStatementDecoratorFactory;
import org.junit.Test;
import org.junit.internal.runners.statements.FailOnTimeout;
@@ -358,6 +359,8 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
private Stack<Class<? extends Annotation>> startedScopes = new Stack<Class<? extends Annotation>>();
+ private List<ExternalContainer> externalContainers;
+
ContainerAwareTestContext(TestControl testControl, ContainerAwareTestContext parent)
{
this.parent = parent;
@@ -404,6 +407,8 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
{
container.boot();
setContainerStarted();
+
+ bootExternalContainers();
}
}
@@ -423,6 +428,40 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
startContexts(container, restrictedScopes.toArray(new Class[restrictedScopes.size()]));
}
+ private void bootExternalContainers()
+ {
+ if (!this.testControl.startExternalContainers())
+ {
+ return;
+ }
+
+ if (this.externalContainers == null)
+ {
+ this.externalContainers = ServiceUtils.loadServiceImplementations(ExternalContainer.class);
+ Collections.sort(this.externalContainers, new Comparator<ExternalContainer>()
+ {
+ @Override
+ public int compare(ExternalContainer ec1, ExternalContainer ec2)
+ {
+ return ec1.getOrdinal() > ec2.getOrdinal() ? 1 : -1;
+ }
+ });
+
+ for (ExternalContainer externalContainer : this.externalContainers)
+ {
+ try
+ {
+ externalContainer.boot();
+ }
+ catch (RuntimeException e)
+ {
+ Logger.getLogger(CdiTestRunner.class.getName()).log(Level.WARNING,
+ "booting " + externalContainer.getClass().getName() + " failed", e);
+ }
+ }
+ }
+ }
+
void applyAfterClassConfig()
{
CdiContainer container = CdiContainerLoader.getCdiContainer();
@@ -433,12 +472,35 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
{
if (CdiTestSuiteRunner.isStopContainerAllowed())
{
+ shutdownExternalContainers();
+
container.shutdown(); //stop the container on the same level which started it
CdiTestSuiteRunner.setContainerStarted(false);
}
}
}
+ private void shutdownExternalContainers()
+ {
+ if (this.externalContainers == null)
+ {
+ return;
+ }
+
+ for (ExternalContainer externalContainer : this.externalContainers)
+ {
+ try
+ {
+ externalContainer.shutdown();
+ }
+ catch (RuntimeException e)
+ {
+ Logger.getLogger(CdiTestRunner.class.getName()).log(Level.WARNING,
+ "shutting down " + externalContainer.getClass().getName() + " failed", e);
+ }
+ }
+ }
+
void applyBeforeMethodConfig()
{
this.previousProjectStage = ProjectStageProducer.getInstance().getProjectStage();
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/307c757a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/literal/TestControlLiteral.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/literal/TestControlLiteral.java b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/literal/TestControlLiteral.java
index 1e72856..071cdf6 100644
--- a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/literal/TestControlLiteral.java
+++ b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/literal/TestControlLiteral.java
@@ -54,4 +54,10 @@ public class TestControlLiteral extends AnnotationLiteral<TestControl> implement
{
return defaultInstance.logHandler();
}
+
+ @Override
+ public boolean startExternalContainers()
+ {
+ return defaultInstance.startExternalContainers();
+ }
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/307c757a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/spi/ExternalContainer.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/spi/ExternalContainer.java b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/spi/ExternalContainer.java
new file mode 100644
index 0000000..ab4e8c8
--- /dev/null
+++ b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/spi/ExternalContainer.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.deltaspike.testcontrol.spi;
+
+public interface ExternalContainer
+{
+ /**
+ * Bootstraps the container
+ */
+ void boot();
+
+ /**
+ * Closes the container
+ */
+ void shutdown();
+
+ int getOrdinal();
+}