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)) {