JAMES-2033 RemoteDelivery should not raise error on JMAP when message is moved out of OUTBOX
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9505324c Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9505324c Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9505324c Branch: refs/heads/master Commit: 9505324c1530cd5dd16c842120789ddb5175d632 Parents: 986059d Author: quynhn <[email protected]> Authored: Mon May 29 16:49:15 2017 +0700 Committer: benwa <[email protected]> Committed: Tue May 30 15:32:27 2017 +0700 ---------------------------------------------------------------------- .../james/jmap/send/PostDequeueDecorator.java | 2 ++ .../jmap/send/PostDequeueDecoratorTest.java | 26 +++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/9505324c/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java index 41add56..5631c83 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java @@ -80,6 +80,8 @@ public class PostDequeueDecorator extends MailQueueItemDecorator { MailboxSession mailboxSession = mailboxManager.createSystemSession(username, LOG); moveFromOutboxToSent(messageId, mailboxSession); getMail().setAttribute(IS_DELIVERED, IS_DELIVERED); + } catch (MailShouldBeInOutboxException e) { + LOG.info("Message does not exist on Outbox anymore, it could have already been sent {}", e); } catch (MailboxException e) { throw new MailQueueException(e.getMessage(), e); } http://git-wip-us.apache.org/repos/asf/james-project/blob/9505324c/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java index 568aac9..beb0210 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java @@ -34,7 +34,6 @@ import javax.mail.Flags; import org.apache.james.jmap.DefaultMailboxes; import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException; -import org.apache.james.jmap.send.exception.MailShouldBeInOutboxException; import org.apache.james.jmap.utils.SystemMailboxesProviderImpl; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; @@ -42,6 +41,7 @@ import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.acl.GroupMembershipResolver; +import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.inmemory.InMemoryMessageId; import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; import org.apache.james.mailbox.model.ComposedMessageId; @@ -52,6 +52,7 @@ import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.MessageRange; import org.apache.james.mailbox.model.MessageResult; import org.apache.james.mailbox.model.MessageResultIterator; +import org.apache.james.queue.api.MailQueue; import org.apache.james.queue.api.MailQueue.MailQueueItem; import org.apache.mailet.Mail; import org.apache.mailet.base.test.FakeMail; @@ -100,8 +101,8 @@ public class PostDequeueDecoratorTest { verify(mockedMailQueueItem).done(true); } - @Test(expected=MailShouldBeInOutboxException.class) - public void doneShouldThrowWhenMessageIsNotInOutbox() throws Exception { + @Test + public void doneShouldNotThrowWhenMessageIsNotInOutbox() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME, LOGGER); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); @@ -266,4 +267,23 @@ public class PostDequeueDecoratorTest { verifyNoMoreInteractions(messageIdManager); } + + @Test(expected = MailQueue.MailQueueException.class) + public void doneShouldThrowWhenMailboxException() throws Exception { + MessageIdManager messageIdManager = mock(MessageIdManager.class); + testee = new PostDequeueDecorator(mockedMailQueueItem, mailboxManager, new InMemoryMessageId.Factory(), + messageIdManager, new SystemMailboxesProviderImpl(mailboxManager)); + + MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME, LOGGER); + mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); + mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession).get(); + MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); + ComposedMessageId messageId = messageManager.appendMessage(new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), mailboxSession, false, new Flags()); + mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, messageId.getMessageId().serialize()); + mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME); + + when(messageIdManager.getMessages(eq(ImmutableList.of(messageId.getMessageId())), eq(FetchGroupImpl.MINIMAL), any(MailboxSession.class))).thenThrow(MailboxException.class); + + testee.done(true); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
