You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by hq...@apache.org on 2026/06/21 12:23:21 UTC
(james-project) 02/06: [BUILD] QuotaGetMethodContract: isolate using different users
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 5f89cd3c4a2d35ca515169aff6ab5547438e62b6
Author: Quan Tran <hq...@linagora.com>
AuthorDate: Fri Jun 19 10:47:13 2026 +0700
[BUILD] QuotaGetMethodContract: isolate using different users
### Before
- memory: 9 sec
- postgres: 25 sec
- distributed: 2 min 2 sec
### After
- memory: 3 sec
- postgres: 12 sec
- distributed: 21 sec
---
.../org/apache/james/modules/QuotaProbesImpl.java | 16 +
.../distributed/DistributedQuotaGetMethodTest.java | 39 ++-
.../rfc8621/contract/QuotaGetMethodContract.scala | 369 +++++++++++++--------
.../rfc8621/memory/MemoryQuotaGetMethodTest.java | 26 +-
.../postgres/PostgresQuotaGetMethodTest.java | 42 ++-
5 files changed, 347 insertions(+), 145 deletions(-)
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java
index e740f08a9c..dfd03f2491 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java
@@ -115,4 +115,20 @@ public class QuotaProbesImpl implements QuotaProbe, GuiceProbe {
public void setDomainMaxStorage(Domain domain, QuotaSizeLimit size) throws MailboxException {
maxQuotaManager.setDomainMaxStorage(domain, size);
}
+
+ public void removeGlobalMaxMessageCount() throws MailboxException {
+ maxQuotaManager.removeGlobalMaxMessage();
+ }
+
+ public void removeGlobalMaxStorage() throws MailboxException {
+ maxQuotaManager.removeGlobalMaxStorage();
+ }
+
+ public void removeDomainMaxMessage(Domain domain) throws MailboxException {
+ maxQuotaManager.removeDomainMaxMessage(domain);
+ }
+
+ public void removeDomainMaxStorage(Domain domain) throws MailboxException {
+ maxQuotaManager.removeDomainMaxStorage(domain);
+ }
}
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/DistributedQuotaGetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedQuotaGetMethodTest.java
index cd8e230710..ac81d1c0ca 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedQuotaGetMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedQuotaGetMethodTest.java
@@ -19,8 +19,45 @@
package org.apache.james.jmap.rfc8621.distributed;
+import org.apache.james.CassandraExtension;
+import org.apache.james.CassandraRabbitMQJamesConfiguration;
+import org.apache.james.CassandraRabbitMQJamesServerMain;
+import org.apache.james.DockerOpenSearchExtension;
+import org.apache.james.JamesServerBuilder;
+import org.apache.james.JamesServerExtension;
+import org.apache.james.SearchConfiguration;
+import org.apache.james.jmap.rfc8621.contract.IdentityProbeModule;
+import org.apache.james.jmap.rfc8621.contract.JmapPreviewProbeModule;
import org.apache.james.jmap.rfc8621.contract.QuotaGetMethodContract;
+import org.apache.james.jmap.rfc8621.contract.QuotaGetMethodProbeModule;
+import org.apache.james.jmap.rfc8621.contract.probe.DelegationProbeModule;
+import org.apache.james.modules.AwsS3BlobStoreExtension;
+import org.apache.james.modules.RabbitMQExtension;
+import org.apache.james.modules.TestJMAPServerModule;
+import org.apache.james.modules.blobstore.BlobStoreConfiguration;
+import org.junit.jupiter.api.extension.RegisterExtension;
-public class DistributedQuotaGetMethodTest extends DistributedBase implements QuotaGetMethodContract {
+public class DistributedQuotaGetMethodTest implements QuotaGetMethodContract {
+ @RegisterExtension
+ static JamesServerExtension testExtension = new JamesServerBuilder<CassandraRabbitMQJamesConfiguration>(tmpDir ->
+ CassandraRabbitMQJamesConfiguration.builder()
+ .workingDirectory(tmpDir)
+ .configurationFromClasspath()
+ .enableJMAP()
+ .blobStore(BlobStoreConfiguration.builder()
+ .s3()
+ .disableCache()
+ .deduplication()
+ .noCryptoConfig())
+ .searchConfiguration(SearchConfiguration.openSearch())
+ .build())
+ .extension(new DockerOpenSearchExtension())
+ .extension(new CassandraExtension())
+ .extension(new RabbitMQExtension())
+ .extension(new AwsS3BlobStoreExtension())
+ .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
+ .overrideWith(new TestJMAPServerModule(), new DelegationProbeModule(), new IdentityProbeModule(), new JmapPreviewProbeModule(), new QuotaGetMethodProbeModule()))
+ .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
+ .build();
}
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/QuotaGetMethodContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaGetMethodContract.scala
index 2e96cbbb9f..fa592a1f18 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaGetMethodContract.scala
+++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaGetMethodContract.scala
@@ -21,30 +21,99 @@ package org.apache.james.jmap.rfc8621.contract
import java.nio.charset.StandardCharsets
import java.time.Duration
-import java.util.concurrent.TimeUnit
+import java.util.concurrent.{TimeUnit, atomic}
+import java.util.{Optional, UUID}
+import com.google.common.hash.Hashing
+import com.google.inject.multibindings.Multibinder
+import com.google.inject.{AbstractModule, Scopes}
import io.netty.handler.codec.http.HttpHeaderNames.ACCEPT
import io.restassured.RestAssured.{`given`, requestSpecification}
import io.restassured.http.ContentType.JSON
+import jakarta.inject.Inject
import net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson
import net.javacrumbs.jsonunit.core.Option.IGNORING_ARRAY_ORDER
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.mail.{CountResourceType, QuotaIdFactory}
-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}
+import org.apache.james.jmap.method.QuotaGetMethod
+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.QuotaGetMethodContract.TestContext
import org.apache.james.mailbox.MessageManager.AppendCommand
import org.apache.james.mailbox.model.MailboxACL.Right.{Lookup, Read}
-import org.apache.james.mailbox.model.{MailboxACL, MailboxPath}
+import org.apache.james.mailbox.model.{MailboxACL, MailboxPath, QuotaRoot}
import org.apache.james.mime4j.dom.Message
import org.apache.james.modules.{ACLProbeImpl, MailboxProbeImpl, QuotaProbesImpl}
-import org.apache.james.utils.DataProbeImpl
+import org.apache.james.utils.{DataProbeImpl, GuiceProbe}
import org.awaitility.Awaitility
-import org.junit.jupiter.api.{BeforeEach, Test}
+import org.junit.jupiter.api.{AfterEach, BeforeEach, Test}
+
+object QuotaGetMethodContract {
+ case class TestContext(bobUsername: Username, bobAccountId: String, andreUsername: Username)
+
+ val currentContext: atomic.AtomicReference[TestContext] = new atomic.AtomicReference[TestContext]()
+}
+
+class QuotaGetMethodProbeModule extends AbstractModule {
+ override def configure(): Unit = {
+ bind(classOf[QuotaGetMethod]).in(Scopes.SINGLETON)
+ Multibinder.newSetBinder(binder(), classOf[GuiceProbe])
+ .addBinding()
+ .to(classOf[QuotaGetMethodProbe])
+ }
+}
+
+class QuotaGetMethodProbe @Inject()(quotaGetMethod: QuotaGetMethod) extends GuiceProbe {
+ def forceDraftCompatibility(value: Boolean): Unit = {
+ val draftCompatibilityField = classOf[QuotaGetMethod].getDeclaredField("JMAP_QUOTA_DRAFT_COMPATIBILITY")
+ draftCompatibilityField.setAccessible(true)
+ draftCompatibilityField.setBoolean(quotaGetMethod, value)
+
+ val lazyValInitializedField = classOf[QuotaGetMethod].getDeclaredField("bitmap$0")
+ lazyValInitializedField.setAccessible(true)
+ lazyValInitializedField.setBoolean(quotaGetMethod, true)
+ }
+}
trait QuotaGetMethodContract {
+ def bobUsername: Username = QuotaGetMethodContract.currentContext.get().bobUsername
+ def bobAccountId: String = QuotaGetMethodContract.currentContext.get().bobAccountId
+ def andreUsername: Username = QuotaGetMethodContract.currentContext.get().andreUsername
+
+ private def quotaRoot(username: Username): QuotaRoot =
+ QuotaRoot.quotaRoot(s"#private&${username.asString()}", Optional.of(DOMAIN))
+
+ private def quotaName(quotaRoot: QuotaRoot, resourceType: String): String =
+ s"${quotaRoot.asString()}:account:$resourceType:Mail"
+
+ private def quotaState(entries: (String, Long, Long)*): String = {
+ val namePart = entries.map(_._1).sorted.mkString("_")
+ val sum = entries.map { case (_, used, hardLimit) => used + hardLimit }.sum
+ UUID.nameUUIDFromBytes(s"$namePart:$sum".getBytes(StandardCharsets.UTF_8)).toString
+ }
+
+ def bobQuotaRoot: QuotaRoot = quotaRoot(bobUsername)
+ def andreQuotaRoot: QuotaRoot = quotaRoot(andreUsername)
+
+ def bobCountQuotaName: String = quotaName(bobQuotaRoot, CountResourceType.asString())
+ def bobOctetsQuotaName: String = quotaName(bobQuotaRoot, OctetsResourceType.asString())
+ def andreCountQuotaName: String = quotaName(andreQuotaRoot, CountResourceType.asString())
+
+ def bobCountQuotaId: String = QuotaIdFactory.from(bobQuotaRoot, CountResourceType).value
+ def bobOctetsQuotaId: String = QuotaIdFactory.from(bobQuotaRoot, OctetsResourceType).value
+ def andreCountQuotaId: String = QuotaIdFactory.from(andreQuotaRoot, CountResourceType).value
+
+ def emptyQuotaState: String = quotaState()
+ def bobCount100State: String = quotaState((bobCountQuotaName, 0, 100))
+ def bobCount100Octets99State: String = quotaState((bobCountQuotaName, 0, 100), (bobOctetsQuotaName, 0, 99))
+ def bobCount100Octets900State: String = quotaState((bobCountQuotaName, 0, 100), (bobOctetsQuotaName, 0, 900))
+ def bobCount100Octets900WithUsageState: String = quotaState((bobCountQuotaName, 1, 100), (bobOctetsQuotaName, 85, 900))
+ def bobCount100Octets101WithUsageState: String = quotaState((bobCountQuotaName, 1, 100), (bobOctetsQuotaName, 85, 101))
+ def bobCount100AndreCount88State: String = quotaState((bobCountQuotaName, 0, 100), (andreCountQuotaName, 0, 88))
private lazy val awaitAtMostTenSeconds = Awaitility.`with`
.await
@@ -53,18 +122,36 @@ trait QuotaGetMethodContract {
@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)
+ QuotaGetMethodContract.currentContext.set(TestContext(
+ bobUsername = bob,
+ bobAccountId = Hashing.sha256().hashString(bob.asString(), StandardCharsets.UTF_8).toString,
+ 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
- System.clearProperty("james.jmap.quota.draft.compatibility")
+ server.getProbe(classOf[QuotaGetMethodProbe]).forceDraftCompatibility(false)
+ }
+
+ @AfterEach
+ def tearDown(server: GuiceJamesServer): Unit = {
+ val quotaProbe = server.getProbe(classOf[QuotaProbesImpl])
+ quotaProbe.removeGlobalMaxMessageCount()
+ quotaProbe.removeGlobalMaxStorage()
+ quotaProbe.removeDomainMaxMessage(DOMAIN)
+ quotaProbe.removeDomainMaxStorage(DOMAIN)
+ server.getProbe(classOf[QuotaGetMethodProbe]).forceDraftCompatibility(false)
}
@Test
@@ -78,7 +165,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null
| },
| "c1"]]
@@ -98,8 +185,8 @@ trait QuotaGetMethodContract {
| "methodResponses": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "1a9d5db2-2c73-3993-bf0b-42f64b396873",
+ | "accountId": "$bobAccountId",
+ | "state": "$emptyQuotaState",
| "list": [],
| "notFound": []
| },
@@ -110,7 +197,7 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldReturnListWhenQuotasIsProvided(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 +210,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null
| },
| "c1"]]
@@ -146,14 +233,14 @@ trait QuotaGetMethodContract {
| [
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "notFound": [],
- | "state": "6d7199ed-f1ce-31f3-8f02-c2e824004e55",
+ | "state": "$bobCount100Octets99State",
| "list": [
| {
| "used": 0,
- | "name": "#private&bob@domain.tld@domain.tld:account:count:Mail",
- | "id": "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528",
+ | "name": "$bobCountQuotaName",
+ | "id": "$bobCountQuotaId",
| "types": [
| "Mail"
| ],
@@ -164,8 +251,8 @@ trait QuotaGetMethodContract {
| },
| {
| "used": 0,
- | "name": "#private&bob@domain.tld@domain.tld:account:octets:Mail",
- | "id": "eab6ce8ac5d9730a959e614854410cf39df98ff3760a623b8e540f36f5184947",
+ | "name": "$bobOctetsQuotaName",
+ | "id": "$bobOctetsQuotaId",
| "types": [
| "Mail"
| ],
@@ -186,7 +273,7 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldFilterOutUnlimitedQuota(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.unlimited())
@@ -199,7 +286,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null
| },
| "c1"]]
@@ -222,14 +309,14 @@ trait QuotaGetMethodContract {
| [
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "notFound": [],
- | "state": "84c40a2e-76a1-3f84-a1e8-862104c7a697",
+ | "state": "$bobCount100State",
| "list": [
| {
| "used": 0,
- | "name": "#private&bob@domain.tld@domain.tld:account:count:Mail",
- | "id": "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528",
+ | "name": "$bobCountQuotaName",
+ | "id": "$bobCountQuotaId",
| "types": [
| "Mail"
| ],
@@ -250,7 +337,7 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldReturnEmptyListWhenIdsAreEmpty(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 response = `given`
@@ -262,7 +349,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": []
| },
| "c1"]]
@@ -283,9 +370,9 @@ trait QuotaGetMethodContract {
| [
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "notFound": [],
- | "state": "84c40a2e-76a1-3f84-a1e8-862104c7a697",
+ | "state": "$bobCount100State",
| "list": []
| },
| "c1"
@@ -311,7 +398,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null
| },
| "c1"]]
@@ -334,14 +421,14 @@ trait QuotaGetMethodContract {
| [
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "notFound": [],
- | "state": "6d7199ed-f1ce-31f3-8f02-c2e824004e55",
+ | "state": "$bobCount100Octets99State",
| "list": [
| {
| "used": 0,
- | "name": "#private&bob@domain.tld@domain.tld:account:count:Mail",
- | "id": "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528",
+ | "name": "$bobCountQuotaName",
+ | "id": "$bobCountQuotaId",
| "types": [
| "Mail"
| ],
@@ -352,8 +439,8 @@ trait QuotaGetMethodContract {
| },
| {
| "used": 0,
- | "name": "#private&bob@domain.tld@domain.tld:account:octets:Mail",
- | "id": "eab6ce8ac5d9730a959e614854410cf39df98ff3760a623b8e540f36f5184947",
+ | "name": "$bobOctetsQuotaName",
+ | "id": "$bobOctetsQuotaId",
| "types": [
| "Mail"
| ],
@@ -376,7 +463,7 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldReturnNotFoundWhenIdDoesNotExist(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 response = `given`
@@ -388,7 +475,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": ["notfound123"]
| },
| "c1"]]
@@ -409,9 +496,9 @@ trait QuotaGetMethodContract {
| [
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "notFound": [ "notfound123" ],
- | "state": "84c40a2e-76a1-3f84-a1e8-862104c7a697",
+ | "state": "$bobCount100State",
| "list": []
| },
| "c1"
@@ -424,7 +511,7 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldReturnNotFoundAndListWhenMixCases(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(900))
@@ -439,7 +526,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": ["notfound123", "${quotaId.value}"]
| },
| "c1"]]
@@ -460,14 +547,14 @@ trait QuotaGetMethodContract {
| [
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "notFound": [ "notfound123" ],
- | "state": "461cef39-0c47-352b-a9e9-052093c20d5d",
+ | "state": "$bobCount100Octets900State",
| "list": [
| {
| "used": 0,
- | "name": "#private&bob@domain.tld@domain.tld:account:count:Mail",
- | "id": "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528",
+ | "name": "$bobCountQuotaName",
+ | "id": "$bobCountQuotaId",
| "types": [
| "Mail"
| ],
@@ -488,13 +575,13 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldReturnRightUsageQuota(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(900L))
- server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(BOB))
+ server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(bobUsername))
server.getProbe(classOf[MailboxProbeImpl])
- .appendMessage(BOB.asString(), MailboxPath.inbox(BOB), AppendCommand.from(Message.Builder
+ .appendMessage(bobUsername.asString(), MailboxPath.inbox(bobUsername), AppendCommand.from(Message.Builder
.of
.setSubject("test")
.setBody("testmail", StandardCharsets.UTF_8)
@@ -511,7 +598,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null
| },
| "c1"]]
@@ -534,14 +621,14 @@ trait QuotaGetMethodContract {
| [
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "notFound": [ ],
- | "state": "3c51d50a-d766-38b7-9fa4-c9ff12de87a4",
+ | "state": "$bobCount100Octets900WithUsageState",
| "list": [
| {
| "used": 1,
- | "name": "#private&bob@domain.tld@domain.tld:account:count:Mail",
- | "id": "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528",
+ | "name": "$bobCountQuotaName",
+ | "id": "$bobCountQuotaId",
| "types": [
| "Mail"
| ],
@@ -552,8 +639,8 @@ trait QuotaGetMethodContract {
| },
| {
| "used": 85,
- | "name": "#private&bob@domain.tld@domain.tld:account:octets:Mail",
- | "id": "eab6ce8ac5d9730a959e614854410cf39df98ff3760a623b8e540f36f5184947",
+ | "name": "$bobOctetsQuotaName",
+ | "id": "$bobOctetsQuotaId",
| "types": [
| "Mail"
| ],
@@ -621,7 +708,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null
| },
| "c1"]]
@@ -660,7 +747,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null
| },
| "c1"]]
@@ -694,7 +781,7 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldNotReturnQuotaDataOfOtherAccount(server: GuiceJamesServer): Unit = {
val quotaProbe = server.getProbe(classOf[QuotaProbesImpl])
- val andreQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(ANDRE))
+ val andreQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(andreUsername))
quotaProbe.setMaxMessageCount(andreQuotaRoot, QuotaCountLimit.count(100L))
val response = `given`
@@ -706,7 +793,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null
| },
| "c1"]]
@@ -726,8 +813,8 @@ trait QuotaGetMethodContract {
| "methodResponses": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "1a9d5db2-2c73-3993-bf0b-42f64b396873",
+ | "accountId": "$bobAccountId",
+ | "state": "$emptyQuotaState",
| "list": [],
| "notFound": []
| },
@@ -738,7 +825,7 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldReturnNotFoundWhenDoesNotPermission(server: GuiceJamesServer): Unit = {
val quotaProbe = server.getProbe(classOf[QuotaProbesImpl])
- val andreQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(ANDRE))
+ val andreQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(andreUsername))
quotaProbe.setMaxMessageCount(andreQuotaRoot, QuotaCountLimit.count(100L))
val quotaId = QuotaIdFactory.from(andreQuotaRoot, CountResourceType)
@@ -752,7 +839,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": ["${quotaId.value}"]
| },
| "c1"]]
@@ -772,8 +859,8 @@ trait QuotaGetMethodContract {
| "methodResponses": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "1a9d5db2-2c73-3993-bf0b-42f64b396873",
+ | "accountId": "$bobAccountId",
+ | "state": "$emptyQuotaState",
| "list": [],
| "notFound": [ "${quotaId}" ]
| },
@@ -784,7 +871,7 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldReturnIdWhenNoPropertiesRequested(server: GuiceJamesServer): Unit = {
val quotaProbe = server.getProbe(classOf[QuotaProbesImpl])
- val quotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB))
+ val quotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername))
quotaProbe.setMaxMessageCount(quotaRoot, QuotaCountLimit.count(100L))
val response = `given`
@@ -796,7 +883,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null,
| "properties": []
| },
@@ -817,11 +904,11 @@ trait QuotaGetMethodContract {
| "methodResponses": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "84c40a2e-76a1-3f84-a1e8-862104c7a697",
+ | "accountId": "$bobAccountId",
+ | "state": "$bobCount100State",
| "list": [
| {
- | "id": "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528"
+ | "id": "$bobCountQuotaId"
| }
| ],
| "notFound": []
@@ -833,7 +920,7 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldReturnOnlyRequestedProperties(server: GuiceJamesServer): Unit = {
val quotaProbe = server.getProbe(classOf[QuotaProbesImpl])
- val quotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB))
+ val quotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername))
quotaProbe.setMaxMessageCount(quotaRoot, QuotaCountLimit.count(100L))
val response = `given`
@@ -845,7 +932,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null,
| "properties": ["name","used","hardLimit"]
| },
@@ -866,13 +953,13 @@ trait QuotaGetMethodContract {
| "methodResponses": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "84c40a2e-76a1-3f84-a1e8-862104c7a697",
+ | "accountId": "$bobAccountId",
+ | "state": "$bobCount100State",
| "list": [
| {
- | "id": "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528",
+ | "id": "$bobCountQuotaId",
| "used": 0,
- | "name": "#private&bob@domain.tld@domain.tld:account:count:Mail",
+ | "name": "$bobCountQuotaName",
| "hardLimit": 100
| }
| ],
@@ -885,7 +972,7 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldFailWhenInvalidProperties(server: GuiceJamesServer): Unit = {
val quotaProbe = server.getProbe(classOf[QuotaProbesImpl])
- val quotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB))
+ val quotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername))
quotaProbe.setMaxMessageCount(quotaRoot, QuotaCountLimit.count(100L))
val response = `given`
@@ -897,7 +984,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null,
| "properties": ["invalid"]
| },
@@ -931,7 +1018,7 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldFailWhenInvalidIds(server: GuiceJamesServer): Unit = {
val quotaProbe = server.getProbe(classOf[QuotaProbesImpl])
- val quotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB))
+ val quotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(bobUsername))
quotaProbe.setMaxMessageCount(quotaRoot, QuotaCountLimit.count(100L))
val response = `given`
@@ -943,7 +1030,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": ["#==id"]
| },
| "c1"]]
@@ -976,7 +1063,7 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldReturnOnlyUserQuota(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(101L))
@@ -986,9 +1073,9 @@ trait QuotaGetMethodContract {
quotaProbe.setDomainMaxMessage(DOMAIN, QuotaCountLimit.count(80L))
quotaProbe.setDomainMaxStorage(DOMAIN, QuotaSizeLimit.size(88L))
- server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(BOB))
+ server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(bobUsername))
server.getProbe(classOf[MailboxProbeImpl])
- .appendMessage(BOB.asString(), MailboxPath.inbox(BOB), AppendCommand.from(Message.Builder
+ .appendMessage(bobUsername.asString(), MailboxPath.inbox(bobUsername), AppendCommand.from(Message.Builder
.of
.setSubject("test")
.setBody("testmail", StandardCharsets.UTF_8)
@@ -1005,7 +1092,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null
| },
| "c1"]]
@@ -1028,14 +1115,14 @@ trait QuotaGetMethodContract {
| [
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "notFound": [],
- | "state": "7d53031b-2819-3584-9e9d-e10ac1067906",
+ | "state": "$bobCount100Octets101WithUsageState",
| "list": [
| {
| "used": 1,
- | "name": "#private&bob@domain.tld@domain.tld:account:count:Mail",
- | "id": "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528",
+ | "name": "$bobCountQuotaName",
+ | "id": "$bobCountQuotaId",
| "types": [
| "Mail"
| ],
@@ -1046,8 +1133,8 @@ trait QuotaGetMethodContract {
| },
| {
| "used": 85,
- | "name": "#private&bob@domain.tld@domain.tld:account:octets:Mail",
- | "id": "eab6ce8ac5d9730a959e614854410cf39df98ff3760a623b8e540f36f5184947",
+ | "name": "$bobOctetsQuotaName",
+ | "id": "$bobOctetsQuotaId",
| "types": [
| "Mail"
| ],
@@ -1069,14 +1156,14 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldNotReturnQuotaRootOfDelegatedMailboxWhenNotExtension(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))
// setup delegated Mailbox
- val andreMailbox = MailboxPath.forUser(ANDRE, "mailbox")
+ val andreMailbox = MailboxPath.forUser(andreUsername, "mailbox")
val mailboxId = 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))
@@ -1090,7 +1177,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null
| },
| "c1"]]
@@ -1111,14 +1198,14 @@ trait QuotaGetMethodContract {
| [
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "notFound": [],
- | "state": "84c40a2e-76a1-3f84-a1e8-862104c7a697",
+ | "state": "$bobCount100State",
| "list": [
| {
| "used": 0,
- | "name": "#private&bob@domain.tld@domain.tld:account:count:Mail",
- | "id": "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528",
+ | "name": "$bobCountQuotaName",
+ | "id": "$bobCountQuotaId",
| "types": [
| "Mail"
| ],
@@ -1139,14 +1226,14 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldReturnQuotaRootOfDelegatedMailboxWhenExtension(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))
// setup delegated Mailbox
- val andreMailbox = MailboxPath.forUser(ANDRE, "mailbox")
+ val andreMailbox = MailboxPath.forUser(andreUsername, "mailbox")
val mailboxId = 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))
@@ -1160,7 +1247,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null
| },
| "c1"]]
@@ -1183,14 +1270,14 @@ trait QuotaGetMethodContract {
| [
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "notFound": [],
- | "state": "5dc809dd-d059-3fab-bc7e-c0f1fcacf2f2",
+ | "state": "$bobCount100AndreCount88State",
| "list": [
| {
| "used": 0,
- | "name": "#private&bob@domain.tld@domain.tld:account:count:Mail",
- | "id": "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528",
+ | "name": "$bobCountQuotaName",
+ | "id": "$bobCountQuotaId",
| "types": [
| "Mail"
| ],
@@ -1201,9 +1288,9 @@ trait QuotaGetMethodContract {
| },
| {
| "used": 0,
- | "name": "#private&andre@domain.tld@domain.tld:account:count:Mail",
+ | "name": "$andreCountQuotaName",
| "warnLimit": 79,
- | "id": "04cbe4578878e02a74e47ae6be66c88cc8aafd3a5fc698457d712ee5f9a5b4ca",
+ | "id": "$andreCountQuotaId",
| "types": [
| "Mail"
| ],
@@ -1223,14 +1310,14 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldReturnQuotaRootOfDelegatedMailboxWhenNotHasReadRight(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))
// setup delegated Mailbox
- val andreMailbox = MailboxPath.forUser(ANDRE, "mailbox")
+ val andreMailbox = MailboxPath.forUser(andreUsername, "mailbox")
val mailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(andreMailbox)
server.getProbe(classOf[ACLProbeImpl])
- .replaceRights(andreMailbox, BOB.asString, new MailboxACL.Rfc4314Rights(Lookup))
+ .replaceRights(andreMailbox, bobUsername.asString, new MailboxACL.Rfc4314Rights(Lookup))
quotaProbe.setMaxMessageCount(quotaProbe.getQuotaRoot(andreMailbox), QuotaCountLimit.count(88L))
@@ -1244,7 +1331,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null
| },
| "c1"]]
@@ -1265,14 +1352,14 @@ trait QuotaGetMethodContract {
| [
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "notFound": [],
- | "state": "84c40a2e-76a1-3f84-a1e8-862104c7a697",
+ | "state": "$bobCount100State",
| "list": [
| {
| "used": 0,
- | "name": "#private&bob@domain.tld@domain.tld:account:count:Mail",
- | "id": "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528",
+ | "name": "$bobCountQuotaName",
+ | "id": "$bobCountQuotaId",
| "types": [
| "Mail"
| ],
@@ -1293,14 +1380,14 @@ trait QuotaGetMethodContract {
@Test
def quotaGetShouldReturnQuotaRootOfDelegatedMailboxWhenProvideCorrectId(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))
// setup delegated Mailbox
- val andreMailbox = MailboxPath.forUser(ANDRE, "mailbox")
+ val andreMailbox = MailboxPath.forUser(andreUsername, "mailbox")
val mailboxId = 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))
@@ -1314,8 +1401,8 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "ids": ["04cbe4578878e02a74e47ae6be66c88cc8aafd3a5fc698457d712ee5f9a5b4ca"]
+ | "accountId": "$bobAccountId",
+ | "ids": ["$andreCountQuotaId"]
| },
| "c1"]]
|}""".stripMargin)
@@ -1337,15 +1424,15 @@ trait QuotaGetMethodContract {
| [
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "notFound": [],
- | "state": "5dc809dd-d059-3fab-bc7e-c0f1fcacf2f2",
+ | "state": "$bobCount100AndreCount88State",
| "list": [
| {
| "used": 0,
- | "name": "#private&andre@domain.tld@domain.tld:account:count:Mail",
+ | "name": "$andreCountQuotaName",
| "warnLimit": 79,
- | "id": "04cbe4578878e02a74e47ae6be66c88cc8aafd3a5fc698457d712ee5f9a5b4ca",
+ | "id": "$andreCountQuotaId",
| "types": [
| "Mail"
| ],
@@ -1364,10 +1451,10 @@ trait QuotaGetMethodContract {
@Test
def shouldSupportQuotaGetDraftCompatibilityWhenEnabled(server: GuiceJamesServer): Unit = {
- System.setProperty("james.jmap.quota.draft.compatibility", "true")
+ server.getProbe(classOf[QuotaGetMethodProbe]).forceDraftCompatibility(true)
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.unlimited())
@@ -1380,7 +1467,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null
| },
| "c1"]]
@@ -1403,14 +1490,14 @@ trait QuotaGetMethodContract {
| [
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "notFound": [],
- | "state": "84c40a2e-76a1-3f84-a1e8-862104c7a697",
+ | "state": "$bobCount100State",
| "list": [
| {
| "used": 0,
- | "name": "#private&bob@domain.tld@domain.tld:account:count:Mail",
- | "id": "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528",
+ | "name": "$bobCountQuotaName",
+ | "id": "$bobCountQuotaId",
| "types": ["Mail"],
| "dataTypes": ["Mail"],
| "hardLimit": 100,
@@ -1430,10 +1517,10 @@ trait QuotaGetMethodContract {
@Test
def quotaGetDraftCompatibilityShouldStillSupportPropertiesFiltering(server: GuiceJamesServer): Unit = {
- System.setProperty("james.jmap.quota.draft.compatibility", "true")
+ server.getProbe(classOf[QuotaGetMethodProbe]).forceDraftCompatibility(true)
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.unlimited())
@@ -1446,7 +1533,7 @@ trait QuotaGetMethodContract {
| "methodCalls": [[
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "ids": null,
| "properties": ["limit", "dataTypes"]
| },
@@ -1470,12 +1557,12 @@ trait QuotaGetMethodContract {
| [
| "Quota/get",
| {
- | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "accountId": "$bobAccountId",
| "notFound": [],
- | "state": "84c40a2e-76a1-3f84-a1e8-862104c7a697",
+ | "state": "$bobCount100State",
| "list": [
| {
- | "id": "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528",
+ | "id": "$bobCountQuotaId",
| "dataTypes": ["Mail"],
| "limit": 100
| }
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/MemoryQuotaGetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaGetMethodTest.java
index 5c76e3ccf8..af5aefcda9 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaGetMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaGetMethodTest.java
@@ -19,8 +19,30 @@
package org.apache.james.jmap.rfc8621.memory;
-import org.apache.james.jmap.rfc8621.contract.QuotaGetMethodContract;
+import static org.apache.james.data.UsersRepositoryModuleChooser.Implementation.DEFAULT;
-public class MemoryQuotaGetMethodTest extends MemoryBase implements QuotaGetMethodContract {
+import org.apache.james.JamesServerBuilder;
+import org.apache.james.JamesServerExtension;
+import org.apache.james.MemoryJamesConfiguration;
+import org.apache.james.MemoryJamesServerMain;
+import org.apache.james.jmap.rfc8621.contract.IdentityProbeModule;
+import org.apache.james.jmap.rfc8621.contract.QuotaGetMethodContract;
+import org.apache.james.jmap.rfc8621.contract.QuotaGetMethodProbeModule;
+import org.apache.james.jmap.rfc8621.contract.probe.DelegationProbeModule;
+import org.apache.james.modules.TestJMAPServerModule;
+import org.junit.jupiter.api.extension.RegisterExtension;
+public class MemoryQuotaGetMethodTest implements QuotaGetMethodContract {
+ @RegisterExtension
+ static JamesServerExtension testExtension = new JamesServerBuilder<MemoryJamesConfiguration>(tmpDir ->
+ MemoryJamesConfiguration.builder()
+ .workingDirectory(tmpDir)
+ .configurationFromClasspath()
+ .usersRepository(DEFAULT)
+ .enableJMAP()
+ .build())
+ .server(configuration -> MemoryJamesServerMain.createServer(configuration)
+ .overrideWith(new TestJMAPServerModule(), new DelegationProbeModule(), new IdentityProbeModule(), new QuotaGetMethodProbeModule()))
+ .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
+ .build();
}
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/PostgresQuotaGetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresQuotaGetMethodTest.java
index a64d8e683c..06eae4c981 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresQuotaGetMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresQuotaGetMethodTest.java
@@ -19,7 +19,47 @@
package org.apache.james.jmap.rfc8621.postgres;
+import static org.apache.james.data.UsersRepositoryModuleChooser.Implementation.DEFAULT;
+
+import org.apache.james.JamesServerBuilder;
+import org.apache.james.JamesServerExtension;
+import org.apache.james.PostgresJamesConfiguration;
+import org.apache.james.PostgresJamesServerMain;
+import org.apache.james.SearchConfiguration;
+import org.apache.james.backends.postgres.PostgresExtension;
+import org.apache.james.jmap.rfc8621.contract.IdentityProbeModule;
+import org.apache.james.jmap.rfc8621.contract.JmapPreviewProbeModule;
import org.apache.james.jmap.rfc8621.contract.QuotaGetMethodContract;
+import org.apache.james.jmap.rfc8621.contract.QuotaGetMethodProbeModule;
+import org.apache.james.jmap.rfc8621.contract.probe.DelegationProbeModule;
+import org.apache.james.modules.RabbitMQExtension;
+import org.apache.james.modules.TestJMAPServerModule;
+import org.apache.james.modules.blobstore.BlobStoreConfiguration;
+import org.junit.jupiter.api.extension.RegisterExtension;
-public class PostgresQuotaGetMethodTest extends PostgresBase implements QuotaGetMethodContract {
+public class PostgresQuotaGetMethodTest implements QuotaGetMethodContract {
+ @RegisterExtension
+ static JamesServerExtension testExtension = new JamesServerBuilder<PostgresJamesConfiguration>(tmpDir ->
+ PostgresJamesConfiguration.builder()
+ .workingDirectory(tmpDir)
+ .configurationFromClasspath()
+ .searchConfiguration(SearchConfiguration.scanning())
+ .usersRepository(DEFAULT)
+ .eventBusImpl(PostgresJamesConfiguration.EventBusImpl.RABBITMQ)
+ .blobStore(BlobStoreConfiguration.builder()
+ .postgres()
+ .disableCache()
+ .deduplication()
+ .noCryptoConfig())
+ .build())
+ .extension(PostgresExtension.empty())
+ .extension(new RabbitMQExtension())
+ .server(configuration -> PostgresJamesServerMain.createServer(configuration)
+ .overrideWith(new TestJMAPServerModule())
+ .overrideWith(new DelegationProbeModule())
+ .overrideWith(new IdentityProbeModule())
+ .overrideWith(new QuotaGetMethodProbeModule())
+ .overrideWith(new JmapPreviewProbeModule()))
+ .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
+ .build();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org