JCLOUDS-641 fix return code for deleteIfEmpty
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/cc00dee9 Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/tree/cc00dee9 Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/diff/cc00dee9 Branch: refs/heads/master Commit: cc00dee92a3075fa26b4fef307d79f571ad9de73 Parents: 389a3d8 Author: Adrian Cole <[email protected]> Authored: Tue Oct 7 21:33:21 2014 -0700 Committer: Adrian Cole <[email protected]> Committed: Tue Oct 7 22:05:58 2014 -0700 ---------------------------------------------------------------------- .../openstack/swift/v1/SwiftFallbacks.java | 43 ++++++++++++++++++++ .../swift/v1/features/ContainerApi.java | 4 +- .../swift/v1/features/ContainerApiMockTest.java | 3 +- 3 files changed, 46 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/cc00dee9/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/SwiftFallbacks.java ---------------------------------------------------------------------- diff --git a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/SwiftFallbacks.java b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/SwiftFallbacks.java new file mode 100644 index 0000000..c875707 --- /dev/null +++ b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/SwiftFallbacks.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.openstack.swift.v1; + +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Predicates.equalTo; +import static com.google.common.base.Throwables.propagate; +import static org.jclouds.http.HttpUtils.contains404; +import static org.jclouds.http.HttpUtils.returnValueOnCodeOrNull; + +import org.jclouds.Fallback; + +public final class SwiftFallbacks { + + public static final class TrueOn404FalseOn409 implements Fallback<Boolean> { + @Override + public Boolean createOrPropagate(Throwable t) throws Exception { + if (contains404(checkNotNull(t, "throwable"))) + return true; + if (returnValueOnCodeOrNull(t, false, equalTo(409)) != null) + return false; + throw propagate(t); + } + } + + private SwiftFallbacks() { + throw new AssertionError("intentionally unimplemented"); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/cc00dee9/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ContainerApi.java ---------------------------------------------------------------------- diff --git a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ContainerApi.java b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ContainerApi.java index 1eb7ddf..4cbac0d 100644 --- a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ContainerApi.java +++ b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ContainerApi.java @@ -17,6 +17,7 @@ package org.jclouds.openstack.swift.v1.features; import static javax.ws.rs.core.MediaType.APPLICATION_JSON; +import static org.jclouds.openstack.swift.v1.SwiftFallbacks.TrueOn404FalseOn409; import java.util.Map; @@ -33,7 +34,6 @@ import javax.ws.rs.PathParam; import org.jclouds.Fallbacks.EmptyFluentIterableOnNotFoundOr404; import org.jclouds.Fallbacks.FalseOnNotFoundOr404; import org.jclouds.Fallbacks.NullOnNotFoundOr404; -import org.jclouds.Fallbacks.TrueOnNotFoundOr404; import org.jclouds.javax.annotation.Nullable; import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest; import org.jclouds.openstack.swift.v1.binders.BindMetadataToHeaders.BindContainerMetadataToHeaders; @@ -209,7 +209,7 @@ public interface ContainerApi { @Named("container:deleteIfEmpty") @DELETE @Path("/{containerName}") - @Fallback(TrueOnNotFoundOr404.class) + @Fallback(TrueOn404FalseOn409.class) boolean deleteIfEmpty(@PathParam("containerName") String containerName) throws IllegalStateException; } http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/cc00dee9/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 64c5993..6b3ef66 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 @@ -334,7 +334,6 @@ public class ContainerApiMockTest extends BaseOpenStackMockTest<SwiftApi> { } } - @Test(expectedExceptions = IllegalStateException.class) public void testDeleteWhenNotEmpty() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); @@ -342,7 +341,7 @@ public class ContainerApiMockTest extends BaseOpenStackMockTest<SwiftApi> { try { SwiftApi api = api(server.getUrl("/").toString(), "openstack-swift"); - api.getContainerApi("DFW").deleteIfEmpty("myContainer"); + assertFalse(api.getContainerApi("DFW").deleteIfEmpty("myContainer")); } finally { assertEquals(server.getRequestCount(), 2);
