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]

Reply via email to