You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2026/07/15 10:17:54 UTC
(james-project) 39/39: [BUILD] ProvisioningContract: isolate using different users
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 3294aacee39dd122c5d3a63a1306eda8fc15a600
Author: Quan Tran <hq...@linagora.com>
AuthorDate: Tue Jul 14 12:08:08 2026 +0700
[BUILD] ProvisioningContract: isolate using different users
Use a generated Basic-auth user and account per test while retaining the fixed signed JWT fixture. Reuse servers for Memory, Postgres, and Distributed implementors.
---
.../distributed/DistributedProvisioningTest.java | 2 +-
.../rfc8621/contract/ProvisioningContract.scala | 38 +++++++++++++++++++---
.../rfc8621/memory/MemoryProvisioningTest.java | 2 +-
.../rfc8621/postgres/PostgresProvisioningTest.java | 2 +-
4 files changed, 36 insertions(+), 8 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/DistributedProvisioningTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java
index 132c540614..3393cf1246 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java
@@ -21,6 +21,6 @@ package org.apache.james.jmap.rfc8621.distributed;
import org.apache.james.jmap.rfc8621.contract.ProvisioningContract;
-public class DistributedProvisioningTest extends DistributedBase implements ProvisioningContract {
+public class DistributedProvisioningTest extends PerClassDistributedBase implements ProvisioningContract {
}
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/ProvisioningContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/ProvisioningContract.scala
index baa67e2bb3..131b6ad264 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/ProvisioningContract.scala
+++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/ProvisioningContract.scala
@@ -19,13 +19,18 @@
package org.apache.james.jmap.rfc8621.contract
+import java.util.UUID
+import java.util.concurrent.atomic.AtomicReference
+
import io.netty.handler.codec.http.HttpHeaderNames.ACCEPT
import io.restassured.RestAssured.{`given`, requestSpecification}
import io.restassured.authentication.NoAuthScheme
import io.restassured.http.Header
import org.apache.http.HttpStatus.SC_OK
import org.apache.james.GuiceJamesServer
-import org.apache.james.jmap.rfc8621.contract.Fixture._
+import org.apache.james.core.Username
+import org.apache.james.jmap.core.AccountId
+import org.apache.james.jmap.rfc8621.contract.Fixture.{ACCEPT_RFC8621_VERSION_HEADER, AUTHORIZATION_HEADER, BOB_PASSWORD, DOMAIN, USER, USER_TOKEN, baseRequestSpecBuilder, toBase64}
import org.apache.james.jmap.rfc8621.contract.tags.CategoryTags
import org.apache.james.mailbox.DefaultMailboxes
import org.apache.james.utils.DataProbeImpl
@@ -35,17 +40,40 @@ import org.junit.jupiter.api.{BeforeEach, Tag, Test}
object ProvisioningContract {
private val ARGUMENTS: String = "methodResponses[0][1]"
+
+ case class TestContext(bobAccountId: String, bobBasicAuthHeader: Header)
+
+ val currentContext: AtomicReference[TestContext] = new AtomicReference[TestContext]()
}
trait ProvisioningContract {
import ProvisioningContract._
+ private def getAllMailboxesRequest(accountId: String): String =
+ s"""{
+ | "using": [
+ | "urn:ietf:params:jmap:core",
+ | "urn:ietf:params:jmap:mail"],
+ | "methodCalls": [[
+ | "Mailbox/get",
+ | {
+ | "accountId": "$accountId",
+ | "ids": null
+ | },
+ | "c1"]]
+ |}""".stripMargin
+
@BeforeEach
def setup(server: GuiceJamesServer): Unit = {
+ val bob = Username.fromLocalPartWithDomain(s"bob${UUID.randomUUID().toString.replace("-", "").take(8)}", DOMAIN)
+ val bobAccountId = AccountId.from(bob).toOption.get.id.value
+ val bobBasicAuthHeader = new Header(AUTHORIZATION_HEADER, s"Basic ${toBase64(s"${bob.asString}:$BOB_PASSWORD")}")
+ currentContext.set(TestContext(bobAccountId, bobBasicAuthHeader))
+
server.getProbe(classOf[DataProbeImpl])
.fluent
.addDomain(DOMAIN.asString)
- .addUser(BOB.asString, BOB_PASSWORD)
+ .addUser(bob.asString, BOB_PASSWORD)
requestSpecification = baseRequestSpecBuilder(server)
.setAuth(new NoAuthScheme())
@@ -58,7 +86,7 @@ trait ProvisioningContract {
`given`
.header(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER)
.header(new Header(AUTHORIZATION_HEADER, s"Bearer $USER_TOKEN"))
- .body(GET_ALL_MAILBOXES_REQUEST)
+ .body(getAllMailboxesRequest(currentContext.get().bobAccountId))
.when
.post
@@ -71,8 +99,8 @@ trait ProvisioningContract {
def provisionMailboxesShouldCreateMissingMailboxes(): Unit = {
`given`
.header(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER)
- .header(BOB_BASIC_AUTH_HEADER)
- .body(GET_ALL_MAILBOXES_REQUEST)
+ .header(currentContext.get().bobBasicAuthHeader)
+ .body(getAllMailboxesRequest(currentContext.get().bobAccountId))
.when
.post
.`then`
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/MemoryProvisioningTest.java b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryProvisioningTest.java
index 6afccc6da2..aa49474790 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryProvisioningTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryProvisioningTest.java
@@ -21,6 +21,6 @@ package org.apache.james.jmap.rfc8621.memory;
import org.apache.james.jmap.rfc8621.contract.ProvisioningContract;
-class MemoryProvisioningTest extends MemoryBase implements ProvisioningContract {
+class MemoryProvisioningTest extends PerClassMemoryBase implements ProvisioningContract {
}
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/PostgresProvisioningTest.java b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresProvisioningTest.java
index 83877ba90e..00e09b2139 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresProvisioningTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresProvisioningTest.java
@@ -21,5 +21,5 @@ package org.apache.james.jmap.rfc8621.postgres;
import org.apache.james.jmap.rfc8621.contract.ProvisioningContract;
-public class PostgresProvisioningTest extends PostgresBase implements ProvisioningContract {
+public class PostgresProvisioningTest extends PerClassPostgresBase implements ProvisioningContract {
}
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org