Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import java.util.WeakHashMap;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import java.util.stream.Collectors;

import org.aeonbits.owner.ConfigFactory;
import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -74,7 +75,8 @@ private static XCMailrClient getXCMailrClient()
*/
public static Mailbox createTemporaryEmail(String email, boolean forwardEnabled)
{
Mailbox mailbox = new Mailbox(email, DateUtils.addMinutes(new Date(), getConfiguration().temporaryMailValidMinutes()).getTime(), forwardEnabled);
Mailbox mailbox = new Mailbox(email, DateUtils.addMinutes(new Date(), getConfiguration().temporaryMailValidMinutes()).getTime(),
forwardEnabled);
try
{
mailbox = getXCMailrClient().mailboxes().createMailbox(mailbox);
Expand Down Expand Up @@ -147,7 +149,8 @@ public static Mailbox getMailbox(String email)
* boolean value if the received e-mails should be forwarded to an account owner e-mail
* @return {@link Mailbox} object with information about updated mailbox
*/
public static Mailbox updateMailbox(final String address, final String newAddress, final Integer minutesActive, final Boolean forwardEnabled)
public static Mailbox updateMailbox(final String address, final String newAddress, final Integer minutesActive,
final Boolean forwardEnabled)
{
Mailbox oldMailbox = getMailbox(address);
int validMinutes = (int) Math.round((new Date(oldMailbox.deactivationTime).getTime() - new Date().getTime() * 1.0) / 60000);
Expand Down Expand Up @@ -242,7 +245,7 @@ public static void deleteMailbox(String address)
public static void fetchAttachment(Mail mail, String attachmentName, File file)
{
try (InputStream inputStream = getXCMailrClient().mails().openAttachment(mail.id, attachmentName);
OutputStream outputStream = new FileOutputStream(file);)
OutputStream outputStream = new FileOutputStream(file);)
{
outputStream.write(inputStream.readAllBytes());
}
Expand All @@ -262,7 +265,7 @@ public static void fetchAttachment(Mail mail, String attachmentName, File file)
*/
public static List<Mail> retrieveAllMailsFromMailbox(String mailboxAddress)
{
return fetchEmails(mailboxAddress, null, null, null, null, null, false);
return fetchEmails(mailboxAddress, null, null, null, null, null, false, null);
}

/**
Expand All @@ -276,7 +279,7 @@ public static List<Mail> retrieveAllMailsFromMailbox(String mailboxAddress)
*/
public static Mail retrieveLastEmailBySubject(String email, String subject)
{
List<Mail> mails = fetchEmails(email, null, subject, null, null, null, true);
List<Mail> mails = fetchEmails(email, null, subject, null, null, null, true, null);
return mails != null ? mails.get(0) : null;
}

Expand All @@ -291,10 +294,16 @@ public static Mail retrieveLastEmailBySubject(String email, String subject)
*/
public static Mail retrieveLastEmailBySender(String email, String sender)
{
List<Mail> mails = fetchEmails(email, sender, null, null, null, null, true);
List<Mail> mails = fetchEmails(email, sender, null, null, null, null, true, null);
return mails != null ? mails.get(0) : null;
}

public static Date getTimestampOfLastEmail(String email)
{
var emails = fetchEmailsFromRemote(email, null, null, null, null, null, false, null);
return emails != null && emails.size() > 0 ? new Date(emails.get(emails.size() - 1).receivedTime) : new Date();
}

/**
* Gets all received e-mails which match the specified parameters
*
Expand All @@ -314,7 +323,8 @@ public static Mail retrieveLastEmailBySender(String email, String sender)
* a boolean indicating whether only the last e-mail or more should be returned.
* @return the retrieved {@link List} of {@link Mail} objects
*/
public static List<Mail> fetchEmails(String email, String from, String subject, String textContent, String htmlContent, String headers, boolean lastMatch)
public static List<Mail> fetchEmails(String email, String from, String subject, String textContent, String htmlContent, String headers,
boolean lastMatch, Date lastestEmailDate)
{
assertPatternIsValid(from);
assertPatternIsValid(subject);
Expand All @@ -331,7 +341,7 @@ public static List<Mail> fetchEmails(String email, String from, String subject,
LOGGER.warn("No e-mail retrieved while polling.");
return null;
}
List<Mail> mails = fetchEmailsFromRemote(email, from, subject, textContent, htmlContent, headers, lastMatch);
List<Mail> mails = fetchEmailsFromRemote(email, from, subject, textContent, htmlContent, headers, lastMatch, lastestEmailDate);
if (mails != null && !mails.isEmpty())
{
return mails;
Expand All @@ -350,8 +360,8 @@ public static List<Mail> fetchEmails(String email, String from, String subject,
}
}

private static List<Mail> fetchEmailsFromRemote(String email, String from, String subject, String textContent, String htmlContent, String headers,
boolean lastMatch)
private static List<Mail> fetchEmailsFromRemote(String email, String from, String subject, String textContent, String htmlContent,
String headers, boolean lastMatch, Date lastestEmailDate)
{
MailFilterOptions filters = new MailFilterOptions();

Expand Down Expand Up @@ -380,6 +390,10 @@ private static List<Mail> fetchEmailsFromRemote(String email, String from, Strin
try
{
mails = getXCMailrClient().mails().listMails(email, filters);
if (lastestEmailDate != null)
{
mails = mails.stream().filter(mail -> new Date(mail.receivedTime).after(lastestEmailDate)).collect(Collectors.toList());
}
}
catch (Exception e)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.Date;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
Expand All @@ -24,7 +26,9 @@ public class XcMailrRetrieveEmailsTest extends AbstractXcMailrApiTest

private final File fileToSend = new File("src/test/resources/com/xceptance/neodymium/plugin/xcmailr/message.txt");

private final EmailAccount emailAccount = new EmailAccount(CREDENTIALS.smtpServerEmail(), CREDENTIALS.smtpServerLogin(), CREDENTIALS.smtpServerPassword(), CREDENTIALS.smtpServerHost(), CREDENTIALS.smtpServerPort(), false, true);
private final EmailAccount emailAccount = new EmailAccount(CREDENTIALS.smtpServerEmail(), CREDENTIALS.smtpServerLogin(),
CREDENTIALS.smtpServerPassword(), CREDENTIALS.smtpServerHost(),
CREDENTIALS.smtpServerPort(), false, true);

@Before
public void createTempEmailAndSendMessage() throws IOException, URISyntaxException, InterruptedException
Expand Down Expand Up @@ -98,7 +102,7 @@ public void testRetrieveLastEmailBySendertExpectNull()
public void fetchLastEmail()
{
// fetch last received e-mail
Mail mail = XcMailrApi.fetchEmails(emailUnderTest, null, null, null, null, null, true).get(0);
Mail mail = XcMailrApi.fetchEmails(emailUnderTest, null, null, null, null, null, true, null).get(0);
validateMessage(mail);
}

Expand All @@ -109,18 +113,45 @@ public void fetchLastEmail()
public void fetchLastEmailBySender()
{
// fetch last received e-mail with specified plain text
Mail mail = XcMailrApi.fetchEmails(emailUnderTest, emailAccount.getEmail(), null, null, null, null, true).get(0);
Mail mail = XcMailrApi.fetchEmails(emailUnderTest, emailAccount.getEmail(), null, null, null, null, true, null).get(0);
validateMessage(mail);
}

/**
* test that it's possible to fetch last received e-mail after specific date
*/
@Test
public void fetchLastEmailByLastDate()
{
List<Mail> mail = XcMailrApi.fetchEmails(emailUnderTest, null, null, null, null, null, true, DateUtils.addMinutes(new Date(), 1));
Assert.assertNull(mail);
Date now = new Date();
SendEmail.send(emailAccount, emailUnderTest, subject, textToSend, fileToSend);
mail = XcMailrApi.fetchEmails(emailUnderTest, null, null, null, null, null, true, now);
Assert.assertTrue(mail.size() == 1);
validateMessage(mail.get(0));
}

/**
* test the {@link XcMailrApi#getTimestampOfLastEmail(String)} methods return correct time
*/
@Test
public void testGetTimestampOfLastEmail()
{
long date = XcMailrApi.fetchEmails(emailUnderTest, emailAccount.getEmail(), null, null, null, null, true, null).get(0).receivedTime;

Date lastEmailDate = XcMailrApi.getTimestampOfLastEmail(emailUnderTest);
Assert.assertTrue(date - lastEmailDate.getTime() < 1000);
}

/**
* test that it's possible to fetch last received e-mail with a specific plain text
*/
@Test
public void fetchLastEmailBySubject()
{
// fetch last received e-mail with specified plain text
Mail mail = XcMailrApi.fetchEmails(emailUnderTest, null, subject, null, null, null, true).get(0);
Mail mail = XcMailrApi.fetchEmails(emailUnderTest, null, subject, null, null, null, true, null).get(0);
validateMessage(mail);
}

Expand All @@ -133,7 +164,7 @@ public void fetchLastEmailByTextContent()
String textToRetrieve = textToSend.replaceAll("\\?", "\\\\?").replaceAll("\\)", "\\\\)").replaceAll("\\n", "\\\\r\\\\n");

// fetch last received e-mail with specified plain text
Mail mail = XcMailrApi.fetchEmails(emailUnderTest, null, null, textToRetrieve, null, null, true).get(0);
Mail mail = XcMailrApi.fetchEmails(emailUnderTest, null, null, textToRetrieve, null, null, true, null).get(0);
validateMessage(mail);
}

Expand All @@ -146,7 +177,7 @@ public void fetchLastEmailByHtmlContent()
String textToRetrieve = textToSend.replaceAll("\\?", "\\\\?").replaceAll("\\)", "\\\\)").replaceAll("\\n", "\\\\r\\\\n");

// fetch last received e-mail with specified HTML text
Mail mail = XcMailrApi.fetchEmails(emailUnderTest, null, null, null, textToRetrieve, null, true).get(0);
Mail mail = XcMailrApi.fetchEmails(emailUnderTest, null, null, null, textToRetrieve, null, true, null).get(0);
validateMessage(mail);
}

Expand All @@ -157,7 +188,7 @@ public void fetchLastEmailByHtmlContent()
public void fetchLastEmailByTextContentWithInvalidPattern()
{
Assert.assertThrows("entered pattern \"" + textToSend + "\" is invalid", RuntimeException.class, () -> {
XcMailrApi.fetchEmails(emailUnderTest, null, null, textToSend, null, null, true);
XcMailrApi.fetchEmails(emailUnderTest, null, null, textToSend, null, null, true, null);
});
}

Expand All @@ -168,7 +199,7 @@ public void fetchLastEmailByTextContentWithInvalidPattern()
public void fetchLastEmailByHtmlContentWithInvalidPattern()
{
Assert.assertThrows("entered pattern \"" + textToSend + "\" is invalid", RuntimeException.class, () -> {
XcMailrApi.fetchEmails(emailUnderTest, null, null, null, textToSend, null, true);
XcMailrApi.fetchEmails(emailUnderTest, null, null, null, textToSend, null, true, null);
});
}

Expand All @@ -189,7 +220,7 @@ public void fetchEmailsFromTempEmail()
}

// fetch all received e-mails
List<Mail> mails = XcMailrApi.fetchEmails(emailUnderTest, null, null, null, null, null, false);
List<Mail> mails = XcMailrApi.fetchEmails(emailUnderTest, null, null, null, null, null, false, null);
Assert.assertEquals(2, mails.size());

for (Mail mail : mails)
Expand Down