You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/04/08 03:56:56 UTC
[james-project] 06/12: JAMES-3435 Tests for relaxed consistency
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 2842ea88b21e24d5988ee09c35cc549e82d6b8e9
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Sun Mar 28 20:33:36 2021 +0700
JAMES-3435 Tests for relaxed consistency
---
.../cassandra/mail/CassandraMapperProvider.java | 12 ++--
...andraMessageIdMapperRelaxedConsistencyTest.java | 72 +++++++++++++++++++++
.../mail/CassandraMessageIdMapperTest.java | 3 +-
...ssandraMessageMapperRelaxedConsistencyTest.java | 73 ++++++++++++++++++++++
.../cassandra/mail/CassandraMessageMapperTest.java | 3 +-
.../cassandra/mail/CassandraMessageMoveTest.java | 4 +-
.../CassandraMessageWithAttachmentMapperTest.java | 4 +-
.../task/RecomputeMailboxCountersServiceTest.java | 4 +-
.../store/mail/model/MessageIdMapperTest.java | 4 +-
.../store/mail/model/MessageMapperTest.java | 4 +-
10 files changed, 169 insertions(+), 14 deletions(-)
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
index ca5a756..db279c3 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
@@ -56,14 +56,15 @@ public class CassandraMapperProvider implements MapperProvider {
private CassandraMailboxSessionMapperFactory mapperFactory;
public CassandraMapperProvider(CassandraCluster cassandra,
- CassandraConsistenciesConfiguration cassandraConsistenciesConfiguration) {
+ CassandraConsistenciesConfiguration cassandraConsistenciesConfiguration,
+ CassandraConfiguration cassandraConfiguration) {
this.cassandra = cassandra;
messageUidProvider = new MessageUidProvider();
cassandraModSeqProvider = new CassandraModSeqProvider(
this.cassandra.getConf(),
- CassandraConfiguration.DEFAULT_CONFIGURATION,
+ cassandraConfiguration,
cassandraConsistenciesConfiguration);
- mapperFactory = createMapperFactory();
+ mapperFactory = createMapperFactory(cassandraConfiguration);
}
@Override
@@ -86,9 +87,10 @@ public class CassandraMapperProvider implements MapperProvider {
return mapperFactory.getMessageIdMapper(mailboxSession);
}
- private CassandraMailboxSessionMapperFactory createMapperFactory() {
+ private CassandraMailboxSessionMapperFactory createMapperFactory(CassandraConfiguration cassandraConfiguration) {
return TestCassandraMailboxSessionMapperFactory.forTests(cassandra,
- new CassandraMessageId.Factory());
+ new CassandraMessageId.Factory(),
+ cassandraConfiguration);
}
@Override
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperRelaxedConsistencyTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperRelaxedConsistencyTest.java
new file mode 100644
index 0000000..48f58e0
--- /dev/null
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperRelaxedConsistencyTest.java
@@ -0,0 +1,72 @@
+/****************************************************************
+ * 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.mail;
+
+import org.apache.james.backends.cassandra.CassandraClusterExtension;
+import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration;
+import org.apache.james.mailbox.store.mail.model.MessageIdMapperTest;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+class CassandraMessageIdMapperRelaxedConsistencyTest {
+ @RegisterExtension
+ static CassandraClusterExtension cassandraCluster = new CassandraClusterExtension(MailboxAggregateModule.MODULE);
+
+ @Nested
+ class WeakReadConsistency extends MessageIdMapperTest {
+ @Override
+ protected CassandraMapperProvider provideMapper() {
+ return new CassandraMapperProvider(
+ cassandraCluster.getCassandraCluster(),
+ cassandraCluster.getCassandraConsistenciesConfiguration(),
+ CassandraConfiguration.builder()
+ .messageReadStrongConsistency(false)
+ .messageWriteStrongConsistency(true)
+ .build());
+ }
+ }
+
+ @Nested
+ class WeakWriteConsistency extends MessageIdMapperTest {
+ @Override
+ protected CassandraMapperProvider provideMapper() {
+ return new CassandraMapperProvider(
+ cassandraCluster.getCassandraCluster(),
+ cassandraCluster.getCassandraConsistenciesConfiguration(),
+ CassandraConfiguration.builder()
+ .messageReadStrongConsistency(false)
+ .messageWriteStrongConsistency(false)
+ .build());
+ }
+
+ @Disabled("JAMES-3435 Without strong consistency flags update is not thread safe as long as it follows a read-before-write pattern")
+ @Override
+ public void setFlagsShouldWorkWithConcurrencyWithAdd() throws Exception {
+ super.setFlagsShouldWorkWithConcurrencyWithAdd();
+ }
+
+ @Disabled("JAMES-3435 Without strong consistency flags update is not thread safe as long as it follows a read-before-write pattern")
+ @Override
+ public void setFlagsShouldWorkWithConcurrencyWithRemove() throws Exception {
+ super.setFlagsShouldWorkWithConcurrencyWithRemove();
+ }
+ }
+}
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java
index fc5885f..85dd03d 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java
@@ -64,7 +64,8 @@ class CassandraMessageIdMapperTest extends MessageIdMapperTest {
protected CassandraMapperProvider provideMapper() {
return new CassandraMapperProvider(
cassandraCluster.getCassandraCluster(),
- cassandraCluster.getCassandraConsistenciesConfiguration());
+ cassandraCluster.getCassandraConsistenciesConfiguration(),
+ CassandraConfiguration.DEFAULT_CONFIGURATION);
}
@Test
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperRelaxedConsistencyTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperRelaxedConsistencyTest.java
new file mode 100644
index 0000000..7850d1c
--- /dev/null
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperRelaxedConsistencyTest.java
@@ -0,0 +1,73 @@
+/****************************************************************
+ * 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.mail;
+
+import org.apache.james.backends.cassandra.CassandraClusterExtension;
+import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration;
+import org.apache.james.mailbox.store.mail.model.MapperProvider;
+import org.apache.james.mailbox.store.mail.model.MessageMapperTest;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+class CassandraMessageMapperRelaxedConsistencyTest {
+ @RegisterExtension
+ static CassandraClusterExtension cassandraCluster = new CassandraClusterExtension(MailboxAggregateModule.MODULE);
+
+ @Nested
+ class WeakReadConsistency extends MessageMapperTest {
+ @Override
+ protected MapperProvider createMapperProvider() {
+ return new CassandraMapperProvider(
+ cassandraCluster.getCassandraCluster(),
+ cassandraCluster.getCassandraConsistenciesConfiguration(),
+ CassandraConfiguration.builder()
+ .messageReadStrongConsistency(false)
+ .messageWriteStrongConsistency(true)
+ .build());
+ }
+ }
+
+ @Nested
+ class WeakWriteConsistency extends MessageMapperTest {
+ @Override
+ protected MapperProvider createMapperProvider() {
+ return new CassandraMapperProvider(
+ cassandraCluster.getCassandraCluster(),
+ cassandraCluster.getCassandraConsistenciesConfiguration(),
+ CassandraConfiguration.builder()
+ .messageReadStrongConsistency(false)
+ .messageWriteStrongConsistency(false)
+ .build());
+ }
+
+ @Disabled("JAMES-3435 Without strong consistency flags update is not thread safe as long as it follows a read-before-write pattern")
+ @Override
+ public void setFlagsShouldWorkWithConcurrencyWithRemove() throws Exception {
+ super.setFlagsShouldWorkWithConcurrencyWithRemove();
+ }
+
+ @Disabled("JAMES-3435 Without strong consistency flags update is not thread safe as long as it follows a read-before-write pattern")
+ @Override
+ public void userFlagsUpdateShouldWorkInConcurrentEnvironment() throws Exception {
+ super.userFlagsUpdateShouldWorkInConcurrentEnvironment();
+ }
+ }
+}
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java
index e113cb9..2734fd7 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java
@@ -62,7 +62,8 @@ class CassandraMessageMapperTest extends MessageMapperTest {
protected MapperProvider createMapperProvider() {
return new CassandraMapperProvider(
cassandraCluster.getCassandraCluster(),
- cassandraCluster.getCassandraConsistenciesConfiguration());
+ cassandraCluster.getCassandraConsistenciesConfiguration(),
+ CassandraConfiguration.DEFAULT_CONFIGURATION);
}
@Nested
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMoveTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMoveTest.java
index f6fb9c1..2b00db0 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMoveTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMoveTest.java
@@ -20,6 +20,7 @@
package org.apache.james.mailbox.cassandra.mail;
import org.apache.james.backends.cassandra.CassandraClusterExtension;
+import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration;
import org.apache.james.mailbox.store.mail.model.MapperProvider;
import org.apache.james.mailbox.store.mail.model.MessageMoveTest;
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -32,6 +33,7 @@ class CassandraMessageMoveTest extends MessageMoveTest {
protected MapperProvider createMapperProvider() {
return new CassandraMapperProvider(
cassandraCluster.getCassandraCluster(),
- cassandraCluster.getCassandraConsistenciesConfiguration());
+ cassandraCluster.getCassandraConsistenciesConfiguration(),
+ CassandraConfiguration.DEFAULT_CONFIGURATION);
}
}
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageWithAttachmentMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageWithAttachmentMapperTest.java
index 157e3ec..cc5fb23 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageWithAttachmentMapperTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageWithAttachmentMapperTest.java
@@ -20,6 +20,7 @@
package org.apache.james.mailbox.cassandra.mail;
import org.apache.james.backends.cassandra.CassandraClusterExtension;
+import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration;
import org.apache.james.mailbox.store.mail.model.MapperProvider;
import org.apache.james.mailbox.store.mail.model.MessageWithAttachmentMapperTest;
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -32,6 +33,7 @@ class CassandraMessageWithAttachmentMapperTest extends MessageWithAttachmentMapp
protected MapperProvider createMapperProvider() {
return new CassandraMapperProvider(
cassandraCluster.getCassandraCluster(),
- cassandraCluster.getCassandraConsistenciesConfiguration());
+ cassandraCluster.getCassandraConsistenciesConfiguration(),
+ CassandraConfiguration.DEFAULT_CONFIGURATION);
}
}
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersServiceTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersServiceTest.java
index 8023f11..0813247 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersServiceTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersServiceTest.java
@@ -28,6 +28,7 @@ import javax.mail.Flags;
import org.apache.james.backends.cassandra.CassandraCluster;
import org.apache.james.backends.cassandra.CassandraClusterExtension;
import org.apache.james.backends.cassandra.components.CassandraModule;
+import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration;
import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
import org.apache.james.core.Username;
import org.apache.james.mailbox.MessageUid;
@@ -95,7 +96,8 @@ class RecomputeMailboxCountersServiceTest {
messageIdToImapUidDAO = new CassandraMessageIdToImapUidDAO(
cassandra.getConf(),
cassandraCluster.getCassandraConsistenciesConfiguration(),
- MESSAGE_ID_FACTORY);
+ MESSAGE_ID_FACTORY,
+ CassandraConfiguration.DEFAULT_CONFIGURATION);
counterDAO = new CassandraMailboxCounterDAO(cassandra.getConf());
testee = new RecomputeMailboxCountersService(mailboxDAO, imapUidToMessageIdDAO, messageIdToImapUidDAO, counterDAO);
}
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
index 82f20c8..e30a2ac 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
@@ -661,7 +661,7 @@ public abstract class MessageIdMapperTest {
}
@Test
- void setFlagsShouldWorkWithConcurrencyWithAdd() throws Exception {
+ public void setFlagsShouldWorkWithConcurrencyWithAdd() throws Exception {
Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(MapperProvider.Capabilities.THREAD_SAFE_FLAGS_UPDATE));
message1.setUid(mapperProvider.generateMessageUid());
message1.setModSeq(mapperProvider.generateModSeq(benwaInboxMailbox));
@@ -684,7 +684,7 @@ public abstract class MessageIdMapperTest {
}
@Test
- void setFlagsShouldWorkWithConcurrencyWithRemove() throws Exception {
+ public void setFlagsShouldWorkWithConcurrencyWithRemove() throws Exception {
Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(MapperProvider.Capabilities.THREAD_SAFE_FLAGS_UPDATE));
message1.setUid(mapperProvider.generateMessageUid());
message1.setModSeq(mapperProvider.generateModSeq(benwaInboxMailbox));
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
index b790dc4..eec632a 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
@@ -910,7 +910,7 @@ public abstract class MessageMapperTest {
}
@Test
- void userFlagsUpdateShouldWorkInConcurrentEnvironment() throws Exception {
+ public void userFlagsUpdateShouldWorkInConcurrentEnvironment() throws Exception {
Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(MapperProvider.Capabilities.THREAD_SAFE_FLAGS_UPDATE));
saveMessages();
@@ -931,7 +931,7 @@ public abstract class MessageMapperTest {
}
@Test
- void setFlagsShouldWorkWithConcurrencyWithRemove() throws Exception {
+ public void setFlagsShouldWorkWithConcurrencyWithRemove() throws Exception {
Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(MapperProvider.Capabilities.THREAD_SAFE_FLAGS_UPDATE));
saveMessages();
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org