You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2016/02/04 07:05:24 UTC

jclouds git commit: Check Content-Length in local blobstore putBlob

Repository: jclouds
Updated Branches:
  refs/heads/master e50bd79f0 -> de333e8b3


Check Content-Length in local blobstore putBlob


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

Branch: refs/heads/master
Commit: de333e8b3cc422463163de1d3cb93655ec925c21
Parents: e50bd79
Author: Andrew Gaul <ga...@apache.org>
Authored: Wed Feb 3 22:03:48 2016 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Wed Feb 3 22:03:48 2016 -0800

----------------------------------------------------------------------
 .../internal/FilesystemStorageStrategyImpl.java     |  7 ++++++-
 .../internal/FilesystemStorageStrategyImplTest.java | 16 ++++++++++++++++
 .../jclouds/blobstore/TransientStorageStrategy.java |  6 ++++++
 3 files changed, 28 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/de333e8b/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
----------------------------------------------------------------------
diff --git a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java b/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
index 3782b99..fc4a8aa 100644
--- a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
+++ b/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
@@ -462,7 +462,12 @@ public class FilesystemStorageStrategyImpl implements LocalStorageStrategy {
       try {
          Files.createParentDirs(tmpFile);
          his = new HashingInputStream(Hashing.md5(), payload.openStream());
-         Files.asByteSink(tmpFile).writeFrom(his);
+         long actualSize = Files.asByteSink(tmpFile).writeFrom(his);
+         Long expectedSize = blob.getMetadata().getContentMetadata().getContentLength();
+         if (expectedSize != null && actualSize != expectedSize) {
+            throw new IOException("Content-Length mismatch, actual: " + actualSize +
+                  " expected: " + expectedSize);
+         }
          HashCode actualHashCode = his.hash();
          HashCode expectedHashCode = payload.getContentMetadata().getContentMD5AsHashCode();
          if (expectedHashCode != null && !actualHashCode.equals(expectedHashCode)) {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/de333e8b/apis/filesystem/src/test/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImplTest.java
----------------------------------------------------------------------
diff --git a/apis/filesystem/src/test/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImplTest.java b/apis/filesystem/src/test/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImplTest.java
index 19ca7d9..3fdd855 100644
--- a/apis/filesystem/src/test/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImplTest.java
+++ b/apis/filesystem/src/test/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImplTest.java
@@ -34,6 +34,7 @@ import java.util.concurrent.TimeUnit;
 
 import javax.inject.Provider;
 
+import org.assertj.core.api.Fail;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.blobstore.domain.BlobBuilder;
 import org.jclouds.blobstore.domain.ContainerAccess;
@@ -667,6 +668,21 @@ public class FilesystemStorageStrategyImplTest {
       assertFalse(blob.getMetadata().getUserMetadata().containsKey("key1"));
    }
 
+   @Test
+   public void testPutIncorrectContentLength() throws Exception {
+      Blob blob = new BlobBuilderImpl()
+            .name("key")
+            .payload(randomByteSource().slice(0, 1024))
+            .contentLength(512)
+            .build();
+      try {
+         storageStrategy.putBlob(CONTAINER_NAME, blob);
+         Fail.failBecauseExceptionWasNotThrown(IOException.class);
+      } catch (IOException ioe) {
+         // expected
+      }
+   }
+
    // ---------------------------------------------------------- Private methods
 
    /**

http://git-wip-us.apache.org/repos/asf/jclouds/blob/de333e8b/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java b/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java
index 7746f5f..bd662f3 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java
@@ -165,6 +165,12 @@ public class TransientStorageStrategy implements LocalStorageStrategy {
       HashingInputStream input = new HashingInputStream(Hashing.md5(), blob.getPayload().openStream());
       try {
          payload = ByteStreams.toByteArray(input);
+         long actualSize = payload.length;
+         Long expectedSize = blob.getMetadata().getContentMetadata().getContentLength();
+         if (expectedSize != null && actualSize != expectedSize) {
+            throw new IOException("Content-Length mismatch, actual: " + actualSize +
+                  " expected: " + expectedSize);
+         }
          actualHashCode = input.hash();
          HashCode expectedHashCode = blob.getPayload().getContentMetadata().getContentMD5AsHashCode();
          if (expectedHashCode != null && !actualHashCode.equals(expectedHashCode)) {