You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2021/04/15 04:49:00 UTC
[james-project] 01/01: Test branch against S3
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch blobstore-test-s3
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit e51b64f8226a53fbd68d8a936f81b9bc8ddf2827
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Thu Apr 15 11:48:34 2021 +0700
Test branch against S3
---
.../james/blob/api/BlobStoreDAOContract.java | 2 +-
.../apache/james/blob/api/BlobStoreDAOFixture.java | 2 +-
.../blob/api/ReadSaveBlobStoreDAOContract.java | 37 ++++++++++++++++++++--
.../blob/objectstorage/aws/S3BlobStoreDAOTest.java | 6 ++--
4 files changed, 39 insertions(+), 8 deletions(-)
diff --git a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreDAOContract.java b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreDAOContract.java
index 1276f78..f4e5dec 100644
--- a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreDAOContract.java
+++ b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreDAOContract.java
@@ -18,5 +18,5 @@
****************************************************************/
package org.apache.james.blob.api;
-public interface BlobStoreDAOContract extends ReadSaveBlobStoreDAOContract, DeleteBlobStoreDAOContract, BucketBlobStoreDAOContract {
+public interface BlobStoreDAOContract extends ReadSaveBlobStoreDAOContract, DeleteBlobStoreDAOContract {
}
diff --git a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreDAOFixture.java b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreDAOFixture.java
index ca03d46..fa2e1e6 100644
--- a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreDAOFixture.java
+++ b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreDAOFixture.java
@@ -23,7 +23,7 @@ import java.nio.charset.StandardCharsets;
import com.google.common.base.Strings;
public interface BlobStoreDAOFixture {
- BucketName TEST_BUCKET_NAME = BucketName.of("my-test-bucket");
+ BucketName TEST_BUCKET_NAME = BucketName.of("james-upn");
BucketName CUSTOM_BUCKET_NAME = BucketName.of("custom");
BlobId TEST_BLOB_ID = new TestBlobId("test-blob-id");
BlobId OTHER_TEST_BLOB_ID = new TestBlobId("other-test-blob-id");
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 2c6570a..79baaba 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
@@ -36,6 +36,7 @@ import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.Arrays;
+import java.util.UUID;
import java.util.concurrent.ExecutionException;
import java.util.stream.Stream;
@@ -336,7 +337,7 @@ public interface ReadSaveBlobStoreDAOContract {
)
.threadCount(10)
.operationCount(20)
- .runSuccessfullyWithin(Duration.ofMinutes(2));
+ .runSuccessfullyWithin(Duration.ofMinutes(10));
}
@ParameterizedTest(name = "[{index}] {0}")
@@ -348,11 +349,41 @@ public interface ReadSaveBlobStoreDAOContract {
(threadNumber, step) -> testee().save(TEST_BUCKET_NAME, TEST_BLOB_ID, ByteSource.wrap(bytes)),
(threadNumber, step) -> checkConcurrentSaveOperation(bytes)
)
- .threadCount(10)
- .operationCount(20)
+ .threadCount(2)
+ .operationCount(2)
.runSuccessfullyWithin(Duration.ofMinutes(2));
}
+ @ParameterizedTest(name = "[{index}] {0}")
+ @MethodSource("blobs")
+ default void testIsolation(String description, byte[] bytes) throws ExecutionException, InterruptedException {
+ Mono.from(testee().save(TEST_BUCKET_NAME, TEST_BLOB_ID, bytes)).block();
+ ConcurrentTestRunner.builder()
+ .operation((threadNumber, step) -> {
+ if (threadNumber == 1) {
+ testee().save(TEST_BUCKET_NAME, TEST_BLOB_ID, ByteSource.wrap(bytes));
+ } else {
+ checkConcurrentSaveOperation(bytes);
+ }
+ })
+ .threadCount(2)
+ .operationCount(4)
+ .runSuccessfullyWithin(Duration.ofMinutes(10));
+ }
+
+ @ParameterizedTest(name = "[{index}] {0}")
+ @MethodSource("blobs")
+ default void parrallel(String description, byte[] bytes) throws ExecutionException, InterruptedException {
+ Mono.from(testee().save(TEST_BUCKET_NAME, TEST_BLOB_ID, bytes)).block();
+ ConcurrentTestRunner.builder()
+ .operation(
+ (threadNumber, step) -> testee().save(TEST_BUCKET_NAME, new TestBlobId(UUID.randomUUID().toString()), ByteSource.wrap(bytes))
+ )
+ .threadCount(10)
+ .operationCount(2)
+ .runSuccessfullyWithin(Duration.ofMinutes(10));
+ }
+
default Mono<Void> checkConcurrentSaveOperation(byte[] expected) {
return Mono.from(testee().readBytes(TEST_BUCKET_NAME, TEST_BLOB_ID))
//assertj is very cpu-intensive, let's compute the assertion only when arrays are different
diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreDAOTest.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreDAOTest.java
index e426926..4ad3041 100644
--- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreDAOTest.java
+++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreDAOTest.java
@@ -18,14 +18,14 @@
****************************************************************/
package org.apache.james.blob.objectstorage.aws;
+import java.net.URI;
+
import org.apache.james.blob.api.BlobStoreDAO;
import org.apache.james.blob.api.BlobStoreDAOContract;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.extension.ExtendWith;
-@ExtendWith(DockerAwsS3Extension.class)
public class S3BlobStoreDAOTest implements BlobStoreDAOContract {
private static S3BlobStoreDAO testee;
@@ -47,7 +47,7 @@ public class S3BlobStoreDAOTest implements BlobStoreDAOContract {
@AfterEach
void tearDown() {
- testee.deleteAllBuckets().block();
+ // testee.deleteAllBuckets().block();
}
@AfterAll
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org