Adds paging fail tests for Queues. Implements Queues-specific fallback.
diff --git a/openstack-marconi/src/main/java/org/jclouds/openstack/marconi/v1/fallbacks/EmptyQueuesFallback.java b/openstack-marconi/src/main/java/org/jclouds/openstack/marconi/v1/fallbacks/EmptyQueuesFallback.java
new file mode 100644
index 0000000..a3ac019
--- /dev/null
+++ b/openstack-marconi/src/main/java/org/jclouds/openstack/marconi/v1/fallbacks/EmptyQueuesFallback.java
@@ -0,0 +1,45 @@
+/*
+ * 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.marconi.v1.fallbacks;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.jclouds.Fallback;
+import org.jclouds.openstack.marconi.v1.domain.Queues;
+import org.jclouds.rest.ResourceNotFoundException;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Throwables.propagate;
+import static com.google.common.util.concurrent.Futures.immediateFuture;
+import static org.jclouds.http.HttpUtils.contains404;
+import static org.jclouds.util.Throwables2.getFirstThrowableOfType;
+
+public class EmptyQueuesFallback implements Fallback<Queues> {
+
+ public ListenableFuture<Queues> create(Throwable t) throws Exception {
+ return immediateFuture(createOrPropagate(t));
+ }
+
+ @Override
+ public Queues createOrPropagate(Throwable t) throws Exception {
+ if ((getFirstThrowableOfType(checkNotNull(t, "throwable"), ResourceNotFoundException.class) != null)
+ || contains404(t)) {
+ return Queues.EMPTY;
+ }
+ throw propagate(t);
+ }
+}
diff --git a/openstack-marconi/src/main/java/org/jclouds/openstack/marconi/v1/features/QueueApi.java b/openstack-marconi/src/main/java/org/jclouds/openstack/marconi/v1/features/QueueApi.java
index 7df6093..be81eb4 100644
--- a/openstack-marconi/src/main/java/org/jclouds/openstack/marconi/v1/features/QueueApi.java
+++ b/openstack-marconi/src/main/java/org/jclouds/openstack/marconi/v1/features/QueueApi.java
@@ -21,6 +21,7 @@
import org.jclouds.openstack.marconi.v1.domain.Queue;
import org.jclouds.openstack.marconi.v1.domain.QueueStats;
import org.jclouds.openstack.marconi.v1.domain.Queues;
+import org.jclouds.openstack.marconi.v1.fallbacks.EmptyQueuesFallback;
import org.jclouds.openstack.marconi.v1.functions.ParseQueueStats;
import org.jclouds.openstack.marconi.v1.functions.ParseQueues;
import org.jclouds.openstack.marconi.v1.functions.QueuesToPagedIterable;
@@ -47,7 +48,6 @@
import static org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404;
import static org.jclouds.Fallbacks.FalseOnNotFoundOr404;
-import static org.jclouds.openstack.keystone.v2_0.KeystoneFallbacks.EmptyPaginatedCollectionOnNotFoundOr404;
/**
* Provides access to Queues via their REST API.
@@ -114,7 +114,7 @@
@GET
@ResponseParser(ParseQueues.class)
@Consumes(MediaType.APPLICATION_JSON)
- @Fallback(EmptyPaginatedCollectionOnNotFoundOr404.class)
+ @Fallback(EmptyQueuesFallback.class)
@Path("queues")
Queues list(ListQueuesOptions options);
diff --git a/openstack-marconi/src/test/java/org/jclouds/openstack/marconi/v1/features/QueueApiMockTest.java b/openstack-marconi/src/test/java/org/jclouds/openstack/marconi/v1/features/QueueApiMockTest.java
index fb535b7..0307e7d 100644
--- a/openstack-marconi/src/test/java/org/jclouds/openstack/marconi/v1/features/QueueApiMockTest.java
+++ b/openstack-marconi/src/test/java/org/jclouds/openstack/marconi/v1/features/QueueApiMockTest.java
@@ -16,6 +16,7 @@
*/
package org.jclouds.openstack.marconi.v1.features;
+import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.squareup.okhttp.mockwebserver.MockResponse;
@@ -25,6 +26,7 @@
import org.jclouds.openstack.marconi.v1.domain.Queue;
import org.jclouds.openstack.marconi.v1.domain.QueueStats;
import org.jclouds.openstack.marconi.v1.domain.Queues;
+import org.jclouds.openstack.marconi.v1.options.ListQueuesOptions;
import org.jclouds.openstack.v2_0.internal.BaseOpenStackMockTest;
import org.testng.annotations.Test;
@@ -178,6 +180,42 @@
}
}
+ public void listOnePageOfQueuesFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(new MockResponse().setBody(accessRackspace));
+ server.enqueue(new MockResponse().setResponseCode(404));
+
+ try {
+ MarconiApi api = api(server.getUrl("/").toString(), "openstack-marconi");
+ QueueApi queueApi = api.getQueueApiForZoneAndClient("DFW", CLIENT_ID);
+
+ FluentIterable<Queue> queues = queueApi.list(false).concat();
+
+ assertTrue(queues.isEmpty(), "Expecting empty queues but was " + queues.toString());
+ }
+ finally {
+ server.shutdown();
+ }
+ }
+
+ public void listPagedIterableCollectionQueuesFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(new MockResponse().setBody(accessRackspace));
+ server.enqueue(new MockResponse().setResponseCode(404));
+
+ try {
+ MarconiApi api = api(server.getUrl("/").toString(), "openstack-marconi");
+ QueueApi queueApi = api.getQueueApiForZoneAndClient("DFW", CLIENT_ID);
+
+ Queues queues = queueApi.list(ListQueuesOptions.NONE);
+
+ assertTrue(queues.isEmpty(), "Expecting empty queues but was " + queues.toString());
+ }
+ finally {
+ server.shutdown();
+ }
+ }
+
public void listManyPagesOfQueues() throws Exception {
MockWebServer server = mockOpenStackServer();
server.enqueue(new MockResponse().setBody(accessRackspace));