You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by za...@apache.org on 2014/05/16 20:07:50 UTC

git commit: Adds a mock test to ensure 408 errors are handled properly in swift. This is more likely to happen in swift calls.

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 <za...@rackspace.com>
Authored: Wed May 14 18:24:36 2014 -0500
Committer: Zack Shoylev <za...@rackspace.com>
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 {