You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/10/12 08:28:52 UTC
[01/12] james-project git commit: JAMES-2559 Add original branch
parameter in merging tool
Repository: james-project
Updated Branches:
refs/heads/master 8f5df4978 -> 02f8d6f73
JAMES-2559 Add original branch parameter in merging tool
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/57b8e7d6
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/57b8e7d6
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/57b8e7d6
Branch: refs/heads/master
Commit: 57b8e7d6903021bc5f98798483261961cdad754c
Parents: 8f5df49
Author: Antoine Duprat <ad...@linagora.com>
Authored: Wed Oct 10 15:24:26 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Oct 12 15:24:58 2018 +0700
----------------------------------------------------------------------
dockerfiles/merge/merge.sh | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/57b8e7d6/dockerfiles/merge/merge.sh
----------------------------------------------------------------------
diff --git a/dockerfiles/merge/merge.sh b/dockerfiles/merge/merge.sh
index 36b321f..a589cb9 100755
--- a/dockerfiles/merge/merge.sh
+++ b/dockerfiles/merge/merge.sh
@@ -2,30 +2,39 @@
printUsage() {
echo "Usage : "
- echo "./merge.sh SHA1 RESULTING_BRANCH"
- echo " SHA1: SHA1 to merge with master"
+ echo "./merge.sh SHA1 RESULTING_BRANCH ORIGINAL_BRANCH"
+ echo " SHA1: SHA1 to merge with the branch"
echo " RESULTING_BRANCH : Resulting branch of the merge"
+ echo " ORIGINAL_BRANCH: the original branch used for merge (if none, then `master` will be used)"
exit 1
}
-if [ "$#" -ne 2 ]; then
+if [ "$#" -lt 2 ] || [ "$#" -gt 3 ]; then
printUsage
fi
SHA1=$1
RESULTING_BRANCH=$2
+if [ "$#" -eq 3 ]; then
+ ORIGINAL_BRANCH=$3
+else
+ ORIGINAL_BRANCH=master
+fi
APACHE_REPO=`git remote show | grep apache || true`
if [ -z "$APACHE_REPO" ]; then
git remote add apache https://github.com/apache/james-project.git
fi
+# Getting original branch from apache repo
git fetch apache
-git checkout apache/master -b master
+git checkout apache/$ORIGINAL_BRANCH -B $ORIGINAL_BRANCH
+# Getting the branch to be merged from /origin
git fetch origin
git checkout $SHA1
git checkout -b SHA1_BRANCH
-git checkout master
+# Merging the branch to be merged in the original branch
+git checkout $ORIGINAL_BRANCH
git checkout -b $RESULTING_BRANCH
git merge --no-edit SHA1_BRANCH
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[10/12] james-project git commit: JAMES-2555 Migrate ReIndexuing
tests to JUNIT 5
Posted by bt...@apache.org.
JAMES-2555 Migrate ReIndexuing tests to JUNIT 5
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/02f8d6f7
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/02f8d6f7
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/02f8d6f7
Branch: refs/heads/master
Commit: 02f8d6f73b03b004c39e58948e627b3f384d815f
Parents: 962683d
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Oct 11 16:47:50 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Oct 12 15:27:34 2018 +0700
----------------------------------------------------------------------
mailbox/tools/indexer/pom.xml | 18 +++++++--
.../indexer/CassandraReIndexerImplTest.java | 40 +++++---------------
.../tools/indexer/ReIndexerImplTest.java | 12 +++---
.../registrations/GlobalRegistrationTest.java | 26 ++++++-------
.../registrations/MailboxRegistrationTest.java | 28 +++++++-------
5 files changed, 56 insertions(+), 68 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/02f8d6f7/mailbox/tools/indexer/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/pom.xml b/mailbox/tools/indexer/pom.xml
index 4395bba..34ab140 100644
--- a/mailbox/tools/indexer/pom.xml
+++ b/mailbox/tools/indexer/pom.xml
@@ -105,13 +105,23 @@
<artifactId>javax.inject</artifactId>
</dependency>
<dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.assertj</groupId>
- <artifactId>assertj-core</artifactId>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-engine</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-launcher</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.vintage</groupId>
+ <artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/james-project/blob/02f8d6f7/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java
index 7af0646..26f68cc 100644
--- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java
+++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java
@@ -29,7 +29,7 @@ import java.nio.charset.StandardCharsets;
import java.time.Duration;
import org.apache.james.backends.cassandra.CassandraCluster;
-import org.apache.james.backends.cassandra.DockerCassandraRule;
+import org.apache.james.backends.cassandra.CassandraClusterExtension;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageManager;
import org.apache.james.mailbox.cassandra.CassandraMailboxManager;
@@ -42,12 +42,9 @@ import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
import org.apache.james.util.concurrency.ConcurrentTestRunner;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
import com.google.common.base.Strings;
@@ -57,38 +54,21 @@ public class CassandraReIndexerImplTest {
private CassandraMailboxManager mailboxManager;
private ListeningMessageSearchIndex messageSearchIndex;
- private ReIndexer reIndexer;
-
- @ClassRule
- public static DockerCassandraRule cassandraServer = new DockerCassandraRule();
-
- private static CassandraCluster cassandra;
+ @RegisterExtension
+ static CassandraClusterExtension cassandraCluster = new CassandraClusterExtension(MailboxAggregateModule.MODULE_WITH_QUOTA);
- @BeforeClass
- public static void setUpClass() {
- cassandra = CassandraCluster.create(MailboxAggregateModule.MODULE_WITH_QUOTA, cassandraServer.getHost());
- }
+ private ReIndexer reIndexer;
- @Before
- public void setUp() {
+ @BeforeEach
+ void setUp(CassandraCluster cassandra) {
mailboxManager = CassandraMailboxManagerProvider.provideMailboxManager(cassandra.getConf(), cassandra.getTypesProvider());
MailboxSessionMapperFactory mailboxSessionMapperFactory = mailboxManager.getMapperFactory();
messageSearchIndex = mock(ListeningMessageSearchIndex.class);
reIndexer = new ReIndexerImpl(mailboxManager, messageSearchIndex, mailboxSessionMapperFactory);
}
- @After
- public void tearDown() {
- cassandra.clearTables();
- }
-
- @AfterClass
- public static void tearDownClass() {
- cassandra.closeCluster();
- }
-
@Test
- public void reIndexShouldBeWellPerformed() throws Exception {
+ void reIndexShouldBeWellPerformed() throws Exception {
// Given a mailbox with 1000 messages * 150 KB
MailboxSession systemSession = mailboxManager.createSystemSession(USERNAME);
mailboxManager.createMailbox(INBOX, systemSession);
http://git-wip-us.apache.org/repos/asf/james-project/blob/02f8d6f7/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
index cab234b..76f8a00 100644
--- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
+++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
@@ -39,8 +39,8 @@ import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
public class ReIndexerImplTest {
@@ -52,8 +52,8 @@ public class ReIndexerImplTest {
private ReIndexer reIndexer;
- @Before
- public void setUp() throws MailboxException {
+ @BeforeEach
+ void setUp() throws MailboxException {
mailboxManager = new InMemoryIntegrationResources().createMailboxManager(new SimpleGroupMembershipResolver());
MailboxSessionMapperFactory mailboxSessionMapperFactory = mailboxManager.getMapperFactory();
messageSearchIndex = mock(ListeningMessageSearchIndex.class);
@@ -61,7 +61,7 @@ public class ReIndexerImplTest {
}
@Test
- public void reIndexShouldBeWellPerformed() throws Exception {
+ void reIndexShouldBeWellPerformed() throws Exception {
MailboxSession systemSession = mailboxManager.createSystemSession(USERNAME);
MailboxId mailboxId = mailboxManager.createMailbox(INBOX, systemSession).get();
ComposedMessageId createdMessage = mailboxManager.getMailbox(INBOX, systemSession)
@@ -86,7 +86,7 @@ public class ReIndexerImplTest {
}
@Test
- public void mailboxPathUserShouldBeUsedWhenReIndexing() throws Exception {
+ void mailboxPathUserShouldBeUsedWhenReIndexing() throws Exception {
MailboxSession systemSession = mailboxManager.createSystemSession(USERNAME);
MailboxId mailboxId = mailboxManager.createMailbox(INBOX, systemSession).get();
ComposedMessageId createdMessage = mailboxManager.getMailbox(INBOX, systemSession)
http://git-wip-us.apache.org/repos/asf/james-project/blob/02f8d6f7/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/registrations/GlobalRegistrationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/registrations/GlobalRegistrationTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/registrations/GlobalRegistrationTest.java
index 7ebd5d3..e0b06f7 100644
--- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/registrations/GlobalRegistrationTest.java
+++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/registrations/GlobalRegistrationTest.java
@@ -31,41 +31,41 @@ import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.QuotaRoot;
import org.apache.james.mailbox.store.event.EventFactory;
import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
public class GlobalRegistrationTest {
public static final MailboxPath INBOX = MailboxPath.forUser("btellier@apache.org", "INBOX");
- public static final MailboxPath NEW_PATH = MailboxPath.forUser("btellier@apache.org", "INBOX.new");
- public static final int UID_VALIDITY = 45;
- public static final SimpleMailbox MAILBOX = new SimpleMailbox(INBOX, UID_VALIDITY);
- public static final SimpleMailbox NEW_MAILBOX = new SimpleMailbox(NEW_PATH, UID_VALIDITY);
+ private static final MailboxPath NEW_PATH = MailboxPath.forUser("btellier@apache.org", "INBOX.new");
+ private static final int UID_VALIDITY = 45;
+ private static final SimpleMailbox MAILBOX = new SimpleMailbox(INBOX, UID_VALIDITY);
+ private static final SimpleMailbox NEW_MAILBOX = new SimpleMailbox(NEW_PATH, UID_VALIDITY);
private GlobalRegistration globalRegistration;
private EventFactory eventFactory;
private MockMailboxSession session;
- @Before
- public void setUp() {
+ @BeforeEach
+ void setUp() {
eventFactory = new EventFactory();
session = new MockMailboxSession("test");
globalRegistration = new GlobalRegistration();
}
@Test
- public void pathToIndexShouldNotBeChangedByDefault() {
+ void pathToIndexShouldNotBeChangedByDefault() {
assertThat(globalRegistration.getPathToIndex(INBOX).get()).isEqualTo(INBOX);
}
@Test
- public void pathToIndexShouldNotBeChangedByAddedEvents() {
+ void pathToIndexShouldNotBeChangedByAddedEvents() {
MailboxListener.MailboxEvent event = eventFactory.mailboxAdded(session, MAILBOX);
globalRegistration.event(event);
assertThat(globalRegistration.getPathToIndex(INBOX).get()).isEqualTo(INBOX);
}
@Test
- public void pathToIndexShouldBeNullifiedByDeletedEvents() {
+ void pathToIndexShouldBeNullifiedByDeletedEvents() {
QuotaRoot quotaRoot = QuotaRoot.quotaRoot("root", Optional.empty());
QuotaCount quotaCount = QuotaCount.count(123);
QuotaSize quotaSize = QuotaSize.size(456);
@@ -75,11 +75,9 @@ public class GlobalRegistrationTest {
}
@Test
- public void pathToIndexShouldBeModifiedByRenamedEvents() {
+ void pathToIndexShouldBeModifiedByRenamedEvents() {
MailboxListener.MailboxEvent event = eventFactory.mailboxRenamed(session, INBOX, NEW_MAILBOX);
globalRegistration.event(event);
assertThat(globalRegistration.getPathToIndex(INBOX).get()).isEqualTo(NEW_PATH);
}
-
-
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/02f8d6f7/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/registrations/MailboxRegistrationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/registrations/MailboxRegistrationTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/registrations/MailboxRegistrationTest.java
index 33a19b7..3b9bad2 100644
--- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/registrations/MailboxRegistrationTest.java
+++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/registrations/MailboxRegistrationTest.java
@@ -39,8 +39,8 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
import org.apache.mailbox.tools.indexer.events.ImpactingMessageEvent.FlagsMessageEvent;
import org.apache.mailbox.tools.indexer.events.ImpactingMessageEvent.MessageDeletedEvent;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
@@ -48,31 +48,31 @@ import com.google.common.collect.Lists;
public class MailboxRegistrationTest {
public static final MailboxPath INBOX = MailboxPath.forUser("btellier@apache.org", "INBOX");
- public static final MessageUid UID = MessageUid.of(18);
- public static final int UID_VALIDITY = 45;
- public static final SimpleMailbox MAILBOX = new SimpleMailbox(INBOX, UID_VALIDITY);
- public static final int MOD_SEQ = 21;
- public static final int SIZE = 41;
- public static final Flags NEW_FLAGS = new Flags(Flags.Flag.ANSWERED);
+ private static final MessageUid UID = MessageUid.of(18);
+ private static final int UID_VALIDITY = 45;
+ private static final SimpleMailbox MAILBOX = new SimpleMailbox(INBOX, UID_VALIDITY);
+ private static final int MOD_SEQ = 21;
+ private static final int SIZE = 41;
+ private static final Flags NEW_FLAGS = new Flags(Flags.Flag.ANSWERED);
private MailboxRegistration mailboxRegistration;
private EventFactory eventFactory;
private MockMailboxSession session;
- @Before
- public void setUp() {
+ @BeforeEach
+ void setUp() {
session = new MockMailboxSession("test");
eventFactory = new EventFactory();
mailboxRegistration = new MailboxRegistration(INBOX);
}
@Test
- public void reportedEventsShouldBeInitiallyEmpty() {
+ void reportedEventsShouldBeInitiallyEmpty() {
assertThat(mailboxRegistration.getImpactingEvents(UID)).isEmpty();
}
@Test
- public void addedEventsShouldNotBeReported() {
+ void addedEventsShouldNotBeReported() {
TreeMap<MessageUid, MessageMetaData> treeMap = new TreeMap<>();
treeMap.put(UID, new SimpleMessageMetaData(UID, MOD_SEQ, new Flags(), SIZE, new Date(), new DefaultMessageId()));
MailboxListener.MailboxEvent event = eventFactory.added(session, treeMap, MAILBOX, ImmutableMap.<MessageUid, MailboxMessage>of());
@@ -81,7 +81,7 @@ public class MailboxRegistrationTest {
}
@Test
- public void expungedEventsShouldBeReported() {
+ void expungedEventsShouldBeReported() {
TreeMap<MessageUid, MessageMetaData> treeMap = new TreeMap<>();
treeMap.put(UID, new SimpleMessageMetaData(UID, MOD_SEQ, new Flags(), SIZE, new Date(), new DefaultMessageId()));
MailboxListener.MailboxEvent event = eventFactory.expunged(session, treeMap, MAILBOX);
@@ -90,7 +90,7 @@ public class MailboxRegistrationTest {
}
@Test
- public void flagsEventsShouldBeReported() {
+ void flagsEventsShouldBeReported() {
MailboxListener.MailboxEvent event = eventFactory.flagsUpdated(session,
Lists.newArrayList(UID),
MAILBOX,
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[04/12] james-project git commit: JAMES-2560 Integration test for
ICSSanitizer
Posted by bt...@apache.org.
JAMES-2560 Integration test for ICSSanitizer
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d722432d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d722432d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d722432d
Branch: refs/heads/master
Commit: d722432dde9161c7e210273692b132311ed7566a
Parents: 09b4165
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Oct 11 12:24:40 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Oct 12 15:26:53 2018 +0700
----------------------------------------------------------------------
server/container/guice/memory-guice/pom.xml | 5 +++
.../src/test/resources/mailetcontainer.xml | 1 +
.../cucumber/GetMessagesMethodStepdefs.java | 26 +++++++++++
.../test/resources/cucumber/GetMessages.feature | 15 +++++++
.../src/test/resources/eml/ics_in_header.eml | 46 ++++++++++++++++++++
.../src/test/resources/mailetcontainer.xml | 1 +
6 files changed, 94 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/d722432d/server/container/guice/memory-guice/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/pom.xml b/server/container/guice/memory-guice/pom.xml
index 661634c..3bb24f2 100644
--- a/server/container/guice/memory-guice/pom.xml
+++ b/server/container/guice/memory-guice/pom.xml
@@ -60,6 +60,11 @@
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
+ <artifactId>apache-mailet-icalendar</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
<artifactId>event-sourcing-event-store-memory</artifactId>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/james-project/blob/d722432d/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/mailetcontainer.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/mailetcontainer.xml b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/mailetcontainer.xml
index 2ecff3f..3dc8bbf 100644
--- a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/mailetcontainer.xml
+++ b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/mailetcontainer.xml
@@ -57,6 +57,7 @@
<mailet match="All" class="RemoveMimeHeader">
<name>bcc</name>
</mailet>
+ <mailet match="All" class="ICSSanitizer"/>
<mailet match="All" class="org.apache.james.jmap.mailet.TextCalendarBodyToAttachment"/>
<mailet match="All" class="RecipientRewriteTable">
<errorProcessor>rrt-error</errorProcessor>
http://git-wip-us.apache.org/repos/asf/james-project/blob/d722432d/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
index efc15e6..13819e5 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
@@ -21,6 +21,7 @@ package org.apache.james.jmap.methods.integration.cucumber;
import static org.apache.james.jmap.TestingConstants.ARGUMENTS;
import static org.apache.james.jmap.TestingConstants.NAME;
+import static org.apache.james.mailbox.model.MailboxConstants.INBOX;
import static org.assertj.core.api.Assertions.assertThat;
import java.io.ByteArrayInputStream;
@@ -40,12 +41,17 @@ import javax.mail.Flags;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.StringEscapeUtils;
+import org.apache.james.jmap.TestingConstants;
import org.apache.james.jmap.methods.integration.cucumber.util.TableRow;
import org.apache.james.jmap.model.MessagePreviewGenerator;
+import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
+import org.apache.james.util.ClassLoaderUtils;
import org.apache.james.utils.JmapGuiceProbe;
+import org.apache.james.utils.SMTPMessageSender;
import org.javatuples.Pair;
import com.github.fge.lambdas.Throwing;
@@ -373,6 +379,26 @@ public class GetMessagesMethodStepdefs {
appendMessage(messageName, mailbox, StringListToFlags.fromFlagList(flagList));
}
+ @Given("^\"([^\"]*)\" receives a SMTP message specified in file \"([^\"]*)\" as message \"([^\"]*)\"$")
+ public void smtpSend(String user, String fileName, String messageName) throws Exception {
+ MailboxId mailboxId = mainStepdefs.mailboxProbe.getMailboxId(MailboxConstants.USER_NAMESPACE, user, INBOX);
+ SMTPMessageSender smtpMessageSender = new SMTPMessageSender("domain.com");
+ smtpMessageSender
+ .connect("127.0.0.1", mainStepdefs.jmapServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
+ .sendMessageWithHeaders("from@domain.com", user,
+ ClassLoaderUtils.getSystemResourceAsString(fileName));
+ smtpMessageSender.close();
+
+ TestingConstants.calmlyAwait.until(() -> !retrieveIds(user, mailboxId).isEmpty());
+ List<String> ids = retrieveIds(user, mailboxId);
+ messageIdStepdefs.addMessageId(messageName, mainStepdefs.messageIdFactory.fromString(ids.get(0)));
+ }
+
+ public List<String> retrieveIds(String user, MailboxId mailboxId) {
+ userStepdefs.execWithUser(user, () -> httpClient.post("[[\"getMessageList\", {\"filter\":{\"inMailboxes\":[\"" + mailboxId.serialize() + "\"]}}, \"#0\"]]"));
+ return httpClient.jsonPath.read(ARGUMENTS + ".messageIds.[*]");
+ }
+
private void appendMessage(String messageName, String mailbox, Flags flags) throws Exception {
ZonedDateTime dateTime = ZonedDateTime.parse("2014-10-30T14:12:00Z");
boolean isRecent = flags.contains(Flags.Flag.RECENT);
http://git-wip-us.apache.org/repos/asf/james-project/blob/d722432d/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
index 828f068..7e79e5c 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
@@ -419,3 +419,18 @@ Feature: GetMessages method
|cid |null |
|name |"IMG_6112.JPG" |
|isInline |false |
+
+ @Only
+ Scenario: Header only text calendar should be read as normal calendar attachment by JMAP
+ Given "alice@domain.tld" receives a SMTP message specified in file "eml/ics_in_header.eml" as message "m1"
+ When "alice@domain.tld" ask for messages "m1"
+ Then no error is returned
+ And the list should contain 1 message
+ And the hasAttachment of the message is "true"
+ And the list of attachments of the message contains 1 attachments
+ And the first attachment is:
+ |key | value |
+ |type |"text/calendar" |
+ |size |1056 |
+ |name |"event.ics" |
+ |isInline |false |
http://git-wip-us.apache.org/repos/asf/james-project/blob/d722432d/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/ics_in_header.eml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/ics_in_header.eml b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/ics_in_header.eml
new file mode 100644
index 0000000..76ca1b7
--- /dev/null
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/ics_in_header.eml
@@ -0,0 +1,46 @@
+MIME-Version: 1.0
+Content-Type: multipart/mixed;
+ boundary="----=_Part_80_888179120.1536742699653"
+From: Alice <al...@linagora.com>
+Message-ID: <82...@linagora.com>
+To: Bob <bo...@linagora.com>
+Date: Wed, 12 Sep 2018 10:58:18 +0200
+Subject: Event Invitation Reply (Accepted):
+ Point Produit
+
+------=_Part_80_888179120.1536742699653
+BEGIN:VCALENDAR
+PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
+VERSION:2.0
+METHOD:REPLY
+BEGIN:VEVENT
+CREATED:20180911T144134Z
+LAST-MODIFIED:20180912T085818Z
+DTSTAMP:20180912T085818Z
+UID:f1514f44bf39311568d64072945fc3b2973debebb0d550e8c841f3f0604b2481e047fe
+ b2aab16e43439a608f28671ab7c10e754cbbe63441a01ba232a553df751eb0931728d67672
+
+SUMMARY:Point Produit
+PRIORITY:5
+ORGANIZER;CN=Bob;X-OBM-ID=348:mailto:bob@linagora.com
+ATTENDEE;CN=Alice;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL;X-OBM-ID=810:
+ mailto:alice@linagora.com
+DTSTART:20180919T123000Z
+DURATION:PT1H
+TRANSP:OPAQUE
+SEQUENCE:0
+X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:No value for X property. Rem
+ oving entire property:
+CLASS:PUBLIC
+X-OBM-DOMAIN:linagora.com
+X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
+LOCATION:Téléphone
+END:VEVENT
+END:VCALENDAR
+Content-class: urn:content-classes:calendarmessage
+Content-type: text/calendar; method=REPLY; charset=UTF-8
+Content-transfer-encoding: 8BIT
+Content-Disposition: attachment
+
+
+------=_Part_80_888179120.1536742699653--
http://git-wip-us.apache.org/repos/asf/james-project/blob/d722432d/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/mailetcontainer.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/mailetcontainer.xml b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/mailetcontainer.xml
index c890709..8201e60 100644
--- a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/mailetcontainer.xml
+++ b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/mailetcontainer.xml
@@ -58,6 +58,7 @@
<mailet match="All" class="RemoveMimeHeader">
<name>bcc</name>
</mailet>
+ <mailet match="All" class="ICSSanitizer"/>
<mailet match="All" class="org.apache.james.jmap.mailet.TextCalendarBodyToAttachment"/>
<mailet match="All" class="RecipientRewriteTable">
<errorProcessor>rrt-error</errorProcessor>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[05/12] james-project git commit: JAMES-2560 Introduce a mailet for
sanitizing header only ICS
Posted by bt...@apache.org.
JAMES-2560 Introduce a mailet for sanitizing header only ICS
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/ac82719f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/ac82719f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/ac82719f
Branch: refs/heads/master
Commit: ac82719fd460f5bc8a7306fb944cb4d7715b9dac
Parents: c7b1600
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Oct 11 11:38:34 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Oct 12 15:26:53 2018 +0700
----------------------------------------------------------------------
mailet/icalendar/pom.xml | 20 +++-
.../james/transport/mailets/ICSSanitizer.java | 110 +++++++++++++++++
.../transport/mailets/ICSSanitizerTest.java | 118 +++++++++++++++++++
.../src/test/resources/ics_in_header.eml | 46 ++++++++
4 files changed, 289 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/ac82719f/mailet/icalendar/pom.xml
----------------------------------------------------------------------
diff --git a/mailet/icalendar/pom.xml b/mailet/icalendar/pom.xml
index 78cddde..a7d03f4 100644
--- a/mailet/icalendar/pom.xml
+++ b/mailet/icalendar/pom.xml
@@ -80,11 +80,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>net.javacrumbs.json-unit</groupId>
<artifactId>json-unit-assertj</artifactId>
<scope>test</scope>
@@ -104,6 +99,21 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-engine</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-launcher</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.vintage</groupId>
+ <artifactId>junit-vintage-engine</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.mnode.ical4j</groupId>
<artifactId>ical4j</artifactId>
<version>3.0.1</version>
http://git-wip-us.apache.org/repos/asf/james-project/blob/ac82719f/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICSSanitizer.java
----------------------------------------------------------------------
diff --git a/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICSSanitizer.java b/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICSSanitizer.java
new file mode 100644
index 0000000..a2b268d
--- /dev/null
+++ b/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICSSanitizer.java
@@ -0,0 +1,110 @@
+/****************************************************************
+ * 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.transport.mailets;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
+
+import javax.mail.BodyPart;
+import javax.mail.Header;
+import javax.mail.MessagingException;
+import javax.mail.Multipart;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+
+import org.apache.mailet.Mail;
+import org.apache.mailet.base.GenericMailet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.fge.lambdas.Throwing;
+
+public class ICSSanitizer extends GenericMailet {
+ private static final Logger LOGGER = LoggerFactory.getLogger(ICSSanitizer.class);
+ private static final int TEXT_PREFIX_SIZE = 5;
+
+ @Override
+ public void service(Mail mail) {
+ try {
+ MimeMessage mimeMessage = mail.getMessage();
+
+ if (mimeMessage.getContent() instanceof Multipart) {
+ Multipart multipart = (Multipart) mimeMessage.getContent();
+
+ if (needsSanitizing(multipart)) {
+ mimeMessage.setContent(sanitize(multipart));
+ mimeMessage.saveChanges();
+ }
+ }
+ } catch (Exception e) {
+ LOGGER.warn("Could not sanitize {}", mail.getName(), e);
+ }
+ }
+
+ private boolean needsSanitizing(Multipart multipart) throws MessagingException {
+ return bodyPartStream(multipart)
+ .anyMatch(Throwing.predicate(this::needsSanitizing));
+ }
+
+ private boolean needsSanitizing(BodyPart bodyPart) throws MessagingException {
+ return bodyPart.isMimeType("text/calendar") && bodyPart.getSize() <= 0;
+ }
+
+ private MimeMultipart sanitize(Multipart multipart) throws MessagingException {
+ MimeMultipart mimeMultipart = new MimeMultipart();
+ bodyPartStream(multipart)
+ .map(Throwing.function(this::sanitize))
+ .forEach(Throwing.consumer(mimeMultipart::addBodyPart));
+ return mimeMultipart;
+ }
+
+ private BodyPart sanitize(BodyPart bodyPart) throws MessagingException {
+ if (needsSanitizing(bodyPart)) {
+ if (bodyPart instanceof MimeBodyPart) {
+ MimeBodyPart mimeBodyPart = (MimeBodyPart) bodyPart;
+ mimeBodyPart.setText(
+ computeBodyFromOriginalCalendar(bodyPart),
+ StandardCharsets.UTF_8.name(),
+ bodyPart.getContentType().substring(TEXT_PREFIX_SIZE));
+ }
+ }
+ return bodyPart;
+ }
+
+ private String computeBodyFromOriginalCalendar(BodyPart bodyPart) throws MessagingException {
+ return headerStream(bodyPart)
+ .map(header -> header.getName() + ": " + header.getValue())
+ .collect(Collectors.joining("\r\n"));
+ }
+
+ private Stream<Header> headerStream(BodyPart bodyPart) throws MessagingException {
+ return Collections.list(bodyPart.getAllHeaders()).stream();
+ }
+
+ private Stream<BodyPart> bodyPartStream(Multipart multipart) throws MessagingException {
+ return IntStream.range(0, multipart.getCount())
+ .boxed()
+ .map(Throwing.function(multipart::getBodyPart));
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/ac82719f/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICSSanitizerTest.java
----------------------------------------------------------------------
diff --git a/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICSSanitizerTest.java b/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICSSanitizerTest.java
new file mode 100644
index 0000000..1e39fa2
--- /dev/null
+++ b/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICSSanitizerTest.java
@@ -0,0 +1,118 @@
+/****************************************************************
+ * 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.transport.mailets;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.nio.charset.StandardCharsets;
+
+import javax.mail.Multipart;
+import javax.mail.util.SharedByteArrayInputStream;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.james.core.builder.MimeMessageBuilder;
+import org.apache.james.util.ClassLoaderUtils;
+import org.apache.james.util.MimeMessageUtil;
+import org.apache.mailet.base.test.FakeMail;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+class ICSSanitizerTest {
+ private ICSSanitizer testee;
+
+ @BeforeEach
+ void setUp() {
+ testee = new ICSSanitizer();
+ }
+
+ @Test
+ void serviceShouldEnhanceTextCalendarOnlyHeaders() throws Exception {
+ FakeMail mail = FakeMail.builder()
+ .mimeMessage(MimeMessageUtil.mimeMessageFromStream(ClassLoaderUtils.getSystemResourceAsSharedStream("ics_in_header.eml")))
+ .build();
+
+ testee.service(mail);
+
+ Object content = mail.getMessage().getContent();
+
+ assertThat(content).isInstanceOf(Multipart.class);
+ Multipart multipart = (Multipart) content;
+ assertThat(multipart.getCount()).isEqualTo(1);
+
+ assertThat(multipart.getBodyPart(0).getContent())
+ .isEqualTo("BEGIN: VCALENDAR\r\n" +
+ "PRODID: -//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN\r\n" +
+ "VERSION: 2.0\r\n" +
+ "METHOD: REPLY\r\n" +
+ "BEGIN: VEVENT\r\n" +
+ "CREATED: 20180911T144134Z\r\n" +
+ "LAST-MODIFIED: 20180912T085818Z\r\n" +
+ "DTSTAMP: 20180912T085818Z\r\n" +
+ "UID: f1514f44bf39311568d64072945fc3b2973debebb0d550e8c841f3f0604b2481e047fe\r\n" +
+ " b2aab16e43439a608f28671ab7c10e754cbbe63441a01ba232a553df751eb0931728d67672\r\n" +
+ " \r\n" +
+ "SUMMARY: Point Produit\r\n" +
+ "PRIORITY: 5\r\n" +
+ "ORGANIZER;CN=Bob;X-OBM-ID=348: mailto:bob@linagora.com\r\n" +
+ "ATTENDEE;CN=Alice;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL;X-OBM-ID=810: mailto:alice@linagora.com\r\n" +
+ "DTSTART: 20180919T123000Z\r\n" +
+ "DURATION: PT1H\r\n" +
+ "TRANSP: OPAQUE\r\n" +
+ "SEQUENCE: 0\r\n" +
+ "X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR: No value for X property. Rem\r\n" +
+ " oving entire property:\r\n" +
+ "CLASS: PUBLIC\r\n" +
+ "X-OBM-DOMAIN: linagora.com\r\n" +
+ "X-OBM-DOMAIN-UUID: 02874f7c-d10e-102f-acda-0015176f7922\r\n" +
+ "LOCATION: TÃ\u0083©lÃ\u0083©phone\r\n" +
+ "END: VEVENT\r\n" +
+ "END: VCALENDAR\r\n" +
+ "Content-class: urn:content-classes:calendarmessage\r\n" +
+ "Content-type: text/calendar; method=REPLY; charset=UTF-8\r\n" +
+ "Content-transfer-encoding: 8BIT\r\n" +
+ "Content-Disposition: attachment");
+ assertThat(multipart.getBodyPart(0).getContentType()).startsWith("text/calendar; method=REPLY; charset=UTF-8");
+ }
+
+ @Test
+ void validTextCalendarShouldNotBeSanitized() throws Exception {
+ FakeMail mail = FakeMail.builder()
+ .mimeMessage(
+ MimeMessageBuilder.mimeMessageBuilder()
+ .setMultipartWithBodyParts(
+ MimeMessageBuilder.bodyPartBuilder()
+ .type("text/calendar")
+ .data("Not empty")
+ .addHeader("X-CUSTOM", "Because it is a valid ICS it should not be pushed in body")))
+ .build();
+
+ testee.service(mail);
+
+ Object content = mail.getMessage().getContent();
+
+ assertThat(content).isInstanceOf(Multipart.class);
+ Multipart multipart = (Multipart) content;
+ assertThat(multipart.getCount()).isEqualTo(1);
+
+ SharedByteArrayInputStream inputStream = (SharedByteArrayInputStream) multipart.getBodyPart(0).getContent();
+ assertThat(IOUtils.toString(inputStream, StandardCharsets.UTF_8))
+ .doesNotContain("X-CUSTOM");
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/ac82719f/mailet/icalendar/src/test/resources/ics_in_header.eml
----------------------------------------------------------------------
diff --git a/mailet/icalendar/src/test/resources/ics_in_header.eml b/mailet/icalendar/src/test/resources/ics_in_header.eml
new file mode 100644
index 0000000..76ca1b7
--- /dev/null
+++ b/mailet/icalendar/src/test/resources/ics_in_header.eml
@@ -0,0 +1,46 @@
+MIME-Version: 1.0
+Content-Type: multipart/mixed;
+ boundary="----=_Part_80_888179120.1536742699653"
+From: Alice <al...@linagora.com>
+Message-ID: <82...@linagora.com>
+To: Bob <bo...@linagora.com>
+Date: Wed, 12 Sep 2018 10:58:18 +0200
+Subject: Event Invitation Reply (Accepted):
+ Point Produit
+
+------=_Part_80_888179120.1536742699653
+BEGIN:VCALENDAR
+PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
+VERSION:2.0
+METHOD:REPLY
+BEGIN:VEVENT
+CREATED:20180911T144134Z
+LAST-MODIFIED:20180912T085818Z
+DTSTAMP:20180912T085818Z
+UID:f1514f44bf39311568d64072945fc3b2973debebb0d550e8c841f3f0604b2481e047fe
+ b2aab16e43439a608f28671ab7c10e754cbbe63441a01ba232a553df751eb0931728d67672
+
+SUMMARY:Point Produit
+PRIORITY:5
+ORGANIZER;CN=Bob;X-OBM-ID=348:mailto:bob@linagora.com
+ATTENDEE;CN=Alice;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL;X-OBM-ID=810:
+ mailto:alice@linagora.com
+DTSTART:20180919T123000Z
+DURATION:PT1H
+TRANSP:OPAQUE
+SEQUENCE:0
+X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:No value for X property. Rem
+ oving entire property:
+CLASS:PUBLIC
+X-OBM-DOMAIN:linagora.com
+X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
+LOCATION:Téléphone
+END:VEVENT
+END:VCALENDAR
+Content-class: urn:content-classes:calendarmessage
+Content-type: text/calendar; method=REPLY; charset=UTF-8
+Content-transfer-encoding: 8BIT
+Content-Disposition: attachment
+
+
+------=_Part_80_888179120.1536742699653--
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[06/12] james-project git commit: JAMES-2560 Add a file name if none
Posted by bt...@apache.org.
JAMES-2560 Add a file name if none
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/09b41659
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/09b41659
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/09b41659
Branch: refs/heads/master
Commit: 09b416599741859aa8c9686f21c1f3a80686919b
Parents: ac82719
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Oct 11 12:22:26 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Oct 12 15:26:53 2018 +0700
----------------------------------------------------------------------
.../org/apache/james/transport/mailets/ICSSanitizer.java | 8 ++++++++
1 file changed, 8 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/09b41659/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICSSanitizer.java
----------------------------------------------------------------------
diff --git a/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICSSanitizer.java b/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICSSanitizer.java
index a2b268d..bdbdb2b 100644
--- a/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICSSanitizer.java
+++ b/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICSSanitizer.java
@@ -43,6 +43,7 @@ import com.github.fge.lambdas.Throwing;
public class ICSSanitizer extends GenericMailet {
private static final Logger LOGGER = LoggerFactory.getLogger(ICSSanitizer.class);
private static final int TEXT_PREFIX_SIZE = 5;
+ public static final String DEFAULT_FILENAME = "event.ics";
@Override
public void service(Mail mail) {
@@ -87,11 +88,18 @@ public class ICSSanitizer extends GenericMailet {
computeBodyFromOriginalCalendar(bodyPart),
StandardCharsets.UTF_8.name(),
bodyPart.getContentType().substring(TEXT_PREFIX_SIZE));
+ setFileNameIfNeeded(mimeBodyPart);
}
}
return bodyPart;
}
+ private void setFileNameIfNeeded(MimeBodyPart mimeBodyPart) throws MessagingException {
+ if (mimeBodyPart.getFileName() == null) {
+ mimeBodyPart.setFileName(DEFAULT_FILENAME);
+ }
+ }
+
private String computeBodyFromOriginalCalendar(BodyPart bodyPart) throws MessagingException {
return headerStream(bodyPart)
.map(header -> header.getName() + ": " + header.getValue())
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[11/12] james-project git commit: JAMES-2555 Proves our fix helps
reindexing big mailboxes
Posted by bt...@apache.org.
JAMES-2555 Proves our fix helps reindexing big mailboxes
Before the fix the added test was failing with OutOfMemory exception after 300
messages. Now it passes easily 1000 messages.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/962683d3
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/962683d3
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/962683d3
Branch: refs/heads/master
Commit: 962683d38715e7a40286e422fc0487c495a47c32
Parents: 12a3445
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Oct 11 09:19:44 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Oct 12 15:27:34 2018 +0700
----------------------------------------------------------------------
mailbox/tools/indexer/pom.xml | 53 ++++++++-
.../indexer/CassandraReIndexerImplTest.java | 119 +++++++++++++++++++
2 files changed, 170 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/962683d3/mailbox/tools/indexer/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/pom.xml b/mailbox/tools/indexer/pom.xml
index e0874f0..4395bba 100644
--- a/mailbox/tools/indexer/pom.xml
+++ b/mailbox/tools/indexer/pom.xml
@@ -34,6 +34,17 @@
<dependencies>
<dependency>
<groupId>${james.groupId}</groupId>
+ <artifactId>apache-james-backends-cassandra</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
+ <artifactId>apache-james-backends-cassandra</artifactId>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
<artifactId>apache-james-mailbox-api</artifactId>
</dependency>
<dependency>
@@ -44,11 +55,12 @@
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
- <artifactId>apache-james-mailbox-store</artifactId>
+ <artifactId>apache-james-mailbox-cassandra</artifactId>
+ <scope>test</scope>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
- <artifactId>apache-james-mailbox-store</artifactId>
+ <artifactId>apache-james-mailbox-cassandra</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
@@ -64,6 +76,26 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>${james.groupId}</groupId>
+ <artifactId>apache-james-mailbox-store</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
+ <artifactId>apache-james-mailbox-store</artifactId>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
+ <artifactId>blob-cassandra</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.google.inject</groupId>
+ <artifactId>guice</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>test</scope>
@@ -91,7 +123,24 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.testcontainers</groupId>
+ <artifactId>testcontainers</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <argLine>-Xms128m -Xmx256m</argLine>
+ <reuseForks>false</reuseForks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/962683d3/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java
new file mode 100644
index 0000000..7af0646
--- /dev/null
+++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java
@@ -0,0 +1,119 @@
+/****************************************************************
+ * 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.mailbox.tools.indexer;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+
+import java.nio.charset.StandardCharsets;
+import java.time.Duration;
+
+import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.DockerCassandraRule;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.cassandra.CassandraMailboxManager;
+import org.apache.james.mailbox.cassandra.CassandraMailboxManagerProvider;
+import org.apache.james.mailbox.cassandra.mail.MailboxAggregateModule;
+import org.apache.james.mailbox.indexer.ReIndexer;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.apache.james.mailbox.store.mail.model.MailboxMessage;
+import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
+import org.apache.james.util.concurrency.ConcurrentTestRunner;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.Test;
+
+import com.google.common.base.Strings;
+
+public class CassandraReIndexerImplTest {
+ private static final String USERNAME = "benwa@apache.org";
+ public static final MailboxPath INBOX = MailboxPath.forUser(USERNAME, "INBOX");
+ private CassandraMailboxManager mailboxManager;
+ private ListeningMessageSearchIndex messageSearchIndex;
+
+ private ReIndexer reIndexer;
+
+ @ClassRule
+ public static DockerCassandraRule cassandraServer = new DockerCassandraRule();
+
+ private static CassandraCluster cassandra;
+
+ @BeforeClass
+ public static void setUpClass() {
+ cassandra = CassandraCluster.create(MailboxAggregateModule.MODULE_WITH_QUOTA, cassandraServer.getHost());
+ }
+
+ @Before
+ public void setUp() {
+ mailboxManager = CassandraMailboxManagerProvider.provideMailboxManager(cassandra.getConf(), cassandra.getTypesProvider());
+ MailboxSessionMapperFactory mailboxSessionMapperFactory = mailboxManager.getMapperFactory();
+ messageSearchIndex = mock(ListeningMessageSearchIndex.class);
+ reIndexer = new ReIndexerImpl(mailboxManager, messageSearchIndex, mailboxSessionMapperFactory);
+ }
+
+ @After
+ public void tearDown() {
+ cassandra.clearTables();
+ }
+
+ @AfterClass
+ public static void tearDownClass() {
+ cassandra.closeCluster();
+ }
+
+ @Test
+ public void reIndexShouldBeWellPerformed() throws Exception {
+ // Given a mailbox with 1000 messages * 150 KB
+ MailboxSession systemSession = mailboxManager.createSystemSession(USERNAME);
+ mailboxManager.createMailbox(INBOX, systemSession);
+
+ byte[] bigBody = (Strings.repeat("header: value\r\n", 10000) + "\r\nbody").getBytes(StandardCharsets.UTF_8);
+
+ int threadCount = 10;
+ int operationCount = 100;
+ MessageManager mailbox = mailboxManager.getMailbox(INBOX, systemSession);
+ ConcurrentTestRunner.builder()
+ .operation((a, b) -> mailbox
+ .appendMessage(
+ MessageManager.AppendCommand.builder().build(bigBody),
+ systemSession))
+ .threadCount(threadCount)
+ .operationCount(operationCount)
+ .runSuccessfullyWithin(Duration.ofMinutes(10));
+
+ // When We re-index
+ reIndexer.reIndex(INBOX);
+
+ // The indexer is called for each message
+ verify(messageSearchIndex).deleteAll(any(MailboxSession.class), any(Mailbox.class));
+ verify(messageSearchIndex, times(threadCount * operationCount))
+ .add(any(MailboxSession.class), any(Mailbox.class),any(MailboxMessage.class));
+ verifyNoMoreInteractions(messageSearchIndex);
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[08/12] james-project git commit: JAMES-2555 Do not use null to
represent event absence
Posted by bt...@apache.org.
JAMES-2555 Do not use null to represent event absence
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/fbe7900d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/fbe7900d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/fbe7900d
Branch: refs/heads/master
Commit: fbe7900db3364fb593eadadd3e49f3d97316fb81
Parents: 62e79d1
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Oct 9 09:01:35 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Oct 12 15:27:13 2018 +0700
----------------------------------------------------------------------
.../mailbox/tools/indexer/ReIndexerImpl.java | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/fbe7900d/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
index 413f6b7..72a6746 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
@@ -19,7 +19,6 @@
package org.apache.mailbox.tools.indexer;
-import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;
@@ -44,7 +43,7 @@ import org.apache.mailbox.tools.indexer.registrations.MailboxRegistration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
/**
* Note about live re-indexation handling :
@@ -135,23 +134,27 @@ public class ReIndexerImpl implements ReIndexer {
private void handleMailboxIndexingIterations(MailboxSession mailboxSession, MailboxRegistration mailboxRegistration, Mailbox mailbox, Iterator<MailboxMessage> iterator) throws MailboxException {
while (iterator.hasNext()) {
MailboxMessage message = iterator.next();
- ImpactingMessageEvent impactingMessageEvent = findMostRelevant(mailboxRegistration.getImpactingEvents(message.getUid()));
+ Optional<ImpactingMessageEvent> impactingMessageEvent = findMostRelevant(mailboxRegistration.getImpactingEvents(message.getUid()));
- impactingMessageEvent.newFlags().ifPresent(message::setFlags);
+ impactingMessageEvent.flatMap(ImpactingMessageEvent::newFlags).ifPresent(message::setFlags);
- if (!impactingMessageEvent.wasDeleted()) {
+ if (wasNotDeleted(impactingMessageEvent)) {
messageSearchIndex.add(mailboxSession, mailbox, message);
}
}
}
- private ImpactingMessageEvent findMostRelevant(Collection<ImpactingMessageEvent> messageEvents) {
+ private boolean wasNotDeleted(Optional<ImpactingMessageEvent> impactingMessageEvent) {
+ return impactingMessageEvent.map(event -> !event.wasDeleted()).orElse(true);
+ }
+
+ private Optional<ImpactingMessageEvent> findMostRelevant(List<ImpactingMessageEvent> messageEvents) {
for (ImpactingMessageEvent impactingMessageEvent : messageEvents) {
if (impactingMessageEvent.getType().equals(ImpactingEventType.Deletion)) {
- return impactingMessageEvent;
+ return Optional.of(impactingMessageEvent);
}
}
- return Iterables.getLast(messageEvents, null);
+ return Lists.reverse(messageEvents).stream().findFirst();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[02/12] james-project git commit: Fix Checkstyle errors and Eclipse
warnings
Posted by bt...@apache.org.
Fix Checkstyle errors and Eclipse warnings
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c7b16003
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c7b16003
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c7b16003
Branch: refs/heads/master
Commit: c7b160033fe2043313fb8ba2d783348854850959
Parents: 57b8e7d
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Wed Oct 10 15:46:03 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Oct 12 15:25:50 2018 +0700
----------------------------------------------------------------------
.../cassandra/CassandraEventStoreExtension.java | 3 ++-
.../protocols/smtp/AbstractSMTPServerTest.java | 1 -
.../objectstorage/DockerSwiftExtension.java | 4 ++--
.../org/apache/james/CassandraNodeConfTest.java | 4 ++--
.../apache/james/GuiceModuleTestExtension.java | 2 +-
.../org/apache/james/GuiceJamesServerTest.java | 4 ++--
.../james/util/CompletableFutureUtilTest.java | 1 -
...ResolutionRemoteDeliveryIntegrationTest.java | 1 -
.../GatewayRemoteDeliveryIntegrationTest.java | 2 --
.../james/smtp/SmtpAuthorizedAddressesTest.java | 1 -
.../mailets/GroupMappingRelayTest.java | 1 -
.../mailets/ICSAttachmentWorkflowTest.java | 2 +-
.../mailrepository/MailRepositoryContract.java | 2 +-
...ilRepositoryWithFakeImplementationsTest.java | 25 ++++++++++----------
.../service/ReprocessingServiceTest.java | 2 +-
.../queue/api/ManageableMailQueueContract.java | 1 +
.../james/queue/rabbitmq/EnqueuedItemTest.java | 1 -
...abbitMQMailQueueConfigurationChangeTest.java | 3 ---
.../rabbitmq/RabbitMqMailQueueFactoryTest.java | 1 +
19 files changed, 27 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreExtension.java
----------------------------------------------------------------------
diff --git a/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreExtension.java b/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreExtension.java
index 52ce427..8633cb0 100644
--- a/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreExtension.java
+++ b/event-sourcing/event-store-cassandra/src/test/java/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreExtension.java
@@ -38,11 +38,12 @@ import org.junit.jupiter.api.extension.ParameterResolver;
import com.google.common.collect.ImmutableSet;
public class CassandraEventStoreExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback, ParameterResolver {
+ @SuppressWarnings("rawtypes")
private final Set<EventDTOModule> modules;
private CassandraClusterExtension cassandra;
private EventStoreDao eventStoreDao;
- public CassandraEventStoreExtension(EventDTOModule... modules) {
+ public CassandraEventStoreExtension(@SuppressWarnings("rawtypes") EventDTOModule... modules) {
this.modules = Arrays.stream(modules).collect(ImmutableSet.toImmutableSet());
this.cassandra = new CassandraClusterExtension(CassandraEventStoreModule.MODULE);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
index 40e4a88..faeca83 100644
--- a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
+++ b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
@@ -30,7 +30,6 @@ import java.time.Duration;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
-import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.commons.configuration.Configuration;
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DockerSwiftExtension.java
----------------------------------------------------------------------
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DockerSwiftExtension.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DockerSwiftExtension.java
index 43155a0..d928e72 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DockerSwiftExtension.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DockerSwiftExtension.java
@@ -37,13 +37,13 @@ public class DockerSwiftExtension implements ParameterResolver, BeforeAllCallbac
}
@Override
- public void beforeAll(ExtensionContext context) throws Exception {
+ public void beforeAll(ExtensionContext context) {
swiftContainer.start();
dockerSwift = swiftContainer.dockerSwift();
}
@Override
- public void afterAll(ExtensionContext context) throws Exception {
+ public void afterAll(ExtensionContext context) {
swiftContainer.stop();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java
index 9c12467..bfaf593 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java
@@ -76,7 +76,7 @@ class CassandraNodeConfTest {
.build();
@Test
- void serverShouldStartServiceWhenNodeIsReachable (GuiceJamesServer server) throws Exception {
+ void serverShouldStartServiceWhenNodeIsReachable(GuiceJamesServer server) throws Exception {
assertThatServerStartCorrectly(server);
}
}
@@ -103,7 +103,7 @@ class CassandraNodeConfTest {
.build();
@Test
- void serverShouldStartServiceWhenNodeIsReachable (GuiceJamesServer server) throws Exception {
+ void serverShouldStartServiceWhenNodeIsReachable(GuiceJamesServer server) throws Exception {
assertThatServerStartCorrectly(server);
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/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 e51c0d7..e0bf5e1 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
@@ -24,7 +24,7 @@ import com.google.inject.Module;
public interface GuiceModuleTestExtension extends RegistrableExtension {
default Module getModule() {
- return binder -> {};
+ return binder -> { };
}
default void await() {}
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java
index 7edf781..2022f57 100644
--- a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java
+++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java
@@ -59,7 +59,7 @@ class GuiceJamesServerTest {
@Nested
class InitFailed {
- private final ConfigurationPerformer THROWING_CONFIGURATION_PERFORMER = new ConfigurationPerformer() {
+ private final ConfigurationPerformer throwingConfigurationPerformer = new ConfigurationPerformer() {
@Override
public void initModule() {
throw new RuntimeException();
@@ -79,7 +79,7 @@ class GuiceJamesServerTest {
.overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class))
.overrideWith(binder -> Multibinder.newSetBinder(binder, ConfigurationPerformer.class)
.addBinding()
- .toInstance(THROWING_CONFIGURATION_PERFORMER)))
+ .toInstance(throwingConfigurationPerformer)))
.disableAutoStart()
.build();
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/server/container/util/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java b/server/container/util/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java
index c45c3cc..53ade79 100644
--- a/server/container/util/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java
+++ b/server/container/util/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java
@@ -26,7 +26,6 @@ import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentLinkedDeque;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.IntStream;
import java.util.stream.Stream;
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
index 9ca5da5..3b20e7d 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
@@ -46,7 +46,6 @@ import org.apache.james.utils.DataProbeImpl;
import org.apache.james.utils.FakeSmtp;
import org.apache.james.utils.IMAPMessageReader;
import org.apache.james.utils.SMTPMessageSender;
-import org.awaitility.Duration;
import org.junit.After;
import org.junit.BeforeClass;
import org.junit.ClassRule;
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
index 49cd2cc..33a536c 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
@@ -25,7 +25,6 @@ import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
import static org.apache.james.mailets.configuration.Constants.PASSWORD;
import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
-import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasSize;
@@ -43,7 +42,6 @@ import org.apache.james.utils.DataProbeImpl;
import org.apache.james.utils.FakeSmtp;
import org.apache.james.utils.IMAPMessageReader;
import org.apache.james.utils.SMTPMessageSender;
-import org.awaitility.Duration;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
index bb3cf40..a6a57ff 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
@@ -44,7 +44,6 @@ import org.apache.james.utils.IMAPMessageReader;
import org.apache.james.utils.SMTPMessageSender;
import org.apache.james.utils.SMTPSendingException;
import org.apache.james.utils.SmtpSendingStep;
-import org.awaitility.Duration;
import org.junit.After;
import org.junit.BeforeClass;
import org.junit.ClassRule;
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java
index 4f97b49..9d37846 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java
@@ -50,7 +50,6 @@ import org.apache.james.utils.WebAdminGuiceProbe;
import org.apache.james.webadmin.WebAdminUtils;
import org.apache.james.webadmin.routes.GroupsRoutes;
import org.apache.mailet.base.test.FakeMail;
-import org.awaitility.Duration;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
index 8355034..4337d06 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
@@ -431,7 +431,7 @@ public class ICSAttachmentWorkflowTest {
@ClassRule
public static SwarmGenericContainer rabbitMqContainer = new SwarmGenericContainer(Images.RABBITMQ)
.withAffinityToContainer()
- .waitingFor(new HostPortWaitStrategy().withRateLimiter(RateLimiters.DEFAULT));;
+ .waitingFor(new HostPortWaitStrategy().withRateLimiter(RateLimiters.DEFAULT));
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Rule
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
----------------------------------------------------------------------
diff --git a/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java b/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
index 4de1de8..1cdc218 100644
--- a/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
+++ b/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
@@ -33,7 +33,6 @@ import java.util.stream.IntStream;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
-import com.github.fge.lambdas.Throwing;
import org.apache.james.core.MailAddress;
import org.apache.james.core.builder.MimeMessageBuilder;
import org.apache.james.mailrepository.api.MailKey;
@@ -49,6 +48,7 @@ import org.apache.mailet.base.test.FakeMail;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.Test;
+import com.github.fge.lambdas.Throwing;
import com.github.fge.lambdas.runnable.ThrowingRunnable;
import com.github.steveash.guavate.Guavate;
import com.google.common.base.Strings;
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java
----------------------------------------------------------------------
diff --git a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java
index 75aa16a..ce56641 100644
--- a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java
+++ b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java
@@ -19,9 +19,16 @@
package org.apache.james.mailrepository.cassandra;
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Session;
-import com.google.common.collect.ImmutableList;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+
import org.apache.james.backends.cassandra.CassandraCluster;
import org.apache.james.backends.cassandra.CassandraClusterExtension;
import org.apache.james.backends.cassandra.components.CassandraModule;
@@ -47,14 +54,9 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.extension.ExtensionContext;
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-
-import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.Session;
+import com.google.common.collect.ImmutableList;
@ExtendWith(CassandraMailRepositoryWithFakeImplementationsTest.MailRepositoryCassandraClusterExtension.class)
class CassandraMailRepositoryWithFakeImplementationsTest {
@@ -83,7 +85,6 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
CassandraMailRepositoryMailDAO mailDAO = new CassandraMailRepositoryMailDAO(cassandra.getConf(), BLOB_ID_FACTORY, cassandra.getTypesProvider());
keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
CassandraMailRepositoryCountDAO countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf());
- CassandraBlobsDAO blobsDAO = new CassandraBlobsDAO(cassandra.getConf());
cassandraMailRepository = new CassandraMailRepository(URL,
keysDAO, countDAO, mailDAO, new FailingStore());
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingServiceTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingServiceTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingServiceTest.java
index 9e09a8d..48739d0 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingServiceTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingServiceTest.java
@@ -59,7 +59,7 @@ public class ReprocessingServiceTest {
private static final MailKey KEY_2 = new MailKey(NAME_2);
private static final MailKey KEY_3 = new MailKey(NAME_3);
private static final String SPOOL = "spool";
- private static final Consumer<MailKey> NOOP_CONSUMER = key -> {};
+ private static final Consumer<MailKey> NOOP_CONSUMER = key -> { };
private static final Optional<String> NO_TARGET_PROCESSOR = Optional.empty();
private ReprocessingService reprocessingService;
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueContract.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueContract.java b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueContract.java
index 48f422b..009b3a5 100644
--- a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueContract.java
+++ b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueContract.java
@@ -444,6 +444,7 @@ public interface ManageableMailQueueContract extends MailQueueContract {
softly.assertThat(content).isEqualTo("mail body");
});
}
+
@Test
default void browsingShouldNotAffectDequeue() throws Exception {
enQueue(defaultMail()
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/EnqueuedItemTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/EnqueuedItemTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/EnqueuedItemTest.java
index 9006d70..6f97456 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/EnqueuedItemTest.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/EnqueuedItemTest.java
@@ -21,7 +21,6 @@ package org.apache.james.queue.rabbitmq;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import org.apache.james.blob.api.BlobId;
import org.apache.james.blob.api.HashBlobId;
import org.apache.james.blob.mail.MimeMessagePartsId;
import org.apache.mailet.Mail;
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
index 87c4985..5645bef 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
@@ -111,9 +111,6 @@ class RabbitMQMailQueueConfigurationChangeTest {
}
private RabbitMQMailQueue getRabbitMQMailQueue(CassandraCluster cassandra, CassandraMailQueueViewConfiguration mailQueueViewConfiguration) throws Exception {
- CassandraBlobsDAO blobsDAO = new CassandraBlobsDAO(cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION, BLOB_ID_FACTORY);
- Store<MimeMessage, MimeMessagePartsId> mimeMessageStore = MimeMessageStore.factory(blobsDAO).mimeMessageStore();
-
MailQueueView mailQueueView = CassandraMailQueueViewTestFactory.factory(clock, random, cassandra.getConf(), cassandra.getTypesProvider(),
mailQueueViewConfiguration, mimeMessageStore)
.create(MailQueueName.fromString(SPOOL));
http://git-wip-us.apache.org/repos/asf/james-project/blob/c7b16003/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
index 6c38d25..0fa4e5a 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
@@ -56,6 +56,7 @@ class RabbitMqMailQueueFactoryTest implements MailQueueFactoryContract<RabbitMQM
@BeforeEach
void setup() throws URISyntaxException {
+ @SuppressWarnings("unchecked")
Store<MimeMessage, MimeMessagePartsId> mimeMessageStore = mock(Store.class);
MailQueueView mailQueueView = mock(MailQueueView.class);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[09/12] james-project git commit: JAMES-2555 ReIndexerImpl tests
should rely less on mocks
Posted by bt...@apache.org.
JAMES-2555 ReIndexerImpl tests should rely less on mocks
We should use an in-memory test system for mailboxManager rather than emulating ours on top of mocks.
Mocks are still useful to check side effects on the indexer
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/12a3445d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/12a3445d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/12a3445d
Branch: refs/heads/master
Commit: 12a3445dea0569740ca6e95ea5e4812bd93b9bb6
Parents: 3f637e7
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Oct 9 09:30:04 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Oct 12 15:27:34 2018 +0700
----------------------------------------------------------------------
mailbox/tools/indexer/pom.xml | 11 ++
.../tools/indexer/ReIndexerImplTest.java | 131 ++++++++-----------
2 files changed, 63 insertions(+), 79 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/12a3445d/mailbox/tools/indexer/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/pom.xml b/mailbox/tools/indexer/pom.xml
index 4f44d85..e0874f0 100644
--- a/mailbox/tools/indexer/pom.xml
+++ b/mailbox/tools/indexer/pom.xml
@@ -53,6 +53,17 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>${james.groupId}</groupId>
+ <artifactId>apache-james-mailbox-memory</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
+ <artifactId>apache-james-mailbox-memory</artifactId>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/james-project/blob/12a3445d/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
index b7c583c..cab234b 100644
--- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
+++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
@@ -19,120 +19,93 @@
package org.apache.mailbox.tools.indexer;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.when;
-import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
+import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.indexer.ReIndexer;
-import org.apache.james.mailbox.mock.MockMailboxSession;
+import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
+import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
+import org.apache.james.mailbox.model.ComposedMessageId;
+import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
-import org.apache.james.mailbox.store.MessageBuilder;
-import org.apache.james.mailbox.store.mail.MailboxMapper;
-import org.apache.james.mailbox.store.mail.MessageMapper;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
-import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
-import org.assertj.core.util.Lists;
import org.junit.Before;
import org.junit.Test;
-
-import com.google.common.collect.ImmutableList;
+import org.mockito.ArgumentCaptor;
public class ReIndexerImplTest {
- public static final MailboxPath INBOX = MailboxPath.forUser("benwa@apache.org", "INBOX");
- public static final int LIMIT = 0;
- private MailboxManager mailboxManager;
- private MailboxSessionMapperFactory mailboxSessionMapperFactory;
+ private static final String USERNAME = "benwa@apache.org";
+ public static final MailboxPath INBOX = MailboxPath.forUser(USERNAME, "INBOX");
+ private InMemoryMailboxManager mailboxManager;
private ListeningMessageSearchIndex messageSearchIndex;
private ReIndexer reIndexer;
@Before
- public void setUp() {
- mailboxManager = mock(MailboxManager.class);
- mailboxSessionMapperFactory = mock(MailboxSessionMapperFactory.class);
+ public void setUp() throws MailboxException {
+ mailboxManager = new InMemoryIntegrationResources().createMailboxManager(new SimpleGroupMembershipResolver());
+ MailboxSessionMapperFactory mailboxSessionMapperFactory = mailboxManager.getMapperFactory();
messageSearchIndex = mock(ListeningMessageSearchIndex.class);
reIndexer = new ReIndexerImpl(mailboxManager, messageSearchIndex, mailboxSessionMapperFactory);
}
@Test
- public void test() throws Exception {
- final MockMailboxSession mockMailboxSession = new MockMailboxSession("re-indexing");
- when(mailboxManager.createSystemSession(any(String.class)))
- .thenReturn(mockMailboxSession);
- final MessageMapper messageMapper = mock(MessageMapper.class);
- final MailboxMapper mailboxMapper = mock(MailboxMapper.class);
- when(mailboxSessionMapperFactory.getMessageMapper(any(MailboxSession.class)))
- .thenReturn(messageMapper);
- when(mailboxSessionMapperFactory.getMailboxMapper(any(MailboxSession.class)))
- .thenReturn(mailboxMapper);
- final MailboxMessage message = new MessageBuilder().build();
- final SimpleMailbox mailbox = new SimpleMailbox(INBOX, 42);
- mailbox.setMailboxId(message.getMailboxId());
- when(mailboxMapper.findMailboxByPath(INBOX)).thenReturn(mailbox);
- when(messageMapper.findInMailbox(mailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT))
- .thenReturn(Lists.newArrayList(message).iterator());
+ public void reIndexShouldBeWellPerformed() throws Exception {
+ MailboxSession systemSession = mailboxManager.createSystemSession(USERNAME);
+ MailboxId mailboxId = mailboxManager.createMailbox(INBOX, systemSession).get();
+ ComposedMessageId createdMessage = mailboxManager.getMailbox(INBOX, systemSession)
+ .appendMessage(
+ MessageManager.AppendCommand.builder().build("header: value\r\n\r\nbody"),
+ systemSession);
reIndexer.reIndex(INBOX);
- verify(mailboxManager).createSystemSession(any(String.class));
- verify(mailboxSessionMapperFactory).getMailboxMapper(mockMailboxSession);
- verify(mailboxSessionMapperFactory).getMessageMapper(mockMailboxSession);
- verify(mailboxMapper).findMailboxByPath(INBOX);
- verify(messageMapper).findInMailbox(mailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT);
- verify(mailboxManager).addListener(eq(INBOX), any(MailboxListener.class), any(MailboxSession.class));
- verify(mailboxManager).removeListener(eq(INBOX), any(MailboxListener.class), any(MailboxSession.class));
- verify(messageSearchIndex).add(any(MailboxSession.class), eq(mailbox), eq(message));
- verify(messageSearchIndex).deleteAll(any(MailboxSession.class), eq(mailbox));
- verifyNoMoreInteractions(mailboxMapper, mailboxSessionMapperFactory, messageSearchIndex, messageMapper, mailboxMapper);
+ ArgumentCaptor<MailboxMessage> messageCaptor = ArgumentCaptor.forClass(MailboxMessage.class);
+ ArgumentCaptor<Mailbox> mailboxCaptor1 = ArgumentCaptor.forClass(Mailbox.class);
+ ArgumentCaptor<Mailbox> mailboxCaptor2 = ArgumentCaptor.forClass(Mailbox.class);
+
+ verify(messageSearchIndex).deleteAll(any(MailboxSession.class), mailboxCaptor1.capture());
+ verify(messageSearchIndex).add(any(MailboxSession.class), mailboxCaptor2.capture(), messageCaptor.capture());
+ verifyNoMoreInteractions(messageSearchIndex);
+
+ assertThat(mailboxCaptor1.getValue()).matches(mailbox -> mailbox.getMailboxId().equals(mailboxId));
+ assertThat(mailboxCaptor2.getValue()).matches(mailbox -> mailbox.getMailboxId().equals(mailboxId));
+ assertThat(messageCaptor.getValue()).matches(message -> message.getMailboxId().equals(mailboxId)
+ && message.getUid().equals(createdMessage.getUid()));
}
@Test
public void mailboxPathUserShouldBeUsedWhenReIndexing() throws Exception {
- MockMailboxSession systemMailboxSession = new MockMailboxSession("re-indexing");
- when(mailboxManager.createSystemSession("re-indexing"))
- .thenReturn(systemMailboxSession);
- MailboxMapper mailboxMapper = mock(MailboxMapper.class);
- when(mailboxSessionMapperFactory.getMailboxMapper(systemMailboxSession))
- .thenReturn(mailboxMapper);
-
- String user1 = "user1@james.org";
- MailboxPath user1MailboxPath = MailboxPath.forUser(user1, "Inbox");
- MockMailboxSession user1MailboxSession = new MockMailboxSession(user1);
- when(mailboxManager.createSystemSession(user1))
- .thenReturn(user1MailboxSession);
- MailboxMapper user1MailboxMapper = mock(MailboxMapper.class);
- when(mailboxSessionMapperFactory.getMailboxMapper(user1MailboxSession))
- .thenReturn(user1MailboxMapper);
- Mailbox user1Mailbox = mock(Mailbox.class);
- when(user1MailboxMapper.findMailboxByPath(user1MailboxPath))
- .thenReturn(user1Mailbox);
- MessageMapper user1MessageMapper = mock(MessageMapper.class);
- when(mailboxSessionMapperFactory.getMessageMapper(user1MailboxSession))
- .thenReturn(user1MessageMapper);
- MailboxMessage user1MailboxMessage = mock(MailboxMessage.class);
- when(user1MessageMapper.findInMailbox(user1Mailbox, MessageRange.all(), MessageMapper.FetchType.Full, ReIndexerImpl.NO_LIMIT))
- .thenReturn(ImmutableList.of(user1MailboxMessage).iterator());
- when(user1MailboxMessage.getUid())
- .thenReturn(MessageUid.of(1));
-
- when(mailboxManager.list(systemMailboxSession))
- .thenReturn(ImmutableList.of(user1MailboxPath));
+ MailboxSession systemSession = mailboxManager.createSystemSession(USERNAME);
+ MailboxId mailboxId = mailboxManager.createMailbox(INBOX, systemSession).get();
+ ComposedMessageId createdMessage = mailboxManager.getMailbox(INBOX, systemSession)
+ .appendMessage(
+ MessageManager.AppendCommand.builder().build("header: value\r\n\r\nbody"),
+ systemSession);
reIndexer.reIndex();
-
- verify(messageSearchIndex).deleteAll(user1MailboxSession, user1Mailbox);
- verify(messageSearchIndex).add(user1MailboxSession, user1Mailbox, user1MailboxMessage);
+ ArgumentCaptor<MailboxMessage> messageCaptor = ArgumentCaptor.forClass(MailboxMessage.class);
+ ArgumentCaptor<Mailbox> mailboxCaptor1 = ArgumentCaptor.forClass(Mailbox.class);
+ ArgumentCaptor<Mailbox> mailboxCaptor2 = ArgumentCaptor.forClass(Mailbox.class);
+
+ verify(messageSearchIndex).deleteAll(any(MailboxSession.class), mailboxCaptor1.capture());
+ verify(messageSearchIndex).add(any(MailboxSession.class), mailboxCaptor2.capture(), messageCaptor.capture());
+ verifyNoMoreInteractions(messageSearchIndex);
+
+ assertThat(mailboxCaptor1.getValue()).matches(mailbox -> mailbox.getMailboxId().equals(mailboxId));
+ assertThat(mailboxCaptor2.getValue()).matches(mailbox -> mailbox.getMailboxId().equals(mailboxId));
+ assertThat(messageCaptor.getValue()).matches(message -> message.getMailboxId().equals(mailboxId)
+ && message.getUid().equals(createdMessage.getUid()));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[12/12] james-project git commit: JAMES-2555 Read a list of UID then
proceed per-message re-indexing
Posted by bt...@apache.org.
JAMES-2555 Read a list of UID then proceed per-message re-indexing
This avoids loading a full mailbox blobs in memory
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3f637e7b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3f637e7b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3f637e7b
Branch: refs/heads/master
Commit: 3f637e7bb896203d8f060e0922135c9ee6a4af40
Parents: fbe7900
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Oct 9 09:05:00 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Oct 12 15:27:34 2018 +0700
----------------------------------------------------------------------
.../mailbox/tools/indexer/ReIndexerImpl.java | 84 ++++++++++++--------
1 file changed, 49 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f637e7b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
index 72a6746..f239e32 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
@@ -19,7 +19,6 @@
package org.apache.mailbox.tools.indexer;
-import java.util.Iterator;
import java.util.List;
import java.util.Optional;
@@ -27,6 +26,7 @@ import javax.inject.Inject;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.indexer.ReIndexer;
import org.apache.james.mailbox.model.MailboxPath;
@@ -36,6 +36,7 @@ import org.apache.james.mailbox.store.mail.MessageMapper;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
+import org.apache.james.util.streams.Iterators;
import org.apache.mailbox.tools.indexer.events.ImpactingEventType;
import org.apache.mailbox.tools.indexer.events.ImpactingMessageEvent;
import org.apache.mailbox.tools.indexer.registrations.GlobalRegistration;
@@ -43,6 +44,7 @@ import org.apache.mailbox.tools.indexer.registrations.MailboxRegistration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.github.fge.lambdas.Throwing;
import com.google.common.collect.Lists;
/**
@@ -60,7 +62,9 @@ import com.google.common.collect.Lists;
public class ReIndexerImpl implements ReIndexer {
private static final Logger LOGGER = LoggerFactory.getLogger(ReIndexerImpl.class);
- public static final int NO_LIMIT = 0;
+
+ private static final int NO_LIMIT = 0;
+ private static final int SINGLE_MESSAGE = 1;
private final MailboxManager mailboxManager;
private final ListeningMessageSearchIndex messageSearchIndex;
@@ -97,28 +101,7 @@ public class ReIndexerImpl implements ReIndexer {
LOGGER.info("Full reindex finished");
}
- private void reIndex(MailboxPath path, MailboxSession mailboxSession) throws MailboxException {
- MailboxRegistration mailboxRegistration = new MailboxRegistration(path);
- LOGGER.info("Intend to reindex {}",path);
- Mailbox mailbox = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession).findMailboxByPath(path);
- messageSearchIndex.deleteAll(mailboxSession, mailbox);
- mailboxManager.addListener(path, mailboxRegistration, mailboxSession);
- try {
- handleMailboxIndexingIterations(mailboxSession,
- mailboxRegistration,
- mailbox,
- mailboxSessionMapperFactory.getMessageMapper(mailboxSession)
- .findInMailbox(mailbox,
- MessageRange.all(),
- MessageMapper.FetchType.Full,
- NO_LIMIT));
- LOGGER.info("Finish to reindex {}", path);
- } finally {
- mailboxManager.removeListener(path, mailboxRegistration, mailboxSession);
- }
- }
-
- private void handleFullReindexingIterations(List<MailboxPath> mailboxPaths, GlobalRegistration globalRegistration) throws MailboxException {
+ private void handleFullReindexingIterations(List<MailboxPath> mailboxPaths, GlobalRegistration globalRegistration) {
for (MailboxPath mailboxPath : mailboxPaths) {
Optional<MailboxPath> pathToIndex = globalRegistration.getPathToIndex(mailboxPath);
if (pathToIndex.isPresent()) {
@@ -131,21 +114,37 @@ public class ReIndexerImpl implements ReIndexer {
}
}
- private void handleMailboxIndexingIterations(MailboxSession mailboxSession, MailboxRegistration mailboxRegistration, Mailbox mailbox, Iterator<MailboxMessage> iterator) throws MailboxException {
- while (iterator.hasNext()) {
- MailboxMessage message = iterator.next();
- Optional<ImpactingMessageEvent> impactingMessageEvent = findMostRelevant(mailboxRegistration.getImpactingEvents(message.getUid()));
-
- impactingMessageEvent.flatMap(ImpactingMessageEvent::newFlags).ifPresent(message::setFlags);
- if (wasNotDeleted(impactingMessageEvent)) {
- messageSearchIndex.add(mailboxSession, mailbox, message);
- }
+ private void reIndex(MailboxPath path, MailboxSession mailboxSession) throws MailboxException {
+ MailboxRegistration mailboxRegistration = new MailboxRegistration(path);
+ LOGGER.info("Intend to reindex {}",path);
+ Mailbox mailbox = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession).findMailboxByPath(path);
+ messageSearchIndex.deleteAll(mailboxSession, mailbox);
+ mailboxManager.addListener(path, mailboxRegistration, mailboxSession);
+ try {
+ Iterators.toStream(
+ mailboxSessionMapperFactory.getMessageMapper(mailboxSession)
+ .findInMailbox(mailbox, MessageRange.all(), MessageMapper.FetchType.Metadata, NO_LIMIT))
+ .map(MailboxMessage::getUid)
+ .forEach(uid -> handleMessageReIndexing(mailboxSession, mailboxRegistration, mailbox, uid));
+ LOGGER.info("Finish to reindex {}", path);
+ } finally {
+ mailboxManager.removeListener(path, mailboxRegistration, mailboxSession);
}
}
- private boolean wasNotDeleted(Optional<ImpactingMessageEvent> impactingMessageEvent) {
- return impactingMessageEvent.map(event -> !event.wasDeleted()).orElse(true);
+ private void handleMessageReIndexing(MailboxSession mailboxSession, MailboxRegistration mailboxRegistration, Mailbox mailbox, MessageUid uid) {
+ try {
+ Optional<ImpactingMessageEvent> impactingMessageEvent = findMostRelevant(mailboxRegistration.getImpactingEvents(uid));
+
+ Optional.of(uid)
+ .filter(x -> !wasDeleted(impactingMessageEvent))
+ .flatMap(Throwing.function(mUid -> fullyReadMessage(mailboxSession, mailbox, mUid)))
+ .map(message -> messageUpdateRegardingEvents(message, impactingMessageEvent))
+ .ifPresent(Throwing.consumer(message -> messageSearchIndex.add(mailboxSession, mailbox, message)));
+ } catch (Exception e) {
+ LOGGER.warn("ReIndexing failed for {} {}", mailbox.generateAssociatedPath(), uid, e);
+ }
}
private Optional<ImpactingMessageEvent> findMostRelevant(List<ImpactingMessageEvent> messageEvents) {
@@ -157,4 +156,19 @@ public class ReIndexerImpl implements ReIndexer {
return Lists.reverse(messageEvents).stream().findFirst();
}
+ private boolean wasDeleted(Optional<ImpactingMessageEvent> impactingMessageEvent) {
+ return impactingMessageEvent.map(ImpactingMessageEvent::wasDeleted).orElse(false);
+ }
+
+ private MailboxMessage messageUpdateRegardingEvents(MailboxMessage message, Optional<ImpactingMessageEvent> impactingMessageEvent) {
+ impactingMessageEvent.flatMap(ImpactingMessageEvent::newFlags).ifPresent(message::setFlags);
+ return message;
+ }
+
+ private Optional<MailboxMessage> fullyReadMessage(MailboxSession mailboxSession, Mailbox mailbox, MessageUid mUid) throws MailboxException {
+ return Iterators.toStream(mailboxSessionMapperFactory.getMessageMapper(mailboxSession)
+ .findInMailbox(mailbox, MessageRange.one(mUid), MessageMapper.FetchType.Full, SINGLE_MESSAGE))
+ .findFirst();
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[03/12] james-project git commit: JAMES-2560 Document ICSSanitizer
Posted by bt...@apache.org.
JAMES-2560 Document ICSSanitizer
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/2d3691db
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/2d3691db
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/2d3691db
Branch: refs/heads/master
Commit: 2d3691db87ca6b5260a28b5d5a19dc011517bdee
Parents: d722432
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Oct 11 13:22:15 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Oct 12 15:26:53 2018 +0700
----------------------------------------------------------------------
.../org/apache/james/transport/mailets/ICSSanitizer.java | 9 +++++++++
1 file changed, 9 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/2d3691db/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICSSanitizer.java
----------------------------------------------------------------------
diff --git a/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICSSanitizer.java b/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICSSanitizer.java
index bdbdb2b..667120b 100644
--- a/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICSSanitizer.java
+++ b/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICSSanitizer.java
@@ -40,6 +40,15 @@ import org.slf4j.LoggerFactory;
import com.github.fge.lambdas.Throwing;
+/**
+ * Some senders embed 'text/calendar' content as part of Mime bodypart headers with an empty body.
+ *
+ * This mailet duplicate the 'text/calendar' content to the Mime body part.
+ *
+ * Example configuration:
+ *
+ * <mailet match="All" class="ICSSanitizer"/>
+ */
public class ICSSanitizer extends GenericMailet {
private static final Logger LOGGER = LoggerFactory.getLogger(ICSSanitizer.class);
private static final int TEXT_PREFIX_SIZE = 5;
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[07/12] james-project git commit: JAMES-2555 Working with
ImpactingMessageEvents should not require casts
Posted by bt...@apache.org.
JAMES-2555 Working with ImpactingMessageEvents should not require casts
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/62e79d1b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/62e79d1b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/62e79d1b
Branch: refs/heads/master
Commit: 62e79d1b9ec6009b329d8279710acfa8c3af9ac5
Parents: 2d3691d
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Oct 9 08:52:30 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Oct 12 15:27:13 2018 +0700
----------------------------------------------------------------------
.../mailbox/tools/indexer/ReIndexerImpl.java | 9 +-
.../tools/indexer/events/FlagsMessageEvent.java | 75 ------------
.../indexer/events/ImpactingMessageEvent.java | 116 +++++++++++++++++++
.../indexer/events/MessageDeletedEvent.java | 65 -----------
.../registrations/MailboxRegistration.java | 4 +-
.../registrations/MailboxRegistrationTest.java | 4 +-
6 files changed, 124 insertions(+), 149 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/62e79d1b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
index 28c8421..413f6b7 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
@@ -37,7 +37,6 @@ import org.apache.james.mailbox.store.mail.MessageMapper;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
-import org.apache.mailbox.tools.indexer.events.FlagsMessageEvent;
import org.apache.mailbox.tools.indexer.events.ImpactingEventType;
import org.apache.mailbox.tools.indexer.events.ImpactingMessageEvent;
import org.apache.mailbox.tools.indexer.registrations.GlobalRegistration;
@@ -137,10 +136,10 @@ public class ReIndexerImpl implements ReIndexer {
while (iterator.hasNext()) {
MailboxMessage message = iterator.next();
ImpactingMessageEvent impactingMessageEvent = findMostRelevant(mailboxRegistration.getImpactingEvents(message.getUid()));
- if (impactingMessageEvent == null) {
- messageSearchIndex.add(mailboxSession, mailbox, message);
- } else if (impactingMessageEvent instanceof FlagsMessageEvent) {
- message.setFlags(((FlagsMessageEvent) impactingMessageEvent).getFlags());
+
+ impactingMessageEvent.newFlags().ifPresent(message::setFlags);
+
+ if (!impactingMessageEvent.wasDeleted()) {
messageSearchIndex.add(mailboxSession, mailbox, message);
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/62e79d1b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/FlagsMessageEvent.java
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/FlagsMessageEvent.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/FlagsMessageEvent.java
deleted file mode 100644
index 10d7482..0000000
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/FlagsMessageEvent.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************
- * 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.mailbox.tools.indexer.events;
-
-import javax.mail.Flags;
-
-import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.model.MailboxPath;
-
-import com.google.common.base.Objects;
-
-public class FlagsMessageEvent implements ImpactingMessageEvent {
-
- private final MailboxPath mailboxPath;
- private final MessageUid uid;
- private final Flags flags;
-
- public FlagsMessageEvent(MailboxPath mailboxPath, MessageUid uid, Flags flags) {
- this.mailboxPath = mailboxPath;
- this.uid = uid;
- this.flags = flags;
- }
-
- @Override
- public MessageUid getUid() {
- return uid;
- }
-
- @Override
- public MailboxPath getMailboxPath() {
- return mailboxPath;
- }
-
- @Override
- public ImpactingEventType getType() {
- return ImpactingEventType.FlagsUpdate;
- }
-
- public Flags getFlags() {
- return flags;
- }
-
- @Override
- public boolean equals(Object o) {
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- FlagsMessageEvent that = (FlagsMessageEvent) o;
- return Objects.equal(uid, that.uid) &&
- Objects.equal(mailboxPath, that.mailboxPath) &&
- Objects.equal(flags, that.flags);
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(uid, mailboxPath, flags);
- }
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/62e79d1b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/ImpactingMessageEvent.java
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/ImpactingMessageEvent.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/ImpactingMessageEvent.java
index 83764f3..527f463 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/ImpactingMessageEvent.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/ImpactingMessageEvent.java
@@ -19,10 +19,126 @@
package org.apache.mailbox.tools.indexer.events;
+import java.util.Objects;
+import java.util.Optional;
+
+import javax.mail.Flags;
+
import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.model.MailboxPath;
public interface ImpactingMessageEvent extends ImpactingEvent {
MessageUid getUid();
+ Optional<Flags> newFlags();
+
+ boolean wasDeleted();
+
+ class FlagsMessageEvent implements ImpactingMessageEvent {
+
+ private final MailboxPath mailboxPath;
+ private final MessageUid uid;
+ private final Flags flags;
+
+ public FlagsMessageEvent(MailboxPath mailboxPath, MessageUid uid, Flags flags) {
+ this.mailboxPath = mailboxPath;
+ this.uid = uid;
+ this.flags = flags;
+ }
+
+ @Override
+ public MessageUid getUid() {
+ return uid;
+ }
+
+ @Override
+ public MailboxPath getMailboxPath() {
+ return mailboxPath;
+ }
+
+ @Override
+ public ImpactingEventType getType() {
+ return ImpactingEventType.FlagsUpdate;
+ }
+
+ @Override
+ public Optional<Flags> newFlags() {
+ return Optional.of(flags);
+ }
+
+ @Override
+ public boolean wasDeleted() {
+ return false;
+ }
+
+ @Override
+ public final boolean equals(Object o) {
+ if (o instanceof FlagsMessageEvent) {
+ FlagsMessageEvent that = (FlagsMessageEvent) o;
+
+ return Objects.equals(this.mailboxPath, that.mailboxPath)
+ && Objects.equals(this.uid, that.uid)
+ && Objects.equals(this.flags, that.flags);
+ }
+ return false;
+ }
+
+ @Override
+ public final int hashCode() {
+ return Objects.hash(mailboxPath, uid, flags);
+ }
+ }
+
+ class MessageDeletedEvent implements ImpactingMessageEvent {
+
+ private final MailboxPath mailboxPath;
+ private final MessageUid uid;
+
+ public MessageDeletedEvent(MailboxPath mailboxPath, MessageUid uid) {
+ this.mailboxPath = mailboxPath;
+ this.uid = uid;
+ }
+
+ @Override
+ public MessageUid getUid() {
+ return uid;
+ }
+
+ @Override
+ public MailboxPath getMailboxPath() {
+ return mailboxPath;
+ }
+
+ @Override
+ public ImpactingEventType getType() {
+ return ImpactingEventType.Deletion;
+ }
+
+ @Override
+ public Optional<Flags> newFlags() {
+ return Optional.empty();
+ }
+
+ @Override
+ public boolean wasDeleted() {
+ return true;
+ }
+
+ @Override
+ public final boolean equals(Object o) {
+ if (o instanceof MessageDeletedEvent) {
+ MessageDeletedEvent that = (MessageDeletedEvent) o;
+
+ return Objects.equals(this.mailboxPath, that.mailboxPath)
+ && Objects.equals(this.uid, that.uid);
+ }
+ return false;
+ }
+
+ @Override
+ public final int hashCode() {
+ return Objects.hash(mailboxPath, uid);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/62e79d1b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/MessageDeletedEvent.java
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/MessageDeletedEvent.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/MessageDeletedEvent.java
deleted file mode 100644
index a74178a..0000000
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/MessageDeletedEvent.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************
- * 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.mailbox.tools.indexer.events;
-
-import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.model.MailboxPath;
-
-import com.google.common.base.Objects;
-
-public class MessageDeletedEvent implements ImpactingMessageEvent {
-
- private final MailboxPath mailboxPath;
- private final MessageUid uid;
-
- public MessageDeletedEvent(MailboxPath mailboxPath, MessageUid uid) {
- this.mailboxPath = mailboxPath;
- this.uid = uid;
- }
-
- @Override
- public MessageUid getUid() {
- return uid;
- }
-
- @Override
- public MailboxPath getMailboxPath() {
- return mailboxPath;
- }
-
- @Override
- public ImpactingEventType getType() {
- return ImpactingEventType.Deletion;
- }
-
- @Override
- public boolean equals(Object o) {
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- MessageDeletedEvent that = (MessageDeletedEvent) o;
- return Objects.equal(uid, that.uid) && Objects.equal(mailboxPath, that.mailboxPath);
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(uid, mailboxPath);
- }
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/62e79d1b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/registrations/MailboxRegistration.java
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/registrations/MailboxRegistration.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/registrations/MailboxRegistration.java
index 7c98233..251fde8 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/registrations/MailboxRegistration.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/registrations/MailboxRegistration.java
@@ -26,9 +26,9 @@ import org.apache.james.mailbox.MailboxListener;
import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.UpdatedFlags;
-import org.apache.mailbox.tools.indexer.events.FlagsMessageEvent;
import org.apache.mailbox.tools.indexer.events.ImpactingMessageEvent;
-import org.apache.mailbox.tools.indexer.events.MessageDeletedEvent;
+import org.apache.mailbox.tools.indexer.events.ImpactingMessageEvent.FlagsMessageEvent;
+import org.apache.mailbox.tools.indexer.events.ImpactingMessageEvent.MessageDeletedEvent;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ImmutableList;
http://git-wip-us.apache.org/repos/asf/james-project/blob/62e79d1b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/registrations/MailboxRegistrationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/registrations/MailboxRegistrationTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/registrations/MailboxRegistrationTest.java
index 743c1f8..33a19b7 100644
--- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/registrations/MailboxRegistrationTest.java
+++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/registrations/MailboxRegistrationTest.java
@@ -37,8 +37,8 @@ import org.apache.james.mailbox.store.event.EventFactory;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
-import org.apache.mailbox.tools.indexer.events.FlagsMessageEvent;
-import org.apache.mailbox.tools.indexer.events.MessageDeletedEvent;
+import org.apache.mailbox.tools.indexer.events.ImpactingMessageEvent.FlagsMessageEvent;
+import org.apache.mailbox.tools.indexer.events.ImpactingMessageEvent.MessageDeletedEvent;
import org.junit.Before;
import org.junit.Test;
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org