JAMES-2525 adds ObjectStore#save(InputStream)

Since this signature doesn't conflict with the original `save(byte[])`
the name is kept as is.

The implementatoin of the new method in the CassandraBlobDAO delegates
to the original save.


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e906b04e
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e906b04e
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e906b04e

Branch: refs/heads/master
Commit: e906b04ee4bddc498547123291946b9a5797e260
Parents: 8697970
Author: Jean Helou <[email protected]>
Authored: Mon Aug 20 17:31:15 2018 +0200
Committer: Jean Helou <[email protected]>
Committed: Thu Aug 23 14:19:24 2018 +0200

----------------------------------------------------------------------
 .../migration/AttachmentV2MigrationTest.java    |  2 +-
 .../org/apache/james/blob/api/ObjectStore.java  |  2 ++
 .../james/blob/api/ObjectStoreContract.java     | 26 +++++++++++++++++++-
 .../james/blob/cassandra/CassandraBlobsDAO.java |  9 +++++++
 4 files changed, 37 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e906b04e/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java
index 8a45267..738045a 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java
@@ -171,7 +171,7 @@ public class AttachmentV2MigrationTest {
         when(attachmentDAO.retrieveAll()).thenReturn(Stream.of(
             attachment1,
             attachment2));
-        when(blobsDAO.save(any())).thenThrow(new RuntimeException());
+        when(blobsDAO.save(any(byte[].class))).thenThrow(new 
RuntimeException());
 
         assertThat(migration.run()).isEqualTo(Migration.Result.PARTIAL);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/e906b04e/server/blob/blob-api/src/main/java/org/apache/james/blob/api/ObjectStore.java
----------------------------------------------------------------------
diff --git 
a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/ObjectStore.java 
b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/ObjectStore.java
index 7582a2c..8b22d55 100644
--- 
a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/ObjectStore.java
+++ 
b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/ObjectStore.java
@@ -25,6 +25,8 @@ public interface ObjectStore {
 
     CompletableFuture<BlobId> save(byte[] data);
 
+    CompletableFuture<BlobId> save(InputStream data);
+
     CompletableFuture<byte[]> readBytes(BlobId blobId);
 
     InputStream read(BlobId blobId);

http://git-wip-us.apache.org/repos/asf/james-project/blob/e906b04e/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ObjectStoreContract.java
----------------------------------------------------------------------
diff --git 
a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ObjectStoreContract.java
 
b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ObjectStoreContract.java
index bb51e14..dfd7038 100644
--- 
a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ObjectStoreContract.java
+++ 
b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ObjectStoreContract.java
@@ -16,6 +16,7 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
+
 package org.apache.james.blob.api;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -39,7 +40,13 @@ public interface ObjectStoreContract {
 
     @Test
     default void saveShouldReturnEmptyWhenNullData() throws Exception {
-        assertThatThrownBy(() -> testee().save(null))
+        assertThatThrownBy(() -> testee().save((byte[]) null))
+            .isInstanceOf(NullPointerException.class);
+    }
+
+    @Test
+    default void saveShouldReturnEmptyWhenNullInputStream() throws Exception {
+        assertThatThrownBy(() -> testee().save((InputStream) null))
             .isInstanceOf(NullPointerException.class);
     }
 
@@ -53,6 +60,15 @@ public interface ObjectStoreContract {
     }
 
     @Test
+    default void saveShouldSaveEmptyInputStream() throws Exception {
+        BlobId blobId = testee().save(new ByteArrayInputStream(new 
byte[]{})).join();
+
+        byte[] bytes = testee().readBytes(blobId).join();
+
+        assertThat(new String(bytes, StandardCharsets.UTF_8)).isEmpty();
+    }
+
+    @Test
     default void saveShouldReturnBlobId() throws Exception {
         BlobId blobId = 
testee().save("toto".getBytes(StandardCharsets.UTF_8)).join();
 
@@ -60,6 +76,14 @@ public interface ObjectStoreContract {
     }
 
     @Test
+    default void saveShouldReturnBlobIdOfInputStream() throws Exception {
+        BlobId blobId =
+            testee().save(new 
ByteArrayInputStream("toto".getBytes(StandardCharsets.UTF_8))).join();
+
+        
assertThat(blobId).isEqualTo(blobIdFactory().from("31f7a65e315586ac198bd798b6629ce4903d0899476d5741a9f32e2e521b6a66"));
+    }
+
+    @Test
     default void readBytesShouldBeEmptyWhenNoExisting() throws IOException {
         byte[] bytes = 
testee().readBytes(blobIdFactory().from("unknown")).join();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e906b04e/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java
----------------------------------------------------------------------
diff --git 
a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java
 
b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java
index 3436d73..d37bf4f 100644
--- 
a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java
+++ 
b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java
@@ -36,6 +36,7 @@ import java.util.stream.Stream;
 
 import javax.inject.Inject;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.tuple.Pair;
 import 
org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration;
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
@@ -238,4 +239,12 @@ public class CassandraBlobsDAO implements ObjectStore {
                 cause);
         }
     }
+
+    @Override
+    public CompletableFuture<BlobId> save(InputStream data) {
+        Preconditions.checkNotNull(data);
+        return CompletableFuture
+            .supplyAsync(Throwing.supplier(() -> 
IOUtils.toByteArray(data)).sneakyThrow())
+            .thenCompose(this::save);
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to