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 d3cbe5a6e6a9fbcc5abf39e0ea20243b9b26d4ea Author: Quan Tran <[email protected]> AuthorDate: Mon Jul 13 19:38:39 2026 +0700 [BUILD] QuotaQueryMethodContract: isolate using different users --- .../DistributedQuotaQueryMethodTest.java | 2 +- .../contract/QuotaQueryMethodContract.scala | 177 ++++++++++++--------- .../rfc8621/memory/MemoryQuotaQueryMethodTest.java | 2 +- .../postgres/PostgresQuotaQueryMethodTest.java | 2 +- 4 files changed, 108 insertions(+), 75 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/DistributedQuotaQueryMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedQuotaQueryMethodTest.java index d5056abd93..23175d4d5e 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedQuotaQueryMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedQuotaQueryMethodTest.java @@ -21,6 +21,6 @@ package org.apache.james.jmap.rfc8621.distributed; import org.apache.james.jmap.rfc8621.contract.QuotaQueryMethodContract; -public class DistributedQuotaQueryMethodTest extends DistributedBase implements QuotaQueryMethodContract { +public class DistributedQuotaQueryMethodTest extends PerClassDistributedBase implements QuotaQueryMethodContract { } 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/QuotaQueryMethodContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaQueryMethodContract.scala index d5215bc60c..a7781fbce7 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaQueryMethodContract.scala +++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaQueryMethodContract.scala @@ -19,19 +19,24 @@ 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.{`given`, requestSpecification} import io.restassured.http.ContentType.JSON import net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson import org.apache.http.HttpStatus.SC_OK import org.apache.james.GuiceJamesServer +import org.apache.james.core.Username import org.apache.james.core.quota.{QuotaCountLimit, QuotaSizeLimit} 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, ANDRE, ANDRE_PASSWORD, BOB, BOB_PASSWORD, DOMAIN, authScheme, baseRequestSpecBuilder} +import org.apache.james.jmap.mail.{CountResourceType, OctetsResourceType, QuotaIdFactory, ResourceType} +import org.apache.james.jmap.rfc8621.contract.Fixture.{ACCEPT_RFC8621_VERSION_HEADER, ANDRE_PASSWORD, BOB_PASSWORD, DOMAIN, authScheme, baseRequestSpecBuilder} import org.apache.james.mailbox.model.MailboxACL.Right.Read import org.apache.james.mailbox.model.{MailboxACL, MailboxPath} import org.apache.james.modules.{ACLProbeImpl, MailboxProbeImpl, QuotaProbesImpl} @@ -39,7 +44,27 @@ import org.apache.james.utils.DataProbeImpl import org.awaitility.Awaitility import org.junit.jupiter.api.{BeforeEach, Test} +object QuotaQueryMethodContract { + case class TestContext(bobUsername: Username, bobAccountId: String, andreUsername: Username) + + val currentContext: atomic.AtomicReference[TestContext] = new atomic.AtomicReference[TestContext]() +} + trait QuotaQueryMethodContract { + import QuotaQueryMethodContract.{TestContext, currentContext} + + def bobUsername: Username = currentContext.get().bobUsername + def bobAccountId: String = currentContext.get().bobAccountId + def andreUsername: Username = currentContext.get().andreUsername + + private def accountId(username: Username): String = + Hashing.sha256().hashString(username.asString(), StandardCharsets.UTF_8).toString + + private def quotaId(server: GuiceJamesServer, username: Username, resourceType: ResourceType): String = + QuotaIdFactory.from(server.getProbe(classOf[QuotaProbesImpl]).getQuotaRoot(MailboxPath.inbox(username)), resourceType).value + + private def queryState(ids: String*): String = + Hashing.murmur3_32_fixed().hashUnencodedChars(ids.sorted.mkString(" ")).toString private lazy val awaitAtMostTenSeconds = Awaitility.`with` .await @@ -48,14 +73,22 @@ trait QuotaQueryMethodContract { @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(TestContext( + bobUsername = bob, + bobAccountId = accountId(bob), + andreUsername = andre)) + 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) requestSpecification = baseRequestSpecBuilder(server) - .setAuth(authScheme(UserCredential(BOB, BOB_PASSWORD))) + .setAuth(authScheme(UserCredential(bob, BOB_PASSWORD))) .addHeader(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER) .build } @@ -71,7 +104,7 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter" : {} | }, | "c1"]] @@ -92,7 +125,7 @@ trait QuotaQueryMethodContract { | [ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "queryState": "00000000", | "canCalculateChanges": false, | "ids": [ @@ -110,7 +143,7 @@ trait QuotaQueryMethodContract { @Test def queryShouldReturnAllWhenFilterIsEmpty(server: GuiceJamesServer): Unit = { val quotaProbe = server.getProbe(classOf[QuotaProbesImpl]) - val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)) + val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername)) quotaProbe.setMaxMessageCount(bobQuotaRoot, QuotaCountLimit.count(100L)) quotaProbe.setMaxStorage(bobQuotaRoot, QuotaSizeLimit.size(99L)) @@ -123,7 +156,7 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter" : {} | }, | "c1"]] @@ -144,12 +177,12 @@ trait QuotaQueryMethodContract { | [ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", - | "queryState": "a06886ff", + | "accountId": "$bobAccountId", + | "queryState": "${queryState(quotaId(server, bobUsername, CountResourceType), quotaId(server, bobUsername, OctetsResourceType))}", | "canCalculateChanges": false, | "ids": [ - | "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528", - | "eab6ce8ac5d9730a959e614854410cf39df98ff3760a623b8e540f36f5184947" + | "${quotaId(server, bobUsername, CountResourceType)}", + | "${quotaId(server, bobUsername, OctetsResourceType)}" | ], | "position": 0, | "limit": 256 @@ -163,7 +196,7 @@ trait QuotaQueryMethodContract { @Test def filterResourceTypesShouldWork(server: GuiceJamesServer): Unit = { val quotaProbe = server.getProbe(classOf[QuotaProbesImpl]) - val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)) + val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername)) quotaProbe.setMaxMessageCount(bobQuotaRoot, QuotaCountLimit.count(100L)) quotaProbe.setMaxStorage(bobQuotaRoot, QuotaSizeLimit.size(99L)) @@ -176,7 +209,7 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter" : { | "resourceType": "count" | } @@ -199,11 +232,11 @@ trait QuotaQueryMethodContract { | [ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", - | "queryState": "d8d3e770", + | "accountId": "$bobAccountId", + | "queryState": "${queryState(quotaId(server, bobUsername, CountResourceType))}", | "canCalculateChanges": false, | "ids": [ - | "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528" + | "${quotaId(server, bobUsername, CountResourceType)}" | ], | "position": 0, | "limit": 256 @@ -217,7 +250,7 @@ trait QuotaQueryMethodContract { @Test def filterResourceTypesShoulFailWhenInvalidResourceTypes(server: GuiceJamesServer): Unit = { val quotaProbe = server.getProbe(classOf[QuotaProbesImpl]) - val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)) + val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername)) quotaProbe.setMaxMessageCount(bobQuotaRoot, QuotaCountLimit.count(100L)) quotaProbe.setMaxStorage(bobQuotaRoot, QuotaSizeLimit.size(99L)) @@ -230,7 +263,7 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter" : { | "resourceType": "invalid" | } @@ -265,7 +298,7 @@ trait QuotaQueryMethodContract { @Test def filterDataTypeShouldWork(server: GuiceJamesServer): Unit = { val quotaProbe = server.getProbe(classOf[QuotaProbesImpl]) - val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)) + val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername)) quotaProbe.setMaxMessageCount(bobQuotaRoot, QuotaCountLimit.count(100L)) quotaProbe.setMaxStorage(bobQuotaRoot, QuotaSizeLimit.size(99L)) @@ -278,7 +311,7 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter" : { | "type": "Mail" | } @@ -301,12 +334,12 @@ trait QuotaQueryMethodContract { | [ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", - | "queryState": "a06886ff", + | "accountId": "$bobAccountId", + | "queryState": "${queryState(quotaId(server, bobUsername, CountResourceType), quotaId(server, bobUsername, OctetsResourceType))}", | "canCalculateChanges": false, | "ids": [ - | "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528", - | "eab6ce8ac5d9730a959e614854410cf39df98ff3760a623b8e540f36f5184947" + | "${quotaId(server, bobUsername, CountResourceType)}", + | "${quotaId(server, bobUsername, OctetsResourceType)}" | ], | "position": 0, | "limit": 256 @@ -320,7 +353,7 @@ trait QuotaQueryMethodContract { @Test def filterDataTypeShouldFailWhenInvalidDataType(server: GuiceJamesServer): Unit = { val quotaProbe = server.getProbe(classOf[QuotaProbesImpl]) - val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)) + val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername)) quotaProbe.setMaxMessageCount(bobQuotaRoot, QuotaCountLimit.count(100L)) quotaProbe.setMaxStorage(bobQuotaRoot, QuotaSizeLimit.size(99L)) @@ -333,7 +366,7 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter" : { | "type": "invalid" | } @@ -368,7 +401,7 @@ trait QuotaQueryMethodContract { @Test def filterScopeShouldWork(server: GuiceJamesServer): Unit = { val quotaProbe = server.getProbe(classOf[QuotaProbesImpl]) - val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)) + val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername)) quotaProbe.setMaxMessageCount(bobQuotaRoot, QuotaCountLimit.count(100L)) quotaProbe.setMaxStorage(bobQuotaRoot, QuotaSizeLimit.size(99L)) @@ -381,7 +414,7 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter" : { | "scope": "account" | } @@ -404,12 +437,12 @@ trait QuotaQueryMethodContract { | [ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", - | "queryState": "a06886ff", + | "accountId": "$bobAccountId", + | "queryState": "${queryState(quotaId(server, bobUsername, CountResourceType), quotaId(server, bobUsername, OctetsResourceType))}", | "canCalculateChanges": false, | "ids": [ - | "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528", - | "eab6ce8ac5d9730a959e614854410cf39df98ff3760a623b8e540f36f5184947" + | "${quotaId(server, bobUsername, CountResourceType)}", + | "${quotaId(server, bobUsername, OctetsResourceType)}" | ], | "position": 0, | "limit": 256 @@ -423,7 +456,7 @@ trait QuotaQueryMethodContract { @Test def filterScopeShouldFailWhenInvalidScope(server: GuiceJamesServer): Unit = { val quotaProbe = server.getProbe(classOf[QuotaProbesImpl]) - val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)) + val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername)) quotaProbe.setMaxMessageCount(bobQuotaRoot, QuotaCountLimit.count(100L)) quotaProbe.setMaxStorage(bobQuotaRoot, QuotaSizeLimit.size(99L)) @@ -436,7 +469,7 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter" : { | "scope": "invalidScope" | } @@ -471,7 +504,7 @@ trait QuotaQueryMethodContract { @Test def filterQuotaNameShouldWork(server: GuiceJamesServer): Unit = { val quotaProbe = server.getProbe(classOf[QuotaProbesImpl]) - val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)) + val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername)) quotaProbe.setMaxMessageCount(bobQuotaRoot, QuotaCountLimit.count(100L)) quotaProbe.setMaxStorage(bobQuotaRoot, QuotaSizeLimit.size(99L)) @@ -484,9 +517,9 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter" : { - | "name": "#private&[email protected]@domain.tld:account:octets:Mail" + | "name": "#private&${bobUsername.asString}@domain.tld:account:octets:Mail" | } | }, | "c1"]] @@ -507,11 +540,11 @@ trait QuotaQueryMethodContract { | [ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", - | "queryState": "6cacd8a2", + | "accountId": "$bobAccountId", + | "queryState": "${queryState(quotaId(server, bobUsername, OctetsResourceType))}", | "canCalculateChanges": false, | "ids": [ - | "eab6ce8ac5d9730a959e614854410cf39df98ff3760a623b8e540f36f5184947" + | "${quotaId(server, bobUsername, OctetsResourceType)}" | ], | "position": 0, | "limit": 256 @@ -525,7 +558,7 @@ trait QuotaQueryMethodContract { @Test def filterQuotaNameShouldReturnEmptyResultWhenNameIsNotFound(server: GuiceJamesServer): Unit = { val quotaProbe = server.getProbe(classOf[QuotaProbesImpl]) - val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)) + val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername)) quotaProbe.setMaxMessageCount(bobQuotaRoot, QuotaCountLimit.count(100L)) quotaProbe.setMaxStorage(bobQuotaRoot, QuotaSizeLimit.size(99L)) @@ -538,7 +571,7 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter" : { | "name": "notFound" | } @@ -561,7 +594,7 @@ trait QuotaQueryMethodContract { | [ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "queryState": "00000000", | "canCalculateChanges": false, | "ids": [], @@ -577,7 +610,7 @@ trait QuotaQueryMethodContract { @Test def filterMultiPropertyShouldWork(server: GuiceJamesServer): Unit = { val quotaProbe = server.getProbe(classOf[QuotaProbesImpl]) - val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)) + val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername)) quotaProbe.setMaxMessageCount(bobQuotaRoot, QuotaCountLimit.count(100L)) quotaProbe.setMaxStorage(bobQuotaRoot, QuotaSizeLimit.size(99L)) @@ -590,9 +623,9 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter" : { - | "name": "#private&[email protected]@domain.tld:account:octets:Mail", + | "name": "#private&${bobUsername.asString}@domain.tld:account:octets:Mail", | "type": "Mail", | "scope": "account", | "resourceType": "octets" @@ -616,11 +649,11 @@ trait QuotaQueryMethodContract { | [ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", - | "queryState": "6cacd8a2", + | "accountId": "$bobAccountId", + | "queryState": "${queryState(quotaId(server, bobUsername, OctetsResourceType))}", | "canCalculateChanges": false, | "ids": [ - | "eab6ce8ac5d9730a959e614854410cf39df98ff3760a623b8e540f36f5184947" + | "${quotaId(server, bobUsername, OctetsResourceType)}" | ], | "position": 0, | "limit": 256 @@ -634,7 +667,7 @@ trait QuotaQueryMethodContract { @Test def filterShouldBeANDLogic(server: GuiceJamesServer): Unit = { val quotaProbe = server.getProbe(classOf[QuotaProbesImpl]) - val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)) + val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername)) quotaProbe.setMaxMessageCount(bobQuotaRoot, QuotaCountLimit.count(100L)) quotaProbe.setMaxStorage(bobQuotaRoot, QuotaSizeLimit.size(99L)) @@ -647,9 +680,9 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter" : { - | "name": "#private&[email protected]@domain.tld:account:octets:Mail", + | "name": "#private&${bobUsername.asString}@domain.tld:account:octets:Mail", | "resourceType": "count" | } | }, @@ -671,7 +704,7 @@ trait QuotaQueryMethodContract { | [ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "queryState": "00000000", | "canCalculateChanges": false, | "ids": [], @@ -687,7 +720,7 @@ trait QuotaQueryMethodContract { @Test def filterShouldFailWhenInvalidFilter(server: GuiceJamesServer): Unit = { val quotaProbe = server.getProbe(classOf[QuotaProbesImpl]) - val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)) + val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername)) quotaProbe.setMaxMessageCount(bobQuotaRoot, QuotaCountLimit.count(100L)) quotaProbe.setMaxStorage(bobQuotaRoot, QuotaSizeLimit.size(99L)) @@ -700,7 +733,7 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter" : { | "filterName1": "filterValue2" | } @@ -781,7 +814,7 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter": {} | }, | "c1"]] @@ -820,7 +853,7 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter": {} | }, | "c1"]] @@ -854,10 +887,10 @@ trait QuotaQueryMethodContract { @Test def quotaQueryShouldReturnEmptyIdsWhenDoesNotPermission(server: GuiceJamesServer): Unit ={ val quotaProbe = server.getProbe(classOf[QuotaProbesImpl]) - val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)) + val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername)) quotaProbe.setMaxMessageCount(bobQuotaRoot, QuotaCountLimit.count(100L)) - val andreMailbox = MailboxPath.forUser(ANDRE, "mailbox") + val andreMailbox = MailboxPath.forUser(andreUsername, "mailbox") server.getProbe(classOf[MailboxProbeImpl]).createMailbox(andreMailbox) quotaProbe.setMaxMessageCount(quotaProbe.getQuotaRoot(andreMailbox), QuotaCountLimit.count(88L)) @@ -871,9 +904,9 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter" : { - | "name" : "#private&[email protected]@domain.tld:account:count:Mail" + | "name" : "#private&${andreUsername.asString}@domain.tld:account:count:Mail" | } | }, | "c1"]] @@ -894,7 +927,7 @@ trait QuotaQueryMethodContract { | [ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "queryState": "00000000", | "canCalculateChanges": false, | "ids": [], @@ -910,13 +943,13 @@ trait QuotaQueryMethodContract { @Test def quotaQueryShouldReturnIdsWhenHasPermission(server: GuiceJamesServer): Unit = { val quotaProbe = server.getProbe(classOf[QuotaProbesImpl]) - val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)) + val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername)) quotaProbe.setMaxMessageCount(bobQuotaRoot, QuotaCountLimit.count(100L)) - val andreMailbox = MailboxPath.forUser(ANDRE, "mailbox") + val andreMailbox = MailboxPath.forUser(andreUsername, "mailbox") server.getProbe(classOf[MailboxProbeImpl]).createMailbox(andreMailbox) server.getProbe(classOf[ACLProbeImpl]) - .replaceRights(andreMailbox, BOB.asString, new MailboxACL.Rfc4314Rights(Read)) + .replaceRights(andreMailbox, bobUsername.asString, new MailboxACL.Rfc4314Rights(Read)) quotaProbe.setMaxMessageCount(quotaProbe.getQuotaRoot(andreMailbox), QuotaCountLimit.count(88L)) @@ -930,9 +963,9 @@ trait QuotaQueryMethodContract { | "methodCalls": [[ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "filter" : { - | "name" : "#private&[email protected]@domain.tld:account:count:Mail" + | "name" : "#private&${andreUsername.asString}@domain.tld:account:count:Mail" | } | }, | "c1"]] @@ -953,10 +986,10 @@ trait QuotaQueryMethodContract { | [ | "Quota/query", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", - | "queryState": "980c0716", + | "accountId": "$bobAccountId", + | "queryState": "${queryState(quotaId(server, andreUsername, CountResourceType))}", | "canCalculateChanges": false, - | "ids": ["04cbe4578878e02a74e47ae6be66c88cc8aafd3a5fc698457d712ee5f9a5b4ca"], + | "ids": ["${quotaId(server, andreUsername, CountResourceType)}"], | "position": 0, | "limit": 256 | }, 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/MemoryQuotaQueryMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaQueryMethodTest.java index d61ce0f232..50dcb9d5ea 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaQueryMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaQueryMethodTest.java @@ -21,6 +21,6 @@ package org.apache.james.jmap.rfc8621.memory; import org.apache.james.jmap.rfc8621.contract.QuotaQueryMethodContract; -public class MemoryQuotaQueryMethodTest extends MemoryBase implements QuotaQueryMethodContract { +public class MemoryQuotaQueryMethodTest extends PerClassMemoryBase implements QuotaQueryMethodContract { } 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/PostgresQuotaQueryMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresQuotaQueryMethodTest.java index 558709ab5e..3d6bb1c518 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresQuotaQueryMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresQuotaQueryMethodTest.java @@ -21,5 +21,5 @@ package org.apache.james.jmap.rfc8621.postgres; import org.apache.james.jmap.rfc8621.contract.QuotaQueryMethodContract; -public class PostgresQuotaQueryMethodTest extends PostgresBase implements QuotaQueryMethodContract { +public class PostgresQuotaQueryMethodTest extends PerClassPostgresBase implements QuotaQueryMethodContract { } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
