You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2021/04/27 02:53:45 UTC
[james-project] 04/06: JAMES-3557 JMAP */changes: Increase default
maxChanges 5 -> 256
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch 3.6.x
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 0eed32519222fbf8097aec89f9c8d0ffa2bfe39f
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Apr 9 12:18:18 2021 +0700
JAMES-3557 JMAP */changes: Increase default maxChanges 5 -> 256
We rely on an injected constant to lower this value in our integration
tests.
---
.../james/modules/mailbox/CassandraMailboxModule.java | 4 ++++
.../james/modules/mailbox/MemoryMailboxModule.java | 4 ++++
.../change/CassandraEmailChangeRepository.java | 15 +++++++++------
.../change/CassandraMailboxChangeRepository.java | 15 +++++++++------
.../change/CassandraEmailChangeRepositoryTest.java | 2 +-
.../change/CassandraMailboxChangeRepositoryTest.java | 3 +--
.../memory/change/MemoryEmailChangeRepository.java | 14 ++++++++++----
.../memory/change/MemoryMailboxChangeRepository.java | 18 ++++++++++++------
.../jmap/api/change/EmailChangeRepositoryContract.java | 1 +
.../api/change/MailboxChangeRepositoryContract.java | 3 ++-
.../memory/change/MemoryEmailChangeRepositoryTest.java | 3 ++-
.../change/MemoryMailboxChangeRepositoryTest.java | 4 ++--
.../distributed/DistributedEmailChangeMethodTest.java | 9 ++++++++-
.../DistributedMailboxChangeMethodTest.java | 9 ++++++++-
.../rfc8621/memory/MemoryEmailChangesMethodTest.java | 9 ++++++++-
.../rfc8621/memory/MemoryMailboxChangesMethodTest.java | 9 ++++++++-
.../james/jmap/change/MailboxChangeListenerTest.scala | 9 +++++----
17 files changed, 94 insertions(+), 37 deletions(-)
diff --git a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
index 0e8c809..01e47ca 100644
--- a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
+++ b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
@@ -30,6 +30,7 @@ import org.apache.james.eventsourcing.Event;
import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTO;
import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTOModule;
import org.apache.james.jmap.api.change.EmailChangeRepository;
+import org.apache.james.jmap.api.change.Limit;
import org.apache.james.jmap.api.change.MailboxChangeRepository;
import org.apache.james.jmap.api.change.State;
import org.apache.james.jmap.cassandra.change.CassandraEmailChangeRepository;
@@ -200,6 +201,9 @@ public class CassandraMailboxModule extends AbstractModule {
bind(SessionProvider.class).to(SessionProviderImpl.class);
bind(AttachmentContentLoader.class).to(AttachmentManager.class);
+ bind(Limit.class).annotatedWith(Names.named(CassandraEmailChangeRepository.LIMIT_NAME)).toInstance(Limit.of(256));
+ bind(Limit.class).annotatedWith(Names.named(CassandraMailboxChangeRepository.LIMIT_NAME)).toInstance(Limit.of(256));
+
bind(ReIndexer.class).to(ReIndexerImpl.class);
bind(MessageIdReIndexer.class).to(MessageIdReIndexerImpl.class);
diff --git a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
index 790af62..90c0e2a 100644
--- a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
+++ b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
@@ -27,6 +27,7 @@ import org.apache.james.adapter.mailbox.UserRepositoryAuthenticator;
import org.apache.james.adapter.mailbox.UserRepositoryAuthorizator;
import org.apache.james.events.EventListener;
import org.apache.james.jmap.api.change.EmailChangeRepository;
+import org.apache.james.jmap.api.change.Limit;
import org.apache.james.jmap.api.change.MailboxChangeRepository;
import org.apache.james.jmap.api.change.State;
import org.apache.james.jmap.memory.change.MemoryEmailChangeRepository;
@@ -140,6 +141,9 @@ public class MemoryMailboxModule extends AbstractModule {
bind(MemoryDeletedMessageMetadataVault.class).in(Scopes.SINGLETON);
bind(SessionProviderImpl.class).in(Scopes.SINGLETON);
+ bind(Limit.class).annotatedWith(Names.named(MemoryEmailChangeRepository.LIMIT_NAME)).toInstance(Limit.of(256));
+ bind(Limit.class).annotatedWith(Names.named(MemoryMailboxChangeRepository.LIMIT_NAME)).toInstance(Limit.of(256));
+
Multibinder.newSetBinder(binder(), MailboxManagerDefinition.class)
.addBinding()
.to(MemoryMailboxManagerDefinition.class);
diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraEmailChangeRepository.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraEmailChangeRepository.java
index 59b1f77..deb4eba 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraEmailChangeRepository.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraEmailChangeRepository.java
@@ -22,6 +22,7 @@ package org.apache.james.jmap.cassandra.change;
import java.util.Optional;
import javax.inject.Inject;
+import javax.inject.Named;
import org.apache.james.jmap.api.change.EmailChange;
import org.apache.james.jmap.api.change.EmailChangeRepository;
@@ -37,13 +38,15 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
public class CassandraEmailChangeRepository implements EmailChangeRepository {
- public static final Limit DEFAULT_NUMBER_OF_CHANGES = Limit.of(5);
+ public static final String LIMIT_NAME = "emailChangeDefaultLimit";
private final EmailChangeRepositoryDAO emailChangeRepositoryDAO;
+ private final Limit defaultLimit;
@Inject
- public CassandraEmailChangeRepository(EmailChangeRepositoryDAO emailChangeRepositoryDAO) {
+ public CassandraEmailChangeRepository(EmailChangeRepositoryDAO emailChangeRepositoryDAO, @Named(LIMIT_NAME) Limit defaultLimit) {
this.emailChangeRepositoryDAO = emailChangeRepositoryDAO;
+ this.defaultLimit = defaultLimit;
}
@Override
@@ -60,14 +63,14 @@ public class CassandraEmailChangeRepository implements EmailChangeRepository {
if (state.equals(State.INITIAL)) {
return emailChangeRepositoryDAO.getAllChanges(accountId)
.filter(change -> !change.isDelegated())
- .collect(new EmailChanges.Builder.EmailChangeCollector(state, maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
+ .collect(new EmailChanges.Builder.EmailChangeCollector(state, maxChanges.orElse(defaultLimit)));
}
return emailChangeRepositoryDAO.getChangesSince(accountId, state)
.switchIfEmpty(Flux.error(new ChangeNotFoundException(state, String.format("State '%s' could not be found", state.getValue()))))
.filter(change -> !change.isDelegated())
.filter(change -> !change.getState().equals(state))
- .collect(new EmailChanges.Builder.EmailChangeCollector(state, maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
+ .collect(new EmailChanges.Builder.EmailChangeCollector(state, maxChanges.orElse(defaultLimit)));
}
@Override
@@ -78,13 +81,13 @@ public class CassandraEmailChangeRepository implements EmailChangeRepository {
if (state.equals(State.INITIAL)) {
return emailChangeRepositoryDAO.getAllChanges(accountId)
- .collect(new EmailChanges.Builder.EmailChangeCollector(state, maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
+ .collect(new EmailChanges.Builder.EmailChangeCollector(state, maxChanges.orElse(defaultLimit)));
}
return emailChangeRepositoryDAO.getChangesSince(accountId, state)
.switchIfEmpty(Flux.error(new ChangeNotFoundException(state, String.format("State '%s' could not be found", state.getValue()))))
.filter(change -> !change.getState().equals(state))
- .collect(new EmailChanges.Builder.EmailChangeCollector(state, maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
+ .collect(new EmailChanges.Builder.EmailChangeCollector(state, maxChanges.orElse(defaultLimit)));
}
@Override
diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepository.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepository.java
index b0d9f05..ce2b5b9 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepository.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepository.java
@@ -22,6 +22,7 @@ package org.apache.james.jmap.cassandra.change;
import java.util.Optional;
import javax.inject.Inject;
+import javax.inject.Named;
import org.apache.james.jmap.api.change.Limit;
import org.apache.james.jmap.api.change.MailboxChange;
@@ -37,13 +38,15 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
public class CassandraMailboxChangeRepository implements MailboxChangeRepository {
- public static final Limit DEFAULT_NUMBER_OF_CHANGES = Limit.of(5);
+ public static final String LIMIT_NAME = "mailboxChangeDefaultLimit";
private final MailboxChangeRepositoryDAO mailboxChangeRepositoryDAO;
+ private final Limit defaultLimit;
@Inject
- public CassandraMailboxChangeRepository(MailboxChangeRepositoryDAO mailboxChangeRepositoryDAO) {
+ public CassandraMailboxChangeRepository(MailboxChangeRepositoryDAO mailboxChangeRepositoryDAO, @Named(LIMIT_NAME) Limit defaultLimit) {
this.mailboxChangeRepositoryDAO = mailboxChangeRepositoryDAO;
+ this.defaultLimit = defaultLimit;
}
@Override
@@ -60,14 +63,14 @@ public class CassandraMailboxChangeRepository implements MailboxChangeRepository
if (state.equals(State.INITIAL)) {
return mailboxChangeRepositoryDAO.getAllChanges(accountId)
.filter(change -> !change.isDelegated())
- .collect(new MailboxChanges.MailboxChangesBuilder.MailboxChangeCollector(state, maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
+ .collect(new MailboxChanges.MailboxChangesBuilder.MailboxChangeCollector(state, maxChanges.orElse(defaultLimit)));
}
return mailboxChangeRepositoryDAO.getChangesSince(accountId, state)
.switchIfEmpty(Flux.error(new ChangeNotFoundException(state, String.format("State '%s' could not be found", state.getValue()))))
.filter(change -> !change.isDelegated())
.filter(change -> !change.getState().equals(state))
- .collect(new MailboxChanges.MailboxChangesBuilder.MailboxChangeCollector(state, maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
+ .collect(new MailboxChanges.MailboxChangesBuilder.MailboxChangeCollector(state, maxChanges.orElse(defaultLimit)));
}
@Override
@@ -78,13 +81,13 @@ public class CassandraMailboxChangeRepository implements MailboxChangeRepository
if (state.equals(State.INITIAL)) {
return mailboxChangeRepositoryDAO.getAllChanges(accountId)
- .collect(new MailboxChanges.MailboxChangesBuilder.MailboxChangeCollector(state, maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
+ .collect(new MailboxChanges.MailboxChangesBuilder.MailboxChangeCollector(state, maxChanges.orElse(defaultLimit)));
}
return mailboxChangeRepositoryDAO.getChangesSince(accountId, state)
.switchIfEmpty(Flux.error(new ChangeNotFoundException(state, String.format("State '%s' could not be found", state.getValue()))))
.filter(change -> !change.getState().equals(state))
- .collect(new MailboxChanges.MailboxChangesBuilder.MailboxChangeCollector(state, maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
+ .collect(new MailboxChanges.MailboxChangesBuilder.MailboxChangeCollector(state, maxChanges.orElse(defaultLimit)));
}
@Override
diff --git a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/change/CassandraEmailChangeRepositoryTest.java b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/change/CassandraEmailChangeRepositoryTest.java
index 8094155..5741f80 100644
--- a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/change/CassandraEmailChangeRepositoryTest.java
+++ b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/change/CassandraEmailChangeRepositoryTest.java
@@ -46,7 +46,7 @@ public class CassandraEmailChangeRepositoryTest implements EmailChangeRepository
@BeforeEach
public void setUp(CassandraCluster cassandra) {
emailChangeRepositoryDAO = new EmailChangeRepositoryDAO(cassandra.getConf(), cassandra.getTypesProvider());
- emailChangeRepository = new CassandraEmailChangeRepository(emailChangeRepositoryDAO);
+ emailChangeRepository = new CassandraEmailChangeRepository(emailChangeRepositoryDAO, DEFAULT_NUMBER_OF_CHANGES);
}
@Override
diff --git a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepositoryTest.java b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepositoryTest.java
index a6e743a..2c7e5e2 100644
--- a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepositoryTest.java
+++ b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepositoryTest.java
@@ -24,7 +24,6 @@ import org.apache.james.backends.cassandra.CassandraClusterExtension;
import org.apache.james.backends.cassandra.components.CassandraModule;
import org.apache.james.backends.cassandra.init.CassandraZonedDateTimeModule;
import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
-import org.apache.james.jmap.api.change.MailboxChange;
import org.apache.james.jmap.api.change.MailboxChangeRepository;
import org.apache.james.jmap.api.change.MailboxChangeRepositoryContract;
import org.apache.james.jmap.api.change.State;
@@ -47,7 +46,7 @@ public class CassandraMailboxChangeRepositoryTest implements MailboxChangeReposi
@BeforeEach
public void setUp(CassandraCluster cassandra) {
mailboxChangeRepositoryDAO = new MailboxChangeRepositoryDAO(cassandra.getConf(), cassandra.getTypesProvider());
- mailboxChangeRepository = new CassandraMailboxChangeRepository(mailboxChangeRepositoryDAO);
+ mailboxChangeRepository = new CassandraMailboxChangeRepository(mailboxChangeRepositoryDAO, DEFAULT_NUMBER_OF_CHANGES);
}
@Override
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryEmailChangeRepository.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryEmailChangeRepository.java
index 4f8ee2c..58d595b 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryEmailChangeRepository.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryEmailChangeRepository.java
@@ -22,6 +22,9 @@ package org.apache.james.jmap.memory.change;
import java.util.Comparator;
import java.util.Optional;
+import javax.inject.Inject;
+import javax.inject.Named;
+
import org.apache.james.jmap.api.change.EmailChange;
import org.apache.james.jmap.api.change.EmailChangeRepository;
import org.apache.james.jmap.api.change.EmailChanges;
@@ -40,11 +43,14 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
public class MemoryEmailChangeRepository implements EmailChangeRepository {
- public static final Limit DEFAULT_NUMBER_OF_CHANGES = Limit.of(5);
+ public static final String LIMIT_NAME = "emailChangeDefaultLimit";
private final Multimap<AccountId, EmailChange> emailChangeMap;
+ private final Limit defaultLimit;
- public MemoryEmailChangeRepository() {
+ @Inject
+ public MemoryEmailChangeRepository(@Named(LIMIT_NAME) Limit defaultLimit) {
+ this.defaultLimit = defaultLimit;
this.emailChangeMap = Multimaps.synchronizedListMultimap(ArrayListMultimap.create());
}
@@ -72,7 +78,7 @@ public class MemoryEmailChangeRepository implements EmailChangeRepository {
return resolveAllChanges(accountId, state)
.filter(change -> !change.isDelegated())
- .collect(new EmailChangeCollector(state, maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
+ .collect(new EmailChangeCollector(state, maxChanges.orElse(defaultLimit)));
}
@Override
@@ -81,7 +87,7 @@ public class MemoryEmailChangeRepository implements EmailChangeRepository {
Preconditions.checkNotNull(state);
return resolveAllChanges(accountId, state)
- .collect(new EmailChangeCollector(state, maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
+ .collect(new EmailChangeCollector(state, maxChanges.orElse(defaultLimit)));
}
@Override
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java
index efcc22a..b034b9b 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java
@@ -23,6 +23,9 @@ import java.util.Comparator;
import java.util.Optional;
import java.util.function.Predicate;
+import javax.inject.Inject;
+import javax.inject.Named;
+
import org.apache.james.jmap.api.change.Limit;
import org.apache.james.jmap.api.change.MailboxChange;
import org.apache.james.jmap.api.change.MailboxChangeRepository;
@@ -41,11 +44,14 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
public class MemoryMailboxChangeRepository implements MailboxChangeRepository {
- public static final Limit DEFAULT_NUMBER_OF_CHANGES = Limit.of(5);
+ public static final String LIMIT_NAME = "mailboxChangeDefaultLimit";
private final Multimap<AccountId, MailboxChange> mailboxChangeMap;
+ private final Limit defaultLimit;
- public MemoryMailboxChangeRepository() {
+ @Inject
+ public MemoryMailboxChangeRepository(@Named(LIMIT_NAME) Limit defaultLimit) {
+ this.defaultLimit = defaultLimit;
this.mailboxChangeMap = Multimaps.synchronizedListMultimap(ArrayListMultimap.create());
}
@@ -63,7 +69,7 @@ public class MemoryMailboxChangeRepository implements MailboxChangeRepository {
return Flux.fromIterable(mailboxChangeMap.get(accountId))
.filter(Predicate.not(MailboxChange::isDelegated))
.sort(Comparator.comparing(MailboxChange::getDate))
- .collect(new MailboxChangeCollector(state, maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
+ .collect(new MailboxChangeCollector(state, maxChanges.orElse(defaultLimit)));
}
return findByState(accountId, state)
@@ -71,7 +77,7 @@ public class MemoryMailboxChangeRepository implements MailboxChangeRepository {
.filter(change -> change.getDate().isAfter(currentState.getDate()))
.filter(Predicate.not(MailboxChange::isDelegated))
.sort(Comparator.comparing(MailboxChange::getDate)))
- .collect(new MailboxChangeCollector(state, maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
+ .collect(new MailboxChangeCollector(state, maxChanges.orElse(defaultLimit)));
}
@Override
@@ -82,14 +88,14 @@ public class MemoryMailboxChangeRepository implements MailboxChangeRepository {
if (state.equals(State.INITIAL)) {
return Flux.fromIterable(mailboxChangeMap.get(accountId))
.sort(Comparator.comparing(MailboxChange::getDate))
- .collect(new MailboxChangeCollector(state, maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
+ .collect(new MailboxChangeCollector(state, maxChanges.orElse(defaultLimit)));
}
return findByState(accountId, state)
.flatMapMany(currentState -> Flux.fromIterable(mailboxChangeMap.get(accountId))
.filter(change -> change.getDate().isAfter(currentState.getDate()))
.sort(Comparator.comparing(MailboxChange::getDate)))
- .collect(new MailboxChangeCollector(state, maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
+ .collect(new MailboxChangeCollector(state, maxChanges.orElse(defaultLimit)));
}
private Mono<MailboxChange> findByState(AccountId accountId, State state) {
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/EmailChangeRepositoryContract.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/EmailChangeRepositoryContract.java
index d2a6641..7112ab6 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/EmailChangeRepositoryContract.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/EmailChangeRepositoryContract.java
@@ -34,6 +34,7 @@ import org.assertj.core.api.SoftAssertions;
import org.junit.jupiter.api.Test;
public interface EmailChangeRepositoryContract {
+ Limit DEFAULT_NUMBER_OF_CHANGES = Limit.of(5);
AccountId ACCOUNT_ID = AccountId.fromUsername(BOB);
ZonedDateTime DATE = ZonedDateTime.now();
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java
index cd6ad4a..57b4cf5 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java
@@ -38,6 +38,7 @@ import com.google.common.collect.ImmutableList;
public interface MailboxChangeRepositoryContract {
AccountId ACCOUNT_ID = AccountId.fromUsername(BOB);
ZonedDateTime DATE = ZonedDateTime.now();
+ Limit DEFAULT_NUMBER_OF_CHANGES = Limit.of(5);
State.Factory stateFactory();
@@ -376,7 +377,7 @@ public interface MailboxChangeRepositoryContract {
}
@Test
- default void getChangesShouldReturnThrowWhenNumberOfChangesExceedMaxChanges() {
+ default void getChangesShouldThrowWhenNumberOfChangesExceedMaxChanges() {
MailboxChangeRepository repository = mailboxChangeRepository();
State.Factory stateFactory = stateFactory();
State referenceState = stateFactory.generate();
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/change/MemoryEmailChangeRepositoryTest.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/change/MemoryEmailChangeRepositoryTest.java
index f7711db..84770f5 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/change/MemoryEmailChangeRepositoryTest.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/change/MemoryEmailChangeRepositoryTest.java
@@ -29,11 +29,12 @@ import org.apache.james.mailbox.model.TestMessageId;
import org.junit.jupiter.api.BeforeEach;
public class MemoryEmailChangeRepositoryTest implements EmailChangeRepositoryContract {
+
EmailChangeRepository emailChangeRepository;
@BeforeEach
void setup() {
- emailChangeRepository = new MemoryEmailChangeRepository();
+ emailChangeRepository = new MemoryEmailChangeRepository(DEFAULT_NUMBER_OF_CHANGES);
}
@Override
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepositoryTest.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepositoryTest.java
index 660f18f..81a5245 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepositoryTest.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepositoryTest.java
@@ -25,8 +25,8 @@ import org.apache.james.jmap.api.change.MailboxChangeRepository;
import org.apache.james.jmap.api.change.MailboxChangeRepositoryContract;
import org.apache.james.jmap.api.change.State;
import org.apache.james.mailbox.model.MailboxId;
-import org.junit.jupiter.api.BeforeEach;
import org.apache.james.mailbox.model.TestId;
+import org.junit.jupiter.api.BeforeEach;
public class MemoryMailboxChangeRepositoryTest implements MailboxChangeRepositoryContract {
MailboxChangeRepository mailboxChangeRepository;
@@ -35,7 +35,7 @@ public class MemoryMailboxChangeRepositoryTest implements MailboxChangeRepositor
@BeforeEach
void setup() {
- mailboxChangeRepository = new MemoryMailboxChangeRepository();
+ mailboxChangeRepository = new MemoryMailboxChangeRepository(DEFAULT_NUMBER_OF_CHANGES);
stateFactory = new State.DefaultFactory();
}
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailChangeMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailChangeMethodTest.java
index d471d81..9d0c344 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailChangeMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailChangeMethodTest.java
@@ -25,7 +25,10 @@ import org.apache.james.CassandraRabbitMQJamesServerMain;
import org.apache.james.DockerElasticSearchExtension;
import org.apache.james.JamesServerBuilder;
import org.apache.james.JamesServerExtension;
+import org.apache.james.jmap.api.change.Limit;
import org.apache.james.jmap.api.change.State;
+import org.apache.james.jmap.cassandra.change.CassandraEmailChangeRepository;
+import org.apache.james.jmap.cassandra.change.CassandraMailboxChangeRepository;
import org.apache.james.jmap.cassandra.change.CassandraStateFactory;
import org.apache.james.jmap.rfc8621.contract.EmailChangesMethodContract;
import org.apache.james.modules.AwsS3BlobStoreExtension;
@@ -34,6 +37,8 @@ import org.apache.james.modules.TestJMAPServerModule;
import org.apache.james.modules.blobstore.BlobStoreConfiguration;
import org.junit.jupiter.api.extension.RegisterExtension;
+import com.google.inject.name.Names;
+
public class DistributedEmailChangeMethodTest implements EmailChangesMethodContract {
@RegisterExtension
static JamesServerExtension testExtension = new JamesServerBuilder<CassandraRabbitMQJamesConfiguration>(tmpDir ->
@@ -50,7 +55,9 @@ public class DistributedEmailChangeMethodTest implements EmailChangesMethodContr
.extension(new RabbitMQExtension())
.extension(new AwsS3BlobStoreExtension())
.server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
- .overrideWith(new TestJMAPServerModule()))
+ .overrideWith(new TestJMAPServerModule())
+ .overrideWith(binder -> binder.bind(Limit.class).annotatedWith(Names.named(CassandraMailboxChangeRepository.LIMIT_NAME)).toInstance(Limit.of(5)))
+ .overrideWith(binder -> binder.bind(Limit.class).annotatedWith(Names.named(CassandraEmailChangeRepository.LIMIT_NAME)).toInstance(Limit.of(5))))
.build();
@Override
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxChangeMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxChangeMethodTest.java
index 76d5c5f..db65a99 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxChangeMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxChangeMethodTest.java
@@ -25,7 +25,10 @@ import org.apache.james.CassandraRabbitMQJamesServerMain;
import org.apache.james.DockerElasticSearchExtension;
import org.apache.james.JamesServerBuilder;
import org.apache.james.JamesServerExtension;
+import org.apache.james.jmap.api.change.Limit;
import org.apache.james.jmap.api.change.State;
+import org.apache.james.jmap.cassandra.change.CassandraEmailChangeRepository;
+import org.apache.james.jmap.cassandra.change.CassandraMailboxChangeRepository;
import org.apache.james.jmap.cassandra.change.CassandraStateFactory;
import org.apache.james.jmap.rfc8621.contract.MailboxChangesMethodContract;
import org.apache.james.mailbox.cassandra.ids.CassandraId;
@@ -36,6 +39,8 @@ import org.apache.james.modules.TestJMAPServerModule;
import org.apache.james.modules.blobstore.BlobStoreConfiguration;
import org.junit.jupiter.api.extension.RegisterExtension;
+import com.google.inject.name.Names;
+
public class DistributedMailboxChangeMethodTest implements MailboxChangesMethodContract {
@RegisterExtension
static JamesServerExtension testExtension = new JamesServerBuilder<CassandraRabbitMQJamesConfiguration>(tmpDir ->
@@ -52,7 +57,9 @@ public class DistributedMailboxChangeMethodTest implements MailboxChangesMethodC
.extension(new RabbitMQExtension())
.extension(new AwsS3BlobStoreExtension())
.server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
- .overrideWith(new TestJMAPServerModule()))
+ .overrideWith(new TestJMAPServerModule())
+ .overrideWith(binder -> binder.bind(Limit.class).annotatedWith(Names.named(CassandraMailboxChangeRepository.LIMIT_NAME)).toInstance(Limit.of(5)))
+ .overrideWith(binder -> binder.bind(Limit.class).annotatedWith(Names.named(CassandraEmailChangeRepository.LIMIT_NAME)).toInstance(Limit.of(5))))
.build();
@Override
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailChangesMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailChangesMethodTest.java
index 79634b0..d38dac6 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailChangesMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailChangesMethodTest.java
@@ -24,17 +24,24 @@ import static org.apache.james.MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_
import org.apache.james.GuiceJamesServer;
import org.apache.james.JamesServerBuilder;
import org.apache.james.JamesServerExtension;
+import org.apache.james.jmap.api.change.Limit;
import org.apache.james.jmap.api.change.State;
+import org.apache.james.jmap.memory.change.MemoryEmailChangeRepository;
+import org.apache.james.jmap.memory.change.MemoryMailboxChangeRepository;
import org.apache.james.jmap.rfc8621.contract.EmailChangesMethodContract;
import org.apache.james.modules.TestJMAPServerModule;
import org.junit.jupiter.api.extension.RegisterExtension;
+import com.google.inject.name.Names;
+
public class MemoryEmailChangesMethodTest implements EmailChangesMethodContract {
@RegisterExtension
static JamesServerExtension testExtension = new JamesServerBuilder<>(JamesServerBuilder.defaultConfigurationProvider())
.server(configuration -> GuiceJamesServer.forConfiguration(configuration)
.combineWith(IN_MEMORY_SERVER_AGGREGATE_MODULE)
- .overrideWith(new TestJMAPServerModule()))
+ .overrideWith(new TestJMAPServerModule())
+ .overrideWith(binder -> binder.bind(Limit.class).annotatedWith(Names.named(MemoryMailboxChangeRepository.LIMIT_NAME)).toInstance(Limit.of(5)))
+ .overrideWith(binder -> binder.bind(Limit.class).annotatedWith(Names.named(MemoryEmailChangeRepository.LIMIT_NAME)).toInstance(Limit.of(5))))
.build();
@Override
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxChangesMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxChangesMethodTest.java
index e0cce3f..bf0f9a9 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxChangesMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxChangesMethodTest.java
@@ -26,20 +26,27 @@ import java.util.concurrent.ThreadLocalRandom;
import org.apache.james.GuiceJamesServer;
import org.apache.james.JamesServerBuilder;
import org.apache.james.JamesServerExtension;
+import org.apache.james.jmap.api.change.Limit;
import org.apache.james.jmap.api.change.State;
+import org.apache.james.jmap.memory.change.MemoryEmailChangeRepository;
+import org.apache.james.jmap.memory.change.MemoryMailboxChangeRepository;
import org.apache.james.jmap.rfc8621.contract.MailboxChangesMethodContract;
import org.apache.james.mailbox.inmemory.InMemoryId;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.modules.TestJMAPServerModule;
import org.junit.jupiter.api.extension.RegisterExtension;
+import com.google.inject.name.Names;
+
public class MemoryMailboxChangesMethodTest implements MailboxChangesMethodContract {
@RegisterExtension
static JamesServerExtension testExtension = new JamesServerBuilder<>(JamesServerBuilder.defaultConfigurationProvider())
.server(configuration -> GuiceJamesServer.forConfiguration(configuration)
.combineWith(IN_MEMORY_SERVER_AGGREGATE_MODULE)
- .overrideWith(new TestJMAPServerModule()))
+ .overrideWith(new TestJMAPServerModule())
+ .overrideWith(binder -> binder.bind(Limit.class).annotatedWith(Names.named(MemoryMailboxChangeRepository.LIMIT_NAME)).toInstance(Limit.of(5)))
+ .overrideWith(binder -> binder.bind(Limit.class).annotatedWith(Names.named(MemoryEmailChangeRepository.LIMIT_NAME)).toInstance(Limit.of(5))))
.build();
@Override
diff --git a/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/MailboxChangeListenerTest.scala b/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/MailboxChangeListenerTest.scala
index 23e5a2e..f4c0f7d 100644
--- a/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/MailboxChangeListenerTest.scala
+++ b/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/MailboxChangeListenerTest.scala
@@ -25,9 +25,9 @@ import java.util
import javax.mail.Flags
import org.apache.james.events.delivery.InVmEventDelivery
import org.apache.james.events.{Event, EventBus, EventListener, Group, InVMEventBus, MemoryEventDeadLetters, Registration, RegistrationKey, RetryBackoffConfiguration}
-import org.apache.james.jmap.api.change.{EmailChange, EmailChangeRepository, MailboxChange, MailboxChangeRepository, State}
+import org.apache.james.jmap.api.change.{EmailChange, EmailChangeRepository, Limit, MailboxChange, MailboxChangeRepository, State}
import org.apache.james.jmap.api.model.AccountId
-import org.apache.james.jmap.change.MailboxChangeListenerTest.ACCOUNT_ID
+import org.apache.james.jmap.change.MailboxChangeListenerTest.{ACCOUNT_ID, DEFAULT_NUMBER_OF_CHANGES}
import org.apache.james.jmap.memory.change.{MemoryEmailChangeRepository, MemoryMailboxChangeRepository}
import org.apache.james.mailbox.MessageManager.{AppendCommand, AppendResult, FlagsUpdateMode}
import org.apache.james.mailbox.fixture.MailboxFixture.{ALICE, BOB}
@@ -45,6 +45,7 @@ import scala.jdk.OptionConverters._
object MailboxChangeListenerTest {
val ACCOUNT_ID = AccountId.fromUsername(BOB)
+ val DEFAULT_NUMBER_OF_CHANGES: Limit = Limit.of(5)
}
class MailboxChangeListenerTest {
@@ -71,9 +72,9 @@ class MailboxChangeListenerTest {
mailboxManager = resources.getMailboxManager
stateFactory = new State.DefaultFactory
mailboxChangeFactory = new MailboxChange.Factory(stateFactory)
- mailboxChangeRepository = new MemoryMailboxChangeRepository()
+ mailboxChangeRepository = new MemoryMailboxChangeRepository(DEFAULT_NUMBER_OF_CHANGES)
emailChangeFactory = new EmailChange.Factory(stateFactory, resources.getMessageIdManager, resources.getMailboxManager)
- emailChangeRepository = new MemoryEmailChangeRepository()
+ emailChangeRepository = new MemoryEmailChangeRepository(DEFAULT_NUMBER_OF_CHANGES)
val eventBus = new EventBus {
override def register(listener: EventListener.ReactiveEventListener, key: RegistrationKey): Publisher[Registration] = Mono.empty()
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org