This is an automated email from the ASF dual-hosted git repository. quantranhong1999 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit f0facbb290ab44c0af4081b4d3b94f7e79c11e9c Author: Quan Tran <[email protected]> AuthorDate: Fri Jun 19 17:01:53 2026 +0700 [BUILD] MDNSendMethodContract: isolate using different users ### Before - memory: 11 sec - postgres: 23 sec - distributed: 1 min 47 sec ### After - memory: 4 sec - postgres: 6 sec - distributed: 15 sec --- .../distributed/DistributedMDNSendMethodTest.java | 2 +- .../rfc8621/contract/MDNSendMethodContract.scala | 320 ++++++++++++--------- .../rfc8621/memory/MemoryMDNSendMethodTest.java | 2 +- .../postgres/PostgresMDNSendMethodTest.java | 2 +- 4 files changed, 181 insertions(+), 145 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/DistributedMDNSendMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMDNSendMethodTest.java index 809cfdf753..e794fb75dd 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMDNSendMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMDNSendMethodTest.java @@ -25,7 +25,7 @@ import org.apache.james.mailbox.model.MessageId; import com.datastax.oss.driver.api.core.uuid.Uuids; -class DistributedMDNSendMethodTest extends DistributedBase implements MDNSendMethodContract { +class DistributedMDNSendMethodTest extends PerClassDistributedBase implements MDNSendMethodContract { public static final CassandraMessageId.Factory MESSAGE_ID_FACTORY = new CassandraMessageId.Factory(); @Override 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/MDNSendMethodContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MDNSendMethodContract.scala index ce4ac317cb..6048e88479 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MDNSendMethodContract.scala +++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MDNSendMethodContract.scala @@ -21,8 +21,10 @@ package org.apache.james.jmap.rfc8621.contract import java.nio.charset.StandardCharsets import java.time.Duration -import java.util.concurrent.TimeUnit +import java.util.UUID +import java.util.concurrent.{TimeUnit, atomic} +import com.google.common.hash.Hashing import io.netty.handler.codec.http.HttpHeaderNames.ACCEPT import io.restassured.RestAssured._ import io.restassured.http.ContentType.JSON @@ -34,8 +36,8 @@ import org.apache.james.core.Username import org.apache.james.jmap.MessageIdProbe import org.apache.james.jmap.core.ResponseObject.SESSION_STATE 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_IDENTITY_ID, ANDRE_PASSWORD, BOB, BOB_PASSWORD, CEDRIC, DAVID, DOMAIN, IDENTITY_ID, authScheme, baseRequestSpecBuilder} -import org.apache.james.jmap.rfc8621.contract.MDNSendMethodContract.TAG_MDN_MESSAGE_FORMAT +import org.apache.james.jmap.rfc8621.contract.Fixture.{ACCEPT_RFC8621_VERSION_HEADER, ANDRE_PASSWORD, BOB_PASSWORD, DOMAIN, authScheme, baseRequestSpecBuilder} +import org.apache.james.jmap.rfc8621.contract.MDNSendMethodContract.{TAG_MDN_MESSAGE_FORMAT, TestContext} import org.apache.james.mailbox.MessageManager.AppendCommand import org.apache.james.mailbox.model.{MailboxId, MailboxPath, MessageId, MultimailboxesSearchQuery, SearchQuery} import org.apache.james.mime4j.codec.DecodeMonitor @@ -52,10 +54,29 @@ import org.junit.jupiter.api.{BeforeEach, Tag, Test} import scala.jdk.CollectionConverters._ object MDNSendMethodContract { + case class TestContext(bobUsername: Username, bobAccountId: String, bobIdentityId: String, andreUsername: Username, andreAccountId: String, andreIdentityId: String, cedricUsername: Username, davidUsername: Username) + val TAG_MDN_MESSAGE_FORMAT: "MDN_MESSAGE_FORMAT" = "MDN_MESSAGE_FORMAT" + + val currentContext: atomic.AtomicReference[TestContext] = new atomic.AtomicReference[TestContext]() } trait MDNSendMethodContract { + def bobUsername: Username = MDNSendMethodContract.currentContext.get().bobUsername + def bobAccountId: String = MDNSendMethodContract.currentContext.get().bobAccountId + def bobIdentityId: String = MDNSendMethodContract.currentContext.get().bobIdentityId + def andreUsername: Username = MDNSendMethodContract.currentContext.get().andreUsername + def andreAccountId: String = MDNSendMethodContract.currentContext.get().andreAccountId + def andreIdentityId: String = MDNSendMethodContract.currentContext.get().andreIdentityId + def cedricUsername: Username = MDNSendMethodContract.currentContext.get().cedricUsername + def davidUsername: Username = MDNSendMethodContract.currentContext.get().davidUsername + + private def accountId(username: Username): String = + Hashing.sha256().hashString(username.asString(), StandardCharsets.UTF_8).toString + + private def identityId(username: Username): String = + UUID.nameUUIDFromBytes(username.asString().getBytes(StandardCharsets.UTF_8)).toString + private lazy val slowPacedPollInterval: Duration = ONE_HUNDRED_MILLISECONDS private lazy val calmlyAwait: ConditionFactory = Awaitility.`with` @@ -81,16 +102,16 @@ trait MDNSendMethodContract { Message.Builder .of .setSubject(s"Subject of original message$tag") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) - .addField(new RawField("Disposition-Notification-To", s"Bob <${BOB.asString()}>")) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) + .addField(new RawField("Disposition-Notification-To", s"Bob <${bobUsername.asString()}>")) .setBody(s"Body of mail$tag, that mdn related", StandardCharsets.UTF_8) .build private def buildBOBRequestSpecification(server: GuiceJamesServer): RequestSpecification = baseRequestSpecBuilder(server) - .setAuth(authScheme(UserCredential(BOB, BOB_PASSWORD))) + .setAuth(authScheme(UserCredential(bobUsername, BOB_PASSWORD))) .addHeader(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER) .build @@ -98,15 +119,30 @@ trait MDNSendMethodContract { @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) + val cedric = Username.fromLocalPartWithDomain(s"cedric$uniqueSuffix", DOMAIN) + val david = Username.fromLocalPartWithDomain(s"david$uniqueSuffix", DOMAIN) + MDNSendMethodContract.currentContext.set(TestContext( + bobUsername = bob, + bobAccountId = accountId(bob), + bobIdentityId = identityId(bob), + andreUsername = andre, + andreAccountId = accountId(andre), + andreIdentityId = identityId(andre), + cedricUsername = cedric, + davidUsername = david)) + server.getProbe(classOf[DataProbeImpl]) .fluent() .addDomain(DOMAIN.asString()) - .addUser(BOB.asString(), BOB_PASSWORD) - .addUser(ANDRE.asString, ANDRE_PASSWORD) - .addUser(DAVID.asString, DAVID.asString()) + .addUser(bob.asString(), BOB_PASSWORD) + .addUser(andre.asString, ANDRE_PASSWORD) + .addUser(david.asString, david.asString()) requestSpecification = baseRequestSpecBuilder(server) - .setAuth(authScheme(UserCredential(ANDRE, ANDRE_PASSWORD))) + .setAuth(authScheme(UserCredential(andre, ANDRE_PASSWORD))) .addHeader(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER) .build() } @@ -115,14 +151,14 @@ trait MDNSendMethodContract { def mdnSendShouldBeSuccessAndSendMailSuccessfully(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val bobMailBoxPath: MailboxPath = MailboxPath.inbox(BOB) + val bobMailBoxPath: MailboxPath = MailboxPath.inbox(bobUsername) val bobInboxId: MailboxId = mailboxProbe.createMailbox(bobMailBoxPath) - val andreMailBoxPath: MailboxPath = MailboxPath.inbox(ANDRE) + val andreMailBoxPath: MailboxPath = MailboxPath.inbox(andreUsername) mailboxProbe.createMailbox(andreMailBoxPath) val relatedEmailId: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(buildOriginalMessage("1"))) .getMessageId @@ -137,8 +173,8 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", - | "identityId": "$ANDRE_IDENTITY_ID", + | "accountId": "$andreAccountId", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "${relatedEmailId.serialize()}", @@ -188,12 +224,12 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "sent": { | "k1546": { - | "finalRecipient": "rfc822; ${ANDRE.asString}", + | "finalRecipient": "rfc822; ${andreUsername.asString}", | "includeOriginalMessage": false, - | "originalRecipient": "rfc822; ${ANDRE.asString()}" + | "originalRecipient": "rfc822; ${andreUsername.asString()}" | } | } | }, @@ -202,7 +238,7 @@ trait MDNSendMethodContract { | [ | "Email/set", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "oldState": "23", | "newState": "42", | "updated": { @@ -220,7 +256,7 @@ trait MDNSendMethodContract { | "methodCalls": [[ | "Email/query", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "filter": {"inMailbox": "${bobInboxId.serialize}"} | }, | "c1"]] @@ -249,16 +285,16 @@ trait MDNSendMethodContract { @Test def mdnSendShouldBeSuccessWhenRequestAssignFinalRecipient(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - server.getProbe(classOf[DataProbeImpl]).addUserAliasMapping("david", "domain.tld", "[email protected]") + server.getProbe(classOf[DataProbeImpl]).addUserAliasMapping(davidUsername.getLocalPart, DOMAIN.asString, andreUsername.asString) - val bobMailBoxPath: MailboxPath = MailboxPath.inbox(BOB) + val bobMailBoxPath: MailboxPath = MailboxPath.inbox(bobUsername) mailboxProbe.createMailbox(bobMailBoxPath) - val andreMailBoxPath: MailboxPath = MailboxPath.inbox(ANDRE) + val andreMailBoxPath: MailboxPath = MailboxPath.inbox(andreUsername) mailboxProbe.createMailbox(andreMailBoxPath) val relatedEmailId: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(buildOriginalMessage("1"))) .getMessageId @@ -273,14 +309,14 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", - | "identityId": "$ANDRE_IDENTITY_ID", + | "accountId": "$andreAccountId", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "${relatedEmailId.serialize()}", | "subject": "Read receipt for: World domination", | "textBody": "This receipt shows that the email has been displayed on your recipient's computer. ", - | "finalRecipient": "rfc822; ${ANDRE.asString()}", + | "finalRecipient": "rfc822; ${andreUsername.asString()}", | "disposition": { | "actionMode": "manual-action", | "sendingMode": "mdn-sent-manually", @@ -321,11 +357,11 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "sent": { | "k1546": { | "includeOriginalMessage": false, - | "originalRecipient": "rfc822; ${ANDRE.asString()}" + | "originalRecipient": "rfc822; ${andreUsername.asString()}" | } | } | }, @@ -334,7 +370,7 @@ trait MDNSendMethodContract { | [ | "Email/set", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "oldState": "23", | "newState": "42", | "updated": { @@ -351,14 +387,14 @@ trait MDNSendMethodContract { def mdnSendShouldBeFailWhenDispositionPropertyIsInvalid(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val bobMailBoxPath: MailboxPath = MailboxPath.inbox(BOB) + val bobMailBoxPath: MailboxPath = MailboxPath.inbox(bobUsername) mailboxProbe.createMailbox(bobMailBoxPath) - val andreMailBoxPath: MailboxPath = MailboxPath.inbox(ANDRE) + val andreMailBoxPath: MailboxPath = MailboxPath.inbox(andreUsername) mailboxProbe.createMailbox(andreMailBoxPath) val relatedEmailId: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(buildOriginalMessage("1"))) .getMessageId @@ -373,8 +409,8 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", - | "identityId": "$ANDRE_IDENTITY_ID", + | "accountId": "$andreAccountId", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "${relatedEmailId.serialize()}", @@ -420,11 +456,11 @@ trait MDNSendMethodContract { def mdnSendShouldBeFailWhenFinalRecipientIsInvalid(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val andreMailBoxPath: MailboxPath = MailboxPath.inbox(ANDRE) + val andreMailBoxPath: MailboxPath = MailboxPath.inbox(andreUsername) mailboxProbe.createMailbox(andreMailBoxPath) val relatedEmailId: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(buildOriginalMessage("1"))) .getMessageId @@ -439,8 +475,8 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", - | "identityId": "$ANDRE_IDENTITY_ID", + | "accountId": "$andreAccountId", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "${relatedEmailId.serialize()}", @@ -489,11 +525,11 @@ trait MDNSendMethodContract { def mdnSendShouldBeFailWhenIdentityIsNotAllowedToUseFinalRecipient(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val andreMailBoxPath: MailboxPath = MailboxPath.inbox(ANDRE) + val andreMailBoxPath: MailboxPath = MailboxPath.inbox(andreUsername) mailboxProbe.createMailbox(andreMailBoxPath) val relatedEmailId: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(buildOriginalMessage("1"))) .getMessageId @@ -508,14 +544,14 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", - | "identityId": "$ANDRE_IDENTITY_ID", + | "accountId": "$andreAccountId", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "${relatedEmailId.serialize()}", | "subject": "Read receipt for: World domination", | "textBody": "This receipt shows that the email has been displayed on your recipient's computer. ", - | "finalRecipient" : "rfc822; ${CEDRIC.asString}", + | "finalRecipient" : "rfc822; ${cedricUsername.asString}", | "disposition": { | "actionMode": "manual-action", | "sendingMode": "mdn-sent-manually", @@ -555,11 +591,11 @@ trait MDNSendMethodContract { def implicitEmailSetShouldNotBeAttemptedWhenMDNIsNotSent(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val andreMailBoxPath: MailboxPath = MailboxPath.inbox(ANDRE) + val andreMailBoxPath: MailboxPath = MailboxPath.inbox(andreUsername) mailboxProbe.createMailbox(andreMailBoxPath) val relatedEmailId: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(buildOriginalMessage("1"))) .getMessageId @@ -574,8 +610,8 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", - | "identityId": "$ANDRE_IDENTITY_ID", + | "accountId": "$andreAccountId", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "${relatedEmailId.serialize()}", @@ -616,14 +652,14 @@ trait MDNSendMethodContract { def implicitEmailSetShouldNotBeAttemptedWhenOnSuccessUpdateEmailIsNull(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val bobMailBoxPath: MailboxPath = MailboxPath.inbox(BOB) + val bobMailBoxPath: MailboxPath = MailboxPath.inbox(bobUsername) mailboxProbe.createMailbox(bobMailBoxPath) - val andreMailBoxPath: MailboxPath = MailboxPath.inbox(ANDRE) + val andreMailBoxPath: MailboxPath = MailboxPath.inbox(andreUsername) mailboxProbe.createMailbox(andreMailBoxPath) val relatedEmailId: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(buildOriginalMessage("1"))) .getMessageId @@ -638,8 +674,8 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", - | "identityId": "$ANDRE_IDENTITY_ID", + | "accountId": "$andreAccountId", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "${relatedEmailId.serialize()}", @@ -680,12 +716,12 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "sent": { | "k1546": { - | "finalRecipient": "rfc822; ${ANDRE.asString}", + | "finalRecipient": "rfc822; ${andreUsername.asString}", | "includeOriginalMessage": false, - | "originalRecipient": "rfc822; ${ANDRE.asString}" + | "originalRecipient": "rfc822; ${andreUsername.asString}" | } | } | }, @@ -699,22 +735,22 @@ trait MDNSendMethodContract { def mdnSendShouldAcceptSeveralMDNObjects(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val bobMailBoxPath: MailboxPath = MailboxPath.inbox(BOB) + val bobMailBoxPath: MailboxPath = MailboxPath.inbox(bobUsername) mailboxProbe.createMailbox(bobMailBoxPath) - val andreMailBoxPath: MailboxPath = MailboxPath.inbox(ANDRE) + val andreMailBoxPath: MailboxPath = MailboxPath.inbox(andreUsername) mailboxProbe.createMailbox(andreMailBoxPath) val relatedEmailId1: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(buildOriginalMessage("1"))) .getMessageId val relatedEmailId2: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(buildOriginalMessage("2"))) .getMessageId val relatedEmailId3: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(buildOriginalMessage("3"))) .getMessageId @@ -729,8 +765,8 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", - | "identityId": "$ANDRE_IDENTITY_ID", + | "accountId": "$andreAccountId", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "${relatedEmailId1.serialize()}", @@ -796,27 +832,27 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "sent": { | "k1546": { | "subject": "[Received] Subject of original message1", | "textBody": "The email has been displayed on your recipient's computer", - | "originalRecipient": "rfc822; ${ANDRE.asString()}", - | "finalRecipient": "rfc822; ${ANDRE.asString()}", + | "originalRecipient": "rfc822; ${andreUsername.asString()}", + | "finalRecipient": "rfc822; ${andreUsername.asString()}", | "includeOriginalMessage": false | }, | "k1547": { | "subject": "[Received] Subject of original message2", | "textBody": "The email has been displayed on your recipient's computer", - | "originalRecipient": "rfc822; ${ANDRE.asString()}", - | "finalRecipient": "rfc822; ${ANDRE.asString()}", + | "originalRecipient": "rfc822; ${andreUsername.asString()}", + | "finalRecipient": "rfc822; ${andreUsername.asString()}", | "includeOriginalMessage": false | }, | "k1548": { | "subject": "[Received] Subject of original message3", | "textBody": "The email has been displayed on your recipient's computer", - | "originalRecipient": "rfc822; ${ANDRE.asString()}", - | "finalRecipient": "rfc822; ${ANDRE.asString()}", + | "originalRecipient": "rfc822; ${andreUsername.asString()}", + | "finalRecipient": "rfc822; ${andreUsername.asString()}", | "includeOriginalMessage": false | } | } @@ -826,7 +862,7 @@ trait MDNSendMethodContract { | [ | "Email/set", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "oldState": "3be4a1bc-0b41-4e33-aaf0-585e567a5af5", | "newState": "3e1d5c70-9ca4-4c02-a35c-f54a51d253e3", | "updated": { @@ -845,18 +881,18 @@ trait MDNSendMethodContract { def mdnSendMixValidAndNotFoundAndInvalid(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val bobMailBoxPath: MailboxPath = MailboxPath.inbox(BOB) + val bobMailBoxPath: MailboxPath = MailboxPath.inbox(bobUsername) mailboxProbe.createMailbox(bobMailBoxPath) - val andreMailBoxPath: MailboxPath = MailboxPath.inbox(ANDRE) + val andreMailBoxPath: MailboxPath = MailboxPath.inbox(andreUsername) mailboxProbe.createMailbox(andreMailBoxPath) val validEmailId1: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(buildOriginalMessage("1"))) .getMessageId val validEmailId2: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(buildOriginalMessage("2"))) .getMessageId @@ -872,8 +908,8 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", - | "identityId": "$ANDRE_IDENTITY_ID", + | "accountId": "$andreAccountId", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "${validEmailId1.serialize()}", @@ -938,13 +974,13 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "sent": { | "k1546": { | "subject": "[Received] Subject of original message1", | "textBody": "The email has been displayed on your recipient's computer", - | "originalRecipient": "rfc822; ${ANDRE.asString()}", - | "finalRecipient": "rfc822; ${ANDRE.asString()}", + | "originalRecipient": "rfc822; ${andreUsername.asString()}", + | "finalRecipient": "rfc822; ${andreUsername.asString()}", | "includeOriginalMessage": false | } | }, @@ -958,7 +994,7 @@ trait MDNSendMethodContract { | }, | "k1548": { | "type": "notFound", - | "description": "The reference \\"forEmailId\\" $serializedRandomId cannot be found for user [email protected]." + | "description": "The reference \\"forEmailId\\" $serializedRandomId cannot be found for user ${andreUsername.asString()}." | } | } | }, @@ -967,7 +1003,7 @@ trait MDNSendMethodContract { | [ | "Email/set", | { - | "accountId": "1e8584548eca20f26faf6becc1704a0f352839f12c208a47fbd486d60f491f7c", + | "accountId": "$andreAccountId", | "oldState": "eda83b09-6aca-4215-b493-2b4af19c50f0", | "newState": "8bd671b2-e9fd-4ce3-b9b2-c3e1f35cc8ee", | "updated": { @@ -982,12 +1018,12 @@ trait MDNSendMethodContract { @Test def mdnSendShouldBeFailWhenMDNHasAlreadyBeenSet(server: GuiceJamesServer): Unit = { - val path: MailboxPath = MailboxPath.inbox(BOB) + val path: MailboxPath = MailboxPath.inbox(bobUsername) val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) mailboxProbe.createMailbox(path) val relatedEmailId: MessageId = mailboxProbe - .appendMessage(BOB.asString(), path, AppendCommand.builder() + .appendMessage(bobUsername.asString(), path, AppendCommand.builder() .build(buildOriginalMessage("1"))) .getMessageId @@ -1002,8 +1038,8 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ACCOUNT_ID", - | "identityId": "$IDENTITY_ID", + | "accountId": "$bobAccountId", + | "identityId": "$bobIdentityId", | "send": { | "k1546": { | "forEmailId": "${relatedEmailId.serialize()}", @@ -1068,7 +1104,7 @@ trait MDNSendMethodContract { | "MDN/send", | { | "accountId": "ue150411c", - | "identityId": "$ANDRE_IDENTITY_ID", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "Md45b47b4877521042cec0938", @@ -1125,7 +1161,7 @@ trait MDNSendMethodContract { | "MDN/send", | { | "accountId": "ue150411c", - | "identityId": "$ANDRE_IDENTITY_ID", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "Md45b47b4877521042cec0938", @@ -1174,7 +1210,7 @@ trait MDNSendMethodContract { @Test def mdnSendShouldReturnNotFoundWhenForEmailIdIsNotExist(server: GuiceJamesServer): Unit = { - val path: MailboxPath = MailboxPath.inbox(BOB) + val path: MailboxPath = MailboxPath.inbox(bobUsername) val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) mailboxProbe.createMailbox(path) @@ -1190,8 +1226,8 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ACCOUNT_ID", - | "identityId": "$IDENTITY_ID", + | "accountId": "$bobAccountId", + | "identityId": "$bobIdentityId", | "send": { | "k1546": { | "forEmailId": "${randomMessageId1.serialize()}", @@ -1230,7 +1266,7 @@ trait MDNSendMethodContract { .isEqualTo(s"""{ | "k1546": { | "type": "notFound", - | "description": "The reference \\\"forEmailId\\\" ${randomMessageId1.serialize()} cannot be found for user [email protected]." + | "description": "The reference \\\"forEmailId\\\" ${randomMessageId1.serialize()} cannot be found for user ${bobUsername.asString()}." | } |}""".stripMargin) } @@ -1239,23 +1275,23 @@ trait MDNSendMethodContract { def mdnSendShouldReturnNotFoundWhenMessageRelateHasNotDispositionNotificationTo(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val bobMailBoxPath: MailboxPath = MailboxPath.inbox(BOB) + val bobMailBoxPath: MailboxPath = MailboxPath.inbox(bobUsername) mailboxProbe.createMailbox(bobMailBoxPath) - val andreMailBoxPath: MailboxPath = MailboxPath.inbox(ANDRE) + val andreMailBoxPath: MailboxPath = MailboxPath.inbox(andreUsername) mailboxProbe.createMailbox(andreMailBoxPath) val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("Body of mail, that mdn related", StandardCharsets.UTF_8) .build val relatedEmailId: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(message)) .getMessageId @@ -1270,8 +1306,8 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", - | "identityId": "$ANDRE_IDENTITY_ID", + | "accountId": "$andreAccountId", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "${relatedEmailId.serialize()}", @@ -1319,23 +1355,23 @@ trait MDNSendMethodContract { def mdnSendShouldReturnInvalidWhenIdentityDoesNotExist(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val bobMailBoxPath: MailboxPath = MailboxPath.inbox(BOB) + val bobMailBoxPath: MailboxPath = MailboxPath.inbox(bobUsername) mailboxProbe.createMailbox(bobMailBoxPath) - val andreMailBoxPath: MailboxPath = MailboxPath.inbox(ANDRE) + val andreMailBoxPath: MailboxPath = MailboxPath.inbox(andreUsername) mailboxProbe.createMailbox(andreMailBoxPath) val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("Body of mail, that mdn related", StandardCharsets.UTF_8) .build val relatedEmailId: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(message)) .getMessageId @@ -1350,7 +1386,7 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "identityId": "notFound", | "send": { | "k1546": { @@ -1403,7 +1439,7 @@ trait MDNSendMethodContract { @Test def mdnSendShouldBeFailWhenWrongAccountId(server: GuiceJamesServer): Unit = { - val path: MailboxPath = MailboxPath.inbox(BOB) + val path: MailboxPath = MailboxPath.inbox(bobUsername) val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) mailboxProbe.createMailbox(path) @@ -1419,7 +1455,7 @@ trait MDNSendMethodContract { | "MDN/send", | { | "accountId": "unknownAccountId", - | "identityId": "$ANDRE_IDENTITY_ID", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "1", @@ -1468,12 +1504,12 @@ trait MDNSendMethodContract { @Test def mdnSendShouldBeFailWhenOnSuccessUpdateEmailMissesTheCreationIdSharp(server: GuiceJamesServer): Unit = { - val path: MailboxPath = MailboxPath.inbox(BOB) + val path: MailboxPath = MailboxPath.inbox(bobUsername) val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) mailboxProbe.createMailbox(path) val relatedEmailId: MessageId = mailboxProbe - .appendMessage(BOB.asString(), path, AppendCommand.builder() + .appendMessage(bobUsername.asString(), path, AppendCommand.builder() .build(buildOriginalMessage("1"))) .getMessageId @@ -1489,7 +1525,7 @@ trait MDNSendMethodContract { | "MDN/send", | { | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", - | "identityId": "$ANDRE_IDENTITY_ID", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "${relatedEmailId.serialize()}", @@ -1541,12 +1577,12 @@ trait MDNSendMethodContract { @Test def mdnSendShouldBeFailWhenOnSuccessUpdateEmailDoesNotReferenceACreationWithinThisCall(server: GuiceJamesServer): Unit = { - val path: MailboxPath = MailboxPath.inbox(BOB) + val path: MailboxPath = MailboxPath.inbox(bobUsername) val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) mailboxProbe.createMailbox(path) val relatedEmailId: MessageId = mailboxProbe - .appendMessage(BOB.asString(), path, AppendCommand.builder() + .appendMessage(bobUsername.asString(), path, AppendCommand.builder() .build(buildOriginalMessage("1"))) .getMessageId @@ -1562,7 +1598,7 @@ trait MDNSendMethodContract { | "MDN/send", | { | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", - | "identityId": "$ANDRE_IDENTITY_ID", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "${relatedEmailId.serialize()}", @@ -1621,14 +1657,14 @@ trait MDNSendMethodContract { def mdnSendShouldReturnSubjectWhenRequestDoNotSet(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val bobMailBoxPath: MailboxPath = MailboxPath.inbox(BOB) + val bobMailBoxPath: MailboxPath = MailboxPath.inbox(bobUsername) mailboxProbe.createMailbox(bobMailBoxPath) - val andreMailBoxPath: MailboxPath = MailboxPath.inbox(ANDRE) + val andreMailBoxPath: MailboxPath = MailboxPath.inbox(andreUsername) mailboxProbe.createMailbox(andreMailBoxPath) val relatedEmailId: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(buildOriginalMessage("1"))) .getMessageId @@ -1643,8 +1679,8 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", - | "identityId": "$ANDRE_IDENTITY_ID", + | "accountId": "$andreAccountId", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "${relatedEmailId.serialize()}", @@ -1690,14 +1726,14 @@ trait MDNSendMethodContract { def mdnSendShouldReturnTextBodyWhenRequestDoNotSet(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val bobMailBoxPath: MailboxPath = MailboxPath.inbox(BOB) + val bobMailBoxPath: MailboxPath = MailboxPath.inbox(bobUsername) mailboxProbe.createMailbox(bobMailBoxPath) - val andreMailBoxPath: MailboxPath = MailboxPath.inbox(ANDRE) + val andreMailBoxPath: MailboxPath = MailboxPath.inbox(andreUsername) mailboxProbe.createMailbox(andreMailBoxPath) val relatedEmailId: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(buildOriginalMessage("1"))) .getMessageId @@ -1712,8 +1748,8 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", - | "identityId": "$ANDRE_IDENTITY_ID", + | "accountId": "$andreAccountId", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "${relatedEmailId.serialize()}", @@ -1758,21 +1794,21 @@ trait MDNSendMethodContract { def mdnSendShouldReturnOriginalMessageIdWhenRelatedMessageHasMessageIDHeader(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val bobMailBoxPath: MailboxPath = MailboxPath.inbox(BOB) + val bobMailBoxPath: MailboxPath = MailboxPath.inbox(bobUsername) mailboxProbe.createMailbox(bobMailBoxPath) - val andreMailBoxPath: MailboxPath = MailboxPath.inbox(ANDRE) + val andreMailBoxPath: MailboxPath = MailboxPath.inbox(andreUsername) mailboxProbe.createMailbox(andreMailBoxPath) val relatedEmailId: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(Message.Builder .of .setSubject(s"Subject of original message") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) - .addField(new RawField("Disposition-Notification-To", s"Bob <${BOB.asString()}>")) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) + .addField(new RawField("Disposition-Notification-To", s"Bob <${bobUsername.asString()}>")) .addField(new RawField("Message-Id", "<[email protected]>")) .setBody(s"Body of mail, that mdn related", StandardCharsets.UTF_8) .build @@ -1790,8 +1826,8 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", - | "identityId": "$ANDRE_IDENTITY_ID", + | "accountId": "$andreAccountId", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "${relatedEmailId.serialize()}", @@ -1836,14 +1872,14 @@ trait MDNSendMethodContract { def mdnMessageShouldHasThirdBodyPartWhenIncludeOriginalMessageIsTrue(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val bobMailBoxPath: MailboxPath = MailboxPath.inbox(BOB) + val bobMailBoxPath: MailboxPath = MailboxPath.inbox(bobUsername) mailboxProbe.createMailbox(bobMailBoxPath) - val andreMailBoxPath: MailboxPath = MailboxPath.inbox(ANDRE) + val andreMailBoxPath: MailboxPath = MailboxPath.inbox(andreUsername) mailboxProbe.createMailbox(andreMailBoxPath) val relatedEmailId: MessageId = mailboxProbe - .appendMessage(ANDRE.asString(), andreMailBoxPath, AppendCommand.builder() + .appendMessage(andreUsername.asString(), andreMailBoxPath, AppendCommand.builder() .build(buildOriginalMessage("1"))) .getMessageId @@ -1858,8 +1894,8 @@ trait MDNSendMethodContract { | [ | "MDN/send", | { - | "accountId": "$ANDRE_ACCOUNT_ID", - | "identityId": "$ANDRE_IDENTITY_ID", + | "accountId": "$andreAccountId", + | "identityId": "$andreIdentityId", | "send": { | "k1546": { | "forEmailId": "${relatedEmailId.serialize()}", @@ -1900,7 +1936,7 @@ trait MDNSendMethodContract { .asString awaitAtMostTenSeconds.untilAsserted { () => - val mdnBodyPartCounter = getFirstMessageInMailBox(server, BOB) + val mdnBodyPartCounter = getFirstMessageInMailBox(server, bobUsername) .filter(msg => msg.isMultipart) .map(msg => msg.getBody.asInstanceOf[Multipart].getBodyParts) assert(mdnBodyPartCounter.isDefined && mdnBodyPartCounter.get.size == 3) 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/MemoryMDNSendMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMDNSendMethodTest.java index 8980d6c366..1a980b5151 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMDNSendMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMDNSendMethodTest.java @@ -25,7 +25,7 @@ import org.apache.james.jmap.rfc8621.contract.MDNSendMethodContract; import org.apache.james.mailbox.inmemory.InMemoryMessageId; import org.apache.james.mailbox.model.MessageId; -public class MemoryMDNSendMethodTest extends MemoryBase implements MDNSendMethodContract { +public class MemoryMDNSendMethodTest extends PerClassMemoryBase implements MDNSendMethodContract { @Override public MessageId randomMessageId() { return InMemoryMessageId.of(ThreadLocalRandom.current().nextInt(100000) + 100); 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/PostgresMDNSendMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresMDNSendMethodTest.java index 1c57e5682d..66d014608a 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresMDNSendMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresMDNSendMethodTest.java @@ -23,7 +23,7 @@ import org.apache.james.jmap.rfc8621.contract.MDNSendMethodContract; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.postgres.PostgresMessageId; -public class PostgresMDNSendMethodTest extends PostgresBase implements MDNSendMethodContract { +public class PostgresMDNSendMethodTest extends PerClassPostgresBase implements MDNSendMethodContract { public static final PostgresMessageId.Factory MESSAGE_ID_FACTORY = new PostgresMessageId.Factory(); @Override --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
