use of org.xwiki.mail.MailContentStore in project xwiki-platform by xwiki.
the class DatabaseMailListenerTest method onSendMessageSuccess.
@Test
public void onSendMessageSuccess() throws Exception {
MailStatusStore mailStatusStore = this.mocker.getInstance(MailStatusStore.class, "database");
MailStatus status = new MailStatus(this.batchId, this.message, MailState.PREPARE_SUCCESS);
status.setWiki("otherwiki");
when(mailStatusStore.load(this.messageId)).thenReturn(status);
MailListener listener = this.mocker.getComponentUnderTest();
listener.onPrepareBegin(batchId, Collections.<String, Object>emptyMap());
listener.onSendMessageSuccess(this.message, Collections.<String, Object>emptyMap());
verify(mailStatusStore).load(this.messageId);
verify(mailStatusStore).save(argThat(new isSameMailStatus(MailState.SEND_SUCCESS, "otherwiki")), anyMap());
MailContentStore mailContentStore = this.mocker.getInstance(MailContentStore.class, "filesystem");
verify(mailContentStore).delete(this.batchId, this.messageId);
}
use of org.xwiki.mail.MailContentStore in project xwiki-platform by xwiki.
the class DatabaseMailResenderTest method resendAsynchronouslySeveralMessagesWhenMailContentStoreLoadingFailsForFirstMessage.
@Test
public void resendAsynchronouslySeveralMessagesWhenMailContentStoreLoadingFailsForFirstMessage() throws Exception {
Map filterMap = Collections.singletonMap("state", "prepare_%");
MailStatus status1 = new MailStatus();
status1.setBatchId("batch1");
status1.setMessageId("message1");
MailStatus status2 = new MailStatus();
status2.setBatchId("batch2");
status2.setMessageId("message2");
List<MailStatus> statuses = new ArrayList<>();
statuses.add(status1);
statuses.add(status2);
MailStatusStore statusStore = this.mocker.getInstance(MailStatusStore.class, "database");
when(statusStore.load(filterMap, 0, 0, null, true)).thenReturn(statuses);
MailContentStore contentStore = this.mocker.getInstance(MailContentStore.class, "filesystem");
when(contentStore.load(any(), eq("batch1"), eq("message1"))).thenThrow(new MailStoreException("error1"));
ExtendedMimeMessage message2 = new ExtendedMimeMessage();
when(contentStore.load(any(), eq("batch2"), eq("message2"))).thenReturn(message2);
MailSender sender = this.mocker.getInstance(MailSender.class);
this.mocker.getComponentUnderTest().resendAsynchronously(filterMap, 0, 0);
// The test is here
verify(this.mocker.getMockedLogger()).warn("Failed to load mail content for batchId [{}], messageId [{}]", "batch1", "message1");
verify(sender).sendAsynchronously(eq(Arrays.asList(message2)), any(), any(MailListener.class));
}
use of org.xwiki.mail.MailContentStore in project xwiki-platform by xwiki.
the class DatabaseMailResenderTest method resendAsynchronouslySingleMessageWhenMailContentStoreLoadingFails.
@Test
public void resendAsynchronouslySingleMessageWhenMailContentStoreLoadingFails() throws Exception {
MailContentStore contentStore = this.mocker.getInstance(MailContentStore.class, "filesystem");
when(contentStore.load(any(), eq("batchId"), eq("messageId"))).thenThrow(new MailStoreException("error"));
try {
this.mocker.getComponentUnderTest().resendAsynchronously("batchId", "messageId");
fail("Should have thrown an exception here");
} catch (MailStoreException expected) {
assertEquals("error", expected.getMessage());
}
}
use of org.xwiki.mail.MailContentStore in project xwiki-platform by xwiki.
the class DatabaseMailResenderTest method resendAsynchronouslySingleMesssage.
@Test
public void resendAsynchronouslySingleMesssage() throws Exception {
MailListener listener = this.mocker.registerMockComponent(MailListener.class, "database");
ExtendedMimeMessage message = new ExtendedMimeMessage();
String batchId = UUID.randomUUID().toString();
MailContentStore contentStore = this.mocker.getInstance(MailContentStore.class, "filesystem");
when(contentStore.load(any(), eq(batchId), eq("messageId"))).thenReturn(message);
MailSender sender = this.mocker.getInstance(MailSender.class);
when(sender.sendAsynchronously(eq(Arrays.asList(message)), any(), any(MailListener.class))).thenReturn(new DefaultMailResult(batchId));
this.mocker.getComponentUnderTest().resendAsynchronously(batchId, "messageId");
// The test is here
verify(sender).sendAsynchronously(eq(Arrays.asList(message)), any(), same(listener));
verify(listener).getMailStatusResult();
}
use of org.xwiki.mail.MailContentStore in project xwiki-platform by xwiki.
the class PrepareMailRunnableTest method prepareMailWhenContentStoreFails.
@Test
public void prepareMailWhenContentStoreFails() throws Exception {
Properties properties = new Properties();
Session session = Session.getDefaultInstance(properties);
MimeMessage message1 = new MimeMessage(session);
message1.setText("Content1");
MimeMessage message2 = new MimeMessage(session);
message2.setText("Content2");
String batchId1 = UUID.randomUUID().toString();
String batchId2 = UUID.randomUUID().toString();
ExecutionContext context1 = new ExecutionContext();
XWikiContext xContext1 = new XWikiContext();
xContext1.setWikiId("wiki1");
context1.setProperty(XWikiContext.EXECUTIONCONTEXT_KEY, xContext1);
ExecutionContext context2 = new ExecutionContext();
XWikiContext xContext2 = new XWikiContext();
xContext2.setWikiId("wiki2");
context2.setProperty(XWikiContext.EXECUTIONCONTEXT_KEY, xContext2);
MemoryMailListener listener1 = this.mocker.getInstance(MailListener.class, "memory");
PrepareMailQueueItem item1 = new PrepareMailQueueItem(Arrays.asList(message1), session, listener1, batchId1, context1);
MemoryMailListener listener2 = this.mocker.getInstance(MailListener.class, "memory");
PrepareMailQueueItem item2 = new PrepareMailQueueItem(Arrays.asList(message2), session, listener2, batchId2, context2);
MailQueueManager mailQueueManager = this.mocker.getInstance(new DefaultParameterizedType(null, MailQueueManager.class, PrepareMailQueueItem.class));
// Make the content store save fail
MailContentStore contentStore = this.mocker.getInstance(MailContentStore.class, "filesystem");
doThrow(new MailStoreException("error")).when(contentStore).save(any(String.class), any(ExtendedMimeMessage.class));
// Prepare 2 mails. Both will fail but we want to verify that the second one is processed even though the first
// one failed.
mailQueueManager.addToQueue(item1);
mailQueueManager.addToQueue(item2);
MailRunnable runnable = this.mocker.getComponentUnderTest();
Thread thread = new Thread(runnable);
thread.start();
// Wait for the mails to have been processed.
try {
listener1.getMailStatusResult().waitTillProcessed(10000L);
listener2.getMailStatusResult().waitTillProcessed(10000L);
} finally {
runnable.stopProcessing();
thread.interrupt();
thread.join();
}
MailStatusResult result1 = listener1.getMailStatusResult();
MailStatusResult result2 = listener2.getMailStatusResult();
// Despite the errors, both process should be ended with known total number of mails
assertTrue(result1.isProcessed());
assertTrue(result2.isProcessed());
// This is the real test: we verify that there's been an error while sending each email.
MailStatus status1 = result1.getByState(MailState.PREPARE_ERROR).next();
assertEquals("MailStoreException: error", status1.getErrorSummary());
MailStatus status2 = result2.getByState(MailState.PREPARE_ERROR).next();
assertEquals("MailStoreException: error", status2.getErrorSummary());
}
Aggregations