You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2020/01/13 09:55:52 UTC
[james-project] 06/10: JAMES-2921 BlobStoreContract should test all
storage policies basic behaviour
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 <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org