Repository: jclouds-labs-openstack Updated Branches: refs/heads/master f729f5ead -> 1c74873cd
Adds a mock test to ensure 408 errors are handled properly in swift. This is more likely to happen in swift calls. 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/1c74873c Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/tree/1c74873c Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/diff/1c74873c Branch: refs/heads/master Commit: 1c74873cd4a71e313e72c95f031bdeb22b89bced Parents: f729f5e Author: Zack Shoylev <[email protected]> Authored: Wed May 14 18:24:36 2014 -0500 Committer: Zack Shoylev <[email protected]> Committed: Fri May 16 13:03:52 2014 -0500 ---------------------------------------------------------------------- .../swift/v1/features/ObjectApiMockTest.java | 47 ++++++++++++++++++-- 1 file changed, 43 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/1c74873c/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 dc9f2fa..3917f51 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 @@ -22,7 +22,6 @@ import static org.jclouds.Constants.PROPERTY_MAX_RETRIES; import static org.jclouds.Constants.PROPERTY_RETRY_DELAY_START; import static org.jclouds.Constants.PROPERTY_SO_TIMEOUT; import static org.jclouds.http.options.GetOptions.Builder.tail; -import static org.jclouds.io.Payloads.newStringPayload; import static org.jclouds.openstack.swift.v1.features.ContainerApiMockTest.containerResponse; import static org.jclouds.openstack.swift.v1.options.ListContainerOptions.Builder.marker; import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.CONTAINER_ACL_ANYBODY_READ; @@ -43,6 +42,8 @@ import org.jclouds.date.internal.SimpleDateFormatDateService; import org.jclouds.http.HttpResponseException; import org.jclouds.io.Payload; import org.jclouds.io.Payloads; +import org.jclouds.io.payloads.ByteSourcePayload; +import org.jclouds.io.payloads.StringPayload; import org.jclouds.openstack.swift.v1.CopyObjectException; import org.jclouds.openstack.swift.v1.SwiftApi; import org.jclouds.openstack.swift.v1.domain.ObjectList; @@ -55,9 +56,11 @@ import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.io.ByteSource; import com.squareup.okhttp.mockwebserver.MockResponse; import com.squareup.okhttp.mockwebserver.MockWebServer; import com.squareup.okhttp.mockwebserver.RecordedRequest; +import static org.jclouds.Constants.PROPERTY_MAX_RETRIES; /** * Provides mock tests for the {@link ObjectApi}. @@ -159,7 +162,7 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { SwiftApi api = api(server.getUrl("/").toString(), "openstack-swift"); assertEquals( api.objectApiInRegionForContainer("DFW", "myContainer").replace("myObject", - newStringPayload("swifty"), metadata), "d9f5eb4bba4e2f2f046e54611bc8196b"); + new ByteSourcePayload(ByteSource.wrap("swifty".getBytes())), metadata), "d9f5eb4bba4e2f2f046e54611bc8196b"); assertEquals(server.getRequestCount(), 2); assertAuthentication(server); @@ -175,6 +178,42 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } } + public void testReplace408Retry() throws Exception { + MockWebServer server = mockOpenStackServer(); + server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); + server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(408))); // 1 + server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(408))); // 2 + server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(408))); // 3 + + // Finally success + server.enqueue(addCommonHeaders(new MockResponse() + .setResponseCode(201) + .addHeader("ETag", "d9f5eb4bba4e2f2f046e54611bc8196b"))); + + try { + Properties overrides = new Properties(); + overrides.setProperty(PROPERTY_MAX_RETRIES, 5 + ""); + + SwiftApi api = api(server.getUrl("/").toString(), "openstack-swift", overrides); + assertEquals( + api.objectApiInRegionForContainer("DFW", "myContainer").replace("myObject", + new ByteSourcePayload(ByteSource.wrap("swifty".getBytes())), metadata), "d9f5eb4bba4e2f2f046e54611bc8196b"); + + assertEquals(server.getRequestCount(), 5); + assertAuthentication(server); + RecordedRequest replace = server.takeRequest(); + // This should take a while. + assertRequest(replace, "PUT", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/myContainer/myObject"); + + assertEquals(new String(replace.getBody()), "swifty"); + for (Entry<String, String> entry : metadata.entrySet()) { + assertEquals(replace.getHeader(OBJECT_METADATA_PREFIX + entry.getKey().toLowerCase()), entry.getValue()); + } + } finally { + server.shutdown(); + } + } + /** upper-cases first char, and lower-cases rest!! **/ public void testHeadKnowingServerMessesWithMetadataKeyCaseFormat() throws Exception { MockWebServer server = mockOpenStackServer(); @@ -252,8 +291,8 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> { overrides.setProperty(PROPERTY_RETRY_DELAY_START, 0 + ""); // exponential backoff already working for this call. This is the delay BETWEEN attempts. final SwiftApi api = api(server.getUrl("/").toString(), "openstack-swift", overrides); - - String result = api.objectApiInRegionForContainer("DFW", "myContainer").replace("myObject", newStringPayload("swifty"), metadata); + + api.objectApiInRegionForContainer("DFW", "myContainer").replace("myObject", new ByteSourcePayload(ByteSource.wrap("swifty".getBytes())), metadata); fail("testReplaceTimeout test should have failed with an HttpResponseException."); } finally {
