This is an automated email from the ASF dual-hosted git repository. chibenwa pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit d622e87867f8bd79fbc5b832f7d768693efd80e7 Author: Quan Tran <[email protected]> AuthorDate: Mon Jul 13 22:58:39 2026 +0700 [BUILD] JmapPreviewContract: isolate using different users --- .../distributed/DistributedJmapPreviewTest.java | 2 +- .../rfc8621/contract/JmapPreviewContract.scala | 50 ++++++++++++++-------- .../rfc8621/postgres/PostgresJmapPreviewTest.java | 2 +- 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedJmapPreviewTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedJmapPreviewTest.java index 343a755662..a2b470caeb 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedJmapPreviewTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedJmapPreviewTest.java @@ -21,6 +21,6 @@ package org.apache.james.jmap.rfc8621.distributed; import org.apache.james.jmap.rfc8621.contract.JmapPreviewContract; -public class DistributedJmapPreviewTest extends DistributedBase implements JmapPreviewContract { +public class DistributedJmapPreviewTest extends PerClassDistributedBase implements JmapPreviewContract { } diff --git a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/JmapPreviewContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/JmapPreviewContract.scala index 1a56137bb9..fe74cab039 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/JmapPreviewContract.scala +++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/JmapPreviewContract.scala @@ -22,7 +22,9 @@ package org.apache.james.jmap.rfc8621.contract import java.nio.charset.StandardCharsets import java.time.Duration import java.util.Optional +import java.util.UUID import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicReference import com.google.common.collect.ImmutableList import com.google.inject.AbstractModule @@ -30,9 +32,10 @@ import com.google.inject.multibindings.Multibinder import io.restassured.RestAssured.requestSpecification import jakarta.inject.Inject import org.apache.james.GuiceJamesServer +import org.apache.james.core.Username import org.apache.james.jmap.api.projections.{MessageFastViewPrecomputedProperties, MessageFastViewProjection} import org.apache.james.jmap.http.UserCredential -import org.apache.james.jmap.rfc8621.contract.Fixture.{ANDRE, BOB, BOB_PASSWORD, DOMAIN, authScheme, baseRequestSpecBuilder} +import org.apache.james.jmap.rfc8621.contract.Fixture.{BOB_PASSWORD, DOMAIN, authScheme, baseRequestSpecBuilder} import org.apache.james.jmap.rfc8621.contract.JmapPreviewContract.createTestMessage import org.apache.james.mailbox.DefaultMailboxes import org.apache.james.mailbox.MessageManager.AppendCommand @@ -60,18 +63,26 @@ class JmapPreviewProbeModule extends AbstractModule { } object JmapPreviewContract { - private def createTestMessage: Message = Message.Builder + def createTestMessage(sender: Username): Message = Message.Builder .of .setSubject("test") - .setSender(ANDRE.asString()) - .setFrom(ANDRE.asString()) + .setSender(sender.asString()) + .setFrom(sender.asString()) .setSubject("World domination \r\n" + " and this is also part of the header") .setBody("testmail", StandardCharsets.UTF_8) .build } +object JmapPreviewContractContext { + val currentUsername: AtomicReference[Username] = new AtomicReference[Username]() +} + trait JmapPreviewContract { + import JmapPreviewContractContext.currentUsername + + def bobUsername: Username = currentUsername.get() + private lazy val slowPacedPollInterval = Duration.ofMillis(100) private lazy val calmlyAwait = Awaitility.`with` .pollInterval(slowPacedPollInterval) @@ -81,57 +92,58 @@ trait JmapPreviewContract { @BeforeEach def setUp(server: GuiceJamesServer): Unit = { + currentUsername.set(Username.of("user" + UUID.randomUUID().toString.replace("-", "").take(8) + "@" + DOMAIN.asString)) server.getProbe(classOf[DataProbeImpl]) .fluent .addDomain(DOMAIN.asString) - .addUser(BOB.asString, BOB_PASSWORD) + .addUser(bobUsername.asString, BOB_PASSWORD) requestSpecification = baseRequestSpecBuilder(server) - .setAuth(authScheme(UserCredential(BOB, BOB_PASSWORD))) + .setAuth(authScheme(UserCredential(bobUsername, BOB_PASSWORD))) .build } @Test def jmapPreviewShouldBeWellRemovedWhenDeleteMailbox(server: GuiceJamesServer): Unit = { val mailboxProbe = server.getProbe(classOf[MailboxProbeImpl]) - mailboxProbe.createMailbox("#private", BOB.asString, DefaultMailboxes.INBOX) + mailboxProbe.createMailbox("#private", bobUsername.asString, DefaultMailboxes.INBOX) - val messageId = mailboxProbe.appendMessage(BOB.asString, MailboxPath.inbox(BOB), AppendCommand.builder() - .build(createTestMessage)) + val messageId = mailboxProbe.appendMessage(bobUsername.asString, MailboxPath.inbox(bobUsername), AppendCommand.builder() + .build(createTestMessage(bobUsername))) .getMessageId val messageFastViewProjectionProbe: MessageFastViewProjectionProbe = server.getProbe(classOf[MessageFastViewProjectionProbe]) awaitAtMostTenSeconds.until(() => messageFastViewProjectionProbe.retrieve(messageId).isPresent) - mailboxProbe.deleteMailbox("#private", BOB.asString, DefaultMailboxes.INBOX) + mailboxProbe.deleteMailbox("#private", bobUsername.asString, DefaultMailboxes.INBOX) awaitAtMostTenSeconds.until(() => messageFastViewProjectionProbe.retrieve(messageId).isEmpty) } @Test def jmapPreviewShouldBeWellRemovedWhenDeleteMessage(server: GuiceJamesServer): Unit = { val mailboxProbe = server.getProbe(classOf[MailboxProbeImpl]) - mailboxProbe.createMailbox("#private", BOB.asString, DefaultMailboxes.INBOX) + mailboxProbe.createMailbox("#private", bobUsername.asString, DefaultMailboxes.INBOX) - val composedMessageId = mailboxProbe.appendMessage(BOB.asString, MailboxPath.inbox(BOB), AppendCommand.builder() - .build(createTestMessage)) + val composedMessageId = mailboxProbe.appendMessage(bobUsername.asString, MailboxPath.inbox(bobUsername), AppendCommand.builder() + .build(createTestMessage(bobUsername))) val messageFastViewProjectionProbe: MessageFastViewProjectionProbe = server.getProbe(classOf[MessageFastViewProjectionProbe]) awaitAtMostTenSeconds.until(() => messageFastViewProjectionProbe.retrieve(composedMessageId.getMessageId).isPresent) - mailboxProbe.deleteMessage(ImmutableList.of(composedMessageId.getUid), MailboxPath.inbox(BOB), BOB) + mailboxProbe.deleteMessage(ImmutableList.of(composedMessageId.getUid), MailboxPath.inbox(bobUsername), bobUsername) awaitAtMostTenSeconds.until(() => messageFastViewProjectionProbe.retrieve(composedMessageId.getMessageId).isEmpty) } @Test def shouldKeepPreviewWhenExpungedAndStillReferenced(server: GuiceJamesServer): Unit = { val mailboxProbe = server.getProbe(classOf[MailboxProbeImpl]) - mailboxProbe.createMailbox("#private", BOB.asString, DefaultMailboxes.INBOX) - mailboxProbe.createMailbox("#private", BOB.asString, "otherBox") + mailboxProbe.createMailbox("#private", bobUsername.asString, DefaultMailboxes.INBOX) + mailboxProbe.createMailbox("#private", bobUsername.asString, "otherBox") - val composedMessageId = mailboxProbe.appendMessage(BOB.asString, MailboxPath.inbox(BOB), AppendCommand.builder() - .build(createTestMessage)) + val composedMessageId = mailboxProbe.appendMessage(bobUsername.asString, MailboxPath.inbox(bobUsername), AppendCommand.builder() + .build(createTestMessage(bobUsername))) - mailboxProbe.moveMessages(MessageRange.all, MailboxPath.inbox(BOB), MailboxPath.forUser(BOB, "otherBox"), BOB) + mailboxProbe.moveMessages(MessageRange.all, MailboxPath.inbox(bobUsername), MailboxPath.forUser(bobUsername, "otherBox"), bobUsername) val messageFastViewProjectionProbe: MessageFastViewProjectionProbe = server.getProbe(classOf[MessageFastViewProjectionProbe]) awaitAtMostTenSeconds.until(() => messageFastViewProjectionProbe.retrieve(composedMessageId.getMessageId).isPresent) diff --git a/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresJmapPreviewTest.java b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresJmapPreviewTest.java index 9e954d91f7..972278582b 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresJmapPreviewTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresJmapPreviewTest.java @@ -21,6 +21,6 @@ package org.apache.james.jmap.rfc8621.postgres; import org.apache.james.jmap.rfc8621.contract.JmapPreviewContract; -public class PostgresJmapPreviewTest extends PostgresBase implements JmapPreviewContract { +public class PostgresJmapPreviewTest extends PerClassPostgresBase implements JmapPreviewContract { } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
