Skip to content

Commit

Permalink
JAMES-2033 RemoteDelivery should not raise error on JMAP when message…
Browse files Browse the repository at this point in the history
… is moved out of OUTBOX
  • Loading branch information
quynhn authored and chibenwa committed May 30, 2017
1 parent 986059d commit 9505324
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
Expand Up @@ -80,6 +80,8 @@ public void done(boolean success) throws MailQueueException {
MailboxSession mailboxSession = mailboxManager.createSystemSession(username, LOG); MailboxSession mailboxSession = mailboxManager.createSystemSession(username, LOG);
moveFromOutboxToSent(messageId, mailboxSession); moveFromOutboxToSent(messageId, mailboxSession);
getMail().setAttribute(IS_DELIVERED, IS_DELIVERED); 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) { } catch (MailboxException e) {
throw new MailQueueException(e.getMessage(), e); throw new MailQueueException(e.getMessage(), e);
} }
Expand Down
Expand Up @@ -34,14 +34,14 @@


import org.apache.james.jmap.DefaultMailboxes; import org.apache.james.jmap.DefaultMailboxes;
import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException; 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.jmap.utils.SystemMailboxesProviderImpl;
import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.MessageIdManager;
import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.MessageManager;
import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.acl.GroupMembershipResolver; 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.InMemoryMessageId;
import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
import org.apache.james.mailbox.model.ComposedMessageId; import org.apache.james.mailbox.model.ComposedMessageId;
Expand All @@ -52,6 +52,7 @@
import org.apache.james.mailbox.model.MessageRange; import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.model.MessageResult; import org.apache.james.mailbox.model.MessageResult;
import org.apache.james.mailbox.model.MessageResultIterator; 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.james.queue.api.MailQueue.MailQueueItem;
import org.apache.mailet.Mail; import org.apache.mailet.Mail;
import org.apache.mailet.base.test.FakeMail; import org.apache.mailet.base.test.FakeMail;
Expand Down Expand Up @@ -100,8 +101,8 @@ public void doneShouldCallDecoratedDone() throws Exception {
verify(mockedMailQueueItem).done(true); verify(mockedMailQueueItem).done(true);
} }


@Test(expected=MailShouldBeInOutboxException.class) @Test
public void doneShouldThrowWhenMessageIsNotInOutbox() throws Exception { public void doneShouldNotThrowWhenMessageIsNotInOutbox() throws Exception {
MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME, LOGGER); MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME, LOGGER);
mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession);
Expand Down Expand Up @@ -266,4 +267,23 @@ public void doneShouldCopyMailFromOutboxToSentOnlyOneTimeWhenSuccess() throws Ex


verifyNoMoreInteractions(messageIdManager); 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);
}
} }

0 comments on commit 9505324

Please sign in to comment.