You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/06/07 10:59:14 UTC
[james-project] 06/07: JAMES-2526 UnauthorizedEndpoint can be
performed on a single James server
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 1038a909adb3129c9059100d4f54e8d91d8a29e6
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Jun 6 15:25:04 2019 +0700
JAMES-2526 UnauthorizedEndpoint can be performed on a single James server
As all the endpoints are rejected with a 401 unauthorized we can clearly
play all 89 the tests on the same James instance, saving 88 restarts
---
.../integration/CassandraJmapExtension.java | 103 ++++++++++++++++++++-
.../integration/UnauthorizedEndpointsTest.java | 10 +-
2 files changed, 103 insertions(+), 10 deletions(-)
diff --git a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/CassandraJmapExtension.java b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/CassandraJmapExtension.java
index 5d7c8b2..90a8dec 100644
--- a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/CassandraJmapExtension.java
+++ b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/CassandraJmapExtension.java
@@ -21,6 +21,9 @@ package org.apache.james.webadmin.integration;
import static org.apache.james.CassandraJamesServerMain.ALL_BUT_JMX_CASSANDRA_MODULE;
import java.io.IOException;
+import java.util.Optional;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
import org.apache.james.CleanupTasksPerformer;
import org.apache.james.DockerCassandraRule;
@@ -31,6 +34,7 @@ import org.apache.james.mailbox.store.search.PDFTextExtractor;
import org.apache.james.modules.TestDockerESMetricReporterModule;
import org.apache.james.modules.TestJMAPServerModule;
import org.apache.james.server.core.configuration.Configuration;
+import org.apache.james.util.FunctionalUtils;
import org.apache.james.util.Runnables;
import org.apache.james.webadmin.WebAdminConfiguration;
import org.junit.jupiter.api.extension.AfterAllCallback;
@@ -43,19 +47,100 @@ import org.junit.jupiter.api.extension.ParameterResolutionException;
import org.junit.jupiter.api.extension.ParameterResolver;
import org.junit.rules.TemporaryFolder;
+import com.github.fge.lambdas.Throwing;
+
public class CassandraJmapExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback, ParameterResolver {
+ public interface JamesLifeCyclePolicy {
+ JamesLifeCyclePolicy FOR_EACH_TEST = serverSupplier -> JamesLifecycleHandler.builder()
+ .beforeAll(Optional::empty)
+ .beforeEach(() -> Optional.of(serverSupplier.get()))
+ .afterEach(GuiceJamesServer::stop)
+ .afterAll(guiceJamesServer -> { });
+ JamesLifeCyclePolicy COMMON_TO_ALL_TESTS = serverSupplier -> JamesLifecycleHandler.builder()
+ .beforeAll(() -> Optional.of(serverSupplier.get()))
+ .beforeEach(Optional::empty)
+ .afterEach(guiceJamesServer -> { })
+ .afterAll(GuiceJamesServer::stop);
+
+ JamesLifecycleHandler createHandler(Supplier<GuiceJamesServer> serverSupplier);
+ }
+
+ public static class JamesLifecycleHandler {
+ public interface Builder {
+ @FunctionalInterface
+ interface RequiresBeforeAll {
+ RequiresBeforeEach beforeAll(Supplier<Optional<GuiceJamesServer>> beforeAll);
+
+ }
+
+ @FunctionalInterface
+ interface RequiresBeforeEach {
+ RequiresAfterEach beforeEach(Supplier<Optional<GuiceJamesServer>> beforeEach);
+ }
+
+ @FunctionalInterface
+ interface RequiresAfterEach {
+ RequiresAfterAll afterEach(Consumer<GuiceJamesServer> afterAll);
+ }
+
+ @FunctionalInterface
+ interface RequiresAfterAll {
+ JamesLifecycleHandler afterAll(Consumer<GuiceJamesServer> afterAll);
+ }
+ }
+
+ public static Builder.RequiresBeforeAll builder() {
+ return beforeAll -> beforeEach -> afterEach -> afterAll -> new JamesLifecycleHandler(beforeAll, beforeEach, afterEach, afterAll);
+ }
+
+ private final Supplier<Optional<GuiceJamesServer>> beforeAll;
+ private final Supplier<Optional<GuiceJamesServer>> beforeEach;
+ private final Consumer<GuiceJamesServer> afterEach;
+ private final Consumer<GuiceJamesServer> afterAll;
+
+ JamesLifecycleHandler(Supplier<Optional<GuiceJamesServer>> beforeAll, Supplier<Optional<GuiceJamesServer>> beforeEach, Consumer<GuiceJamesServer> afterEach, Consumer<GuiceJamesServer> afterAll) {
+ this.beforeAll = beforeAll;
+ this.beforeEach = beforeEach;
+ this.afterEach = afterEach;
+ this.afterAll = afterAll;
+ }
+
+ Optional<GuiceJamesServer> beforeAll() {
+ return beforeAll.get()
+ .map(FunctionalUtils.toFunction(Throwing.consumer(GuiceJamesServer::start)));
+ }
+
+ Optional<GuiceJamesServer> beforeEach() {
+ return beforeEach.get()
+ .map(FunctionalUtils.toFunction(Throwing.consumer(GuiceJamesServer::start)));
+ }
+
+ void afterEach(GuiceJamesServer guiceJamesServer) {
+ afterEach.accept(guiceJamesServer);
+ }
+
+ void afterAll(GuiceJamesServer guiceJamesServer) {
+ afterAll.accept(guiceJamesServer);
+ }
+ }
private static final int LIMIT_TO_20_MESSAGES = 20;
private final TemporaryFolder temporaryFolder;
private final DockerCassandraRule cassandra;
private final DockerElasticSearchRule elasticSearchRule;
+ private final JamesLifecycleHandler jamesLifecycleHandler;
private GuiceJamesServer james;
public CassandraJmapExtension() {
+ this(JamesLifeCyclePolicy.FOR_EACH_TEST);
+ }
+
+ public CassandraJmapExtension(JamesLifeCyclePolicy jamesLifeCyclePolicy) {
this.temporaryFolder = new TemporaryFolder();
this.cassandra = new DockerCassandraRule();
this.elasticSearchRule = new DockerElasticSearchRule();
+ this.jamesLifecycleHandler = jamesLifeCyclePolicy.createHandler(jamesSupplier());
}
private GuiceJamesServer james() throws IOException {
@@ -75,27 +160,31 @@ public class CassandraJmapExtension implements BeforeAllCallback, AfterAllCallba
.overrideWith((binder -> binder.bind(CleanupTasksPerformer.class).asEagerSingleton()));
}
+ private Supplier<GuiceJamesServer> jamesSupplier() {
+ return Throwing.supplier(this::james);
+ }
+
@Override
public void beforeAll(ExtensionContext context) throws Exception {
temporaryFolder.create();
-
Runnables.runParallel(cassandra::start, elasticSearchRule::start);
+ james = jamesLifecycleHandler.beforeAll().orElse(james);
}
@Override
public void afterAll(ExtensionContext context) {
+ jamesLifecycleHandler.afterAll(james);
Runnables.runParallel(cassandra::stop, elasticSearchRule.getDockerEs()::cleanUpData);
}
@Override
- public void beforeEach(ExtensionContext context) throws Exception {
- james = james();
- james.start();
+ public void beforeEach(ExtensionContext context) {
+ james = jamesLifecycleHandler.beforeEach().orElse(james);
}
@Override
public void afterEach(ExtensionContext context) {
- james.stop();
+ jamesLifecycleHandler.afterEach(james);
}
@Override
@@ -103,6 +192,10 @@ public class CassandraJmapExtension implements BeforeAllCallback, AfterAllCallba
return parameterContext.getParameter().getType() == GuiceJamesServer.class;
}
+ public GuiceJamesServer getJames() {
+ return james;
+ }
+
@Override
public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
return james;
diff --git a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/UnauthorizedEndpointsTest.java b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/UnauthorizedEndpointsTest.java
index 7d22960..c320895 100644
--- a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/UnauthorizedEndpointsTest.java
+++ b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/UnauthorizedEndpointsTest.java
@@ -21,7 +21,6 @@ package org.apache.james.webadmin.integration;
import static io.restassured.RestAssured.when;
-import org.apache.james.GuiceJamesServer;
import org.apache.james.utils.WebAdminGuiceProbe;
import org.apache.james.webadmin.WebAdminUtils;
import org.apache.james.webadmin.routes.AliasRoutes;
@@ -45,18 +44,19 @@ import org.apache.james.webadmin.routes.UserRoutes;
import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultRoutes;
import org.eclipse.jetty.http.HttpStatus;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import io.restassured.RestAssured;
-@ExtendWith(CassandraJmapExtension.class)
class UnauthorizedEndpointsTest {
+ @RegisterExtension
+ static CassandraJmapExtension cassandraJmapExtension = new CassandraJmapExtension(CassandraJmapExtension.JamesLifeCyclePolicy.COMMON_TO_ALL_TESTS);
@BeforeEach
- void setup(GuiceJamesServer james) {
- WebAdminGuiceProbe webAdminGuiceProbe = james.getProbe(WebAdminGuiceProbe.class);
+ void setup() {
+ WebAdminGuiceProbe webAdminGuiceProbe = cassandraJmapExtension.getJames().getProbe(WebAdminGuiceProbe.class);
RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminGuiceProbe.getWebAdminPort())
.build();
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org