Repository: jclouds Updated Branches: refs/heads/master 9be7339c3 -> 85357cf92
JCLOUDS-217: Percent encoding changes. jclouds should not check if the string is encoded, but rather expect that all strings would be encoded prior to transmission. As part of that change, we must make sure that no code relies on such behavior within jclouds. This commit adds a blobstore test to check encoding pattern for blobs. It also removes the encoding check in the Strings2 class and the related test. Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/aaa16417 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/aaa16417 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/aaa16417 Branch: refs/heads/master Commit: aaa164179cdf10a4076d0270e5b05bf8917028a5 Parents: 9be7339 Author: Timur Alperovich <[email protected]> Authored: Fri Aug 21 15:12:05 2015 -0700 Committer: Timur Alperovich <[email protected]> Committed: Tue Sep 8 15:12:14 2015 -0700 ---------------------------------------------------------------------- .../internal/BaseContainerIntegrationTest.java | 27 +++++++++++++++++++- core/src/main/java/org/jclouds/http/Uris.java | 1 - .../main/java/org/jclouds/util/Strings2.java | 9 +++---- .../java/org/jclouds/util/Strings2Test.java | 6 ----- 4 files changed, 29 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/aaa16417/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java ---------------------------------------------------------------------- diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java index ce719e0..9f8383b 100644 --- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java +++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java @@ -47,6 +47,7 @@ import org.jclouds.blobstore.domain.ContainerAccess; import org.jclouds.blobstore.domain.PageSet; import org.jclouds.blobstore.domain.StorageMetadata; import org.jclouds.blobstore.options.ListContainerOptions; +import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.google.common.collect.ImmutableMap; @@ -561,7 +562,31 @@ public class BaseContainerIntegrationTest extends BaseBlobStoreIntegrationTest { } } - private void checkEqualNames(ImmutableSet<String> expectedSet, PageSet<? extends StorageMetadata> results) { + @DataProvider + public Object[][] getBlobsToEscape() { + ImmutableSet<String> testNames = ImmutableSet.of("%20", "%20 ", " %20", " "); + Object[][] result = new Object[1][1]; + result[0][0] = testNames; + return result; + } + + @Test(dataProvider = "getBlobsToEscape", groups = {"integration", "live"}) + public void testBlobNameEscaping(Set<String> blobNames) throws InterruptedException { + final String containerName = getContainerName(); + BlobStore blobStore = view.getBlobStore(); + try { + for (String name : blobNames) { + Blob blob = blobStore.blobBuilder(name).payload(ByteSource.wrap("test".getBytes())).contentLength(4) + .build(); + blobStore.putBlob(containerName, blob); + } + checkEqualNames(blobNames, blobStore.list(containerName)); + } finally { + returnContainer(containerName); + } + } + + private void checkEqualNames(Set<String> expectedSet, PageSet<? extends StorageMetadata> results) { Set<String> names = new HashSet<String>(); for (StorageMetadata sm : results) { names.add(sm.getName()); http://git-wip-us.apache.org/repos/asf/jclouds/blob/aaa16417/core/src/main/java/org/jclouds/http/Uris.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/jclouds/http/Uris.java b/core/src/main/java/org/jclouds/http/Uris.java index eaef663..abab52b 100644 --- a/core/src/main/java/org/jclouds/http/Uris.java +++ b/core/src/main/java/org/jclouds/http/Uris.java @@ -144,7 +144,6 @@ public final class Uris { } public UriBuilder appendPath(String path) { - path = urlDecode(checkNotNull(path, "path")); if (this.path == null) { path(path); } else { http://git-wip-us.apache.org/repos/asf/jclouds/blob/aaa16417/core/src/main/java/org/jclouds/util/Strings2.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/jclouds/util/Strings2.java b/core/src/main/java/org/jclouds/util/Strings2.java index 2081c3d..e58e0a2 100644 --- a/core/src/main/java/org/jclouds/util/Strings2.java +++ b/core/src/main/java/org/jclouds/util/Strings2.java @@ -53,8 +53,6 @@ public class Strings2 { } public static String urlEncode(String in, Iterable<Character> skipEncode) { - if (isUrlEncoded(in)) - return in; try { String returnVal = URLEncoder.encode(in, "UTF-8"); returnVal = returnVal.replace("+", "%20"); @@ -109,11 +107,10 @@ public class Strings2 { public static String urlDecode(@Nullable String in) { if (in == null) return null; - String input = in.toString(); - // Don't double decode - if (!isUrlEncoded(input)) { - return input; + if (!isUrlEncoded(in)) { + return in; } + String input = in.toString(); try { return URLDecoder.decode(input, "UTF-8"); } catch (UnsupportedEncodingException e) { http://git-wip-us.apache.org/repos/asf/jclouds/blob/aaa16417/core/src/test/java/org/jclouds/util/Strings2Test.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/jclouds/util/Strings2Test.java b/core/src/test/java/org/jclouds/util/Strings2Test.java index 84fc776..125e0eb 100644 --- a/core/src/test/java/org/jclouds/util/Strings2Test.java +++ b/core/src/test/java/org/jclouds/util/Strings2Test.java @@ -32,12 +32,6 @@ public class Strings2Test { assert !Strings2.isUrlEncoded("/read-tests/ tep"); } - public void testNoDoubleEncode() { - assertEquals(urlEncode("/read-tests/%73%6f%6d%65%20%66%69%6c%65", '/'), - "/read-tests/%73%6f%6d%65%20%66%69%6c%65"); - assertEquals(urlEncode("/read-tests/ tep", '/'), "/read-tests/%20tep"); - } - public void testNoDoubleDecode() { assertEquals(urlDecode("foo%20bar%2Bbaz"), "foo bar+baz"); assertEquals(urlDecode("foo bar+baz"), "foo bar+baz");
