CAMEL-7247: mail consumer add support for idempontent repository so you can concurrent poll the same mailbox.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/4c499320 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/4c499320 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/4c499320 Branch: refs/heads/master Commit: 4c499320ce15d0325c17c9372ce5947bc8bba69d Parents: 110c8d2 Author: Claus Ibsen <davscl...@apache.org> Authored: Sat Feb 20 12:14:08 2016 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Sat Feb 20 12:22:02 2016 +0100 ---------------------------------------------------------------------- .../component/mail/DefaultMailUidGenerator.java | 87 +++++++++++++ .../camel/component/mail/MailConsumer.java | 121 +++++++++++-------- .../camel/component/mail/MailEndpoint.java | 51 ++++++++ .../camel/component/mail/MailUidGenerator.java | 34 ++++++ .../component/mail/MailBatchConsumerTest.java | 23 ++-- .../mail/MailCommitOnCompletionTest.java | 1 + .../camel/component/mail/MailCopyToTest.java | 1 + .../mail/MailDoNotDeleteIfProcessFailsTest.java | 2 + .../camel/component/mail/MailFetchSizeTest.java | 1 + .../component/mail/MailFetchSizeZeroTest.java | 1 + ...mpotentRepositoryDuplicateNotRemoveTest.java | 58 +++++++++ .../MailIdempotentRepositoryDuplicateTest.java | 105 ++++++++++++++++ .../mail/MailIdempotentRepositoryTest.java | 100 +++++++++++++++ .../mail/MailMaxMessagesPerPollTest.java | 1 + .../component/mail/MailPollEnrichTest.java | 1 + .../mail/MailPostProcessActionTest.java | 1 + .../mail/MailProcessOnlyUnseenMessagesTest.java | 2 + .../component/mail/MailSearchTermTest.java | 6 + .../MailSearchTermUriConfigLast24HoursTest.java | 6 + .../mail/MailSearchTermUriConfigTest.java | 6 + .../mail/MailShutdownCompleteAllTasksTest.java | 1 + ...MailShutdownCompleteCurrentTaskOnlyTest.java | 1 + .../camel/component/mail/MailSortTermTest.java | 3 + .../component/mail/MailSortTermThreeTest.java | 3 + .../component/mail/MailSortTermTwoTest.java | 3 + 25 files changed, 556 insertions(+), 63 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/main/java/org/apache/camel/component/mail/DefaultMailUidGenerator.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/DefaultMailUidGenerator.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/DefaultMailUidGenerator.java new file mode 100644 index 0000000..58772ea --- /dev/null +++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/DefaultMailUidGenerator.java @@ -0,0 +1,87 @@ +/** + * 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 + * <p/> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p/> + * 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.camel.component.mail; + +import java.util.Enumeration; +import java.util.UUID; +import javax.mail.Header; +import javax.mail.Message; +import javax.mail.MessagingException; + +import org.apache.camel.util.ObjectHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class DefaultMailUidGenerator implements MailUidGenerator { + + private static final Logger LOG = LoggerFactory.getLogger(DefaultMailUidGenerator.class); + + @Override + public String generateUuid(MailEndpoint mailEndpoint, Message message) { + String answer = generateMessageIdHeader(message); + if (answer == null) { + answer = generateMessageHash(message); + } + // fallback and use message number + if (answer == null || ObjectHelper.isEmpty(answer)) { + answer = Integer.toString(message.getMessageNumber()); + } + return answer; + } + + private String generateMessageIdHeader(Message message) { + LOG.trace("generateMessageIdHeader for msg: {}", message); + + // there should be a Message-ID header with the UID + try { + String values[] = message.getHeader("Message-ID"); + if (values != null && values.length > 0) { + String uid = values[0]; + LOG.trace("Message-ID header found: {}", uid); + return uid; + } + } catch (MessagingException e) { + LOG.warn("Cannot read headers from mail message. This exception will be ignored.", e); + } + + return null; + } + + public String generateMessageHash(Message message) { + LOG.trace("generateMessageHash for msg: {}", message); + + String uid = null; + + // create an UID based on message headers on the message, that ought to be unique + StringBuilder buffer = new StringBuilder(); + try { + Enumeration<?> it = message.getAllHeaders(); + while (it.hasMoreElements()) { + Header header = (Header) it.nextElement(); + buffer.append(header.getName()).append("=").append(header.getValue()).append("\n"); + } + if (buffer.length() > 0) { + LOG.trace("Generating UID from the following:\n {}", buffer); + uid = UUID.nameUUIDFromBytes(buffer.toString().getBytes()).toString(); + } + } catch (MessagingException e) { + LOG.warn("Cannot read headers from mail message. This exception will be ignored.", e); + } + + return uid; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java index 170b5ec..8ea2260 100644 --- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java +++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java @@ -17,15 +17,15 @@ package org.apache.camel.component.mail; import java.util.ArrayList; -import java.util.Enumeration; +import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Queue; -import java.util.UUID; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.FolderNotFoundException; -import javax.mail.Header; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Store; @@ -49,7 +49,8 @@ import org.slf4j.LoggerFactory; * {@link javax.mail.Transport Transport} and dispatches them to the {@link Processor} */ public class MailConsumer extends ScheduledBatchPollingConsumer { - public static final String POP3_UID = "CamelPop3Uid"; + public static final String MAIL_MESSAGE_UID = "CamelMailMessageId"; + public static final long DEFAULT_CONSUMER_DELAY = 60 * 1000L; private static final Logger LOG = LoggerFactory.getLogger(MailConsumer.class); @@ -116,11 +117,12 @@ public class MailConsumer extends ScheduledBatchPollingConsumer { try { int count = folder.getMessageCount(); if (count > 0) { - Message[] messages = retrieveMessages(); + Map<String, Message> messages = retrieveMessages(); + // need to call setPeek on java-mail to avoid the message being flagged eagerly as SEEN on the server in case // we process the message and rollback due an exception if (getEndpoint().getConfiguration().isPeek()) { - for (Message message : messages) { + for (Message message : messages.values()) { peekMessage(message); } } @@ -240,7 +242,9 @@ public class MailConsumer extends ScheduledBatchPollingConsumer { * @return Messages from input folder according to the search and sort criteria stored in the endpoint * @throws MessagingException If message retrieval fails */ - private Message[] retrieveMessages() throws MessagingException { + private Map<String, Message> retrieveMessages() throws MessagingException { + Map<String, Message> answer = new LinkedHashMap<String, Message>(); + Message[] messages; final SortTerm[] sortTerm = getEndpoint().getSortTerm(); final SearchTerm searchTerm = computeSearchTerm(); @@ -264,7 +268,15 @@ public class MailConsumer extends ScheduledBatchPollingConsumer { MailSorter.sortMessages(messages, sortTerm); } } - return messages; + + for (Message message : messages) { + String key = getEndpoint().getMailUidGenerator().generateUuid(getEndpoint(), message); + if (isValidMessage(key, message)) { + answer.put(key, message); + } + } + + return answer; } private Message[] retrieveAllMessages() throws MessagingException { @@ -289,6 +301,20 @@ public class MailConsumer extends ScheduledBatchPollingConsumer { return msgs.toArray(new Message[msgs.size()]); } + private boolean isValidMessage(String key, Message msg) { + boolean answer = true; + + if (getEndpoint().getIdempotentRepository() != null) { + if (!getEndpoint().getIdempotentRepository().add(key)) { + log.trace("This consumer is idempotent and the mail message has been consumed before matching idempotentKey: {}. Will skip this message: {}", key, msg); + answer = false; + } + } + + log.debug("Message: {} with key: {} is valid: {}", msg, key, answer); + return answer; + } + /** * @return Search term from endpoint (including "seen" check) or null if there is no search term */ @@ -301,18 +327,23 @@ public class MailConsumer extends ScheduledBatchPollingConsumer { return null; } - protected Queue<Exchange> createExchanges(Message[] messages) throws MessagingException { + protected Queue<Exchange> createExchanges(Map<String, Message> messages) throws MessagingException { Queue<Exchange> answer = new LinkedList<Exchange>(); int fetchSize = getEndpoint().getConfiguration().getFetchSize(); - int count = fetchSize == -1 ? messages.length : Math.min(fetchSize, messages.length); + int count = fetchSize == -1 ? messages.size() : Math.min(fetchSize, messages.size()); if (LOG.isDebugEnabled()) { - LOG.debug("Fetching {} messages. Total {} messages.", count, messages.length); + LOG.debug("Fetching {} messages. Total {} messages.", count, messages.size()); } - for (int i = 0; i < count; i++) { - Message message = messages[i]; + Iterator<String> it = messages.keySet().iterator(); + int i = 0; + while (i < count) { + i++; + + String key = it.next(); + Message message = messages.get(key); if (LOG.isTraceEnabled()) { LOG.trace("Mail #{} is of type: {} - {}", new Object[]{i, ObjectHelper.classCanonicalName(message), message}); @@ -330,13 +361,9 @@ public class MailConsumer extends ScheduledBatchPollingConsumer { // If the protocol is POP3 we need to remember the uid on the exchange // so we can find the mail message again later to be able to delete it - if (getEndpoint().getConfiguration().getProtocol().startsWith("pop3")) { - String uid = generatePop3Uid(message); - if (uid != null) { - exchange.setProperty(POP3_UID, uid); - LOG.trace("POP3 mail message using uid {}", uid); - } - } + // we also need to remember the UUID for idempotent repository + exchange.setProperty(MAIL_MESSAGE_UID, key); + answer.add(exchange); } else { if (LOG.isDebugEnabled()) { @@ -372,16 +399,17 @@ public class MailConsumer extends ScheduledBatchPollingConsumer { folder.open(Folder.READ_WRITE); } + String uid = (String) exchange.removeProperty(MAIL_MESSAGE_UID); + // If the protocol is POP3, the message needs to be synced with the folder via the UID. // Otherwise setting the DELETE/SEEN flag won't delete the message. - String uid = (String) exchange.removeProperty(POP3_UID); - if (uid != null) { + if (getEndpoint().getConfiguration().getProtocol().startsWith("pop3")) { int count = folder.getMessageCount(); Message found = null; LOG.trace("Looking for POP3Message with UID {} from folder with {} mails", uid, count); for (int i = 1; i <= count; ++i) { Message msg = folder.getMessage(i); - if (uid.equals(generatePop3Uid(msg))) { + if (uid.equals(getEndpoint().getMailUidGenerator().generateUuid(getEndpoint(), msg))) { LOG.debug("Found POP3Message with UID {} from folder with {} mails", uid, count); found = msg; break; @@ -422,6 +450,16 @@ public class MailConsumer extends ScheduledBatchPollingConsumer { LOG.trace("Exchange processed, so flagging message as SEEN"); mail.setFlag(Flags.Flag.SEEN, true); } + + // need to confirm or remove on commit at last + if (getEndpoint().getIdempotentRepository() != null) { + if (getEndpoint().isIdempotentRepositoryRemoveOnCommit()) { + getEndpoint().getIdempotentRepository().remove(uid); + } else { + getEndpoint().getIdempotentRepository().confirm(uid); + } + } + } catch (MessagingException e) { getExceptionHandler().handleException("Error occurred during committing mail message: " + mail, exchange, e); } @@ -434,6 +472,14 @@ public class MailConsumer extends ScheduledBatchPollingConsumer { * @param exchange the exchange */ protected void processRollback(Message mail, Exchange exchange) { + + String uid = (String) exchange.removeProperty(MAIL_MESSAGE_UID); + + // need to remove on rollback + if (getEndpoint().getIdempotentRepository() != null) { + getEndpoint().getIdempotentRepository().remove(uid); + } + Exception cause = exchange.getException(); if (cause != null) { LOG.warn("Exchange failed, so rolling back message status: " + exchange, cause); @@ -442,35 +488,6 @@ public class MailConsumer extends ScheduledBatchPollingConsumer { } } - /** - * Generates an UID of the POP3Message - * - * @param message the POP3Message - * @return the generated uid - */ - protected String generatePop3Uid(Message message) { - String uid = null; - - // create an UID based on message headers on the POP3Message, that ought - // to be unique - StringBuilder buffer = new StringBuilder(); - try { - Enumeration<?> it = message.getAllHeaders(); - while (it.hasMoreElements()) { - Header header = (Header)it.nextElement(); - buffer.append(header.getName()).append("=").append(header.getValue()).append("\n"); - } - if (buffer.length() > 0) { - LOG.trace("Generating UID from the following:\n {}", buffer); - uid = UUID.nameUUIDFromBytes(buffer.toString().getBytes()).toString(); - } - } catch (MessagingException e) { - LOG.warn("Cannot reader headers from mail message. This exception will be ignored.", e); - } - - return uid; - } - private void ensureIsConnected() throws MessagingException { MailConfiguration config = getEndpoint().getConfiguration(); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java index 493c2e9..56e2d12 100644 --- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java +++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java @@ -26,6 +26,7 @@ import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.impl.ScheduledPollEndpoint; import org.apache.camel.spi.HeaderFilterStrategy; +import org.apache.camel.spi.IdempotentRepository; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; @@ -57,6 +58,12 @@ public class MailEndpoint extends ScheduledPollEndpoint { private SortTerm[] sortTerm; @UriParam(label = "consumer,advanced") private MailBoxPostProcessAction postProcessAction; + @UriParam(label = "consumer,filter") + private IdempotentRepository<String> idempotentRepository; + @UriParam(label = "consumer,filter", defaultValue = "true") + private boolean idempotentRepositoryRemoveOnCommit = true; + @UriParam(label = "consumer,advanced") + private MailUidGenerator mailUidGenerator = new DefaultMailUidGenerator(); public MailEndpoint() { // ScheduledPollConsumer default delay is 500 millis and that is too often for polling a mailbox, @@ -229,6 +236,50 @@ public class MailEndpoint extends ScheduledPollEndpoint { this.postProcessAction = postProcessAction; } + public IdempotentRepository<String> getIdempotentRepository() { + return idempotentRepository; + } + + /** + * A pluggable repository org.apache.camel.spi.IdempotentRepository which allows to cluster + * consuming from the same mailbox, and let the repository coordinate whether a mail message + * is valid for the consumer to process. + * <p/> + * By default no repository is in use. + */ + public void setIdempotentRepository(IdempotentRepository<String> idempotentRepository) { + this.idempotentRepository = idempotentRepository; + } + + public boolean isIdempotentRepositoryRemoveOnCommit() { + return idempotentRepositoryRemoveOnCommit; + } + + /** + * When using idempotent repository, then when the mail message has been successfully processed and + * is committed, should the message id be removed from the idempotent repository (default) or + * be kept in the repository. + * <p/> + * By default its assumed the message id is unique and has no value to be kept in the repository, + * because the mail message will be marked as seen/moved or deleted to prevent it from being + * consumed again. And therefore having the message id stored in the idempotent repository has + * little value. However this option allows to store the message id, for whatever reason you may have. + */ + public void setIdempotentRepositoryRemoveOnCommit(boolean idempotentRepositoryRemoveOnCommit) { + this.idempotentRepositoryRemoveOnCommit = idempotentRepositoryRemoveOnCommit; + } + + public MailUidGenerator getMailUidGenerator() { + return mailUidGenerator; + } + + /** + * A pluggable {@link MailUidGenerator} that allows to use custom logic to generate UUID of the mail message. + */ + public void setMailUidGenerator(MailUidGenerator mailUidGenerator) { + this.mailUidGenerator = mailUidGenerator; + } + /** * Milliseconds before the next poll. */ http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUidGenerator.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUidGenerator.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUidGenerator.java new file mode 100644 index 0000000..bd0cd6c --- /dev/null +++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUidGenerator.java @@ -0,0 +1,34 @@ +/** + * 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.camel.component.mail; + +import javax.mail.Message; + +/** + * To generate an unique ID of the mail message. + */ +public interface MailUidGenerator { + + /** + * Generates an unique ID of the mail message depending on if its POP3 or IMAP protocol. + * + * @param message the mail message + * @return the unique id, must never be <tt>null</tt>. + */ + String generateUuid(MailEndpoint mailEndpoint, Message message); + +} http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBatchConsumerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBatchConsumerTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBatchConsumerTest.java index 04b8a97..6f0ec89 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBatchConsumerTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBatchConsumerTest.java @@ -47,17 +47,17 @@ public class MailBatchConsumerTest extends CamelTestSupport { MockEndpoint mock = getMockEndpoint("mock:result"); mock.expectedMessageCount(5); mock.expectsAscending(body()); - mock.message(0).property(Exchange.BATCH_INDEX).isEqualTo(0); - mock.message(1).property(Exchange.BATCH_INDEX).isEqualTo(1); - mock.message(2).property(Exchange.BATCH_INDEX).isEqualTo(2); - mock.message(3).property(Exchange.BATCH_INDEX).isEqualTo(3); - mock.message(4).property(Exchange.BATCH_INDEX).isEqualTo(4); - mock.message(0).property(Exchange.BATCH_COMPLETE).isEqualTo(false); - mock.message(1).property(Exchange.BATCH_COMPLETE).isEqualTo(false); - mock.message(2).property(Exchange.BATCH_COMPLETE).isEqualTo(false); - mock.message(3).property(Exchange.BATCH_COMPLETE).isEqualTo(false); - mock.message(3).property(Exchange.BATCH_COMPLETE).isEqualTo(false); - mock.message(4).property(Exchange.BATCH_COMPLETE).isEqualTo(true); + mock.message(0).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(0); + mock.message(1).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(1); + mock.message(2).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(2); + mock.message(3).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(3); + mock.message(4).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(4); + mock.message(0).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false); + mock.message(1).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false); + mock.message(2).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false); + mock.message(3).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false); + mock.message(3).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false); + mock.message(4).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(true); mock.expectedPropertyReceived(Exchange.BATCH_SIZE, 5); assertMockEndpointsSatisfied(); @@ -77,6 +77,7 @@ public class MailBatchConsumerTest extends CamelTestSupport { Message[] messages = new Message[5]; for (int i = 0; i < 5; i++) { messages[i] = new MimeMessage(sender.getSession()); + messages[i].setHeader("Message-ID", "" + i); messages[i].setText("Message " + i); } folder.appendMessages(messages); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCommitOnCompletionTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCommitOnCompletionTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCommitOnCompletionTest.java index 5daba56..6a6317f 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCommitOnCompletionTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCommitOnCompletionTest.java @@ -70,6 +70,7 @@ public class MailCommitOnCompletionTest extends CamelTestSupport { Message[] messages = new Message[5]; for (int i = 0; i < 5; i++) { messages[i] = new MimeMessage(sender.getSession()); + messages[i].setHeader("Message-ID", "" + i); messages[i].setText("Message " + i); } folder.appendMessages(messages); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCopyToTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCopyToTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCopyToTest.java index 13c49fb..cf08c6e 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCopyToTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCopyToTest.java @@ -66,6 +66,7 @@ public class MailCopyToTest extends CamelTestSupport { Message[] messages = new Message[5]; for (int i = 0; i < 5; i++) { messages[i] = new MimeMessage(sender.getSession()); + messages[i].setHeader("Message-ID", "" + i); messages[i].setText("Message " + i); } folder.appendMessages(messages); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailDoNotDeleteIfProcessFailsTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailDoNotDeleteIfProcessFailsTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailDoNotDeleteIfProcessFailsTest.java index 4d4fcab..17c4171 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailDoNotDeleteIfProcessFailsTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailDoNotDeleteIfProcessFailsTest.java @@ -68,9 +68,11 @@ public class MailDoNotDeleteIfProcessFailsTest extends CamelTestSupport { Message[] msg = new Message[2]; msg[0] = new MimeMessage(sender.getSession()); msg[0].setText("Message 1"); + msg[0].setHeader("Message-ID", "0"); msg[0].setFlag(Flags.Flag.SEEN, false); msg[1] = new MimeMessage(sender.getSession()); msg[1].setText("Message 2"); + msg[0].setHeader("Message-ID", "1"); msg[1].setFlag(Flags.Flag.SEEN, true); folder.appendMessages(msg); folder.close(true); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeTest.java index ad78c5d..35b5faf 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeTest.java @@ -85,6 +85,7 @@ public class MailFetchSizeTest extends CamelTestSupport { Message[] messages = new Message[5]; for (int i = 0; i < 5; i++) { messages[i] = new MimeMessage(sender.getSession()); + messages[i].setHeader("Message-ID", "" + i); messages[i].setText("Message " + i); } folder.appendMessages(messages); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeZeroTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeZeroTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeZeroTest.java index 5de6241..99f7ba9 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeZeroTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeZeroTest.java @@ -67,6 +67,7 @@ public class MailFetchSizeZeroTest extends CamelTestSupport { Message[] messages = new Message[5]; for (int i = 0; i < 5; i++) { messages[i] = new MimeMessage(sender.getSession()); + messages[i].setHeader("Message-ID", "" + i); messages[i].setText("Message " + i); } folder.appendMessages(messages); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailIdempotentRepositoryDuplicateNotRemoveTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailIdempotentRepositoryDuplicateNotRemoveTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailIdempotentRepositoryDuplicateNotRemoveTest.java new file mode 100644 index 0000000..2c29626 --- /dev/null +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailIdempotentRepositoryDuplicateNotRemoveTest.java @@ -0,0 +1,58 @@ +/** + * 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.camel.component.mail; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.Test; +import org.jvnet.mock_javamail.Mailbox; + +/** + * Unit test for idempotent repository. + */ +public class MailIdempotentRepositoryDuplicateNotRemoveTest extends MailIdempotentRepositoryDuplicateTest { + + @Test + public void testIdempotent() throws Exception { + assertEquals(1, myRepo.getCacheSize()); + + MockEndpoint mock = getMockEndpoint("mock:result"); + // no 3 is already in the idempotent repo + mock.expectedBodiesReceived("Message 0", "Message 1", "Message 2", "Message 4"); + + context.startRoute("foo"); + + assertMockEndpointsSatisfied(); + + // windows need a little slack + Thread.sleep(500); + + assertEquals(0, Mailbox.get("jones@localhost").getNewMessageCount()); + + // they are not removed so we should have all 5 in the repo now + assertEquals(5, myRepo.getCacheSize()); + } + + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() throws Exception { + from("imap://jones@localhost?password=secret&idempotentRepository=#myRepo&idempotentRepositoryRemoveOnCommit=false").routeId("foo").noAutoStartup() + .to("mock:result"); + } + }; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailIdempotentRepositoryDuplicateTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailIdempotentRepositoryDuplicateTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailIdempotentRepositoryDuplicateTest.java new file mode 100644 index 0000000..54a52e2 --- /dev/null +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailIdempotentRepositoryDuplicateTest.java @@ -0,0 +1,105 @@ +/** + * 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.camel.component.mail; + +import javax.mail.Folder; +import javax.mail.Message; +import javax.mail.Store; +import javax.mail.internet.MimeMessage; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.impl.JndiRegistry; +import org.apache.camel.processor.idempotent.MemoryIdempotentRepository; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Test; +import org.jvnet.mock_javamail.Mailbox; + +/** + * Unit test for idempotent repository. + */ +public class MailIdempotentRepositoryDuplicateTest extends CamelTestSupport { + + MemoryIdempotentRepository myRepo = new MemoryIdempotentRepository(); + + @Override + protected JndiRegistry createRegistry() throws Exception { + JndiRegistry jndi = super.createRegistry(); + jndi.bind("myRepo", myRepo); + return jndi; + } + + @Override + public void setUp() throws Exception { + // lets assume this ID is already done + myRepo.add("myuid-3"); + + prepareMailbox(); + super.setUp(); + } + + @Test + public void testIdempotent() throws Exception { + assertEquals(1, myRepo.getCacheSize()); + + MockEndpoint mock = getMockEndpoint("mock:result"); + // no 3 is already in the idempotent repo + mock.expectedBodiesReceived("Message 0", "Message 1", "Message 2", "Message 4"); + + context.startRoute("foo"); + + assertMockEndpointsSatisfied(); + + // windows need a little slack + Thread.sleep(500); + + assertEquals(0, Mailbox.get("jones@localhost").getNewMessageCount()); + + // they are removed on confirm + assertEquals(1, myRepo.getCacheSize()); + } + + private void prepareMailbox() throws Exception { + // connect to mailbox + Mailbox.clearAll(); + JavaMailSender sender = new DefaultJavaMailSender(); + Store store = sender.getSession().getStore("pop3"); + store.connect("localhost", 25, "jones", "secret"); + Folder folder = store.getFolder("INBOX"); + folder.open(Folder.READ_WRITE); + folder.expunge(); + + // inserts 5 new messages + Message[] messages = new Message[5]; + for (int i = 0; i < 5; i++) { + messages[i] = new MimeMessage(sender.getSession()); + messages[i].setText("Message " + i); + messages[i].setHeader("Message-ID", "myuid-" + i); + } + folder.appendMessages(messages); + folder.close(true); + } + + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() throws Exception { + from("imap://jones@localhost?password=secret&idempotentRepository=#myRepo").routeId("foo").noAutoStartup() + .to("mock:result"); + } + }; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailIdempotentRepositoryTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailIdempotentRepositoryTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailIdempotentRepositoryTest.java new file mode 100644 index 0000000..e481426 --- /dev/null +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailIdempotentRepositoryTest.java @@ -0,0 +1,100 @@ +/** + * 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.camel.component.mail; + +import javax.mail.Folder; +import javax.mail.Message; +import javax.mail.Store; +import javax.mail.internet.MimeMessage; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.impl.JndiRegistry; +import org.apache.camel.processor.idempotent.MemoryIdempotentRepository; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Test; +import org.jvnet.mock_javamail.Mailbox; + +/** + * Unit test for idempotent repository. + */ +public class MailIdempotentRepositoryTest extends CamelTestSupport { + + private MemoryIdempotentRepository myRepo = new MemoryIdempotentRepository(); + + @Override + protected JndiRegistry createRegistry() throws Exception { + JndiRegistry jndi = super.createRegistry(); + jndi.bind("myRepo", myRepo); + return jndi; + } + + @Override + public void setUp() throws Exception { + prepareMailbox(); + super.setUp(); + } + + @Test + public void testIdempotent() throws Exception { + assertEquals(0, myRepo.getCacheSize()); + + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedMessageCount(5); + + context.startRoute("foo"); + + assertMockEndpointsSatisfied(); + + // windows need a little slack + Thread.sleep(500); + + assertEquals(0, Mailbox.get("jones@localhost").getNewMessageCount()); + // they get deleted after processing by default so we should be back to 0 + assertEquals(0, myRepo.getCacheSize()); + } + + private void prepareMailbox() throws Exception { + // connect to mailbox + Mailbox.clearAll(); + JavaMailSender sender = new DefaultJavaMailSender(); + Store store = sender.getSession().getStore("pop3"); + store.connect("localhost", 25, "jones", "secret"); + Folder folder = store.getFolder("INBOX"); + folder.open(Folder.READ_WRITE); + folder.expunge(); + + // inserts 5 new messages + Message[] messages = new Message[5]; + for (int i = 0; i < 5; i++) { + messages[i] = new MimeMessage(sender.getSession()); + messages[i].setText("Message " + i); + messages[i].setHeader("Message-ID", "myuid-" + i); + } + folder.appendMessages(messages); + folder.close(true); + } + + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() throws Exception { + from("imap://jones@localhost?password=secret&idempotentRepository=#myRepo").routeId("foo").noAutoStartup() + .to("mock:result"); + } + }; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailMaxMessagesPerPollTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailMaxMessagesPerPollTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailMaxMessagesPerPollTest.java index 4af0249..012ce85 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailMaxMessagesPerPollTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailMaxMessagesPerPollTest.java @@ -74,6 +74,7 @@ public class MailMaxMessagesPerPollTest extends CamelTestSupport { Message[] messages = new Message[5]; for (int i = 0; i < 5; i++) { messages[i] = new MimeMessage(sender.getSession()); + messages[i].setHeader("Message-ID", "" + i); messages[i].setText("Message " + i); } folder.appendMessages(messages); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java index ba908d5..c84acef 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java @@ -78,6 +78,7 @@ public class MailPollEnrichTest extends CamelTestSupport { Message[] messages = new Message[5]; for (int i = 0; i < 5; i++) { messages[i] = new MimeMessage(sender.getSession()); + messages[i].setHeader("Message-ID", "" + i); messages[i].setText("Message " + i); } folder.appendMessages(messages); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPostProcessActionTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPostProcessActionTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPostProcessActionTest.java index c9a1655..f7c67c5 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPostProcessActionTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPostProcessActionTest.java @@ -90,6 +90,7 @@ public class MailPostProcessActionTest extends CamelTestSupport { Message[] messages = new Message[1]; messages[0] = new MimeMessage(sender.getSession()); messages[0].setSubject("TestSubject"); + messages[0].setHeader("Message-ID", "0"); messages[0].setText("TestText"); folder.appendMessages(messages); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailProcessOnlyUnseenMessagesTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailProcessOnlyUnseenMessagesTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailProcessOnlyUnseenMessagesTest.java index ca4db4a..c73fb8f 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailProcessOnlyUnseenMessagesTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailProcessOnlyUnseenMessagesTest.java @@ -72,9 +72,11 @@ public class MailProcessOnlyUnseenMessagesTest extends CamelTestSupport { Message[] msg = new Message[2]; msg[0] = new MimeMessage(sender.getSession()); msg[0].setText("Message 1"); + msg[0].setHeader("Message-ID", "0"); msg[0].setFlag(Flags.Flag.SEEN, true); msg[1] = new MimeMessage(sender.getSession()); msg[1].setText("Message 2"); + msg[0].setHeader("Message-ID", "1"); msg[1].setFlag(Flags.Flag.SEEN, true); folder.appendMessages(msg); folder.close(true); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermTest.java index 5dfa1f3..a54a975 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermTest.java @@ -81,31 +81,37 @@ public class MailSearchTermTest extends CamelTestSupport { messages[0] = new MimeMessage(sender.getSession()); messages[0].setSubject("Apache Camel rocks"); messages[0].setText("I like riding the Camel"); + messages[0].setHeader("Message-ID", "0"); messages[0].setFrom(new InternetAddress("some...@somewhere.com")); messages[1] = new MimeMessage(sender.getSession()); messages[1].setSubject("Order"); messages[1].setText("Ordering Camel in Action"); + messages[1].setHeader("Message-ID", "1"); messages[1].setFrom(new InternetAddress("d...@somewhere.com")); messages[2] = new MimeMessage(sender.getSession()); messages[2].setSubject("Order"); messages[2].setText("Ordering ActiveMQ in Action"); + messages[2].setHeader("Message-ID", "2"); messages[2].setFrom(new InternetAddress("d...@somewhere.com")); messages[3] = new MimeMessage(sender.getSession()); messages[3].setSubject("Buy pharmacy"); messages[3].setText("This is spam"); + messages[3].setHeader("Message-ID", "3"); messages[3].setFrom(new InternetAddress("s...@me.com")); messages[4] = new MimeMessage(sender.getSession()); messages[4].setSubject("Beers tonight?"); messages[4].setText("We meet at 7pm the usual place"); + messages[4].setHeader("Message-ID", "4"); messages[4].setFrom(new InternetAddress("bar...@simpsons.com")); messages[5] = new MimeMessage(sender.getSession()); messages[5].setSubject("Spambot attack"); messages[5].setText("I am attaching you"); + messages[5].setHeader("Message-ID", "5"); messages[5].setFrom(new InternetAddress("spam...@me.com")); folder.appendMessages(messages); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigLast24HoursTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigLast24HoursTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigLast24HoursTest.java index 770dbc8..3a5463c 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigLast24HoursTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigLast24HoursTest.java @@ -69,6 +69,7 @@ public class MailSearchTermUriConfigLast24HoursTest extends CamelTestSupport { messages[0] = new MimeMessage(sender.getSession()); messages[0].setSubject("Apache Camel rocks"); messages[0].setText("I like riding the Camel"); + messages[0].setHeader("Message-ID", "0"); messages[0].setFrom(new InternetAddress("some...@somewhere.com")); messages[0].setSentDate(new Date(twoDaysAgo)); @@ -76,29 +77,34 @@ public class MailSearchTermUriConfigLast24HoursTest extends CamelTestSupport { messages[1].setSubject("Order"); messages[1].setText("Ordering Camel in Action"); messages[1].setFrom(new InternetAddress("d...@somewhere.com")); + messages[1].setHeader("Message-ID", "1"); messages[1].setSentDate(new Date(twoDaysAgo)); messages[2] = new MimeMessage(sender.getSession()); messages[2].setSubject("Order"); messages[2].setText("Ordering ActiveMQ in Action"); + messages[2].setHeader("Message-ID", "2"); messages[2].setFrom(new InternetAddress("d...@somewhere.com")); messages[2].setSentDate(new Date(twentyHoursAgo)); messages[3] = new MimeMessage(sender.getSession()); messages[3].setSubject("Buy pharmacy"); messages[3].setText("This is spam"); + messages[3].setHeader("Message-ID", "3"); messages[3].setFrom(new InternetAddress("s...@me.com")); messages[3].setSentDate(new Date(twentyHoursAgo)); messages[4] = new MimeMessage(sender.getSession()); messages[4].setSubject("Beers tonight?"); messages[4].setText("We meet at 7pm the usual place"); + messages[4].setHeader("Message-ID", "4"); messages[4].setFrom(new InternetAddress("bar...@simpsons.com")); messages[4].setSentDate(new Date(oneHourAgo)); messages[5] = new MimeMessage(sender.getSession()); messages[5].setSubject("Spambot attack"); messages[5].setText("I am attaching you"); + messages[5].setHeader("Message-ID", "5"); messages[5].setFrom(new InternetAddress("spam...@me.com")); messages[5].setSentDate(new Date()); messages[5].setSentDate(new Date(oneHourAgo)); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigTest.java index b1dd46a..4306ef1 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigTest.java @@ -62,31 +62,37 @@ public class MailSearchTermUriConfigTest extends CamelTestSupport { messages[0] = new MimeMessage(sender.getSession()); messages[0].setSubject("Apache Camel rocks"); messages[0].setText("I like riding the Camel"); + messages[0].setHeader("Message-ID", "0"); messages[0].setFrom(new InternetAddress("some...@somewhere.com")); messages[1] = new MimeMessage(sender.getSession()); messages[1].setSubject("Order"); messages[1].setText("Ordering Camel in Action"); + messages[1].setHeader("Message-ID", "1"); messages[1].setFrom(new InternetAddress("d...@somewhere.com")); messages[2] = new MimeMessage(sender.getSession()); messages[2].setSubject("Order"); messages[2].setText("Ordering ActiveMQ in Action"); + messages[2].setHeader("Message-ID", "2"); messages[2].setFrom(new InternetAddress("d...@somewhere.com")); messages[3] = new MimeMessage(sender.getSession()); messages[3].setSubject("Buy pharmacy"); messages[3].setText("This is spam"); + messages[3].setHeader("Message-ID", "3"); messages[3].setFrom(new InternetAddress("s...@me.com")); messages[4] = new MimeMessage(sender.getSession()); messages[4].setSubject("Beers tonight?"); messages[4].setText("We meet at 7pm the usual place"); + messages[4].setHeader("Message-ID", "4"); messages[4].setFrom(new InternetAddress("bar...@simpsons.com")); messages[5] = new MimeMessage(sender.getSession()); messages[5].setSubject("Spambot attack"); messages[5].setText("I am attaching you"); + messages[5].setHeader("Message-ID", "5"); messages[5].setFrom(new InternetAddress("spam...@me.com")); folder.appendMessages(messages); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteAllTasksTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteAllTasksTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteAllTasksTest.java index 357177b..c8abb30 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteAllTasksTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteAllTasksTest.java @@ -89,6 +89,7 @@ public class MailShutdownCompleteAllTasksTest extends CamelTestSupport { for (int i = 0; i < 5; i++) { messages[i] = new MimeMessage(sender.getSession()); messages[i].setText("Message " + i); + messages[i].setHeader("Message-ID", "" + i); } folder.appendMessages(messages); folder.close(true); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteCurrentTaskOnlyTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteCurrentTaskOnlyTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteCurrentTaskOnlyTest.java index 05d37b3..506d475 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteCurrentTaskOnlyTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteCurrentTaskOnlyTest.java @@ -72,6 +72,7 @@ public class MailShutdownCompleteCurrentTaskOnlyTest extends CamelTestSupport { for (int i = 0; i < 5; i++) { messages[i] = new MimeMessage(sender.getSession()); messages[i].setText("Message " + i); + messages[i].setHeader("Message-ID", "" + i); } folder.appendMessages(messages); folder.close(true); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTest.java index 8131220..26ea02f 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTest.java @@ -81,16 +81,19 @@ public class MailSortTermTest extends CamelTestSupport { Message[] messages = new Message[3]; messages[0] = new MimeMessage(sender.getSession()); messages[0].setText("Earlier date"); + messages[0].setHeader("Message-ID", "0"); messages[0].setSentDate(new Date(10000)); messages[0].setSubject("Camel"); messages[1] = new MimeMessage(sender.getSession()); messages[1].setText("Later date"); + messages[1].setHeader("Message-ID", "1"); messages[1].setSentDate(new Date(20000)); messages[1].setSubject("Camel"); messages[2] = new MimeMessage(sender.getSession()); messages[2].setText("Even later date"); + messages[2].setHeader("Message-ID", "2"); messages[2].setSentDate(new Date(30000)); messages[2].setSubject("Invalid"); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermThreeTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermThreeTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermThreeTest.java index 70c1ec9..730ee0b 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermThreeTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermThreeTest.java @@ -79,16 +79,19 @@ public class MailSortTermThreeTest extends CamelTestSupport { Message[] messages = new Message[3]; messages[0] = new MimeMessage(sender.getSession()); messages[0].setText("Earlier date"); + messages[0].setHeader("Message-ID", "0"); messages[0].setSentDate(new Date(10000)); messages[0].setSubject("Camel"); messages[1] = new MimeMessage(sender.getSession()); messages[1].setText("Later date"); + messages[1].setHeader("Message-ID", "1"); messages[1].setSentDate(new Date(20000)); messages[1].setSubject("Camel"); messages[2] = new MimeMessage(sender.getSession()); messages[2].setText("Even later date"); + messages[2].setHeader("Message-ID", "2"); messages[2].setSentDate(new Date(30000)); messages[2].setSubject("Invalid"); http://git-wip-us.apache.org/repos/asf/camel/blob/4c499320/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTwoTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTwoTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTwoTest.java index c43eba9..ba6bbd5 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTwoTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTwoTest.java @@ -79,16 +79,19 @@ public class MailSortTermTwoTest extends CamelTestSupport { Message[] messages = new Message[3]; messages[0] = new MimeMessage(sender.getSession()); messages[0].setText("Earlier date"); + messages[0].setHeader("Message-ID", "0"); messages[0].setSentDate(new Date(10000)); messages[0].setSubject("Camel"); messages[1] = new MimeMessage(sender.getSession()); messages[1].setText("Later date"); + messages[1].setHeader("Message-ID", "1"); messages[1].setSentDate(new Date(20000)); messages[1].setSubject("Camel"); messages[2] = new MimeMessage(sender.getSession()); messages[2].setText("Even later date"); + messages[2].setHeader("Message-ID", "2"); messages[2].setSentDate(new Date(30000)); messages[2].setSubject("Invalid");