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 <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
