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 d22bcd991f56303b192899d28675049d11be3709
Author: Quan Tran <[email protected]>
AuthorDate: Mon Jul 13 22:58:40 2026 +0700

    [BUILD] QuotaMailingTest: isolate using different users
---
 .../distributed/DistributedQuotaMailingTest.java   |  2 +-
 .../jmap/rfc8621/contract/QuotaMailingTest.scala   | 62 ++++++++++++++--------
 .../rfc8621/memory/MemoryQuotaMailingTest.java     |  2 +-
 3 files changed, 43 insertions(+), 23 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/DistributedQuotaMailingTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedQuotaMailingTest.java
index fbfecffb44..52e5df740c 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedQuotaMailingTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedQuotaMailingTest.java
@@ -21,6 +21,6 @@ package org.apache.james.jmap.rfc8621.distributed;
 
 import org.apache.james.jmap.rfc8621.contract.QuotaMailingTest;
 
-public class DistributedQuotaMailingTest extends DistributedBase implements 
QuotaMailingTest {
+public class DistributedQuotaMailingTest extends PerClassDistributedBase 
implements QuotaMailingTest {
 
 }
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/QuotaMailingTest.scala
 
b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaMailingTest.scala
index 82e91dc683..7291e88295 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaMailingTest.scala
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaMailingTest.scala
@@ -21,19 +21,21 @@ package org.apache.james.jmap.rfc8621.contract
 
 import java.nio.charset.StandardCharsets
 import java.util
+import java.util.UUID
 import java.util.concurrent.TimeUnit
 
 import com.google.common.base.Strings
+import com.google.common.hash.Hashing
 import io.netty.handler.codec.http.HttpHeaderNames.ACCEPT
 import io.restassured.RestAssured
 import io.restassured.RestAssured.`given`
 import io.restassured.builder.ResponseSpecBuilder
 import org.apache.http.HttpStatus.SC_OK
 import org.apache.james.GuiceJamesServer
+import org.apache.james.core.Username
 import org.apache.james.core.quota.QuotaSizeLimit
 import org.apache.james.jmap.http.UserCredential
-import 
org.apache.james.jmap.rfc8621.contract.Fixture.{ACCEPT_RFC8621_VERSION_HEADER, 
ACCOUNT_ID, ANDRE, ANDRE_ACCOUNT_ID, ANDRE_PASSWORD, BOB, BOB_PASSWORD, DOMAIN, 
authScheme, baseRequestSpecBuilder}
-import org.apache.james.jmap.rfc8621.contract.QuotaMailingTest.andreDraftsPath
+import 
org.apache.james.jmap.rfc8621.contract.Fixture.{ACCEPT_RFC8621_VERSION_HEADER, 
ANDRE_PASSWORD, BOB_PASSWORD, DOMAIN, authScheme, baseRequestSpecBuilder}
 import org.apache.james.junit.categories.BasicFeature
 import org.apache.james.mailbox.DefaultMailboxes
 import org.apache.james.mailbox.MessageManager.AppendCommand
@@ -49,11 +51,23 @@ import org.junit.jupiter.api.{BeforeEach, Test}
 
 import scala.jdk.CollectionConverters._
 
+object QuotaMailingTestContext {
+  case class TestContext(bobUsername: Username, bobAccountId: String, 
andreUsername: Username, andreAccountId: String)
+  val currentContext: java.util.concurrent.atomic.AtomicReference[TestContext] 
= new java.util.concurrent.atomic.AtomicReference[TestContext]()
+}
+
 object QuotaMailingTest {
-  private val andreDraftsPath = MailboxPath.forUser(ANDRE, 
DefaultMailboxes.DRAFTS)
 }
 
 trait QuotaMailingTest {
+  import QuotaMailingTestContext.currentContext
+
+  def bobUsername: Username = currentContext.get().bobUsername
+  def bobAccountId: String = currentContext.get().bobAccountId
+  def andreUsername: Username = currentContext.get().andreUsername
+  def andreAccountId: String = currentContext.get().andreAccountId
+  def andreDraftsPath: MailboxPath = MailboxPath.forUser(andreUsername, 
DefaultMailboxes.DRAFTS)
+
   private lazy val slowPacedPollInterval = ONE_HUNDRED_MILLISECONDS
   private lazy val calmlyAwait = Awaitility.`with`
     .pollInterval(slowPacedPollInterval)
@@ -63,20 +77,26 @@ trait QuotaMailingTest {
 
   @BeforeEach
   def setUp(server: GuiceJamesServer): Unit = {
+    val uniqueSuffix = UUID.randomUUID().toString.replace("-", "").take(8)
+    val bob = Username.fromLocalPartWithDomain(s"bob$uniqueSuffix", DOMAIN)
+    val andre = Username.fromLocalPartWithDomain(s"andre$uniqueSuffix", DOMAIN)
+    currentContext.set(QuotaMailingTestContext.TestContext(
+      bob, Hashing.sha256().hashString(bob.asString, 
StandardCharsets.UTF_8).toString,
+      andre, Hashing.sha256().hashString(andre.asString, 
StandardCharsets.UTF_8).toString))
     server.getProbe(classOf[DataProbeImpl])
       .fluent
       .addDomain(DOMAIN.asString)
-      .addUser(BOB.asString, BOB_PASSWORD)
-      .addUser(ANDRE.asString, ANDRE_PASSWORD)
+      .addUser(bob.asString, BOB_PASSWORD)
+      .addUser(andre.asString, ANDRE_PASSWORD)
 
     val mailboxProbe = server.getProbe(classOf[MailboxProbeImpl])
-    mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, BOB.asString, 
DefaultMailboxes.INBOX)
-    mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, 
ANDRE.asString, DefaultMailboxes.INBOX)
+    mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, bob.asString, 
DefaultMailboxes.INBOX)
+    mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, 
andre.asString, DefaultMailboxes.INBOX)
 
     mailboxProbe.createMailbox(andreDraftsPath)
 
     RestAssured.requestSpecification = baseRequestSpecBuilder(server)
