Repository: jclouds-labs-openstack Updated Branches: refs/heads/1.7.x b6c21f8ed -> c7568373b
JCLOUDS-562: Decode object names with spaces, added test cases and updated test names. Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/commit/c7568373 Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/tree/c7568373 Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/diff/c7568373 Branch: refs/heads/1.7.x Commit: c7568373b91790f97c9cd7ec444115ae328b3a20 Parents: b6c21f8 Author: Jeremy Daggett <[email protected]> Authored: Tue May 20 14:38:19 2014 -0700 Committer: Jeremy Daggett <[email protected]> Committed: Sun May 25 19:23:08 2014 -0700 ---------------------------------------------------------------------- .../v1/blobstore/functions/ToSwiftObject.java | 5 +- .../functions/ParseObjectListFromResponse.java | 10 +-- .../swift/v1/features/ContainerApiLiveTest.java | 16 +++- .../swift/v1/features/ContainerApiMockTest.java | 29 +++++-- .../swift/v1/features/ObjectApiLiveTest.java | 36 ++++++--- .../swift/v1/features/ObjectApiMockTest.java | 85 +++++++++++++------- .../src/test/resources/object_list.json | 7 ++ .../v1/features/CloudFilesCDNApiMockTest.java | 33 +++++++- .../src/test/resources/cdn_container_list.json | 2 +- .../test/resources/cdn_container_list_at.json | 2 +- 10 files changed, 166 insertions(+), 59 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/c7568373/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/functions/ToSwiftObject.java ---------------------------------------------------------------------- diff --git a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/functions/ToSwiftObject.java b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/functions/ToSwiftObject.java index aabf63c..8fe00c7 100644 --- a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/functions/ToSwiftObject.java +++ b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/functions/ToSwiftObject.java @@ -24,6 +24,7 @@ import org.jclouds.openstack.swift.v1.domain.SwiftObject; import org.jclouds.openstack.swift.v1.domain.SwiftObject.Builder; import com.google.common.base.Function; +import com.google.common.io.ByteSource; public class ToSwiftObject implements Function<StorageMetadata, SwiftObject> { @@ -44,10 +45,8 @@ public class ToSwiftObject implements Function<StorageMetadata, SwiftObject> { return to.build(); } - private static final byte[] NO_CONTENT = new byte[] {}; - private static Payload payload(long bytes, String contentType) { - Payload payload = Payloads.newByteArrayPayload(NO_CONTENT); + Payload payload = Payloads.newByteSourcePayload(ByteSource.empty()); payload.getContentMetadata().setContentLength(bytes); payload.getContentMetadata().setContentType(contentType); return payload; http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/c7568373/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectListFromResponse.java ---------------------------------------------------------------------- diff --git a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectListFromResponse.java b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectListFromResponse.java index 0b58e8b..cf03265 100644 --- a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectListFromResponse.java +++ b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectListFromResponse.java @@ -16,7 +16,8 @@ */ package org.jclouds.openstack.swift.v1.functions; -import java.net.URI; +import static org.jclouds.http.Uris.uriBuilder; + import java.util.Date; import java.util.List; @@ -35,6 +36,7 @@ import org.jclouds.rest.internal.GeneratedHttpRequest; import com.google.common.base.Function; import com.google.common.collect.Lists; +import com.google.common.io.ByteSource; public class ParseObjectListFromResponse implements Function<HttpResponse, ObjectList>, InvocationContext<ParseObjectListFromResponse> { @@ -75,7 +77,7 @@ public class ParseObjectListFromResponse implements Function<HttpResponse, Objec @Override public SwiftObject apply(InternalObject input) { return SwiftObject.builder() - .uri(URI.create(String.format("%s%s", containerUri, input.name))) + .uri(uriBuilder(containerUri).clearQuery().appendPath(input.name).build()) .name(input.name) .etag(input.hash) .payload(payload(input.bytes, input.content_type)) @@ -95,10 +97,8 @@ public class ParseObjectListFromResponse implements Function<HttpResponse, Objec return this; } - private static final byte[] NO_CONTENT = new byte[] {}; - private static Payload payload(long bytes, String contentType) { - Payload payload = Payloads.newByteArrayPayload(NO_CONTENT); + Payload payload = Payloads.newByteSourcePayload(ByteSource.empty()); payload.getContentMetadata().setContentLength(bytes); payload.getContentMetadata().setContentType(contentType); return payload; http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/c7568373/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiLiveTest.java ---------------------------------------------------------------------- diff --git a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiLiveTest.java b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiLiveTest.java index fb53927..dc2b6cc 100644 --- a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiLiveTest.java +++ b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiLiveTest.java @@ -36,14 +36,26 @@ import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableMap; /** - * @author Adrian Cole - * @author Jeremy Daggett + * Provides live tests for the {@link ContainerApi}. */ @Test(groups = "live", testName = "ContainerApiLiveTest") public class ContainerApiLiveTest extends BaseSwiftApiLiveTest<SwiftApi> { private String name = getClass().getSimpleName(); + public void testCreateWithSpacesAndSpecialCharacters() throws Exception { + final String nameWithSpaces = "container # ! special"; + + for (String regionId : regions) { + assertTrue(api.getContainerApiForRegion(regionId).create(nameWithSpaces)); + Container container = api.getContainerApiForRegion(regionId).get(nameWithSpaces); + assertNotNull(container); + assertEquals(container.getName(), nameWithSpaces); + + assertTrue(api.getContainerApiForRegion(regionId).deleteIfEmpty(nameWithSpaces)); + } + } + public void testList() throws Exception { for (String regionId : regions) { ContainerApi containerApi = api.getContainerApiForRegion(regionId); http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/c7568373/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiMockTest.java ---------------------------------------------------------------------- diff --git a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiMockTest.java b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiMockTest.java index a6bb7cd..20707c7 100644 --- a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiMockTest.java +++ b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiMockTest.java @@ -189,6 +189,23 @@ public class ContainerApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } } + public void testCreateWithSpacesAndSpecialCharacters() throws Exception { + MockWebServer server = mockOpenStackServer(); + server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); + server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(201))); + + try { + SwiftApi api = api(server.getUrl("/").toString(), "openstack-swift"); + assertTrue(api.getContainerApiForRegion("DFW").create("container # ! special")); + + assertEquals(server.getRequestCount(), 2); + assertAuthentication(server); + assertRequest(server.takeRequest(), "PUT", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/container%20%23%20%21%20special"); + } finally { + server.shutdown(); + } + } + public void testAlreadyCreated() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); @@ -233,7 +250,7 @@ public class ContainerApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } } - public void updateMetadata() throws Exception { + public void testUpdateMetadata() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(containerResponse() @@ -257,7 +274,7 @@ public class ContainerApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } } - public void deleteMetadata() throws Exception { + public void testDeleteMetadata() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(containerResponse())); @@ -279,7 +296,7 @@ public class ContainerApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } } - public void deleteIfEmpty() throws Exception { + public void testDeleteIfEmpty() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(204))); @@ -298,7 +315,7 @@ public class ContainerApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } } - public void alreadyDeleted() throws Exception { + public void testAlreadyDeleted() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404))); @@ -318,7 +335,7 @@ public class ContainerApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } @Test(expectedExceptions = IllegalStateException.class) - public void deleteWhenNotEmpty() throws Exception { + public void testDeleteWhenNotEmpty() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(409))); @@ -339,7 +356,7 @@ public class ContainerApiMockTest extends BaseOpenStackMockTest<SwiftApi> { private static final Map<String, String> metadata = ImmutableMap.of("ApiName", "swift", "ApiVersion", "v1.1"); - public static MockResponse containerResponse() { + static MockResponse containerResponse() { return new MockResponse() .addHeader(CONTAINER_OBJECT_COUNT, "42") .addHeader(CONTAINER_BYTES_USED, "323479"); http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/c7568373/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiLiveTest.java ---------------------------------------------------------------------- diff --git a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiLiveTest.java b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiLiveTest.java index cc55a0c..446abbf 100644 --- a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiLiveTest.java +++ b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiLiveTest.java @@ -49,14 +49,32 @@ import com.google.common.io.ByteSource; /** * Provides live tests for the {@link ObjectApi}. - * */ @Test(groups = "live", testName = "ObjectApiLiveTest", singleThreaded = true) public class ObjectApiLiveTest extends BaseSwiftApiLiveTest<SwiftApi> { private String name = getClass().getSimpleName(); private String containerName = getClass().getSimpleName() + "Container"; - + static final Payload PAYLOAD = newByteSourcePayload(ByteSource.wrap("swifty".getBytes())); + + public void testCreateWithSpacesAndSpecialCharacters() throws Exception { + final String containerName = "container # ! special"; + final String objectName = "object # ! special"; + + for (String regionId : regions) { + assertNotNull(api.getContainerApiForRegion(regionId).create(containerName)); + assertNotNull(api.getObjectApiForRegionAndContainer(regionId, containerName).put(objectName, PAYLOAD)); + + SwiftObject object = api.getObjectApiForRegionAndContainer(regionId, containerName).get(objectName); + assertEquals(object.getName(), objectName); + checkObject(object); + assertEquals(toStringAndClose(object.getPayload().openStream()), "swifty"); + + api.getObjectApiForRegionAndContainer(regionId, containerName).delete(objectName); + api.getContainerApiForRegion(regionId).deleteIfEmpty(containerName); + } + } + public void testCopyObject() throws Exception { for (String regionId : regions) { // source @@ -69,9 +87,6 @@ public class ObjectApiLiveTest extends BaseSwiftApiLiveTest<SwiftApi> { String destinationObject = "copy.txt"; String destinationPath = "/" + destinationContainer + "/" + destinationObject; - String stringPayload = "Hello World"; - Payload data = newByteSourcePayload(ByteSource.wrap(stringPayload.getBytes())); - ContainerApi containerApi = api.getContainerApiForRegion(regionId); // create source and destination dirs @@ -83,12 +98,12 @@ public class ObjectApiLiveTest extends BaseSwiftApiLiveTest<SwiftApi> { ObjectApi destApi = api.getObjectApiForRegionAndContainer(regionId, destinationContainer); // Create source object - assertNotNull(srcApi.put(sourceObjectName, data)); + assertNotNull(srcApi.put(sourceObjectName, PAYLOAD)); SwiftObject sourceObject = srcApi.get(sourceObjectName); checkObject(sourceObject); // Create the destination object - assertNotNull(destApi.put(destinationObject, data)); + assertNotNull(destApi.put(destinationObject, PAYLOAD)); SwiftObject object = destApi.get(destinationObject); checkObject(object); @@ -98,7 +113,7 @@ public class ObjectApiLiveTest extends BaseSwiftApiLiveTest<SwiftApi> { // now get a real SwiftObject SwiftObject destSwiftObject = destApi.get(destinationObject); - assertEquals(Strings2.toString(destSwiftObject.getPayload()), stringPayload); + assertEquals(Strings2.toString(destSwiftObject.getPayload()), "swifty"); // test exception thrown on bad source name try { @@ -144,7 +159,7 @@ public class ObjectApiLiveTest extends BaseSwiftApiLiveTest<SwiftApi> { SwiftObject object = api.getObjectApiForRegionAndContainer(regionId, containerName).get(name); assertEquals(object.getName(), name); checkObject(object); - assertEquals(toStringAndClose(object.getPayload().openStream()), ""); + assertEquals(toStringAndClose(object.getPayload().openStream()), "swifty"); } } @@ -223,8 +238,7 @@ public class ObjectApiLiveTest extends BaseSwiftApiLiveTest<SwiftApi> { super.setup(); for (String regionId : regions) { api.getContainerApiForRegion(regionId).create(containerName); - api.getObjectApiForRegionAndContainer(regionId, containerName) - .put(name, newByteSourcePayload(ByteSource.wrap("swifty".getBytes()))); + api.getObjectApiForRegionAndContainer(regionId, containerName).put(name, PAYLOAD); } } http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/c7568373/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiMockTest.java ---------------------------------------------------------------------- diff --git a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiMockTest.java b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiMockTest.java index b762919..348700e 100644 --- a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiMockTest.java +++ b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiMockTest.java @@ -30,6 +30,7 @@ import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.CONTAINER_AC import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.CONTAINER_READ; import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.OBJECT_METADATA_PREFIX; import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.OBJECT_REMOVE_METADATA_PREFIX; +import static org.jclouds.util.Strings2.toStringAndClose; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; @@ -49,10 +50,8 @@ import org.jclouds.openstack.swift.v1.SwiftApi; import org.jclouds.openstack.swift.v1.domain.ObjectList; import org.jclouds.openstack.swift.v1.domain.SwiftObject; import org.jclouds.openstack.swift.v1.options.ListContainerOptions; -import org.jclouds.openstack.swift.v1.options.PutOptions; import org.jclouds.openstack.swift.v1.reference.SwiftHeaders; import org.jclouds.openstack.v2_0.internal.BaseOpenStackMockTest; -import org.jclouds.util.Strings2; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; @@ -64,14 +63,13 @@ import com.squareup.okhttp.mockwebserver.RecordedRequest; /** * Provides mock tests for the {@link ObjectApi}. - * - * @author Adrian Cole - * @author Jeremy Daggett */ @Test(groups = "unit", testName = "ObjectApiMockTest") public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { SimpleDateFormatDateService dates = new SimpleDateFormatDateService(); + static final Payload PAYLOAD = newByteSourcePayload(ByteSource.wrap("swifty".getBytes())); + protected ImmutableList<SwiftObject> parsedObjectsForUrl(String baseUri) { baseUri += "v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/myContainer"; return ImmutableList.of( @@ -86,7 +84,13 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { .uri(URI.create(baseUri + "/test_obj_2")) .etag("b039efe731ad111bc1b0ef221c3849d0") .payload(payload(64l, "application/octet-stream")) - .lastModified(dates.iso8601DateParse("2009-02-03T05:26:32.612278")).build()); + .lastModified(dates.iso8601DateParse("2009-02-03T05:26:32.612278")).build(), + SwiftObject.builder() + .name("test obj 3") + .uri(URI.create(baseUri + "/test%20obj%203")) + .etag("0b2e80bd0744d9ebb20484149a57c82e") + .payload(payload(14, "application/octet-stream")) + .lastModified(dates.iso8601DateParse("2014-05-20T05:26:32.612278")).build()); } public void testList() throws Exception { @@ -151,7 +155,7 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } } - public void testReplace() throws Exception { + public void testCreate() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(new MockResponse() @@ -161,8 +165,8 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { try { SwiftApi api = api(server.getUrl("/").toString(), "openstack-swift"); assertEquals( - api.getObjectApiForRegionAndContainer("DFW", "myContainer").put("myObject", - newByteSourcePayload(ByteSource.wrap("swifty".getBytes())), metadata(metadata)), "d9f5eb4bba4e2f2f046e54611bc8196b"); + api.getObjectApiForRegionAndContainer("DFW", "myContainer").put("myObject", PAYLOAD, + metadata(metadata)), "d9f5eb4bba4e2f2f046e54611bc8196b"); assertEquals(server.getRequestCount(), 2); assertAuthentication(server); @@ -178,7 +182,32 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } } - public void testReplace408Retry() throws Exception { + public void testCreateWithSpacesAndSpecialCharacters() throws Exception { + MockWebServer server = mockOpenStackServer(); + server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); + server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(201).addHeader("ETag", "d9f5eb4bba4e2f2f046e54611bc8196b"))); + + final String containerName = "container # ! special"; + final String objectName = "object # ! special"; + + try { + SwiftApi api = api(server.getUrl("/").toString(), "openstack-swift"); + assertEquals( + api.getObjectApiForRegionAndContainer("DFW", containerName).put(objectName, PAYLOAD, + metadata(metadata)), "d9f5eb4bba4e2f2f046e54611bc8196b"); + + assertEquals(server.getRequestCount(), 2); + assertAuthentication(server); + RecordedRequest replace = server.takeRequest(); + assertRequest(replace, "PUT", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/container%20%23%20%21%20special/object%20%23%20%21%20special"); + + assertEquals(new String(replace.getBody()), "swifty"); + } finally { + server.shutdown(); + } + } + + public void testCreateWith408Retry() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(408))); // 1 @@ -196,8 +225,8 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { SwiftApi api = api(server.getUrl("/").toString(), "openstack-swift", overrides); assertEquals( - api.getObjectApiForRegionAndContainer("DFW", "myContainer").put("myObject", - new ByteSourcePayload(ByteSource.wrap("swifty".getBytes())), PutOptions.Builder.metadata(metadata)), "d9f5eb4bba4e2f2f046e54611bc8196b"); + api.getObjectApiForRegionAndContainer("DFW", "myContainer").put("myObject", PAYLOAD, + metadata(metadata)), "d9f5eb4bba4e2f2f046e54611bc8196b"); assertEquals(server.getRequestCount(), 5); assertAuthentication(server); @@ -215,7 +244,7 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } /** upper-cases first char, and lower-cases rest!! **/ - public void testHeadKnowingServerMessesWithMetadataKeyCaseFormat() throws Exception { + public void testGetWithoutKnowingServerMessesWithMetadataKeyCaseFormat() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(objectResponse() @@ -234,7 +263,7 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } assertEquals(object.getPayload().getContentMetadata().getContentLength(), new Long(4)); assertEquals(object.getPayload().getContentMetadata().getContentType(), "text/plain; charset=UTF-8"); - assertEquals(Strings2.toStringAndClose(object.getPayload().openStream()), ""); + assertEquals(toStringAndClose(object.getPayload().openStream()), ""); assertEquals(server.getRequestCount(), 2); assertAuthentication(server); @@ -244,7 +273,7 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } } - public void get() throws Exception { + public void testGet() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(objectResponse() @@ -264,7 +293,7 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { assertEquals(object.getPayload().getContentMetadata().getContentLength(), new Long(4)); assertEquals(object.getPayload().getContentMetadata().getContentType(), "text/plain; charset=UTF-8"); // note MWS doesn't process Range header at the moment - assertEquals(Strings2.toStringAndClose(object.getPayload().openStream()), "ABCD"); + assertEquals(toStringAndClose(object.getPayload().openStream()), "ABCD"); assertEquals(server.getRequestCount(), 2); assertEquals(server.takeRequest().getRequestLine(), "POST /tokens HTTP/1.1"); @@ -278,7 +307,7 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } @Test(expectedExceptions = HttpResponseException.class, timeOut = 20000) - public void testReplaceTimeout() throws Exception { + public void testCreateWithTimeout() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); // Typically we would enqueue a response for the put. However, in this case, test the timeout by not providing one. @@ -292,7 +321,7 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { final SwiftApi api = api(server.getUrl("/").toString(), "openstack-swift", overrides); - api.getObjectApiForRegionAndContainer("DFW", "myContainer").put("myObject", new ByteSourcePayload(ByteSource.wrap("swifty".getBytes())), PutOptions.Builder.metadata(metadata)); + api.getObjectApiForRegionAndContainer("DFW", "myContainer").put("myObject", new ByteSourcePayload(ByteSource.wrap("swifty".getBytes())), metadata(metadata)); fail("testReplaceTimeout test should have failed with an HttpResponseException."); } finally { @@ -300,7 +329,7 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } } - public void updateMetadata() throws Exception { + public void testUpdateMetadata() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(objectResponse() @@ -351,7 +380,7 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } } - public void deleteMetadata() throws Exception { + public void testDeleteMetadata() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(objectResponse())); @@ -373,7 +402,7 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } } - public void delete() throws Exception { + public void testDelete() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(204))); @@ -392,7 +421,7 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } } - public void alreadyDeleted() throws Exception { + public void testAlreadyDeleted() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404))); @@ -411,7 +440,7 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } } - public void copyObject() throws Exception { + public void testCopyObject() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(201) @@ -433,7 +462,7 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } @Test(expectedExceptions = CopyObjectException.class) - public void copyObjectFail() throws InterruptedException, IOException { + public void testCopyObjectFail() throws InterruptedException, IOException { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404) @@ -450,7 +479,7 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { private static final Map<String, String> metadata = ImmutableMap.of("ApiName", "swift", "ApiVersion", "v1.1"); - public static MockResponse objectResponse() { + static MockResponse objectResponse() { return new MockResponse() .addHeader("Last-Modified", "Fri, 12 Jun 2010 13:40:18 GMT") .addHeader("ETag", "8a964ee2a5e88be344f36c22562a6486") @@ -460,10 +489,8 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { .addHeader("Content-Length", "4").addHeader("Content-Type", "text/plain; charset=UTF-8"); } - private static final byte[] NO_CONTENT = new byte[] {}; - - private static Payload payload(long bytes, String contentType) { - Payload payload = newByteSourcePayload(ByteSource.wrap(NO_CONTENT)); + static Payload payload(long bytes, String contentType) { + Payload payload = newByteSourcePayload(ByteSource.empty()); payload.getContentMetadata().setContentLength(bytes); payload.getContentMetadata().setContentType(contentType); return payload; http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/c7568373/openstack-swift/src/test/resources/object_list.json ---------------------------------------------------------------------- diff --git a/openstack-swift/src/test/resources/object_list.json b/openstack-swift/src/test/resources/object_list.json index 9cac144..afe8c77 100644 --- a/openstack-swift/src/test/resources/object_list.json +++ b/openstack-swift/src/test/resources/object_list.json @@ -12,5 +12,12 @@ "bytes": 64, "content_type": "application/octet-stream", "last_modified": "2009-02-03T05:26:32.612278" + }, + { + "name": "test obj 3", + "hash": "0b2e80bd0744d9ebb20484149a57c82e", + "bytes": 123, + "content_type": "application/octet-stream", + "last_modified": "2014-05-20T05:26:32.612278" } ] http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/c7568373/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/features/CloudFilesCDNApiMockTest.java ---------------------------------------------------------------------- diff --git a/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/features/CloudFilesCDNApiMockTest.java b/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/features/CloudFilesCDNApiMockTest.java index 2e008c5..b60798e 100644 --- a/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/features/CloudFilesCDNApiMockTest.java +++ b/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/features/CloudFilesCDNApiMockTest.java @@ -280,6 +280,26 @@ public class CloudFilesCDNApiMockTest extends BaseOpenStackMockTest<CloudFilesAp } } + public void testGetCDNContainerWithSpaces() throws Exception { + MockWebServer server = mockOpenStackServer(); + server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); + server.enqueue(addCommonHeaders(enabledResponse().setResponseCode(201))); + + try { + CloudFilesApi api = api(server.getUrl("/").toString(), "rackspace-cloudfiles"); + + CDNContainer cdnContainer = api.getCDNApiForRegion("DFW").get("cdn-container with spaces"); + assertCDNContainerNotNull(cdnContainer); + assertEquals(mockCDNContainerWithSpaces, cdnContainer); + + assertEquals(server.getRequestCount(), 2); + assertAuthentication(server); + assertRequest(server.takeRequest(), "HEAD", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/cdn-container%20with%20spaces"); + } finally { + server.shutdown(); + } + } + public void testGetFail() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); @@ -424,6 +444,17 @@ public class CloudFilesCDNApiMockTest extends BaseOpenStackMockTest<CloudFilesAp .iosUri(URI.create("http://ios-id-1.iosr.rackspace.com")) .build(); + private static final CDNContainer mockCDNContainerWithSpaces = CDNContainer.builder() + .name("cdn-container with spaces") + .enabled(true) + .logRetention(false) + .ttl(777777) + .uri(URI.create("http://id-1.cdn.rackspace.com")) + .sslUri(URI.create("https://ssl-id-1.ssl.rackspace.com")) + .streamingUri(URI.create("http://streaming-id-1.stream.rackspace.com")) + .iosUri(URI.create("http://ios-id-1.iosr.rackspace.com")) + .build(); + private static MockResponse enabledResponse() { return new MockResponse() .addHeader(CDN_ENABLED, "true") @@ -482,7 +513,7 @@ public class CloudFilesCDNApiMockTest extends BaseOpenStackMockTest<CloudFilesAp .iosUri(URI.create("http://ios-id-3.iosr.rackspace.com")) .build(), CDNContainer.builder() - .name("cdn-container-4") + .name("cdn-container-4 with spaces") .enabled(true) .logRetention(true) .ttl(777777) http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/c7568373/rackspace-cloudfiles/src/test/resources/cdn_container_list.json ---------------------------------------------------------------------- diff --git a/rackspace-cloudfiles/src/test/resources/cdn_container_list.json b/rackspace-cloudfiles/src/test/resources/cdn_container_list.json index 4dce8db..5a36ca3 100644 --- a/rackspace-cloudfiles/src/test/resources/cdn_container_list.json +++ b/rackspace-cloudfiles/src/test/resources/cdn_container_list.json @@ -31,7 +31,7 @@ }, { "cdn_streaming_uri": "http://streaming-id-4.stream.rackspace.com", - "name": "cdn-container-4", + "name": "cdn-container-4 with spaces", "cdn_ios_uri": "http://ios-id-4.iosr.rackspace.com", "cdn_ssl_uri": "https://ssl-id-4.ssl.rackspace.com", "cdn_enabled": true, http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/c7568373/rackspace-cloudfiles/src/test/resources/cdn_container_list_at.json ---------------------------------------------------------------------- diff --git a/rackspace-cloudfiles/src/test/resources/cdn_container_list_at.json b/rackspace-cloudfiles/src/test/resources/cdn_container_list_at.json index f1fa9ee..b3ae802 100644 --- a/rackspace-cloudfiles/src/test/resources/cdn_container_list_at.json +++ b/rackspace-cloudfiles/src/test/resources/cdn_container_list_at.json @@ -11,7 +11,7 @@ }, { "cdn_streaming_uri": "http://streaming-id-4.stream.rackspace.com", - "name": "cdn-container-4", + "name": "cdn-container-4 with spaces", "cdn_ios_uri": "http://ios-id-4.iosr.rackspace.com", "cdn_ssl_uri": "https://ssl-id-4.ssl.rackspace.com", "cdn_enabled": true,
