From 5ef161d39462fb04864af739f6ef02677e0c4d34 Mon Sep 17 00:00:00 2001 From: Rene Cordier Date: Fri, 30 Jan 2026 16:48:04 +0700 Subject: [PATCH 1/6] WIP JAMES-4167 Triage rustf --- .../blob/objectstorage/aws/S3MinioDocker.java | 55 +++++++------------ .../objectstorage/aws/S3MinioExtension.java | 5 -- .../blob/objectstorage/aws/S3MinioTest.java | 47 ++-------------- 3 files changed, 24 insertions(+), 83 deletions(-) diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java index d53482a39f2..adaa09878d0 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java @@ -19,6 +19,8 @@ package org.apache.james.blob.objectstorage.aws; +import static java.util.Collections.singletonMap; + import java.time.Duration; import java.util.UUID; @@ -34,13 +36,12 @@ public class S3MinioDocker { - public static final DockerImageName DOCKER_IMAGE_NAME = DockerImageName.parse("minio/minio") - .withTag("RELEASE.2025-06-13T11-33-47Z"); + public static final DockerImageName DOCKER_IMAGE_NAME = DockerImageName.parse("rustfs/rustfs") + .withTag("1.0.0-alpha.81"); - public static final int MINIO_PORT = 9000; - public static final int MINIO_WEB_ADMIN_PORT = 9090; - public static final String MINIO_ROOT_USER = "minio"; - public static final String MINIO_ROOT_PASSWORD = "minio123"; + public static final int S3_PORT = 9000; + public static final String S3_ACCESS_KEY = "testaccesskey"; + public static final String S3_SECRET_KEY = "testsecretkey"; private final GenericContainer container; @@ -55,25 +56,21 @@ public S3MinioDocker(Network network) { private GenericContainer getContainer() { return new GenericContainer<>(DOCKER_IMAGE_NAME) - .withExposedPorts(MINIO_PORT, MINIO_WEB_ADMIN_PORT) - .withEnv("MINIO_ROOT_USER", MINIO_ROOT_USER) - .withEnv("MINIO_ROOT_PASSWORD", MINIO_ROOT_PASSWORD) - .withCommand("server", "--certs-dir", "/opt/minio/certs", "/data", "--console-address", ":" + MINIO_WEB_ADMIN_PORT) - .withClasspathResourceMapping("/minio/private.key", - "/opt/minio/certs/private.key", - BindMode.READ_ONLY) - .withClasspathResourceMapping("/minio/public.crt", - "/opt/minio/certs/public.crt", - BindMode.READ_ONLY) - .waitingFor(Wait.forLogMessage(".*MinIO Object Storage Server.*", 1) + .withExposedPorts(S3_PORT) + .withEnv("RUSTFS_ACCESS_KEY", S3_ACCESS_KEY) + .withEnv("RUSTFS_SECRET_KEY", S3_SECRET_KEY) + .withEnv("RUSTFS_VOLUMES", "/data/rustfs{0..3}") + .withTmpFs(singletonMap("/data", "rw,mode=1777")) + //.waitingFor(Wait.forLogMessage(".*started successfully.*", 1) + .waitingFor(Wait.forLogMessage(".*Console WebUI.*", 2) .withStartupTimeout(Duration.ofMinutes(2))) - .withCreateContainerCmdModifier(createContainerCmd -> createContainerCmd.withName("james-minio-s3-test-" + UUID.randomUUID())); +// .withCreateContainerCmdModifier(createContainerCmd -> createContainerCmd.withName("james-rustfs-s3-test-" + UUID.randomUUID())); + .withCreateContainerCmdModifier(createContainerCmd -> createContainerCmd.withName("james-rustfs-s3-test")); } public void start() { if (!container.isRunning()) { container.start(); - setupMC(); } } @@ -85,25 +82,13 @@ public AwsS3AuthConfiguration getAwsS3AuthConfiguration() { Preconditions.checkArgument(container.isRunning(), "Container is not running"); return AwsS3AuthConfiguration.builder() .endpoint(Throwing.supplier(() -> new URIBuilder() - .setScheme("https") + .setScheme("http") .setHost(container.getHost()) - .setPort(container.getMappedPort(MINIO_PORT)) + .setPort(container.getMappedPort(S3_PORT)) .build()).get()) - .accessKeyId(MINIO_ROOT_USER) - .secretKey(MINIO_ROOT_PASSWORD) + .accessKeyId(S3_ACCESS_KEY) + .secretKey(S3_SECRET_KEY) .trustAll(true) .build(); } - - private void setupMC() { - Preconditions.checkArgument(container.isRunning(), "Container is not running"); - Throwing.runnable(() -> container.execInContainer("mc", "alias", "set", "--insecure", "james", "https://localhost:9000", MINIO_ROOT_USER, MINIO_ROOT_PASSWORD)).run(); - } - - public void flushAll() { - // Remove all objects - Throwing.runnable(() -> container.execInContainer("mc", "--insecure", "rm", "--recursive", "--force", "--dangerous", "james/")).run(); - // Remove all buckets - Throwing.runnable(() -> container.execInContainer("mc", "--insecure", "rb", "--force", "--dangerous", "james/")).run(); - } } diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioExtension.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioExtension.java index 12d95b3170b..833d1889871 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioExtension.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioExtension.java @@ -38,11 +38,6 @@ public void afterAll(ExtensionContext extensionContext) { s3MinioDocker.stop(); } - @Override - public void afterEach(ExtensionContext extensionContext) { - s3MinioDocker.flushAll(); - } - @Override public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { return parameterContext.getParameter().getType() == S3MinioDocker.class; diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioTest.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioTest.java index dc4a4e3ba3b..c2631241c36 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioTest.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioTest.java @@ -24,28 +24,23 @@ import static org.apache.james.blob.api.BlobStoreDAOFixture.TEST_BUCKET_NAME; import static org.apache.james.blob.objectstorage.aws.S3BlobStoreConfiguration.UPLOAD_RETRY_EXCEPTION_PREDICATE; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import java.util.Optional; -import java.util.concurrent.ExecutionException; -import org.apache.james.blob.api.BlobId; import org.apache.james.blob.api.BlobStoreDAO; import org.apache.james.blob.api.BlobStoreDAOContract; import org.apache.james.blob.api.TestBlobId; import org.apache.james.metrics.api.NoopGaugeRegistry; import org.apache.james.metrics.tests.RecordingMetricFactory; import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; -import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.util.retry.Retry; -import software.amazon.awssdk.services.s3.model.S3Exception; public class S3MinioTest implements BlobStoreDAOContract { @@ -75,24 +70,9 @@ static void tearDownClass() { s3ClientFactory.close(); } - @BeforeEach - void beforeEach() throws Exception { - // Why? https://github.com/apache/james-project/pull/1981#issuecomment-2380396460 - createBucket(TEST_BUCKET_NAME.asString()); - } - - private void createBucket(String bucketName) throws Exception { - s3ClientFactory.get().createBucket(builder -> builder.bucket(bucketName)) - .get(); - } - - private void deleteBucket(String bucketName) { - try { - s3ClientFactory.get().deleteBucket(builder -> builder.bucket(bucketName)) - .get(); - } catch (InterruptedException | ExecutionException e) { - throw new RuntimeException("Error while deleting bucket", e); - } + @AfterEach + void tearDown() { + testee.deleteAllBuckets().block(); } @Override @@ -100,31 +80,12 @@ public BlobStoreDAO testee() { return testee; } - @Test - void saveWillThrowWhenBlobIdHasSlashCharacters() { - BlobId invalidBlobId = new TestBlobId("test-blob//id"); - assertThatThrownBy(() -> Mono.from(testee.save(TEST_BUCKET_NAME, invalidBlobId, SHORT_BYTEARRAY)).block()) - .isInstanceOf(S3Exception.class) - .hasMessageContaining("Object name contains unsupported characters"); - } - @Test void saveShouldWorkWhenValidBlobId() { Mono.from(testee.save(TEST_BUCKET_NAME, TEST_BLOB_ID, SHORT_BYTEARRAY)).block(); assertThat(Mono.from(testee.readBytes(TEST_BUCKET_NAME, TEST_BLOB_ID)).block()).isEqualTo(SHORT_BYTEARRAY); } - @Test - @Override - public void listBucketsShouldReturnEmptyWhenNone() { - deleteBucket(TEST_BUCKET_NAME.asString()); - - BlobStoreDAO store = testee(); - - assertThat(Flux.from(store.listBuckets()).collectList().block()) - .isEmpty(); - } - @Test @Override @Disabled("S3minio return `Connection: close` in header response, https://github.com/apache/james-project/pull/1981#issuecomment-2380396460") From 75246612f335d5b586be0b6a69f85e5a3ec37ce3 Mon Sep 17 00:00:00 2001 From: Rene Cordier Date: Mon, 2 Feb 2026 10:35:14 +0700 Subject: [PATCH 2/6] fixup! WIP JAMES-4167 Triage rustf --- .../apache/james/blob/objectstorage/aws/S3MinioDocker.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java index adaa09878d0..cd94da4614a 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java @@ -25,7 +25,6 @@ import java.util.UUID; import org.apache.http.client.utils.URIBuilder; -import org.testcontainers.containers.BindMode; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.Network; import org.testcontainers.containers.wait.strategy.Wait; @@ -61,11 +60,9 @@ private GenericContainer getContainer() { .withEnv("RUSTFS_SECRET_KEY", S3_SECRET_KEY) .withEnv("RUSTFS_VOLUMES", "/data/rustfs{0..3}") .withTmpFs(singletonMap("/data", "rw,mode=1777")) - //.waitingFor(Wait.forLogMessage(".*started successfully.*", 1) .waitingFor(Wait.forLogMessage(".*Console WebUI.*", 2) .withStartupTimeout(Duration.ofMinutes(2))) -// .withCreateContainerCmdModifier(createContainerCmd -> createContainerCmd.withName("james-rustfs-s3-test-" + UUID.randomUUID())); - .withCreateContainerCmdModifier(createContainerCmd -> createContainerCmd.withName("james-rustfs-s3-test")); + .withCreateContainerCmdModifier(createContainerCmd -> createContainerCmd.withName("james-rustfs-s3-test-" + UUID.randomUUID())); } public void start() { From a82e43c519fdc1a1a447b1ba0e6fdb0a93e569cf Mon Sep 17 00:00:00 2001 From: Rene Cordier Date: Wed, 4 Feb 2026 13:52:00 +0700 Subject: [PATCH 3/6] fixup! WIP JAMES-4167 Triage rustf --- .../org/apache/james/blob/objectstorage/aws/S3MinioDocker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java index cd94da4614a..30f4d6b950c 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java @@ -58,7 +58,7 @@ private GenericContainer getContainer() { .withExposedPorts(S3_PORT) .withEnv("RUSTFS_ACCESS_KEY", S3_ACCESS_KEY) .withEnv("RUSTFS_SECRET_KEY", S3_SECRET_KEY) - .withEnv("RUSTFS_VOLUMES", "/data/rustfs{0..3}") + .withEnv("RUSTFS_LOCK_ACQUIRE_TIMEOUT", "120") .withTmpFs(singletonMap("/data", "rw,mode=1777")) .waitingFor(Wait.forLogMessage(".*Console WebUI.*", 2) .withStartupTimeout(Duration.ofMinutes(2))) From 12ffc40b0eb3c6103b6a50d1c92e9adca2a31885 Mon Sep 17 00:00:00 2001 From: Rene Cordier Date: Wed, 4 Feb 2026 15:02:17 +0700 Subject: [PATCH 4/6] fixup! WIP JAMES-4167 Triage rustf --- .../james/blob/api/ReadSaveBlobStoreDAOContract.java | 2 +- .../aws/S3MinioBlobStoreGCAlgorithmTest.java | 9 ++++++++- .../james/blob/objectstorage/aws/S3MinioDocker.java | 1 + .../james/blob/objectstorage/aws/S3MinioTest.java | 1 + .../aws/sse/S3BlobStoreDAOWithSSECTest.java | 10 ++++------ 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ReadSaveBlobStoreDAOContract.java b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ReadSaveBlobStoreDAOContract.java index bf91ac9f2b7..c37d7a8a3b4 100644 --- a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ReadSaveBlobStoreDAOContract.java +++ b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ReadSaveBlobStoreDAOContract.java @@ -328,7 +328,7 @@ default void listShouldReturnPresentBlobs() { } static Stream blobs() { - return Stream.of(new Object[]{"SHORT", SHORT_BYTEARRAY}, new Object[]{"LONG", ELEVEN_KILOBYTES}, new Object[]{"BIG", TWELVE_MEGABYTES}) + return Stream.of(new Object[]{"SHORT", SHORT_BYTEARRAY}, new Object[]{"LONG", ELEVEN_KILOBYTES}) .map(Arguments::of); } diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioBlobStoreGCAlgorithmTest.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioBlobStoreGCAlgorithmTest.java index 7110e728577..ce8ef5073c0 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioBlobStoreGCAlgorithmTest.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioBlobStoreGCAlgorithmTest.java @@ -31,6 +31,7 @@ import org.apache.james.server.blob.deduplication.BloomFilterGCAlgorithmContract; import org.apache.james.server.blob.deduplication.GenerationAwareBlobId; import org.apache.james.server.blob.deduplication.MinIOGenerationAwareBlobId; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.extension.RegisterExtension; @@ -38,7 +39,7 @@ public class S3MinioBlobStoreGCAlgorithmTest implements BloomFilterGCAlgorithmContract { - private BlobStoreDAO blobStoreDAO; + private S3BlobStoreDAO blobStoreDAO; @RegisterExtension static S3MinioExtension minoExtension = new S3MinioExtension(); @@ -52,6 +53,7 @@ void beforeEach() { .region(DockerAwsS3Container.REGION) .uploadRetrySpec(Optional.of(Retry.backoff(3, java.time.Duration.ofSeconds(1)) .filter(UPLOAD_RETRY_EXCEPTION_PREDICATE))) + .httpConcurrency(Optional.of(200)) .build(); S3ClientFactory s3ClientFactory = new S3ClientFactory(s3Configuration, new RecordingMetricFactory(), new NoopGaugeRegistry()); @@ -61,6 +63,11 @@ void beforeEach() { blobStoreDAO = new S3BlobStoreDAO(s3ClientFactory, s3Configuration, minIOGenerationAwareBlobIdFactory, S3RequestOption.DEFAULT); } + @AfterEach + void tearDown() { + blobStoreDAO.deleteAllBuckets().block(); + } + @Override public BlobStoreDAO blobStoreDAO() { return blobStoreDAO; diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java index 30f4d6b950c..25dfe90a3b2 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java @@ -32,6 +32,7 @@ import com.github.fge.lambdas.Throwing; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; public class S3MinioDocker { diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioTest.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioTest.java index c2631241c36..c4787518f15 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioTest.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioTest.java @@ -25,6 +25,7 @@ import static org.apache.james.blob.objectstorage.aws.S3BlobStoreConfiguration.UPLOAD_RETRY_EXCEPTION_PREDICATE; import static org.assertj.core.api.Assertions.assertThat; +import java.time.Duration; import java.util.Optional; import org.apache.james.blob.api.BlobStoreDAO; diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/sse/S3BlobStoreDAOWithSSECTest.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/sse/S3BlobStoreDAOWithSSECTest.java index 4c55a699fa6..c5c13a69c93 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/sse/S3BlobStoreDAOWithSSECTest.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/sse/S3BlobStoreDAOWithSSECTest.java @@ -39,8 +39,8 @@ import org.apache.james.blob.objectstorage.aws.S3RequestOption; import org.apache.james.metrics.api.NoopGaugeRegistry; import org.apache.james.metrics.tests.RecordingMetricFactory; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -75,11 +75,9 @@ static void setUp() throws Exception { testee = new S3BlobStoreDAO(s3ClientFactory, s3Configuration, new TestBlobId.Factory(), s3RequestOption); } - @BeforeEach - void beforeEach() throws Exception { - // Why? https://github.com/apache/james-project/pull/1981#issuecomment-2380396460 - s3ClientFactory.get().createBucket(builder -> builder.bucket(TEST_BUCKET_NAME.asString())) - .get(); + @AfterEach + void tearDown() { + testee.deleteAllBuckets().block(); } @Override From ddd04cafa6a8d08fcaa564c3c3f38820ef351b95 Mon Sep 17 00:00:00 2001 From: Rene Cordier Date: Wed, 4 Feb 2026 15:11:12 +0700 Subject: [PATCH 5/6] fixup! WIP JAMES-4167 Triage rustf --- .../org/apache/james/blob/objectstorage/aws/S3MinioDocker.java | 1 - .../org/apache/james/blob/objectstorage/aws/S3MinioTest.java | 1 - 2 files changed, 2 deletions(-) diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java index 25dfe90a3b2..30f4d6b950c 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java @@ -32,7 +32,6 @@ import com.github.fge.lambdas.Throwing; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableMap; public class S3MinioDocker { diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioTest.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioTest.java index c4787518f15..c2631241c36 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioTest.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioTest.java @@ -25,7 +25,6 @@ import static org.apache.james.blob.objectstorage.aws.S3BlobStoreConfiguration.UPLOAD_RETRY_EXCEPTION_PREDICATE; import static org.assertj.core.api.Assertions.assertThat; -import java.time.Duration; import java.util.Optional; import org.apache.james.blob.api.BlobStoreDAO; From 410078c84b3af9eb071aa93a63dbdc5263947898 Mon Sep 17 00:00:00 2001 From: Rene Cordier Date: Thu, 5 Feb 2026 10:38:35 +0700 Subject: [PATCH 6/6] fixup! WIP JAMES-4167 Triage rustf --- .../org/apache/james/blob/api/ReadSaveBlobStoreDAOContract.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ReadSaveBlobStoreDAOContract.java b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ReadSaveBlobStoreDAOContract.java index c37d7a8a3b4..bf91ac9f2b7 100644 --- a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ReadSaveBlobStoreDAOContract.java +++ b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ReadSaveBlobStoreDAOContract.java @@ -328,7 +328,7 @@ default void listShouldReturnPresentBlobs() { } static Stream blobs() { - return Stream.of(new Object[]{"SHORT", SHORT_BYTEARRAY}, new Object[]{"LONG", ELEVEN_KILOBYTES}) + return Stream.of(new Object[]{"SHORT", SHORT_BYTEARRAY}, new Object[]{"LONG", ELEVEN_KILOBYTES}, new Object[]{"BIG", TWELVE_MEGABYTES}) .map(Arguments::of); }