This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 700dfec5e5f29304275ddf0803da6f9fa6ae7ba2 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Tue Jan 7 14:19:25 2020 +0700 JAMES-2921 BlobStoreContract should test all storage policies basic behaviour --- server/blob/blob-api/pom.xml | 5 + .../apache/james/blob/api/BlobStoreContract.java | 118 +++++++++++++-------- server/blob/blob-cassandra/pom.xml | 5 + server/blob/blob-memory/pom.xml | 5 + 4 files changed, 88 insertions(+), 45 deletions(-) diff --git a/server/blob/blob-api/pom.xml b/server/blob/blob-api/pom.xml index f4ebecc..9a8c946 100644 --- a/server/blob/blob-api/pom.xml +++ b/server/blob/blob-api/pom.xml @@ -65,6 +65,11 @@ <artifactId>commons-lang3</artifactId> </dependency> <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-params</artifactId> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <scope>test</scope> diff --git a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreContract.java b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreContract.java index df822b1..2067d70 100644 --- a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreContract.java +++ b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreContract.java @@ -19,20 +19,33 @@ package org.apache.james.blob.api; +import static org.apache.james.blob.api.BlobStore.StoragePolicy.HIGH_PERFORMANCE; import static org.apache.james.blob.api.BlobStore.StoragePolicy.LOW_COST; +import static org.apache.james.blob.api.BlobStore.StoragePolicy.SIZE_BASED; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.charset.StandardCharsets; +import java.util.stream.Stream; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import com.google.common.base.Strings; public interface BlobStoreContract extends DeleteBlobStoreContract, BucketBlobStoreContract { + static Stream<Arguments> storagePolicies() { + return Stream.of( + Arguments.arguments(LOW_COST), + Arguments.arguments(SIZE_BASED), + Arguments.arguments(HIGH_PERFORMANCE)); + } + String SHORT_STRING = "toto"; byte[] EMPTY_BYTEARRAY = {}; byte[] SHORT_BYTEARRAY = SHORT_STRING.getBytes(StandardCharsets.UTF_8); @@ -43,95 +56,104 @@ public interface BlobStoreContract extends DeleteBlobStoreContract, BucketBlobSt BlobId.Factory blobIdFactory(); - @Test - default void saveShouldThrowWhenNullData() { + @ParameterizedTest + @MethodSource("storagePolicies") + default void saveShouldThrowWhenNullData(BlobStore.StoragePolicy storagePolicy) { BlobStore store = testee(); BucketName defaultBucketName = store.getDefaultBucketName(); - assertThatThrownBy(() -> store.save(defaultBucketName, (byte[]) null, LOW_COST).block()) + assertThatThrownBy(() -> store.save(defaultBucketName, (byte[]) null, storagePolicy).block()) .isInstanceOf(NullPointerException.class); } - @Test - default void saveShouldThrowWhenNullString() { + @ParameterizedTest + @MethodSource("storagePolicies") + default void saveShouldThrowWhenNullString(BlobStore.StoragePolicy storagePolicy) { BlobStore store = testee(); BucketName defaultBucketName = store.getDefaultBucketName(); - assertThatThrownBy(() -> store.save(defaultBucketName, (String) null, LOW_COST).block()) + assertThatThrownBy(() -> store.save(defaultBucketName, (String) null, storagePolicy).block()) .isInstanceOf(NullPointerException.class); } - @Test - default void saveShouldThrowWhenNullInputStream() { + @ParameterizedTest + @MethodSource("storagePolicies") + default void saveShouldThrowWhenNullInputStream(BlobStore.StoragePolicy storagePolicy) { BlobStore store = testee(); BucketName defaultBucketName = store.getDefaultBucketName(); - assertThatThrownBy(() -> store.save(defaultBucketName, (InputStream) null, LOW_COST).block()) + assertThatThrownBy(() -> store.save(defaultBucketName, (InputStream) null, storagePolicy).block()) .isInstanceOf(NullPointerException.class); } - @Test - default void saveShouldSaveEmptyData() { + @ParameterizedTest + @MethodSource("storagePolicies") + default void saveShouldSaveEmptyData(BlobStore.StoragePolicy storagePolicy) { BlobStore store = testee(); BucketName defaultBucketName = store.getDefaultBucketName(); - BlobId blobId = store.save(defaultBucketName, EMPTY_BYTEARRAY, LOW_COST).block(); + BlobId blobId = store.save(defaultBucketName, EMPTY_BYTEARRAY, storagePolicy).block(); byte[] bytes = store.readBytes(defaultBucketName, blobId).block(); assertThat(new String(bytes, StandardCharsets.UTF_8)).isEmpty(); } - @Test - default void saveShouldSaveEmptyString() { + @ParameterizedTest + @MethodSource("storagePolicies") + default void saveShouldSaveEmptyString(BlobStore.StoragePolicy storagePolicy) { BlobStore store = testee(); BucketName defaultBucketName = store.getDefaultBucketName(); - BlobId blobId = store.save(defaultBucketName, new String(), LOW_COST).block(); + BlobId blobId = store.save(defaultBucketName, new String(), storagePolicy).block(); byte[] bytes = store.readBytes(defaultBucketName, blobId).block(); assertThat(new String(bytes, StandardCharsets.UTF_8)).isEmpty(); } - @Test - default void saveShouldSaveEmptyInputStream() { + @ParameterizedTest + @MethodSource("storagePolicies") + default void saveShouldSaveEmptyInputStream(BlobStore.StoragePolicy storagePolicy) { BlobStore store = testee(); BucketName defaultBucketName = store.getDefaultBucketName(); - BlobId blobId = store.save(defaultBucketName, new ByteArrayInputStream(EMPTY_BYTEARRAY), LOW_COST).block(); + BlobId blobId = store.save(defaultBucketName, new ByteArrayInputStream(EMPTY_BYTEARRAY), storagePolicy).block(); byte[] bytes = store.readBytes(defaultBucketName, blobId).block(); assertThat(new String(bytes, StandardCharsets.UTF_8)).isEmpty(); } - @Test - default void saveShouldReturnBlobId() { + @ParameterizedTest + @MethodSource("storagePolicies") + default void saveShouldReturnBlobId(BlobStore.StoragePolicy storagePolicy) { BlobStore store = testee(); BucketName defaultBucketName = store.getDefaultBucketName(); - BlobId blobId = store.save(defaultBucketName, SHORT_BYTEARRAY, LOW_COST).block(); + BlobId blobId = store.save(defaultBucketName, SHORT_BYTEARRAY, storagePolicy).block(); assertThat(blobId).isEqualTo(blobIdFactory().from("31f7a65e315586ac198bd798b6629ce4903d0899476d5741a9f32e2e521b6a66")); } - @Test - default void saveShouldReturnBlobIdOfString() { + @ParameterizedTest + @MethodSource("storagePolicies") + default void saveShouldReturnBlobIdOfString(BlobStore.StoragePolicy storagePolicy) { BlobStore store = testee(); BucketName defaultBucketName = store.getDefaultBucketName(); - BlobId blobId = store.save(defaultBucketName, SHORT_STRING, LOW_COST).block(); + BlobId blobId = store.save(defaultBucketName, SHORT_STRING, storagePolicy).block(); assertThat(blobId).isEqualTo(blobIdFactory().from("31f7a65e315586ac198bd798b6629ce4903d0899476d5741a9f32e2e521b6a66")); } - @Test - default void saveShouldReturnBlobIdOfInputStream() { + @ParameterizedTest + @MethodSource("storagePolicies") + default void saveShouldReturnBlobIdOfInputStream(BlobStore.StoragePolicy storagePolicy) { BlobStore store = testee(); BucketName defaultBucketName = store.getDefaultBucketName(); - BlobId blobId = store.save(defaultBucketName, new ByteArrayInputStream(SHORT_BYTEARRAY), LOW_COST).block(); + BlobId blobId = store.save(defaultBucketName, new ByteArrayInputStream(SHORT_BYTEARRAY), storagePolicy).block(); assertThat(blobId).isEqualTo(blobIdFactory().from("31f7a65e315586ac198bd798b6629ce4903d0899476d5741a9f32e2e521b6a66")); } @@ -145,36 +167,39 @@ public interface BlobStoreContract extends DeleteBlobStoreContract, BucketBlobSt .isExactlyInstanceOf(ObjectNotFoundException.class); } - @Test - default void readBytesShouldReturnSavedData() { + @ParameterizedTest + @MethodSource("storagePolicies") + default void readBytesShouldReturnSavedData(BlobStore.StoragePolicy storagePolicy) { BlobStore store = testee(); BucketName defaultBucketName = store.getDefaultBucketName(); - BlobId blobId = store.save(defaultBucketName, SHORT_BYTEARRAY, LOW_COST).block(); + BlobId blobId = store.save(defaultBucketName, SHORT_BYTEARRAY, storagePolicy).block(); byte[] bytes = store.readBytes(defaultBucketName, blobId).block(); assertThat(bytes).isEqualTo(SHORT_BYTEARRAY); } - @Test - default void readBytesShouldReturnLongSavedData() { + @ParameterizedTest + @MethodSource("storagePolicies") + default void readBytesShouldReturnLongSavedData(BlobStore.StoragePolicy storagePolicy) { BlobStore store = testee(); BucketName defaultBucketName = store.getDefaultBucketName(); - BlobId blobId = store.save(defaultBucketName, ELEVEN_KILOBYTES, LOW_COST).block(); + BlobId blobId = store.save(defaultBucketName, ELEVEN_KILOBYTES, storagePolicy).block(); byte[] bytes = store.readBytes(defaultBucketName, blobId).block(); assertThat(bytes).isEqualTo(ELEVEN_KILOBYTES); } - @Test - default void readBytesShouldReturnBigSavedData() { + @ParameterizedTest + @MethodSource("storagePolicies") + default void readBytesShouldReturnBigSavedData(BlobStore.StoragePolicy storagePolicy) { BlobStore store = testee(); BucketName defaultBucketName = store.getDefaultBucketName(); - BlobId blobId = store.save(defaultBucketName, TWELVE_MEGABYTES, LOW_COST).block(); + BlobId blobId = store.save(defaultBucketName, TWELVE_MEGABYTES, storagePolicy).block(); byte[] bytes = store.readBytes(defaultBucketName, blobId).block(); @@ -190,37 +215,40 @@ public interface BlobStoreContract extends DeleteBlobStoreContract, BucketBlobSt .isInstanceOf(ObjectNotFoundException.class); } - @Test - default void readShouldReturnSavedData() { + @ParameterizedTest + @MethodSource("storagePolicies") + default void readShouldReturnSavedData(BlobStore.StoragePolicy storagePolicy) { BlobStore store = testee(); BucketName defaultBucketName = store.getDefaultBucketName(); - BlobId blobId = store.save(defaultBucketName, SHORT_BYTEARRAY, LOW_COST).block(); + BlobId blobId = store.save(defaultBucketName, SHORT_BYTEARRAY, storagePolicy).block(); InputStream read = store.read(defaultBucketName, blobId); assertThat(read).hasSameContentAs(new ByteArrayInputStream(SHORT_BYTEARRAY)); } - @Test - default void readShouldReturnLongSavedData() { + @ParameterizedTest + @MethodSource("storagePolicies") + default void readShouldReturnLongSavedData(BlobStore.StoragePolicy storagePolicy) { BlobStore store = testee(); BucketName defaultBucketName = store.getDefaultBucketName(); - BlobId blobId = store.save(defaultBucketName, ELEVEN_KILOBYTES, LOW_COST).block(); + BlobId blobId = store.save(defaultBucketName, ELEVEN_KILOBYTES, storagePolicy).block(); InputStream read = store.read(defaultBucketName, blobId); assertThat(read).hasSameContentAs(new ByteArrayInputStream(ELEVEN_KILOBYTES)); } - @Test - default void readShouldReturnBigSavedData() { + @ParameterizedTest + @MethodSource("storagePolicies") + default void readShouldReturnBigSavedData(BlobStore.StoragePolicy storagePolicy) { BlobStore store = testee(); BucketName defaultBucketName = store.getDefaultBucketName(); // 12 MB of text - BlobId blobId = store.save(defaultBucketName, TWELVE_MEGABYTES, LOW_COST).block(); + BlobId blobId = store.save(defaultBucketName, TWELVE_MEGABYTES, storagePolicy).block(); InputStream read = store.read(defaultBucketName, blobId); diff --git a/server/blob/blob-cassandra/pom.xml b/server/blob/blob-cassandra/pom.xml index dcaf57c..6f4e2ff 100644 --- a/server/blob/blob-cassandra/pom.xml +++ b/server/blob/blob-cassandra/pom.xml @@ -72,6 +72,11 @@ <artifactId>guava</artifactId> </dependency> <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-params</artifactId> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.testcontainers</groupId> <artifactId>testcontainers</artifactId> <scope>test</scope> diff --git a/server/blob/blob-memory/pom.xml b/server/blob/blob-memory/pom.xml index 7d5e709..243f456 100644 --- a/server/blob/blob-memory/pom.xml +++ b/server/blob/blob-memory/pom.xml @@ -57,6 +57,11 @@ <artifactId>commons-io</artifactId> </dependency> <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-params</artifactId> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <scope>test</scope> --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org