JAMES-2595 RegistrableExtension allow to resolve paramter programmatically
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3a25b92a Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3a25b92a Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3a25b92a Branch: refs/heads/master Commit: 3a25b92a8960f46037f30378e9e666f162f8ac34 Parents: 9dd5640 Author: tran tien duc <[email protected]> Authored: Tue Nov 20 18:02:24 2018 +0700 Committer: Benoit Tellier <[email protected]> Committed: Wed Nov 21 16:52:33 2018 +0700 ---------------------------------------------------------------------- .../apache/james/AggregateJunitExtension.java | 21 ++++++++ .../apache/james/GuiceModuleTestExtension.java | 17 +++++++ .../org/apache/james/JamesServerExtension.java | 6 ++- .../org/apache/james/RegistrableExtension.java | 15 +++++- .../CassandraSpamAssassinContractTest.java | 6 --- .../integration/SpamAssassinContract.java | 51 +++++++++++--------- .../SpamAssassinModuleExtension.java | 14 +++++- .../memory/MemorySpamAssassinContractTest.java | 6 --- .../RabbitMQSpamAssassinContractTest.java | 6 --- 9 files changed, 98 insertions(+), 44 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/3a25b92a/server/container/guice/guice-common/src/test/java/org/apache/james/AggregateJunitExtension.java ---------------------------------------------------------------------- diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/AggregateJunitExtension.java b/server/container/guice/guice-common/src/test/java/org/apache/james/AggregateJunitExtension.java index 15ad8c4..a8d867c 100644 --- a/server/container/guice/guice-common/src/test/java/org/apache/james/AggregateJunitExtension.java +++ b/server/container/guice/guice-common/src/test/java/org/apache/james/AggregateJunitExtension.java @@ -20,9 +20,12 @@ package org.apache.james; import java.util.List; +import java.util.Optional; import org.apache.james.util.Runnables; import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.ParameterContext; +import org.junit.jupiter.api.extension.ParameterResolutionException; import com.github.fge.lambdas.Throwing; import com.google.common.collect.Lists; @@ -63,4 +66,22 @@ public class AggregateJunitExtension implements RegistrableExtension { .map(ext -> Throwing.runnable(() -> ext.afterAll(extensionContext)))); } + @Override + public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + return extensionSupportParam(parameterContext, extensionContext) + .isPresent(); + } + + @Override + public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + return extensionSupportParam(parameterContext, extensionContext) + .map(extension -> extension.resolveParameter(parameterContext, extensionContext)) + .orElseThrow(() -> new IllegalArgumentException("parameter is not resolved by registrableExtensions")); + } + + private Optional<? extends RegistrableExtension> extensionSupportParam(ParameterContext parameterContext, ExtensionContext extensionContext) { + return registrableExtensions.stream() + .filter(extension -> extension.supportsParameter(parameterContext, extensionContext)) + .findFirst(); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/3a25b92a/server/container/guice/guice-common/src/test/java/org/apache/james/GuiceModuleTestExtension.java ---------------------------------------------------------------------- diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/GuiceModuleTestExtension.java b/server/container/guice/guice-common/src/test/java/org/apache/james/GuiceModuleTestExtension.java index e0bf5e1..581ca1c 100644 --- a/server/container/guice/guice-common/src/test/java/org/apache/james/GuiceModuleTestExtension.java +++ b/server/container/guice/guice-common/src/test/java/org/apache/james/GuiceModuleTestExtension.java @@ -19,6 +19,12 @@ package org.apache.james; +import java.util.Optional; + +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.ParameterContext; +import org.junit.jupiter.api.extension.ParameterResolutionException; + import com.google.inject.Module; public interface GuiceModuleTestExtension extends RegistrableExtension { @@ -28,4 +34,15 @@ public interface GuiceModuleTestExtension extends RegistrableExtension { } default void await() {} + + default Optional<Class<?>> supportedParameterClass() { + return Optional.empty(); + } + + @Override + default boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + return supportedParameterClass() + .map(clazz -> parameterContext.getParameter().getType() == clazz) + .orElse(false); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/james-project/blob/3a25b92a/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerExtension.java ---------------------------------------------------------------------- diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerExtension.java b/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerExtension.java index 722826c..99c42b2 100644 --- a/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerExtension.java +++ b/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerExtension.java @@ -87,11 +87,15 @@ public class JamesServerExtension implements BeforeAllCallback, BeforeEachCallba @Override public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { - return (parameterContext.getParameter().getType() == GuiceJamesServer.class); + return (parameterContext.getParameter().getType() == GuiceJamesServer.class) + || registrableExtension.supportsParameter(parameterContext, extensionContext); } @Override public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + if (registrableExtension.supportsParameter(parameterContext, extensionContext)) { + return registrableExtension.resolveParameter(parameterContext, extensionContext); + } return guiceJamesServer; } http://git-wip-us.apache.org/repos/asf/james-project/blob/3a25b92a/server/container/guice/guice-common/src/test/java/org/apache/james/RegistrableExtension.java ---------------------------------------------------------------------- diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/RegistrableExtension.java b/server/container/guice/guice-common/src/test/java/org/apache/james/RegistrableExtension.java index 534ce49..1786d3e 100644 --- a/server/container/guice/guice-common/src/test/java/org/apache/james/RegistrableExtension.java +++ b/server/container/guice/guice-common/src/test/java/org/apache/james/RegistrableExtension.java @@ -24,8 +24,11 @@ import org.junit.jupiter.api.extension.AfterEachCallback; import org.junit.jupiter.api.extension.BeforeAllCallback; import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.ParameterContext; +import org.junit.jupiter.api.extension.ParameterResolutionException; +import org.junit.jupiter.api.extension.ParameterResolver; -public interface RegistrableExtension extends BeforeAllCallback, BeforeEachCallback, AfterEachCallback, AfterAllCallback { +public interface RegistrableExtension extends BeforeAllCallback, BeforeEachCallback, AfterEachCallback, AfterAllCallback, ParameterResolver { @Override default void afterAll(ExtensionContext extensionContext) throws Exception { @@ -45,4 +48,14 @@ public interface RegistrableExtension extends BeforeAllCallback, BeforeEachCallb default void beforeEach(ExtensionContext extensionContext) throws Exception { } + + @Override + default boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + return false; + } + + @Override + default Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + return null; + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/3a25b92a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSpamAssassinContractTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSpamAssassinContractTest.java b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSpamAssassinContractTest.java index 0772c1c..610d0d3 100644 --- a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSpamAssassinContractTest.java +++ b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSpamAssassinContractTest.java @@ -30,7 +30,6 @@ import org.apache.james.jmap.methods.integration.SpamAssassinModuleExtension; import org.apache.james.mailbox.extractor.TextExtractor; import org.apache.james.mailbox.store.search.PDFTextExtractor; import org.apache.james.modules.TestJMAPServerModule; -import org.apache.james.spamassassin.SpamAssassinExtension; import org.junit.jupiter.api.extension.RegisterExtension; class CassandraSpamAssassinContractTest implements SpamAssassinContract { @@ -48,9 +47,4 @@ class CassandraSpamAssassinContractTest implements SpamAssassinContract { .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class)) .overrideWith(new TestJMAPServerModule(LIMIT_TO_20_MESSAGES))) .build(); - - @Override - public SpamAssassinExtension.SpamAssassin spamAssassin() { - return spamAssassinExtension.spamAssassinExtension().getSpamAssassin(); - } } http://git-wip-us.apache.org/repos/asf/james-project/blob/3a25b92a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SpamAssassinContract.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SpamAssassinContract.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SpamAssassinContract.java index cb8cd57..a6bdb53 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SpamAssassinContract.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SpamAssassinContract.java @@ -85,21 +85,20 @@ public interface SpamAssassinContract { } @AfterEach - default void tearDown() throws Exception { - spamAssassin().clear(ALICE); + default void tearDown(SpamAssassinExtension.SpamAssassin spamAssassin) throws Exception { + spamAssassin.clear(ALICE); } - SpamAssassinExtension.SpamAssassin spamAssassin(); - default AccessToken accessTokenFor(GuiceJamesServer james, String user, String password) { return authenticateJamesUser(baseUri(james), user, password); } @Test default void spamShouldBeDeliveredInSpamMailboxWhenSameMessageHasAlreadyBeenMovedToSpam( - GuiceJamesServer jamesServer) throws Exception { + GuiceJamesServer jamesServer, + SpamAssassinExtension.SpamAssassin spamAssassin) throws Exception { - spamAssassin().train(ALICE); + spamAssassin.train(ALICE); AccessToken aliceAccessToken = accessTokenFor(jamesServer, ALICE, ALICE_PASSWORD); AccessToken bobAccessToken = accessTokenFor(jamesServer, BOB, BOB_PASSWORD); @@ -148,8 +147,9 @@ public interface SpamAssassinContract { } @Test - default void imapCopiesToSpamMailboxShouldBeConsideredAsSpam(GuiceJamesServer jamesServer) throws Exception { - spamAssassin().train(ALICE); + default void imapCopiesToSpamMailboxShouldBeConsideredAsSpam(GuiceJamesServer jamesServer, + SpamAssassinExtension.SpamAssassin spamAssassin) throws Exception { + spamAssassin.train(ALICE); AccessToken aliceAccessToken = accessTokenFor(jamesServer, ALICE, ALICE_PASSWORD); AccessToken bobAccessToken = accessTokenFor(jamesServer, BOB, BOB_PASSWORD); @@ -195,8 +195,9 @@ public interface SpamAssassinContract { } @Test - default void imapMovesToSpamMailboxShouldBeConsideredAsSpam(GuiceJamesServer jamesServer) throws Exception { - spamAssassin().train(ALICE); + default void imapMovesToSpamMailboxShouldBeConsideredAsSpam(GuiceJamesServer jamesServer, + SpamAssassinExtension.SpamAssassin spamAssassin) throws Exception { + spamAssassin.train(ALICE); AccessToken aliceAccessToken = accessTokenFor(jamesServer, ALICE, ALICE_PASSWORD); AccessToken bobAccessToken = accessTokenFor(jamesServer, BOB, BOB_PASSWORD); @@ -242,8 +243,9 @@ public interface SpamAssassinContract { } @Test - default void spamAssassinShouldForgetMessagesMovedOutOfSpamFolderUsingJMAP(GuiceJamesServer jamesServer) throws Exception { - spamAssassin().train(ALICE); + default void spamAssassinShouldForgetMessagesMovedOutOfSpamFolderUsingJMAP(GuiceJamesServer jamesServer, + SpamAssassinExtension.SpamAssassin spamAssassin) throws Exception { + spamAssassin.train(ALICE); AccessToken aliceAccessToken = accessTokenFor(jamesServer, ALICE, ALICE_PASSWORD); AccessToken bobAccessToken = accessTokenFor(jamesServer, BOB, BOB_PASSWORD); @@ -305,8 +307,9 @@ public interface SpamAssassinContract { } @Test - default void movingAMailToTrashShouldNotImpactSpamassassinLearning(GuiceJamesServer jamesServer) throws Exception { - spamAssassin().train(ALICE); + default void movingAMailToTrashShouldNotImpactSpamassassinLearning(GuiceJamesServer jamesServer, + SpamAssassinExtension.SpamAssassin spamAssassin) throws Exception { + spamAssassin.train(ALICE); AccessToken aliceAccessToken = accessTokenFor(jamesServer, ALICE, ALICE_PASSWORD); AccessToken bobAccessToken = accessTokenFor(jamesServer, BOB, BOB_PASSWORD); @@ -368,8 +371,9 @@ public interface SpamAssassinContract { } @Test - default void spamAssassinShouldForgetMessagesMovedOutOfSpamFolderUsingIMAP(GuiceJamesServer jamesServer) throws Exception { - spamAssassin().train(ALICE); + default void spamAssassinShouldForgetMessagesMovedOutOfSpamFolderUsingIMAP(GuiceJamesServer jamesServer, + SpamAssassinExtension.SpamAssassin spamAssassin) throws Exception { + spamAssassin.train(ALICE); AccessToken aliceAccessToken = accessTokenFor(jamesServer, ALICE, ALICE_PASSWORD); AccessToken bobAccessToken = accessTokenFor(jamesServer, BOB, BOB_PASSWORD); @@ -428,8 +432,9 @@ public interface SpamAssassinContract { } @Test - default void expungingSpamMessageShouldNotImpactSpamAssassinState(GuiceJamesServer jamesServer) throws Exception { - spamAssassin().train(ALICE); + default void expungingSpamMessageShouldNotImpactSpamAssassinState(GuiceJamesServer jamesServer, + SpamAssassinExtension.SpamAssassin spamAssassin) throws Exception { + spamAssassin.train(ALICE); AccessToken aliceAccessToken = accessTokenFor(jamesServer, ALICE, ALICE_PASSWORD); AccessToken bobAccessToken = accessTokenFor(jamesServer, BOB, BOB_PASSWORD); @@ -489,8 +494,9 @@ public interface SpamAssassinContract { } @Test - default void deletingSpamMessageShouldNotImpactSpamAssassinState(GuiceJamesServer jamesServer) throws Exception { - spamAssassin().train(ALICE); + default void deletingSpamMessageShouldNotImpactSpamAssassinState(GuiceJamesServer jamesServer, + SpamAssassinExtension.SpamAssassin spamAssassin) throws Exception { + spamAssassin.train(ALICE); AccessToken aliceAccessToken = accessTokenFor(jamesServer, ALICE, ALICE_PASSWORD); AccessToken bobAccessToken = accessTokenFor(jamesServer, BOB, BOB_PASSWORD); @@ -570,8 +576,9 @@ public interface SpamAssassinContract { } @Test - default void spamShouldBeDeliveredInSpamMailboxOrInboxWhenMultipleRecipientsConfigurations(GuiceJamesServer jamesServer) throws Exception { - spamAssassin().train(ALICE); + default void spamShouldBeDeliveredInSpamMailboxOrInboxWhenMultipleRecipientsConfigurations(GuiceJamesServer jamesServer, + SpamAssassinExtension.SpamAssassin spamAssassin) throws Exception { + spamAssassin.train(ALICE); AccessToken aliceAccessToken = accessTokenFor(jamesServer, ALICE, ALICE_PASSWORD); AccessToken bobAccessToken = accessTokenFor(jamesServer, BOB, BOB_PASSWORD); AccessToken paulAccessToken = accessTokenFor(jamesServer, PAUL, PAUL_PASSWORD); http://git-wip-us.apache.org/repos/asf/james-project/blob/3a25b92a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SpamAssassinModuleExtension.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SpamAssassinModuleExtension.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SpamAssassinModuleExtension.java index a4e6e2d..52c3cb5 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SpamAssassinModuleExtension.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SpamAssassinModuleExtension.java @@ -19,9 +19,13 @@ package org.apache.james.jmap.methods.integration; +import java.util.Optional; + import org.apache.james.GuiceModuleTestExtension; import org.apache.james.spamassassin.SpamAssassinExtension; import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.ParameterContext; +import org.junit.jupiter.api.extension.ParameterResolutionException; import com.google.inject.Module; @@ -48,7 +52,13 @@ public class SpamAssassinModuleExtension implements GuiceModuleTestExtension { return new SpamAssassinModule(spamAssassin); } - public SpamAssassinExtension spamAssassinExtension() { - return spamAssassin; + @Override + public Optional<Class<?>> supportedParameterClass() { + return Optional.of(SpamAssassinExtension.SpamAssassin.class); + } + + @Override + public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + return spamAssassin.getSpamAssassin(); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/3a25b92a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySpamAssassinContractTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySpamAssassinContractTest.java b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySpamAssassinContractTest.java index 29c501c..5d1ab3e 100644 --- a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySpamAssassinContractTest.java +++ b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySpamAssassinContractTest.java @@ -31,7 +31,6 @@ import org.apache.james.mailbox.store.search.MessageSearchIndex; import org.apache.james.mailbox.store.search.PDFTextExtractor; import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex; import org.apache.james.modules.TestJMAPServerModule; -import org.apache.james.spamassassin.SpamAssassinExtension; import org.junit.jupiter.api.extension.RegisterExtension; class MemorySpamAssassinContractTest implements SpamAssassinContract { @@ -49,9 +48,4 @@ class MemorySpamAssassinContractTest implements SpamAssassinContract { .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class)) .overrideWith(binder -> binder.bind(MessageSearchIndex.class).to(SimpleMessageSearchIndex.class))) .build(); - - @Override - public SpamAssassinExtension.SpamAssassin spamAssassin() { - return spamAssassinExtension.spamAssassinExtension().getSpamAssassin(); - } } http://git-wip-us.apache.org/repos/asf/james-project/blob/3a25b92a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQSpamAssassinContractTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQSpamAssassinContractTest.java b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQSpamAssassinContractTest.java index ac332a1..ecb72e5 100644 --- a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQSpamAssassinContractTest.java +++ b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQSpamAssassinContractTest.java @@ -32,7 +32,6 @@ import org.apache.james.modules.RabbitMQExtension; import org.apache.james.modules.SwiftBlobStoreExtension; import org.apache.james.modules.TestJMAPServerModule; import org.apache.james.modules.blobstore.BlobStoreChoosingConfiguration; -import org.apache.james.spamassassin.SpamAssassinExtension; import org.junit.jupiter.api.extension.RegisterExtension; class RabbitMQSpamAssassinContractTest implements SpamAssassinContract { @@ -54,9 +53,4 @@ class RabbitMQSpamAssassinContractTest implements SpamAssassinContract { .toInstance(BlobStoreChoosingConfiguration.objectStorage())) .overrideWith(new TestJMAPServerModule(LIMIT_TO_20_MESSAGES))) .build(); - - @Override - public SpamAssassinExtension.SpamAssassin spamAssassin() { - return spamAssassinExtension.spamAssassinExtension().getSpamAssassin(); - } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
