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 6da6be056e2c8be9aa7764f062ea4104f8b9fec8 Author: Tran Tien Duc <[email protected]> AuthorDate: Thu Feb 13 12:01:13 2020 +0700 JAMES-3056 Prepare the setUp for CassandraMailboxManager consistency test It requires me to inject some spied DAOs into the Mapper layer. I know it's suck. But that's not the priority now. --- .../mail/CassandraMailboxPathDAOImpl.java | 2 +- .../CassandraMailboxManagerConsistencyTest.java | 59 ++++++++++++++++++++++ .../cassandra/CassandraMailboxManagerProvider.java | 25 +++++++++ .../mailbox/cassandra/mail/utils/GuiceUtils.java | 34 ++++++++++--- 4 files changed, 111 insertions(+), 9 deletions(-) diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImpl.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImpl.java index a10d94c..34f49ae 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImpl.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImpl.java @@ -82,7 +82,7 @@ public class CassandraMailboxPathDAOImpl implements CassandraMailboxPathDAO { } @VisibleForTesting - CassandraMailboxPathDAOImpl(Session session, CassandraTypesProvider typesProvider) { + public CassandraMailboxPathDAOImpl(Session session, CassandraTypesProvider typesProvider) { this(session, typesProvider, CassandraUtils.WITH_DEFAULT_CONFIGURATION); } diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerConsistencyTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerConsistencyTest.java new file mode 100644 index 0000000..84c2ad3 --- /dev/null +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerConsistencyTest.java @@ -0,0 +1,59 @@ +/**************************************************************** + * 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.james.mailbox.cassandra; + +import static org.mockito.Mockito.spy; + +import org.apache.james.backends.cassandra.CassandraClusterExtension; +import org.apache.james.backends.cassandra.init.CassandraTypesProvider; +import org.apache.james.backends.cassandra.utils.CassandraUtils; +import org.apache.james.mailbox.cassandra.mail.CassandraMailboxDAO; +import org.apache.james.mailbox.cassandra.mail.CassandraMailboxPathDAOImpl; +import org.apache.james.mailbox.cassandra.mail.CassandraMailboxPathV2DAO; +import org.apache.james.mailbox.cassandra.mail.MailboxAggregateModule; +import org.apache.james.mailbox.store.PreDeletionHooks; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.RegisterExtension; + +import com.datastax.driver.core.Session; + +class CassandraMailboxManagerConsistencyTest { + @RegisterExtension + static CassandraClusterExtension cassandra = new CassandraClusterExtension(MailboxAggregateModule.MODULE_WITH_QUOTA); + + private CassandraMailboxManager testee; + + @BeforeEach + void setUp() { + Session session = cassandra.getCassandraCluster().getConf(); + CassandraTypesProvider typesProvider = cassandra.getCassandraCluster().getTypesProvider(); + + CassandraMailboxDAO mailboxDAO = spy(new CassandraMailboxDAO(session, typesProvider)); + CassandraMailboxPathDAOImpl mailboxPathDAO = spy(new CassandraMailboxPathDAOImpl(session, typesProvider)); + CassandraMailboxPathV2DAO mailboxPathV2DAO = spy(new CassandraMailboxPathV2DAO(session, CassandraUtils.WITH_DEFAULT_CONFIGURATION)); + + testee = CassandraMailboxManagerProvider.provideMailboxManager( + session, + typesProvider, + PreDeletionHooks.NO_PRE_DELETION_HOOK, + binder -> binder.bind(CassandraMailboxDAO.class).toInstance(mailboxDAO), + binder -> binder.bind(CassandraMailboxPathDAOImpl.class).toInstance(mailboxPathDAO), + binder -> binder.bind(CassandraMailboxPathV2DAO.class).toInstance(mailboxPathV2DAO)); + } +} diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java index 11d9588..8e07ab4 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java @@ -20,11 +20,13 @@ package org.apache.james.mailbox.cassandra; import org.apache.james.backends.cassandra.init.CassandraTypesProvider; +import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration; import org.apache.james.mailbox.acl.GroupMembershipResolver; import org.apache.james.mailbox.acl.MailboxACLResolver; import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver; import org.apache.james.mailbox.acl.UnionMailboxACLResolver; import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; +import org.apache.james.mailbox.cassandra.mail.utils.GuiceUtils; import org.apache.james.mailbox.cassandra.quota.CassandraCurrentQuotaManager; import org.apache.james.mailbox.cassandra.quota.CassandraGlobalMaxQuotaDao; import org.apache.james.mailbox.cassandra.quota.CassandraPerDomainMaxQuotaDao; @@ -32,6 +34,7 @@ import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaDao; import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager; import org.apache.james.mailbox.events.InVMEventBus; import org.apache.james.mailbox.events.delivery.InVmEventDelivery; +import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.quota.QuotaRootResolver; import org.apache.james.mailbox.store.Authenticator; import org.apache.james.mailbox.store.Authorizator; @@ -53,11 +56,26 @@ import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex; import org.apache.james.metrics.tests.RecordingMetricFactory; import com.datastax.driver.core.Session; +import com.google.inject.Module; public class CassandraMailboxManagerProvider { private static final int LIMIT_ANNOTATIONS = 3; private static final int LIMIT_ANNOTATION_SIZE = 30; + static CassandraMailboxManager provideMailboxManager(Session session, CassandraTypesProvider cassandraTypesProvider, + PreDeletionHooks preDeletionHooks, Module... overriedGuiceModules) { + CassandraMessageId.Factory messageIdFactory = new CassandraMessageId.Factory(); + + CassandraMailboxSessionMapperFactory mapperFactory = GuiceUtils.testInjector(session, + cassandraTypesProvider, + messageIdFactory, + CassandraConfiguration.DEFAULT_CONFIGURATION, + overriedGuiceModules) + .getInstance(CassandraMailboxSessionMapperFactory.class); + + return provideMailboxManager(session, preDeletionHooks, mapperFactory, messageIdFactory); + } + public static CassandraMailboxManager provideMailboxManager(Session session, CassandraTypesProvider cassandraTypesProvider, PreDeletionHooks preDeletionHooks) { CassandraMessageId.Factory messageIdFactory = new CassandraMessageId.Factory(); @@ -67,6 +85,13 @@ public class CassandraMailboxManagerProvider { cassandraTypesProvider, messageIdFactory); + return provideMailboxManager(session, preDeletionHooks, mapperFactory, messageIdFactory); + } + + private static CassandraMailboxManager provideMailboxManager(Session session, + PreDeletionHooks preDeletionHooks, + CassandraMailboxSessionMapperFactory mapperFactory, + MessageId.Factory messageIdFactory) { MailboxACLResolver aclResolver = new UnionMailboxACLResolver(); GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver(); MessageParser messageParser = new MessageParser(); diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java index e3218c3..4d010ca 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java @@ -36,6 +36,7 @@ import org.apache.james.mailbox.model.MessageId; import com.datastax.driver.core.Session; import com.google.inject.Guice; import com.google.inject.Injector; +import com.google.inject.Module; import com.google.inject.name.Names; import com.google.inject.util.Modules; @@ -49,18 +50,35 @@ public class GuiceUtils { return testInjector(session, typesProvider, messageIdFactory, configuration); } - public static Injector testInjector(Session session, CassandraTypesProvider typesProvider, CassandraMessageId.Factory messageIdFactory, CassandraConfiguration configuration) { + public static Injector testInjector(Session session, CassandraTypesProvider typesProvider, + CassandraMessageId.Factory messageIdFactory, + CassandraConfiguration configuration, Module... guiceModules) { return Guice.createInjector( Modules.combine( - binder -> binder.bind(MessageId.Factory.class).toInstance(messageIdFactory), - binder -> binder.bind(BlobId.Factory.class).toInstance(new HashBlobId.Factory()), - binder -> binder.bind(BlobStore.class).to(CassandraBlobStore.class).in(SINGLETON), - binder -> binder.bind(CassandraDumbBlobStore.class).in(SINGLETON), + Modules.combine(commonModules(session, typesProvider, messageIdFactory, configuration)), + Modules.combine(guiceModules))); + } + + public static Injector testInjector(Session session, CassandraTypesProvider typesProvider, + CassandraMessageId.Factory messageIdFactory, + CassandraConfiguration configuration) { + return Guice.createInjector( + commonModules(session, typesProvider, messageIdFactory, configuration)); + } + + private static Module commonModules(Session session, CassandraTypesProvider typesProvider, + CassandraMessageId.Factory messageIdFactory, + CassandraConfiguration configuration) { + return Modules.combine( + binder -> binder.bind(MessageId.Factory.class).toInstance(messageIdFactory), + binder -> binder.bind(BlobId.Factory.class).toInstance(new HashBlobId.Factory()), + binder -> binder.bind(BlobStore.class).to(CassandraBlobStore.class), + binder -> binder.bind(CassandraDumbBlobStore.class).in(SINGLETON), binder -> binder.bind(BucketName.class) .annotatedWith(Names.named(CassandraDumbBlobStore.DEFAULT_BUCKET)) .toInstance(BucketName.DEFAULT), - binder -> binder.bind(Session.class).toInstance(session), - binder -> binder.bind(CassandraTypesProvider.class).toInstance(typesProvider), - binder -> binder.bind(CassandraConfiguration.class).toInstance(configuration))); + binder -> binder.bind(Session.class).toInstance(session), + binder -> binder.bind(CassandraTypesProvider.class).toInstance(typesProvider), + binder -> binder.bind(CassandraConfiguration.class).toInstance(configuration)); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