-      .setAuth(authScheme(UserCredential(BOB, BOB_PASSWORD)))
+      .setAuth(authScheme(UserCredential(bob, BOB_PASSWORD)))
       .build
   }
 
@@ -84,7 +104,7 @@ trait QuotaMailingTest {
   @Test
   def shouldSendANoticeWhenThresholdExceeded(server: GuiceJamesServer): Unit = 
{
     val quotaProbe = server.getProbe(classOf[QuotaProbesImpl])
-    quotaProbe.setMaxStorage(quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)), 
QuotaSizeLimit.size(100 * 1000))
+    
quotaProbe.setMaxStorage(quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername)),
 QuotaSizeLimit.size(100 * 1000))
 
     andreSendMailToBob(server)
 
@@ -100,7 +120,7 @@ trait QuotaMailingTest {
          |  "methodCalls": [[
          |     "Email/get",
          |     {
-         |       "accountId": "$ACCOUNT_ID",
+         |       "accountId": "$bobAccountId",
          |       "ids": [$idString]
          |     },
          |     "c1"]]
@@ -121,7 +141,7 @@ trait QuotaMailingTest {
   @Test
   def configurationShouldBeWellLoaded(server: GuiceJamesServer): Unit = {
     val quotaProbe = server.getProbe(classOf[QuotaProbesImpl])
-    quotaProbe.setMaxStorage(quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)), 
QuotaSizeLimit.size(100 * 1000))
+    
quotaProbe.setMaxStorage(quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername)),
 QuotaSizeLimit.size(100 * 1000))
 
     andreSendMailToBob(server)
 
@@ -141,7 +161,7 @@ trait QuotaMailingTest {
          |  "methodCalls": [[
          |     "Email/get",
          |     {
-         |       "accountId": "$ACCOUNT_ID",
+         |       "accountId": "$bobAccountId",
          |       "ids": [$idString]
          |     },
          |     "c1"]]
@@ -165,14 +185,14 @@ trait QuotaMailingTest {
     val message: Message = Message.Builder
       .of
       .setSubject("test")
-      .setSender(ANDRE.asString)
-      .setFrom("ANDRE <" + ANDRE.asString + ">")
-      .setTo(BOB.asString)
+      .setSender(andreUsername.asString)
+      .setFrom("andreUsername <" + andreUsername.asString + ">")
+      .setTo(bobUsername.asString)
       .setBody(Strings.repeat("123456789\n", 12 * 100), StandardCharsets.UTF_8)
       .build
 
     val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl])
-      .appendMessage(ANDRE.asString(), andreDraftsPath, 
AppendCommand.builder().build(message))
+      .appendMessage(andreUsername.asString(), andreDraftsPath, 
AppendCommand.builder().build(message))
       .getMessageId
 
     val requestAndre =
@@ -180,13 +200,13 @@ trait QuotaMailingTest {
          |  "using": ["urn:ietf:params:jmap:core", 
"urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"],
          |  "methodCalls": [
          |     ["EmailSubmission/set", {
-         |       "accountId": "$ANDRE_ACCOUNT_ID",
+         |       "accountId": "$andreAccountId",
          |       "create": {
          |         "k1490": {
          |           "emailId": "${messageId.serialize}",
          |           "envelope": {
-         |             "mailFrom": {"email": "${ANDRE.asString}"},
-         |             "rcptTo": [{"email": "${BOB.asString}"}]
+         |             "mailFrom": {"email": "${andreUsername.asString}"},
+         |             "rcptTo": [{"email": "${bobUsername.asString}"}]
          |           }
          |         }
          |    }
@@ -195,7 +215,7 @@ trait QuotaMailingTest {
 
     `given`(
       baseRequestSpecBuilder(server)
-        .setAuth(authScheme(UserCredential(ANDRE, ANDRE_PASSWORD)))
+        .setAuth(authScheme(UserCredential(andreUsername, ANDRE_PASSWORD)))
         .addHeader(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER)
         .setBody(requestAndre)
         .build, new ResponseSpecBuilder().build)
@@ -211,7 +231,7 @@ trait QuotaMailingTest {
          |  "methodCalls": [[
          |    "Email/query",
          |    {
-         |      "accountId": "$ACCOUNT_ID"
+         |      "accountId": "$bobAccountId"
          |    },
          |    "c1"]]
          |}""".stripMargin
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaMailingTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaMailingTest.java
index f642831b57..bc72b58ed7 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaMailingTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaMailingTest.java
@@ -21,6 +21,6 @@ package org.apache.james.jmap.rfc8621.memory;
 
 import org.apache.james.jmap.rfc8621.contract.QuotaMailingTest;
 
-public class MemoryQuotaMailingTest extends MemoryBase implements 
QuotaMailingTest {
+public class MemoryQuotaMailingTest extends PerClassMemoryBase implements 
QuotaMailingTest {
 
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to