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 2015/05/28 01:30:20 UTC

jclouds git commit: implemented some basic range validations in local blob store

Repository: jclouds
Updated Branches:
  refs/heads/master bbafc34d4 -> 1103a778d


implemented some basic range validations in local blob store

also fixed a range get bug in local blob store


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

Branch: refs/heads/master
Commit: 1103a778d2936f262b900767e823279677d5aec0
Parents: bbafc34
Author: Ka-Hing Cheung <kh...@hxbc.us>
Authored: Tue May 26 18:07:16 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Wed May 27 16:30:05 2015 -0700

----------------------------------------------------------------------
 .../blobstore/config/LocalBlobStore.java        |  5 +++-
 .../internal/BaseBlobIntegrationTest.java       | 27 ++++++++++++++++++++
 2 files changed, 31 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/1103a778/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
index 95364e8..be96b73 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
@@ -633,6 +633,9 @@ public final class LocalBlobStore implements BlobStore {
                int last = data.length - 1;
                if (s.startsWith("-")) {
                   offset = last - Integer.parseInt(s.substring(1)) + 1;
+                  if (offset < 0) {
+                     offset = 0;
+                  }
                } else if (s.endsWith("-")) {
                   offset = Integer.parseInt(s.substring(0, s.length() - 1));
                } else if (s.contains("-")) {
@@ -643,7 +646,7 @@ public final class LocalBlobStore implements BlobStore {
                   throw new IllegalArgumentException("illegal range: " + s);
                }
 
-               if (offset > last) {
+               if (offset >= data.length) {
                   throw new IllegalArgumentException("illegal range: " + s);
                }
                if (last + 1 > data.length) {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/1103a778/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
----------------------------------------------------------------------
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
index deaee57..730d935 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
@@ -61,6 +61,7 @@ import org.jclouds.blobstore.domain.PageSet;
 import org.jclouds.blobstore.domain.StorageMetadata;
 import org.jclouds.blobstore.domain.StorageType;
 import org.jclouds.blobstore.options.CopyOptions;
+import org.jclouds.blobstore.options.GetOptions;
 import org.jclouds.blobstore.options.PutOptions;
 import org.jclouds.crypto.Crypto;
 import org.jclouds.encryption.internal.JCECrypto;
@@ -365,6 +366,25 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
    }
 
    @Test(groups = { "integration", "live" })
+   public void testGetRangeOutOfRange() throws InterruptedException, IOException {
+      String container = getContainerName();
+      try {
+         String name = "apples";
+
+         addObjectAndValidateContent(container, name);
+         view.getBlobStore().getBlob(container, name, range(TEST_STRING.length(), TEST_STRING.length() + 1));
+         throw new AssertionError("Invalid range not caught");
+      } catch (HttpResponseException e) {
+         assertThat(e.getResponse().getStatusCode()).isEqualTo(416);
+      } catch (IllegalArgumentException e) {
+         assertThat(e.getMessage()).startsWith("illegal range: ");
+      } finally {
+         returnContainer(container);
+      }
+
+   }
+
+   @Test(groups = { "integration", "live" })
    public void testGetRange() throws InterruptedException, IOException {
       String container = getContainerName();
       try {
@@ -379,6 +399,13 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
          Blob blob2 = view.getBlobStore().getBlob(container, name, range(6, TEST_STRING.length()));
          validateMetadata(blob2.getMetadata(), container, name);
          assertEquals(getContentAsStringOrNullAndClose(blob2), TEST_STRING.substring(6, TEST_STRING.length()));
+
+         /* RFC 2616 14.35.1
+            "If the entity is shorter than the specified suffix-length, the
+            entire entity-body is used." */
+         Blob blob3 = view.getBlobStore().getBlob(container, name, new GetOptions().tail(TEST_STRING.length() + 10));
+         validateMetadata(blob3.getMetadata(), container, name);
+         assertEquals(getContentAsStringOrNullAndClose(blob3), TEST_STRING);
       } finally {
          returnContainer(container);
       }