You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ro...@apache.org on 2019/10/22 12:36:02 UTC
[james-project] 01/05: JAMES-2704 Fix SmtpRandomStoringTest: check
that all mailboxes are filled in a dedicated test
This is an automated email from the ASF dual-hosted git repository.
rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit bf414f85f0bbab2fad13f77ba281491d74b71e71
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Thu Oct 17 15:56:22 2019 +0200
JAMES-2704 Fix SmtpRandomStoringTest: check that all mailboxes are filled in a dedicated test
---
.../apache/james/smtp/SmtpRandomStoringTest.java | 92 +++++++++++++++-------
1 file changed, 65 insertions(+), 27 deletions(-)
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpRandomStoringTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpRandomStoringTest.java
index f9acef7..4faf1e8 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpRandomStoringTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpRandomStoringTest.java
@@ -54,8 +54,9 @@ import org.apache.james.utils.SMTPMessageSender;
import org.apache.mailet.Mail;
import org.awaitility.Duration;
import org.awaitility.core.ConditionFactory;
-import org.junit.After;
-import org.junit.Before;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -77,6 +78,7 @@ public class SmtpRandomStoringTest {
.collect(Guavate.toImmutableList());
private static final ImmutableList<String> MAILBOXES = ImmutableList.of(MailboxConstants.INBOX, "arbitrary");
+ private static final int NUMBER_OF_MAILS = 100;
private static final MailetConfiguration RANDOM_STORING = MailetConfiguration.builder()
.matcher(All.class)
.mailet(RandomStoring.class)
@@ -84,16 +86,16 @@ public class SmtpRandomStoringTest {
@Rule
public IMAPMessageReader imapMessageReader = new IMAPMessageReader();
- @Rule
- public SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
- @Rule
- public TemporaryFolder temporaryFolder = new TemporaryFolder();
+ @ClassRule
+ public static SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
+ @ClassRule
+ public static TemporaryFolder temporaryFolder = new TemporaryFolder();
- private TemporaryJamesServer jamesServer;
- private ImapGuiceProbe imapProbe;
+ private static TemporaryJamesServer jamesServer;
+ private static ImapGuiceProbe imapProbe;
- @Before
- public void setUp() throws Exception {
+ @BeforeClass
+ public static void setUp() throws Exception {
createJamesServer();
createUsersAndMailboxes();
@@ -101,15 +103,25 @@ public class SmtpRandomStoringTest {
imapProbe = jamesServer.getProbe(ImapGuiceProbe.class);
}
- private void createUsersAndMailboxes() throws Exception {
+ private static void createUsersAndMailboxes() throws Exception {
MailboxProbeImpl mailboxes = jamesServer.getProbe(MailboxProbeImpl.class);
DataProbe dataProbe = jamesServer.getProbe(DataProbeImpl.class);
dataProbe.addDomain(DEFAULT_DOMAIN);
dataProbe.addUser(FROM, PASSWORD);
+
USERS.forEach(user -> populateUser(mailboxes, dataProbe, user));
+ awaitAtMostTenSeconds
+ .until(() -> USERS
+ .stream()
+ .map(mailboxes::listUserMailboxes)
+ .allMatch(userMailboxes -> userMailboxes.size() == MAILBOXES.size()));
+
+ Thread.sleep(500);
+
+ sendMails();
}
- private void populateUser(MailboxProbeImpl mailboxProbe, DataProbe dataProbe, String user) {
+ private static void populateUser(MailboxProbeImpl mailboxProbe, DataProbe dataProbe, String user) {
try {
dataProbe.addUser(user, PASSWORD);
MAILBOXES.forEach(mailbox -> mailboxProbe.createMailbox(MailboxPath.forUser(user, mailbox)));
@@ -118,7 +130,7 @@ public class SmtpRandomStoringTest {
}
}
- private void createJamesServer() throws Exception {
+ private static void createJamesServer() throws Exception {
MailetContainer.Builder mailetContainer = TemporaryJamesServer.SIMPLE_MAILET_CONTAINER_CONFIGURATION
.putProcessor(ProcessorConfiguration.transport()
.addMailet(RANDOM_STORING)
@@ -130,30 +142,43 @@ public class SmtpRandomStoringTest {
.build(temporaryFolder.newFolder());
}
- @After
- public void tearDown() {
+ private static void sendMails() throws Exception {
+ SMTPMessageSender authenticatedSmtpConnection = messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
+ .authenticate(FROM, PASSWORD);
+
+ IntStream.range(0, NUMBER_OF_MAILS)
+ .forEach(Throwing.intConsumer(index ->
+ authenticatedSmtpConnection
+ .sendMessage(buildMail("Message " + index))).sneakyThrow());
+ }
+
+ @AfterClass
+ public static void tearDown() {
jamesServer.shutdown();
}
@Test
- public void sendingOneHundredMessagesShouldBeRandomlyAssignedToEveryMailboxesOfEveryUsers() throws Exception {
- int numberOfMails = 100;
+ public void oneHundredMailsShouldHaveBeenStoredBetweenFourAndEightTimes() {
+ Collection<IMAPMessageReader> connections = USERS
+ .stream()
+ .map(this::createIMAPConnection)
+ .collect(Guavate.toImmutableList());
- SMTPMessageSender authenticatedSmtpConnection = messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
- .authenticate(FROM, PASSWORD);
+ awaitAtMostTenSeconds
+ .untilAsserted(() -> checkNumberOfMessages(connections));
- IntStream.range(0, numberOfMails)
- .forEach(Throwing.intConsumer(index ->
- authenticatedSmtpConnection
- .sendMessage(buildMail("Message " + index))).sneakyThrow());
+ connections.forEach(Throwing.consumer(IMAPMessageReader::close).sneakyThrow());
+ }
+ @Test
+ public void messagesShouldBeRandomlyAssignedToEveryMailboxesOfEveryUsers() {
Collection<IMAPMessageReader> connections = USERS
.stream()
.map(this::createIMAPConnection)
.collect(Guavate.toImmutableList());
awaitAtMostTenSeconds
- .untilAsserted(() -> checkMailboxesHaveBeenFilled(connections, numberOfMails));
+ .untilAsserted(() -> checkMailboxesHaveBeenFilled(connections));
connections.forEach(Throwing.consumer(IMAPMessageReader::close).sneakyThrow());
}
@@ -170,12 +195,18 @@ public class SmtpRandomStoringTest {
}
}
- private void checkMailboxesHaveBeenFilled(Collection<IMAPMessageReader> connections, int numberOfMails) {
+ private void checkNumberOfMessages(Collection<IMAPMessageReader> connections) {
assertThat(connections
.stream()
.flatMapToLong(this::numberOfAUserMessages)
.sum())
- .isBetween(numberOfMails * 4L, numberOfMails * 8L);
+ .isBetween(NUMBER_OF_MAILS * 4L, NUMBER_OF_MAILS * 8L);
+ }
+
+ private void checkMailboxesHaveBeenFilled(Collection<IMAPMessageReader> connections) {
+ connections
+ .stream()
+ .forEach(this::checkUserMailboxes);
}
private LongStream numberOfAUserMessages(IMAPMessageReader imapMessageReader) {
@@ -184,6 +215,13 @@ public class SmtpRandomStoringTest {
.mapToLong(mailbox -> numberOfMessagesInMailbox(imapMessageReader, mailbox));
}
+ private void checkUserMailboxes(IMAPMessageReader imapMessageReader) {
+ assertThat(MAILBOXES
+ .stream()
+ .map(mailbox -> numberOfMessagesInMailbox(imapMessageReader, mailbox)))
+ .allMatch(numberOfMessages -> numberOfMessages > 0, "Some mailboxes are empty");
+ }
+
private Long numberOfMessagesInMailbox(IMAPMessageReader imapMessageReader, String mailbox) {
try {
return imapMessageReader
@@ -193,7 +231,7 @@ public class SmtpRandomStoringTest {
}
}
- private Mail buildMail(String subject) throws MessagingException {
+ private static Mail buildMail(String subject) throws MessagingException {
return MailImpl.builder()
.name(subject)
.sender(FROM)
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org