JCLOUDS-565: Fixes a bug with swift where the metadata is updated, but the 
content-type is reset to application/x-www-form-urlencoded.

Workaround: send an empty Content-Type header, only for the updateMetadata call.
Re-commit of ac117fc with correct issue number.


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/0ab7dcbf
Tree: 
http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/tree/0ab7dcbf
Diff: 
http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/diff/0ab7dcbf

Branch: refs/heads/1.7.x
Commit: 0ab7dcbf76b37828ca10b080d587f7a2defab72a
Parents: aae382f
Author: Zack Shoylev <[email protected]>
Authored: Mon May 12 23:15:08 2014 -0500
Committer: Andrew Phillips <[email protected]>
Committed: Wed May 14 08:57:34 2014 -0400

----------------------------------------------------------------------
 .../openstack/swift/v1/features/ObjectApi.java  |  2 ++
 .../swift/v1/features/ObjectApiMockTest.java    | 27 ++++++++++++++++++++
 2 files changed, 29 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/0ab7dcbf/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ObjectApi.java
----------------------------------------------------------------------
diff --git 
a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ObjectApi.java
 
b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ObjectApi.java
index e56de7d..4c442fd 100644
--- 
a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ObjectApi.java
+++ 
b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ObjectApi.java
@@ -30,6 +30,7 @@ import javax.ws.rs.POST;
 import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
 
 import org.jclouds.Fallbacks.FalseOnNotFoundOr404;
 import org.jclouds.Fallbacks.NullOnNotFoundOr404;
@@ -173,6 +174,7 @@ public interface ObjectApi {
    @POST
    @Fallback(FalseOnNotFoundOr404.class)
    @Path("/{objectName}")
+   @Produces("")
    boolean updateMetadata(@PathParam("objectName") String objectName,
          @BinderParam(BindObjectMetadataToHeaders.class) Map<String, String> 
metadata);
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/0ab7dcbf/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 7fe10b7..276a5e0 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
@@ -256,6 +256,33 @@ public class ObjectApiMockTest extends 
BaseOpenStackMockTest<SwiftApi> {
       }
    }
 
+   public void testUpdateMetadataContentType() throws Exception {
+      MockWebServer server = mockOpenStackServer();
+      server.enqueue(addCommonHeaders(new 
MockResponse().setBody(stringFromResource("/access.json"))));
+      server.enqueue(addCommonHeaders(objectResponse()
+            .addHeader(OBJECT_METADATA_PREFIX + "ApiName", "swift")
+            .addHeader(OBJECT_METADATA_PREFIX + "ApiVersion", "v1.1")));
+
+      try {
+         SwiftApi api = api(server.getUrl("/").toString(), "openstack-swift");
+         assertTrue(api.objectApiInRegionForContainer("DFW", 
"myContainer").updateMetadata("myObject", metadata));
+
+         assertEquals(server.getRequestCount(), 2);
+         assertEquals(server.takeRequest().getRequestLine(), "POST /tokens 
HTTP/1.1");
+         RecordedRequest replaceRequest = server.takeRequest();
+         assertEquals(replaceRequest.getHeaders("Content-Type").get(0), "", 
"updateMetadata should send an empty content-type header, but sent "
+               + replaceRequest.getHeaders("Content-Type").get(0).toString());
+
+         assertEquals(replaceRequest.getRequestLine(),
+               "POST 
/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/myContainer/myObject 
HTTP/1.1");
+         for (Entry<String, String> entry : metadata.entrySet()) {
+            assertEquals(replaceRequest.getHeader(OBJECT_METADATA_PREFIX + 
entry.getKey().toLowerCase()), entry.getValue());
+         }
+      } finally {
+         server.shutdown();
+      }
+   }
+
    public void deleteMetadata() throws Exception {
       MockWebServer server = mockOpenStackServer();
       server.enqueue(addCommonHeaders(new 
MockResponse().setBody(stringFromResource("/access.json"))));

Reply via email to