From 0b0373c91f5758382677e949cdb5c30ffe495144 Mon Sep 17 00:00:00 2001 From: Everett Toews Date: Sun, 9 Dec 2012 12:36:59 -0600 Subject: [PATCH] Modernizing the Rackspace Cloud Load Balancers API. Following naming conventions and using PagedIterable. --- .../CloudLoadBalancersApi.java | 14 +- .../CloudLoadBalancersAsyncApi.java | 14 +- .../CloudLoadBalancersRestClientModule.java | 12 +- .../domain/LoadBalancer.java | 6 +- .../domain/internal/BaseLoadBalancer.java | 41 +++--- ...lancerClient.java => LoadBalancerApi.java} | 30 +++-- ...cClient.java => LoadBalancerAsyncApi.java} | 68 ++++++---- .../{NodeClient.java => NodeApi.java} | 57 ++++---- ...NodeAsyncClient.java => NodeAsyncApi.java} | 88 +++++++------ ...adBalancer.java => ParseLoadBalancer.java} | 8 +- .../functions/ParseLoadBalancers.java | 124 ++++++++++++++++++ .../functions/ParseNodes.java | 107 +++++++++++++++ .../functions/UnwrapLoadBalancers.java | 74 ----------- ...dBalancersDestroyLoadBalancerStrategy.java | 2 +- ...ancersGetLoadBalancerMetadataStrategy.java | 2 +- ...oadBalancersListLoadBalancersStrategy.java | 33 ++--- ...LoadBalancersLoadBalanceNodesStrategy.java | 2 +- .../predicates/LoadBalancerActive.java | 2 +- .../predicates/LoadBalancerDeleted.java | 2 +- ...st.java => LoadBalancerApiExpectTest.java} | 43 +++--- ...Test.java => LoadBalancerApiLiveTest.java} | 23 ++-- ...ExpectTest.java => NodeApiExpectTest.java} | 43 +++--- ...ientLiveTest.java => NodeApiLiveTest.java} | 37 +++--- ...erTest.java => ParseLoadBalancerTest.java} | 6 +- ... => ParseLoadBalancerWhenDeletedTest.java} | 6 +- ...sTest.java => ParseLoadBalancersTest.java} | 33 ++--- ...> BaseCloudLoadBalancerApiExpectTest.java} | 4 +- ...=> BaseCloudLoadBalancersApiLiveTest.java} | 4 +- .../BaseIterableWithMarkerParserTest.java | 37 ++++++ ...BalancersUKLoadBalancerClientLiveTest.java | 4 +- ...loudLoadBalancersUKNodeClientLiveTest.java | 4 +- ...BalancersUSLoadBalancerClientLiveTest.java | 4 +- ...loudLoadBalancersUSNodeClientLiveTest.java | 4 +- 33 files changed, 572 insertions(+), 366 deletions(-) rename apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/{LoadBalancerClient.java => LoadBalancerApi.java} (84%) rename apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/{LoadBalancerAsyncClient.java => LoadBalancerAsyncApi.java} (56%) rename apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/{NodeClient.java => NodeApi.java} (75%) rename apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/{NodeAsyncClient.java => NodeAsyncApi.java} (56%) rename apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/{UnwrapLoadBalancer.java => ParseLoadBalancer.java} (87%) create mode 100644 apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseLoadBalancers.java create mode 100644 apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseNodes.java delete mode 100644 apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/UnwrapLoadBalancers.java rename apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/{LoadBalancerExpectTest.java => LoadBalancerApiExpectTest.java} (81%) rename apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/{LoadBalancerClientLiveTest.java => LoadBalancerApiLiveTest.java} (86%) rename apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/{NodeExpectTest.java => NodeApiExpectTest.java} (86%) rename apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/{NodeClientLiveTest.java => NodeApiLiveTest.java} (80%) rename apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/{UnwrapLoadBalancerTest.java => ParseLoadBalancerTest.java} (93%) rename apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/{UnwrapLoadBalancerWhenDeletedTest.java => ParseLoadBalancerWhenDeletedTest.java} (91%) rename apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/{UnwrapLoadBalancersTest.java => ParseLoadBalancersTest.java} (86%) rename apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/internal/{BaseCloudLoadBalancerExpectTest.java => BaseCloudLoadBalancerApiExpectTest.java} (93%) rename apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/internal/{BaseCloudLoadBalancersClientLiveTest.java => BaseCloudLoadBalancersApiLiveTest.java} (94%) create mode 100644 core/src/test/java/org/jclouds/json/BaseIterableWithMarkerParserTest.java diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/CloudLoadBalancersApi.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/CloudLoadBalancersApi.java index d34a5d1d85..c0d2d5f847 100644 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/CloudLoadBalancersApi.java +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/CloudLoadBalancersApi.java @@ -21,12 +21,15 @@ package org.jclouds.rackspace.cloudloadbalancers; import java.util.Set; import java.util.concurrent.TimeUnit; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; + import org.jclouds.concurrent.Timeout; import org.jclouds.javax.annotation.Nullable; import org.jclouds.location.Zone; import org.jclouds.location.functions.ZoneToEndpoint; -import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerClient; -import org.jclouds.rackspace.cloudloadbalancers.features.NodeClient; +import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerApi; +import org.jclouds.rackspace.cloudloadbalancers.features.NodeApi; import org.jclouds.rest.annotations.Delegate; import org.jclouds.rest.annotations.EndpointParam; @@ -52,14 +55,15 @@ public interface CloudLoadBalancersApi { * Provides synchronous access to LoadBalancer features. */ @Delegate - LoadBalancerClient getLoadBalancerClient( + LoadBalancerApi getLoadBalancerApiForZone( @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone); /** * Provides synchronous access to Node features. */ @Delegate - NodeClient getNodeClient( - @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone); + @Path("/loadbalancers/{lbId}") + NodeApi getNodeApiForZoneAndLoadBalancer( + @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone, @PathParam("lbId") int lbId); } diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/CloudLoadBalancersAsyncApi.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/CloudLoadBalancersAsyncApi.java index 3dbf012e34..7a897da815 100644 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/CloudLoadBalancersAsyncApi.java +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/CloudLoadBalancersAsyncApi.java @@ -20,11 +20,14 @@ package org.jclouds.rackspace.cloudloadbalancers; import java.util.Set; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; + import org.jclouds.javax.annotation.Nullable; import org.jclouds.location.Zone; import org.jclouds.location.functions.ZoneToEndpoint; -import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerAsyncClient; -import org.jclouds.rackspace.cloudloadbalancers.features.NodeAsyncClient; +import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerAsyncApi; +import org.jclouds.rackspace.cloudloadbalancers.features.NodeAsyncApi; import org.jclouds.rest.annotations.Delegate; import org.jclouds.rest.annotations.EndpointParam; @@ -49,14 +52,15 @@ public interface CloudLoadBalancersAsyncApi { * Provides asynchronous access to LoadBalancer features. */ @Delegate - LoadBalancerAsyncClient getLoadBalancerClient( + LoadBalancerAsyncApi getLoadBalancerApiForZone( @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone); /** * Provides asynchronous access to Node features. */ @Delegate - NodeAsyncClient getNodeClient( - @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone); + @Path("/loadbalancers/{lbId}") + NodeAsyncApi getNodeApiForZoneAndLoadBalancer( + @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone, @PathParam("lbId") int lbId); } diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/config/CloudLoadBalancersRestClientModule.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/config/CloudLoadBalancersRestClientModule.java index f8fd9e1c17..5bbc8f35dd 100644 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/config/CloudLoadBalancersRestClientModule.java +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/config/CloudLoadBalancersRestClientModule.java @@ -28,10 +28,10 @@ import org.jclouds.json.config.GsonModule.DateAdapter; import org.jclouds.json.config.GsonModule.Iso8601DateAdapter; import org.jclouds.rackspace.cloudloadbalancers.CloudLoadBalancersAsyncApi; import org.jclouds.rackspace.cloudloadbalancers.CloudLoadBalancersApi; -import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerAsyncClient; -import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerClient; -import org.jclouds.rackspace.cloudloadbalancers.features.NodeAsyncClient; -import org.jclouds.rackspace.cloudloadbalancers.features.NodeClient; +import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerAsyncApi; +import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerApi; +import org.jclouds.rackspace.cloudloadbalancers.features.NodeAsyncApi; +import org.jclouds.rackspace.cloudloadbalancers.features.NodeApi; import org.jclouds.rackspace.cloudloadbalancers.functions.ConvertLB; import org.jclouds.rackspace.cloudloadbalancers.handlers.ParseCloudLoadBalancersErrorFromHttpResponse; import org.jclouds.rest.ConfiguresRestClient; @@ -50,8 +50,8 @@ public class CloudLoadBalancersRestClientModule extends RestClientModule { public static final Map, Class> DELEGATE_MAP = ImmutableMap., Class> builder() - .put(LoadBalancerClient.class, LoadBalancerAsyncClient.class) - .put(NodeClient.class, NodeAsyncClient.class) + .put(LoadBalancerApi.class, LoadBalancerAsyncApi.class) + .put(NodeApi.class, NodeAsyncApi.class) .build(); public CloudLoadBalancersRestClientModule() { diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/domain/LoadBalancer.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/domain/LoadBalancer.java index 00d9db31c8..cb844182a5 100644 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/domain/LoadBalancer.java +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/domain/LoadBalancer.java @@ -26,7 +26,7 @@ import java.util.Set; import org.jclouds.javax.annotation.Nullable; import org.jclouds.rackspace.cloudloadbalancers.domain.internal.BaseLoadBalancer; -import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerClient; +import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerApi; import com.google.common.base.Objects; import com.google.common.base.Objects.ToStringHelper; @@ -344,8 +344,8 @@ public class LoadBalancer extends BaseLoadBalancer { /** * Broken out as a separate field because when LoadBalancers are returned from - * {@link LoadBalancerClient#listLoadBalancers()}, no Nodes are returned (so you can't rely on getNodes().size()) - * but a nodeCount is returned. When {@link LoadBalancerClient#getLoadBalancer(int)} is called, nodes are + * {@link LoadBalancerApi#list()}, no Nodes are returned (so you can't rely on getNodes().size()) + * but a nodeCount is returned. When {@link LoadBalancerApi#get(int)} is called, nodes are * returned by no nodeCount is returned. * * @return The number of Nodes in this LoadBalancer diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/domain/internal/BaseLoadBalancer.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/domain/internal/BaseLoadBalancer.java index dabcc5253c..b635e7bc20 100644 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/domain/internal/BaseLoadBalancer.java +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/domain/internal/BaseLoadBalancer.java @@ -24,7 +24,10 @@ import java.util.Set; import java.util.SortedSet; import org.jclouds.javax.annotation.Nullable; +import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancer; +import com.google.common.base.Objects; +import com.google.common.base.Objects.ToStringHelper; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Sets; @@ -147,34 +150,28 @@ public class BaseLoadBalancer, T extends BaseLoadBalancer< return nodes; } + protected ToStringHelper string() { + return Objects.toStringHelper(this) + .add("name", name).add("protocol", protocol).add("port", port) + .add("algorithm", algorithm).add("nodes", nodes); + } + + @Override + public String toString() { + return string().toString(); + } + @Override public int hashCode() { - final Integer prime = 31; - Integer result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - return result; + return Objects.hashCode(name); } @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - BaseLoadBalancer other = (BaseLoadBalancer) obj; - if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) - return false; - return true; - } + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; - @Override - public String toString() { - return String.format("[name=%s, port=%s, protocol=%s, algorithm=%s, nodes=%s]", name, port, protocol, algorithm, - nodes); + LoadBalancer that = LoadBalancer.class.cast(obj); + return Objects.equal(this.name, that.name); } } diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerClient.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerApi.java similarity index 84% rename from apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerClient.java rename to apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerApi.java index b4f1cf31ad..340c218f7e 100644 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerClient.java +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerApi.java @@ -18,10 +18,13 @@ */ package org.jclouds.rackspace.cloudloadbalancers.features; -import java.util.Set; import java.util.concurrent.TimeUnit; +import org.jclouds.collect.IterableWithMarker; +import org.jclouds.collect.PagedIterable; import org.jclouds.concurrent.Timeout; +import org.jclouds.http.HttpResponseException; +import org.jclouds.openstack.v2_0.options.PaginationOptions; import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancer; import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancerAttributes; import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancerRequest; @@ -30,14 +33,11 @@ import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancerRequest; * Provides synchronous access to CloudLoadBalancers LoadBalancer features. *

* - * @see LoadBalancerAsyncClient - * @see - * @author Adrian Cole + * @see LoadBalancerAsyncApi + * @author Everett Toews */ @Timeout(duration = 60, timeUnit = TimeUnit.SECONDS) -public interface LoadBalancerClient { +public interface LoadBalancerApi { /** * Create a new load balancer with the configuration defined by the request. * @@ -51,13 +51,13 @@ public interface LoadBalancerClient { * configuration to create * @return The object will contain a unique identifier and status of the request. Using the * identifier, the caller can check on the progress of the operation by performing a - * {@link LoadBalancerClient#getLoadBalancer}. + * {@link LoadBalancerApi#getLoadBalancer}. * @throws HttpResponseException * If the corresponding request cannot be fulfilled due to insufficient or invalid * data * */ - LoadBalancer createLoadBalancer(LoadBalancerRequest lb); + LoadBalancer create(LoadBalancerRequest lb); /** * @@ -75,16 +75,18 @@ public interface LoadBalancerClient { * what to change * @return The object will contain a unique identifier and status of the request. Using the * identifier, the caller can check on the progress of the operation by performing a - * {@link LoadBalancerClient#getLoadBalancer}. + * {@link LoadBalancerApi#getLoadBalancer}. * @see LoadBalancerAttributes#fromLoadBalancer */ - void updateLoadBalancerAttributes(int id, LoadBalancerAttributes attrs); + void update(int id, LoadBalancerAttributes attrs); /** * * @return all load balancers configured for the account, or empty set if none available */ - Set listLoadBalancers(); + PagedIterable list(); + + IterableWithMarker list(PaginationOptions options); /** * @@ -93,7 +95,7 @@ public interface LoadBalancerClient { * id of the loadbalancer to retrieve * @return details of the specified load balancer, or null if not found */ - LoadBalancer getLoadBalancer(int id); + LoadBalancer get(int id); /** * Remove a load balancer from the account. @@ -105,5 +107,5 @@ public interface LoadBalancerClient { * @param id * to remove */ - void removeLoadBalancer(int id); + void remove(int id); } diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerAsyncClient.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerAsyncApi.java similarity index 56% rename from apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerAsyncClient.java rename to apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerAsyncApi.java index ffad710fe1..a38aaa5dee 100644 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerAsyncClient.java +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerAsyncApi.java @@ -18,8 +18,6 @@ */ package org.jclouds.rackspace.cloudloadbalancers.features; -import java.util.Set; - import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -29,84 +27,96 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.MediaType; +import org.jclouds.collect.IterableWithMarker; +import org.jclouds.collect.PagedIterable; import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest; +import org.jclouds.openstack.keystone.v2_0.functions.ReturnEmptyPaginatedCollectionOnNotFoundOr404; +import org.jclouds.openstack.v2_0.options.PaginationOptions; import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancer; import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancerAttributes; import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancerRequest; -import org.jclouds.rackspace.cloudloadbalancers.functions.UnwrapLoadBalancer; -import org.jclouds.rackspace.cloudloadbalancers.functions.UnwrapLoadBalancers; +import org.jclouds.rackspace.cloudloadbalancers.functions.ParseLoadBalancer; +import org.jclouds.rackspace.cloudloadbalancers.functions.ParseLoadBalancers; import org.jclouds.rest.annotations.ExceptionParser; import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.rest.annotations.ResponseParser; import org.jclouds.rest.annotations.SkipEncoding; +import org.jclouds.rest.annotations.Transform; import org.jclouds.rest.annotations.WrapWith; -import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404; +import org.jclouds.rest.functions.ReturnEmptyPagedIterableOnNotFoundOr404; import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404; import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404; import com.google.common.util.concurrent.ListenableFuture; /** - * Provides asynchronous access toRackspace Cloud Load Balancers via their REST API. + * Provides asynchronous access to Rackspace Cloud Load Balancers via their REST API. *

* - * @see LoadBalancerClient - * @see - * @author Adrian Cole + * @see LoadBalancerApi + * @author Everett Toews */ @SkipEncoding('/') @RequestFilters(AuthenticateRequest.class) -public interface LoadBalancerAsyncClient { +public interface LoadBalancerAsyncApi { /** - * @see LoadBalancerClient#createLoadBalancer + * @see LoadBalancerApi#create(LoadBalancerRequest) */ @POST - @ResponseParser(UnwrapLoadBalancer.class) + @ResponseParser(ParseLoadBalancer.class) @Consumes(MediaType.APPLICATION_JSON) @ExceptionParser(ReturnNullOnNotFoundOr404.class) @Path("/loadbalancers") - ListenableFuture createLoadBalancer(@WrapWith("loadBalancer") LoadBalancerRequest lb); + ListenableFuture create(@WrapWith("loadBalancer") LoadBalancerRequest lb); /** - * @see LoadBalancerClient#updateLoadBalancerAttributes + * @see LoadBalancerApi#update(int, LoadBalancerAttributes) */ @PUT - @ResponseParser(UnwrapLoadBalancer.class) + @ResponseParser(ParseLoadBalancer.class) @Consumes(MediaType.APPLICATION_JSON) @Path("/loadbalancers/{id}") - ListenableFuture updateLoadBalancerAttributes(@PathParam("id") int id, - @WrapWith("loadBalancer") LoadBalancerAttributes attrs); + ListenableFuture update(@PathParam("id") int id, @WrapWith("loadBalancer") LoadBalancerAttributes attrs); /** - * @see CloudServersClient#listLoadBalancers + * @see LoadBalancerApi#list() */ @GET - @ResponseParser(UnwrapLoadBalancers.class) + @ResponseParser(ParseLoadBalancers.class) + @Transform(ParseLoadBalancers.ToPagedIterable.class) @Consumes(MediaType.APPLICATION_JSON) @Path("/loadbalancers") - @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class) - ListenableFuture> listLoadBalancers(); + @ExceptionParser(ReturnEmptyPagedIterableOnNotFoundOr404.class) + ListenableFuture> list(); - /** - * @see LoadBalancerClient#getLoadBalancer + /** + * @see LoadBalancerApi#list(PaginationOptions) */ @GET - @ResponseParser(UnwrapLoadBalancer.class) + @ResponseParser(ParseLoadBalancers.class) + @Consumes(MediaType.APPLICATION_JSON) + @ExceptionParser(ReturnEmptyPaginatedCollectionOnNotFoundOr404.class) + @Path("/loadbalancers") + ListenableFuture> list(PaginationOptions options); + + /** + * @see LoadBalancerApi#get(int) + */ + @GET + @ResponseParser(ParseLoadBalancer.class) @Consumes(MediaType.APPLICATION_JSON) @ExceptionParser(ReturnNullOnNotFoundOr404.class) @Path("/loadbalancers/{id}") - ListenableFuture getLoadBalancer(@PathParam("id") int id); + ListenableFuture get(@PathParam("id") int id); /** - * @see LoadBalancerClient#removeLoadBalancer + * @see LoadBalancerApi#remove(int) */ @DELETE @ExceptionParser(ReturnVoidOnNotFoundOr404.class) @Path("/loadbalancers/{id}") @Consumes("*/*") - ListenableFuture removeLoadBalancer(@PathParam("id") int id); + ListenableFuture remove(@PathParam("id") int id); } diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeClient.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeApi.java similarity index 75% rename from apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeClient.java rename to apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeApi.java index 736194df8a..5dc1ffea7a 100644 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeClient.java +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeApi.java @@ -21,7 +21,12 @@ package org.jclouds.rackspace.cloudloadbalancers.features; import java.util.Set; import java.util.concurrent.TimeUnit; +import org.jclouds.collect.IterableWithMarker; +import org.jclouds.collect.PagedIterable; import org.jclouds.concurrent.Timeout; +import org.jclouds.http.HttpResponseException; +import org.jclouds.openstack.v2_0.options.PaginationOptions; +import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancerAttributes; import org.jclouds.rackspace.cloudloadbalancers.domain.Node; import org.jclouds.rackspace.cloudloadbalancers.domain.NodeAttributes; import org.jclouds.rackspace.cloudloadbalancers.domain.NodeRequest; @@ -30,14 +35,11 @@ import org.jclouds.rackspace.cloudloadbalancers.domain.NodeRequest; * Provides synchronous access to CloudLoadBalancers Node features. *

* - * @see NodeAsyncClient - * @see - * @author Dan Lo Bianco + * @see NodeAsyncApi + * @author Everett Toews */ @Timeout(duration = 60, timeUnit = TimeUnit.SECONDS) -public interface NodeClient { +public interface NodeApi { /** * Create a new node with the configuration defined by the request. * @@ -49,15 +51,13 @@ public interface NodeClient { * * @param nodes * configurations to create - * @param lbid - * loadbalancer on which to create the nodes * @return created nodes * @throws HttpResponseException * If the corresponding request cannot be fulfilled due to insufficient or invalid * data * */ - Set createNodesInLoadBalancer(Set nodes, int lbid); + Set add(Iterable nodes); /** * @@ -68,37 +68,28 @@ public interface NodeClient { * successful validation of the request, the service will return a 202 (Accepted) response code. * A caller can poll the load balancer with its ID to wait for the changes to be applied and the * load balancer to return to an ACTIVE status. - * + * @param id + * node to get * @param attrs * what to change - * @param nid - * node to get - * @param lbid - * loadbalancer from which to get the node - * + * * @see LoadBalancerAttributes#fromLoadBalancer */ - void updateAttributesForNodeInLoadBalancer(NodeAttributes attrs, int nid, int lbid); + void update(int id, NodeAttributes attrs); /** - * * @return all nodes for a given loadbalancer, or empty set if none available - * - * @param lbid - * id of the loadbalancer to get the nodes for */ - Set listNodes(int lbid); + PagedIterable list(); + + IterableWithMarker list(PaginationOptions options); /** - * - * - * @param nid + * @param id * node to get - * @param lbid - * loadbalancer from which to get the node * @return details of the specified node, or null if not found */ - Node getNodeInLoadBalancer(int nid, int lbid); + Node get(int id); /** * Remove a node from the account. @@ -107,12 +98,10 @@ public interface NodeClient { * configuration from the account. Any and all configuration data is immediately purged and is * not recoverable. * - * @param nid + * @param id * node to remove - * @param lbid - * loadbalancer from which to remove the node */ - void removeNodeFromLoadBalancer(int nid, int lbid); + void remove(int id); /** * Batch-remove nodes from the account. @@ -122,10 +111,8 @@ public interface NodeClient { * cannot be removed due to its current status a 400:BadRequest is returned along with the ids * of the ones the system identified as potential failures for this request * - * @param nids + * @param ids * nodes to remove - * @param lbid - * loadbalancer from which to remove the node */ - void removeNodesFromLoadBalancer(Set nids, int lbid); + void remove(Iterable ids); } diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeAsyncClient.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeAsyncApi.java similarity index 56% rename from apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeAsyncClient.java rename to apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeAsyncApi.java index dcf5b0507e..054c16aa74 100644 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeAsyncClient.java +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeAsyncApi.java @@ -30,15 +30,25 @@ import javax.ws.rs.PathParam; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; +import org.jclouds.collect.IterableWithMarker; +import org.jclouds.collect.PagedIterable; import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest; +import org.jclouds.openstack.keystone.v2_0.functions.ReturnEmptyPaginatedCollectionOnNotFoundOr404; +import org.jclouds.openstack.v2_0.options.PaginationOptions; +import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancer; import org.jclouds.rackspace.cloudloadbalancers.domain.Node; import org.jclouds.rackspace.cloudloadbalancers.domain.NodeAttributes; import org.jclouds.rackspace.cloudloadbalancers.domain.NodeRequest; +import org.jclouds.rackspace.cloudloadbalancers.functions.ParseLoadBalancers; +import org.jclouds.rackspace.cloudloadbalancers.functions.ParseNodes; import org.jclouds.rest.annotations.ExceptionParser; import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; import org.jclouds.rest.annotations.SelectJson; import org.jclouds.rest.annotations.SkipEncoding; +import org.jclouds.rest.annotations.Transform; import org.jclouds.rest.annotations.WrapWith; +import org.jclouds.rest.functions.ReturnEmptyPagedIterableOnNotFoundOr404; import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404; import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404; import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404; @@ -46,80 +56,82 @@ import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404; import com.google.common.util.concurrent.ListenableFuture; /** - * Provides asynchronous access to CloudLoadBalancers Node features. + * Provides asynchronous access to Cloud Load Balancers Node features. *

* - * @see NodeAsyncClient - * @see - * @author Dan Lo Bianco + * @see NodeAsyncApi + * @author Everett Toews */ @SkipEncoding('/') @RequestFilters(AuthenticateRequest.class) -public interface NodeAsyncClient { +public interface NodeAsyncApi { /** - * @see NodeClient#createNodesInLoadBalancer + * @see NodeApi#add(Set) */ @POST @SelectJson("nodes") @Consumes(MediaType.APPLICATION_JSON) @ExceptionParser(ReturnNullOnNotFoundOr404.class) - @Path("/loadbalancers/{lbid}/nodes") - ListenableFuture> createNodesInLoadBalancer(@WrapWith("nodes") Set nodes, - @PathParam("lbid") int lbid); + @Path("/nodes") + ListenableFuture> add(@WrapWith("nodes") Iterable nodes); /** - * @see NodeClient#updateAttributesForNodeInLoadBalancer + * @see NodeApi#update(int, NodeAttributes) */ @PUT @Consumes(MediaType.APPLICATION_JSON) - @Path("/loadbalancers/{lbid}/nodes/{nid}") - ListenableFuture updateAttributesForNodeInLoadBalancer(@WrapWith("node") NodeAttributes attrs, - @PathParam("nid") int nid, - @PathParam("lbid") int lbid); - - /** - * @see NodeClient#listNodes - */ - @GET - @SelectJson("nodes") - @Consumes(MediaType.APPLICATION_JSON) - @Path("/loadbalancers/{lbid}/nodes") - @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class) - ListenableFuture> listNodes(@PathParam("lbid") int lbid); + @Path("/nodes/{id}") + ListenableFuture update(@PathParam("id") int id, @WrapWith("node") NodeAttributes attrs); /** - * @see NodeClient#getNodeInLoadBalancer + * @see NodeApi#list() + */ + @GET + @ResponseParser(ParseNodes.class) + @Transform(ParseNodes.ToPagedIterable.class) + @Consumes(MediaType.APPLICATION_JSON) + @Path("/nodes") + @ExceptionParser(ReturnEmptyPagedIterableOnNotFoundOr404.class) + ListenableFuture> list(); + + /** + * @see NodeApi#list(PaginationOptions) + */ + @GET + @ResponseParser(ParseNodes.class) + @Consumes(MediaType.APPLICATION_JSON) + @ExceptionParser(ReturnEmptyPaginatedCollectionOnNotFoundOr404.class) + @Path("/loadbalancers") + ListenableFuture> list(PaginationOptions options); + + /** + * @see NodeApi#get(int) */ @GET @SelectJson("node") @Consumes(MediaType.APPLICATION_JSON) - @Path("/loadbalancers/{lbid}/nodes/{nid}") + @Path("/nodes/{id}") @ExceptionParser(ReturnNullOnNotFoundOr404.class) - ListenableFuture getNodeInLoadBalancer(@PathParam("nid") int nid, - @PathParam("lbid") int lbid); + ListenableFuture get(@PathParam("id") int id); /** - * @see NodeClient#removeNodeFromLoadBalancer + * @see NodeApi#remove(int) */ @DELETE - @Path("/loadbalancers/{lbid}/nodes/{nid}") + @Path("/nodes/{id}") @ExceptionParser(ReturnVoidOnNotFoundOr404.class) @Consumes("*/*") - ListenableFuture removeNodeFromLoadBalancer(@PathParam("nid") int nid, - @PathParam("lbid") int lbid); + ListenableFuture remove(@PathParam("id") int id); /** - * @see NodeClient#removeNodesFromLoadBalancer + * @see NodeApi#remove(Set) */ @DELETE - @Path("/loadbalancers/{lbid}/nodes") + @Path("/nodes") @ExceptionParser(ReturnVoidOnNotFoundOr404.class) @Consumes("*/*") - ListenableFuture removeNodesFromLoadBalancer(@QueryParam("id") Set nids, - @PathParam("lbid") int lbid); + ListenableFuture remove(@QueryParam("id") Iterable ids); } diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/UnwrapLoadBalancer.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseLoadBalancer.java similarity index 87% rename from apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/UnwrapLoadBalancer.java rename to apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseLoadBalancer.java index 713d87ae86..cc64b5a415 100644 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/UnwrapLoadBalancer.java +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseLoadBalancer.java @@ -38,7 +38,7 @@ import com.google.common.collect.Iterables; /** * @author Adrian Cole */ -public class UnwrapLoadBalancer implements Function, InvocationContext { +public class ParseLoadBalancer implements Function, InvocationContext { private final ParseJson> json; private final Factory factory; @@ -46,7 +46,7 @@ public class UnwrapLoadBalancer implements Function, private ConvertLB convertLB; @Inject - UnwrapLoadBalancer(ParseJson> json, ConvertLB.Factory factory) { + ParseLoadBalancer(ParseJson> json, ConvertLB.Factory factory) { this.json = checkNotNull(json, "json"); this.factory = checkNotNull(factory, "factory"); } @@ -62,11 +62,11 @@ public class UnwrapLoadBalancer implements Function, } @Override - public UnwrapLoadBalancer setContext(HttpRequest request) { + public ParseLoadBalancer setContext(HttpRequest request) { return setRegion(request.getEndpoint().getHost().substring(0, request.getEndpoint().getHost().indexOf('.'))); } - UnwrapLoadBalancer setRegion(String region) { + ParseLoadBalancer setRegion(String region) { this.convertLB = factory.createForRegion(region); return this; } diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseLoadBalancers.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseLoadBalancers.java new file mode 100644 index 0000000000..cb46bf940f --- /dev/null +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseLoadBalancers.java @@ -0,0 +1,124 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds 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.rackspace.cloudloadbalancers.functions; + +import static com.google.common.base.Preconditions.checkNotNull; +import static org.jclouds.openstack.v2_0.options.PaginationOptions.Builder.marker; + +import java.beans.ConstructorProperties; + +import javax.inject.Inject; + +import org.jclouds.collect.IterableWithMarker; +import org.jclouds.collect.IterableWithMarkers; +import org.jclouds.collect.internal.CallerArg0ToPagedIterable; +import org.jclouds.http.HttpRequest; +import org.jclouds.http.HttpResponse; +import org.jclouds.http.functions.ParseJson; +import org.jclouds.openstack.keystone.v2_0.domain.PaginatedCollection; +import org.jclouds.openstack.v2_0.domain.Link; +import org.jclouds.rackspace.cloudloadbalancers.CloudLoadBalancersApi; +import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancer; +import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerApi; +import org.jclouds.rackspace.cloudloadbalancers.functions.ConvertLB.Factory; +import org.jclouds.rest.InvocationContext; + +import com.google.common.base.Function; +import com.google.common.collect.Iterables; + +/** + * @author Adrian Cole + */ +public class ParseLoadBalancers implements Function>, + InvocationContext { + + private final ParseJson json; + private final Factory factory; + + private ConvertLB convertLB; + + @Inject + ParseLoadBalancers(ParseJson json, ConvertLB.Factory factory) { + this.json = checkNotNull(json, "json"); + this.factory = checkNotNull(factory, "factory"); + } + + @SuppressWarnings("unchecked") + @Override + public IterableWithMarker apply(HttpResponse arg0) { + LoadBalancers lbs = json.apply(arg0); + + if (lbs.size() == 0) + return IterableWithMarkers.EMPTY; + + Iterable transform = Iterables.transform(lbs, convertLB); + IterableWithMarker iterableWithMarker = IterableWithMarkers.from(transform); + + return iterableWithMarker; + } + + @Override + public ParseLoadBalancers setContext(HttpRequest request) { + return setRegion(request.getEndpoint().getHost().substring(0, request.getEndpoint().getHost().indexOf('.'))); + } + + ParseLoadBalancers setRegion(String region) { + this.convertLB = factory.createForRegion(region); + return this; + } + + static class LoadBalancers extends PaginatedCollection { + + @ConstructorProperties({ "loadBalancers", "loadBalancers_links" }) + protected LoadBalancers(Iterable loadBalancers, Iterable loadBalancers_links) { + super(loadBalancers, loadBalancers_links); + } + + } + + public static class ToPagedIterable extends CallerArg0ToPagedIterable { + + private final CloudLoadBalancersApi api; + + @Inject + protected ToPagedIterable(CloudLoadBalancersApi api) { + this.api = checkNotNull(api, "api"); + } + + @Override + protected Function> markerToNextForCallingArg0(final String zone) { + final LoadBalancerApi loadBalancerApi = api.getLoadBalancerApiForZone(zone); + + return new Function>() { + + @Override + public IterableWithMarker apply(Object input) { + IterableWithMarker list = loadBalancerApi.list(marker(input.toString())); + return list; + } + + @Override + public String toString() { + return "list()"; + } + }; + } + + } +} diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseNodes.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseNodes.java new file mode 100644 index 0000000000..adf45caf96 --- /dev/null +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseNodes.java @@ -0,0 +1,107 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds 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.rackspace.cloudloadbalancers.functions; + +import static com.google.common.base.Preconditions.checkNotNull; +import static org.jclouds.openstack.v2_0.options.PaginationOptions.Builder.marker; + +import java.beans.ConstructorProperties; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.jclouds.collect.IterableWithMarker; +import org.jclouds.collect.internal.CallerArg0ToPagedIterable; +import org.jclouds.http.HttpRequest; +import org.jclouds.http.functions.ParseJson; +import org.jclouds.json.Json; +import org.jclouds.openstack.keystone.v2_0.domain.PaginatedCollection; +import org.jclouds.openstack.v2_0.domain.Link; +import org.jclouds.rackspace.cloudloadbalancers.CloudLoadBalancersApi; +import org.jclouds.rackspace.cloudloadbalancers.domain.Node; +import org.jclouds.rackspace.cloudloadbalancers.features.NodeApi; +import org.jclouds.rackspace.cloudloadbalancers.functions.ParseNodes.Nodes; + +import com.google.common.annotations.Beta; +import com.google.common.base.Function; +import com.google.inject.TypeLiteral; + +/** + * boiler plate until we determine a better way + * + * @author Everett Toews + */ +@Beta +@Singleton +public class ParseNodes extends ParseJson { + static class Nodes extends PaginatedCollection { + + @ConstructorProperties({ "nodes", "nodes_links" }) + protected Nodes(Iterable nodes, Iterable nodes_links) { + super(nodes, nodes_links); + } + + } + + @Inject + public ParseNodes(Json json) { + super(json, new TypeLiteral() { }); + } + + public static class ToPagedIterable extends CallerArg0ToPagedIterable { + + private final CloudLoadBalancersApi api; + private int lbId; + + @Inject + protected ToPagedIterable(CloudLoadBalancersApi api) { + this.api = checkNotNull(api, "api"); + } + + @Override + public ToPagedIterable setContext(HttpRequest request) { + String path = request.getEndpoint().getPath(); + int lastSlash = path.lastIndexOf('/'); + int secondLastSlash = path.lastIndexOf('/', lastSlash-1); + + lbId = Integer.valueOf(path.substring(secondLastSlash+1, lastSlash)); + + return super.setContext(request); + } + + @Override + protected Function> markerToNextForCallingArg0(final String zone) { + final NodeApi nodeApi = api.getNodeApiForZoneAndLoadBalancer(zone, lbId); + + return new Function>() { + + @Override + public IterableWithMarker apply(Object input) { + IterableWithMarker list = nodeApi.list(marker(input.toString())); + return list; + } + + @Override + public String toString() { + return "list()"; + } + }; + } + } +} diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/UnwrapLoadBalancers.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/UnwrapLoadBalancers.java deleted file mode 100644 index 872aa86e8c..0000000000 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/functions/UnwrapLoadBalancers.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Licensed to jclouds, Inc. (jclouds) under one or more - * contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. jclouds 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.rackspace.cloudloadbalancers.functions; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Map; -import java.util.Set; - -import javax.inject.Inject; - -import org.jclouds.http.HttpRequest; -import org.jclouds.http.HttpResponse; -import org.jclouds.http.functions.ParseJson; -import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancer; -import org.jclouds.rackspace.cloudloadbalancers.functions.ConvertLB.Factory; -import org.jclouds.rest.InvocationContext; - -import com.google.common.base.Function; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; - -/** - * @author Adrian Cole - */ -public class UnwrapLoadBalancers implements Function>, - InvocationContext { - - private final ParseJson>> json; - private final Factory factory; - - private ConvertLB convertLB; - - @Inject - UnwrapLoadBalancers(ParseJson>> json, ConvertLB.Factory factory) { - this.json = checkNotNull(json, "json"); - this.factory = checkNotNull(factory, "factory"); - } - - @Override - public Set apply(HttpResponse arg0) { - Map> map = json.apply(arg0); - if (map.size() == 0) - return ImmutableSet. of(); - return ImmutableSet.copyOf(Iterables.transform(Iterables.get(map.values(), 0), convertLB)); - } - - @Override - public UnwrapLoadBalancers setContext(HttpRequest request) { - return setRegion(request.getEndpoint().getHost().substring(0, request.getEndpoint().getHost().indexOf('.'))); - } - - UnwrapLoadBalancers setRegion(String region) { - this.convertLB = factory.createForRegion(region); - return this; - } - -} diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/loadbalancer/strategy/CloudLoadBalancersDestroyLoadBalancerStrategy.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/loadbalancer/strategy/CloudLoadBalancersDestroyLoadBalancerStrategy.java index 10d22535a3..bcb69c82b8 100644 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/loadbalancer/strategy/CloudLoadBalancersDestroyLoadBalancerStrategy.java +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/loadbalancer/strategy/CloudLoadBalancersDestroyLoadBalancerStrategy.java @@ -57,7 +57,7 @@ public class CloudLoadBalancersDestroyLoadBalancerStrategy implements DestroyLoa String[] parts = checkNotNull(id, "id").split("/"); String region = parts[0]; int lbId = Integer.parseInt(parts[1]); - client.getLoadBalancerClient(region).removeLoadBalancer(lbId); + client.getLoadBalancerApiForZone(region).remove(lbId); return getLoadBalancer.getLoadBalancer(id); } } diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/loadbalancer/strategy/CloudLoadBalancersGetLoadBalancerMetadataStrategy.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/loadbalancer/strategy/CloudLoadBalancersGetLoadBalancerMetadataStrategy.java index a546d810ca..88d2f7e70e 100644 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/loadbalancer/strategy/CloudLoadBalancersGetLoadBalancerMetadataStrategy.java +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/loadbalancer/strategy/CloudLoadBalancersGetLoadBalancerMetadataStrategy.java @@ -52,7 +52,7 @@ public class CloudLoadBalancersGetLoadBalancerMetadataStrategy implements GetLoa String[] parts = checkNotNull(id, "id").split("/"); String region = parts[0]; int lbId = Integer.parseInt(parts[1]); - return converter.apply(client.getLoadBalancerClient(region).getLoadBalancer(lbId)); + return converter.apply(client.getLoadBalancerApiForZone(region).get(lbId)); } } diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/loadbalancer/strategy/CloudLoadBalancersListLoadBalancersStrategy.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/loadbalancer/strategy/CloudLoadBalancersListLoadBalancersStrategy.java index d47fbf16d2..944d62b0a3 100644 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/loadbalancer/strategy/CloudLoadBalancersListLoadBalancersStrategy.java +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/loadbalancer/strategy/CloudLoadBalancersListLoadBalancersStrategy.java @@ -19,13 +19,9 @@ package org.jclouds.rackspace.cloudloadbalancers.loadbalancer.strategy; import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.collect.Iterables.concat; -import static com.google.common.collect.Iterables.transform; -import static org.jclouds.concurrent.FutureIterables.transformParallel; import java.util.Set; import java.util.concurrent.ExecutorService; -import java.util.concurrent.Future; import javax.annotation.Resource; import javax.inject.Inject; @@ -38,12 +34,13 @@ import org.jclouds.loadbalancer.reference.LoadBalancerConstants; import org.jclouds.loadbalancer.strategy.ListLoadBalancersStrategy; import org.jclouds.location.Zone; import org.jclouds.logging.Logger; -import org.jclouds.rackspace.cloudloadbalancers.CloudLoadBalancersAsyncApi; +import org.jclouds.rackspace.cloudloadbalancers.CloudLoadBalancersApi; import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancer; import com.google.common.base.Function; import com.google.common.base.Supplier; -import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.collect.FluentIterable; +import com.google.common.collect.Sets; /** * @@ -55,13 +52,13 @@ public class CloudLoadBalancersListLoadBalancersStrategy implements ListLoadBala @Named(LoadBalancerConstants.LOADBALANCER_LOGGER) protected Logger logger = Logger.NULL; - private final CloudLoadBalancersAsyncApi aclient; + private final CloudLoadBalancersApi aclient; private final Function converter; - private final ExecutorService executor; + private final ExecutorService executor; // leaving this here for possible future parallelization private final Supplier> zones; @Inject - protected CloudLoadBalancersListLoadBalancersStrategy(CloudLoadBalancersAsyncApi aclient, + protected CloudLoadBalancersListLoadBalancersStrategy(CloudLoadBalancersApi aclient, Function converter, @Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor, @Zone Supplier> zones) { this.aclient = checkNotNull(aclient, "aclient"); @@ -72,13 +69,17 @@ public class CloudLoadBalancersListLoadBalancersStrategy implements ListLoadBala @Override public Iterable listLoadBalancers() { - return transform(concat(transformParallel(zones.get(), new Function>>() { - - @Override - public ListenableFuture> apply(String from) { - return aclient.getLoadBalancerClient(from).listLoadBalancers(); + Set loadBalancerMetadatas = Sets.newHashSet(); + + for (String zone: zones.get()) { + FluentIterable lbm = + aclient.getLoadBalancerApiForZone(zone).list().concat().transform(converter); + + for (LoadBalancerMetadata loadBalancerMetadata: lbm) { + loadBalancerMetadatas.add(loadBalancerMetadata); } - - }, executor, null, logger, "loadbalancers")), converter); + } + + return loadBalancerMetadatas; } } diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/loadbalancer/strategy/CloudLoadBalancersLoadBalanceNodesStrategy.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/loadbalancer/strategy/CloudLoadBalancersLoadBalanceNodesStrategy.java index 9b35b0b067..ac3eb5fd33 100644 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/loadbalancer/strategy/CloudLoadBalancersLoadBalanceNodesStrategy.java +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/loadbalancer/strategy/CloudLoadBalancersLoadBalanceNodesStrategy.java @@ -66,7 +66,7 @@ public class CloudLoadBalancersLoadBalanceNodesStrategy implements LoadBalanceNo String region = checkNotNull(location, "location").getId(); // TODO need to query and update the LB per current design. - LoadBalancer lb = client.getLoadBalancerClient(region).createLoadBalancer( + LoadBalancer lb = client.getLoadBalancerApiForZone(region).create( LoadBalancerRequest.builder().name(name).protocol(protocol.toUpperCase()).port(loadBalancerPort) .virtualIPType(Type.PUBLIC).nodes( Iterables.transform(nodes, new Function() { diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/predicates/LoadBalancerActive.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/predicates/LoadBalancerActive.java index 8381615698..7222edfba6 100644 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/predicates/LoadBalancerActive.java +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/predicates/LoadBalancerActive.java @@ -63,6 +63,6 @@ public class LoadBalancerActive implements Predicate { } private LoadBalancer refresh(LoadBalancer loadBalancer) { - return client.getLoadBalancerClient(loadBalancer.getRegion()).getLoadBalancer(loadBalancer.getId()); + return client.getLoadBalancerApiForZone(loadBalancer.getRegion()).get(loadBalancer.getId()); } } diff --git a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/predicates/LoadBalancerDeleted.java b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/predicates/LoadBalancerDeleted.java index 6ef84ce02a..f1da5c6063 100644 --- a/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/predicates/LoadBalancerDeleted.java +++ b/apis/rackspace-cloudloadbalancers/src/main/java/org/jclouds/rackspace/cloudloadbalancers/predicates/LoadBalancerDeleted.java @@ -61,6 +61,6 @@ public class LoadBalancerDeleted implements Predicate { } private LoadBalancer refresh(LoadBalancer loadBalancer) { - return client.getLoadBalancerClient(loadBalancer.getRegion()).getLoadBalancer(loadBalancer.getId()); + return client.getLoadBalancerApiForZone(loadBalancer.getRegion()).get(loadBalancer.getId()); } } diff --git a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerExpectTest.java b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerApiExpectTest.java similarity index 81% rename from apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerExpectTest.java rename to apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerApiExpectTest.java index 2bfed4cdc6..f8808f01fb 100644 --- a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerExpectTest.java +++ b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerApiExpectTest.java @@ -32,10 +32,9 @@ import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancerAttributes; import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancerRequest; import org.jclouds.rackspace.cloudloadbalancers.domain.NodeRequest; import org.jclouds.rackspace.cloudloadbalancers.domain.VirtualIP; -import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerClient; -import org.jclouds.rackspace.cloudloadbalancers.functions.UnwrapLoadBalancerTest; -import org.jclouds.rackspace.cloudloadbalancers.functions.UnwrapLoadBalancersTest; -import org.jclouds.rackspace.cloudloadbalancers.internal.BaseCloudLoadBalancerExpectTest; +import org.jclouds.rackspace.cloudloadbalancers.functions.ParseLoadBalancerTest; +import org.jclouds.rackspace.cloudloadbalancers.functions.ParseLoadBalancersTest; +import org.jclouds.rackspace.cloudloadbalancers.internal.BaseCloudLoadBalancerApiExpectTest; import org.testng.annotations.Test; import com.google.common.collect.Sets; @@ -44,37 +43,37 @@ import com.google.common.collect.Sets; * @author Everett Toews */ @Test(groups = "unit") -public class LoadBalancerExpectTest extends BaseCloudLoadBalancerExpectTest { +public class LoadBalancerApiExpectTest extends BaseCloudLoadBalancerApiExpectTest { public void testListLoadBalancers() { URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers"); - LoadBalancerClient api = requestsSendResponses( + LoadBalancerApi api = requestsSendResponses( rackspaceAuthWithUsernameAndApiKey, responseWithAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(200).payload(payloadFromResource("/loadbalancers-list.json")).build() - ).getLoadBalancerClient("DFW"); + ).getLoadBalancerApiForZone("DFW"); - Set loadBalancers = api.listLoadBalancers(); + Set loadBalancers = api.list().concat().toImmutableSet(); assertEquals(loadBalancers, testLoadBalancers()); } public void testGetLoadBalancer() { URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers/2000"); - LoadBalancerClient api = requestsSendResponses( + LoadBalancerApi api = requestsSendResponses( rackspaceAuthWithUsernameAndApiKey, responseWithAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(200).payload(payloadFromResource("/loadbalancer-get.json")).build() - ).getLoadBalancerClient("DFW"); + ).getLoadBalancerApiForZone("DFW"); - LoadBalancer loadBalancer = api.getLoadBalancer(2000); + LoadBalancer loadBalancer = api.get(2000); assertEquals(loadBalancer, testLoadBalancer()); } public void testCreateLoadBalancer() { URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers"); - LoadBalancerClient api = requestsSendResponses( + LoadBalancerApi api = requestsSendResponses( rackspaceAuthWithUsernameAndApiKey, responseWithAccess, authenticatedGET() @@ -83,7 +82,7 @@ public class LoadBalancerExpectTest extends BaseCloudLoadBalancerExpectTest testLoadBalancers() { - return new UnwrapLoadBalancersTest().expected(); + return new ParseLoadBalancersTest().data(); } } diff --git a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerClientLiveTest.java b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerApiLiveTest.java similarity index 86% rename from apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerClientLiveTest.java rename to apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerApiLiveTest.java index aafe00bfb3..7b3a8a9033 100644 --- a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerClientLiveTest.java +++ b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/LoadBalancerApiLiveTest.java @@ -30,7 +30,7 @@ import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancerAttributes; import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancerRequest; import org.jclouds.rackspace.cloudloadbalancers.domain.NodeRequest; import org.jclouds.rackspace.cloudloadbalancers.domain.VirtualIP.Type; -import org.jclouds.rackspace.cloudloadbalancers.internal.BaseCloudLoadBalancersClientLiveTest; +import org.jclouds.rackspace.cloudloadbalancers.internal.BaseCloudLoadBalancersApiLiveTest; import org.testng.annotations.AfterGroups; import org.testng.annotations.Test; @@ -38,12 +38,10 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Sets; /** - * Tests behavior of {@code LoadBalancerClientLiveTest} - * * @author Adrian Cole */ -@Test(groups = "live", singleThreaded = true, testName = "LoadBalancerClientLiveTest") -public class LoadBalancerClientLiveTest extends BaseCloudLoadBalancersClientLiveTest { +@Test(groups = "live", singleThreaded = true, testName = "LoadBalancerApiLiveTest") +public class LoadBalancerApiLiveTest extends BaseCloudLoadBalancersApiLiveTest { private Set lbs = Sets.newLinkedHashSet(); @Override @@ -51,7 +49,7 @@ public class LoadBalancerClientLiveTest extends BaseCloudLoadBalancersClientLive protected void tearDownContext() { for (LoadBalancer lb: lbs) { assert loadBalancerActive.apply(lb) : lb; - client.getLoadBalancerClient(lb.getRegion()).removeLoadBalancer(lb.getId()); + client.getLoadBalancerApiForZone(lb.getRegion()).remove(lb.getId()); assert loadBalancerDeleted.apply(lb) : lb; } super.tearDownContext(); @@ -61,7 +59,7 @@ public class LoadBalancerClientLiveTest extends BaseCloudLoadBalancersClientLive for (String zone: client.getConfiguredZones()) { Logger.getAnonymousLogger().info("starting lb in region " + zone); - LoadBalancer lb = client.getLoadBalancerClient(zone).createLoadBalancer( + LoadBalancer lb = client.getLoadBalancerApiForZone(zone).create( LoadBalancerRequest.builder() .name(prefix + "-" + zone) .protocol("HTTP") @@ -80,7 +78,7 @@ public class LoadBalancerClientLiveTest extends BaseCloudLoadBalancersClientLive assertTrue(loadBalancerActive.apply(lb)); - LoadBalancer newLb = client.getLoadBalancerClient(zone).getLoadBalancer(lb.getId()); + LoadBalancer newLb = client.getLoadBalancerApiForZone(zone).get(lb.getId()); checkLBInRegion(zone, newLb, prefix + "-" + zone); assertEquals(newLb.getStatus(), LoadBalancer.Status.ACTIVE); @@ -90,12 +88,12 @@ public class LoadBalancerClientLiveTest extends BaseCloudLoadBalancersClientLive @Test(dependsOnMethods = "testCreateLoadBalancer") public void testUpdateLoadBalancer() throws Exception { for (LoadBalancer lb: lbs) { - client.getLoadBalancerClient(lb.getRegion()).updateLoadBalancerAttributes(lb.getId(), + client.getLoadBalancerApiForZone(lb.getRegion()).update(lb.getId(), LoadBalancerAttributes.Builder.name("foo" + "-" + lb.getRegion())); assertTrue(loadBalancerActive.apply(lb)); - LoadBalancer newLb = client.getLoadBalancerClient(lb.getRegion()).getLoadBalancer(lb.getId()); + LoadBalancer newLb = client.getLoadBalancerApiForZone(lb.getRegion()).get(lb.getId()); checkLBInRegion(newLb.getRegion(), newLb, "foo" + "-" + lb.getRegion()); assertEquals(newLb.getStatus(), LoadBalancer.Status.ACTIVE); @@ -105,7 +103,8 @@ public class LoadBalancerClientLiveTest extends BaseCloudLoadBalancersClientLive @Test(dependsOnMethods = "testUpdateLoadBalancer") public void testListLoadBalancers() throws Exception { for (String zone: client.getConfiguredZones()) { - Set response = client.getLoadBalancerClient(zone).listLoadBalancers(); + //TODO: FIXME + Set response = client.getLoadBalancerApiForZone(zone).list().concat().toImmutableSet(); assertNotNull(response); assertTrue(response.size() >= 0); @@ -125,7 +124,7 @@ public class LoadBalancerClientLiveTest extends BaseCloudLoadBalancersClientLive // node info not available during list; assert lb.getNodes().size() == 0 : lb; - LoadBalancer getDetails = client.getLoadBalancerClient(zone).getLoadBalancer(lb.getId()); + LoadBalancer getDetails = client.getLoadBalancerApiForZone(zone).get(lb.getId()); try { assertEquals(getDetails.getRegion(), lb.getRegion()); diff --git a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeExpectTest.java b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeApiExpectTest.java similarity index 86% rename from apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeExpectTest.java rename to apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeApiExpectTest.java index e2947f8504..bb96efe8db 100644 --- a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeExpectTest.java +++ b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeApiExpectTest.java @@ -30,8 +30,8 @@ import org.jclouds.rackspace.cloudloadbalancers.CloudLoadBalancersApi; import org.jclouds.rackspace.cloudloadbalancers.domain.Node; import org.jclouds.rackspace.cloudloadbalancers.domain.NodeAttributes; import org.jclouds.rackspace.cloudloadbalancers.domain.NodeRequest; -import org.jclouds.rackspace.cloudloadbalancers.features.NodeClient; -import org.jclouds.rackspace.cloudloadbalancers.internal.BaseCloudLoadBalancerExpectTest; +import org.jclouds.rackspace.cloudloadbalancers.features.NodeApi; +import org.jclouds.rackspace.cloudloadbalancers.internal.BaseCloudLoadBalancerApiExpectTest; import org.testng.annotations.Test; import com.google.common.collect.ImmutableSet; @@ -41,37 +41,36 @@ import com.google.common.collect.ImmutableSortedSet; * @author Everett Toews */ @Test(groups = "unit") -public class NodeExpectTest extends BaseCloudLoadBalancerExpectTest { - +public class NodeApiExpectTest extends BaseCloudLoadBalancerApiExpectTest { public void testListNodes() { URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers/2000/nodes"); - NodeClient api = requestsSendResponses( + NodeApi api = requestsSendResponses( rackspaceAuthWithUsernameAndApiKey, responseWithAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(200).payload(payloadFromResource("/nodes-list.json")).build() - ).getNodeClient("DFW"); + ).getNodeApiForZoneAndLoadBalancer("DFW", 2000); - Set nodes = api.listNodes(2000); + Set nodes = api.list().concat().toImmutableSet(); assertEquals(nodes, testNodes()); } public void testGetNodeInLoadBalancer() { URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers/2000/nodes/410"); - NodeClient api = requestsSendResponses( + NodeApi api = requestsSendResponses( rackspaceAuthWithUsernameAndApiKey, responseWithAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(200).payload(payloadFromResource("/node-get.json")).build() - ).getNodeClient("DFW"); + ).getNodeApiForZoneAndLoadBalancer("DFW", 2000); - Node node = api.getNodeInLoadBalancer(410, 2000); + Node node = api.get(410); assertEquals(node, testNode()); } public void testAddNodesInLoadBalancer() { URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers/2000/nodes"); - NodeClient api = requestsSendResponses( + NodeApi api = requestsSendResponses( rackspaceAuthWithUsernameAndApiKey, responseWithAccess, authenticatedGET() @@ -80,7 +79,7 @@ public class NodeExpectTest extends BaseCloudLoadBalancerExpectTest nodeRequests = ImmutableSortedSet. of(nodeRequest1, nodeRequest2, nodeRequest3); - Set nodes = api.createNodesInLoadBalancer(nodeRequests, 2000); + Set nodes = api.add(nodeRequests); assertEquals(nodes, testNodes()); } public void testUpdateAttributesForNodeInLoadBalancer() { URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers/2000/nodes/410"); - NodeClient api = requestsSendResponses( + NodeApi api = requestsSendResponses( rackspaceAuthWithUsernameAndApiKey, responseWithAccess, authenticatedGET().method("PUT").payload(payloadFromResource("/node-update.json")).endpoint(endpoint).build(), HttpResponse.builder().statusCode(200).build() - ).getNodeClient("DFW"); + ).getNodeApiForZoneAndLoadBalancer("DFW", 2000); NodeAttributes nodeAttributes = NodeAttributes.Builder .condition(NodeRequest.Condition.DISABLED) .weight(20); - api.updateAttributesForNodeInLoadBalancer(nodeAttributes, 410, 2000); + api.update(410, nodeAttributes); } public void testRemoveNodeFromLoadBalancer() { URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers/2000/nodes/410"); - NodeClient api = requestsSendResponses( + NodeApi api = requestsSendResponses( rackspaceAuthWithUsernameAndApiKey, responseWithAccess, authenticatedGET().method("DELETE").replaceHeader("Accept", MediaType.WILDCARD).endpoint(endpoint).build(), HttpResponse.builder().statusCode(200).build() - ).getNodeClient("DFW"); + ).getNodeApiForZoneAndLoadBalancer("DFW", 2000); - api.removeNodeFromLoadBalancer(410, 2000); + api.remove(410); } public void testRemoveNodesFromLoadBalancer() { URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers/2000/nodes?id=%5B410%2C%20411%5D"); - NodeClient api = requestsSendResponses( + NodeApi api = requestsSendResponses( rackspaceAuthWithUsernameAndApiKey, responseWithAccess, authenticatedGET().method("DELETE").replaceHeader("Accept", MediaType.WILDCARD).endpoint(endpoint).build(), HttpResponse.builder().statusCode(200).build() - ).getNodeClient("DFW"); + ).getNodeApiForZoneAndLoadBalancer("DFW", 2000); Set nodeIds = ImmutableSortedSet. of(410, 411); - api.removeNodesFromLoadBalancer(nodeIds, 2000); + api.remove(nodeIds); } private Set testNodes() { diff --git a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeClientLiveTest.java b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeApiLiveTest.java similarity index 80% rename from apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeClientLiveTest.java rename to apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeApiLiveTest.java index 1d86d654f6..76ab6c6545 100644 --- a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeClientLiveTest.java +++ b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/features/NodeApiLiveTest.java @@ -38,18 +38,16 @@ import org.jclouds.rackspace.cloudloadbalancers.domain.NodeAttributes; import org.jclouds.rackspace.cloudloadbalancers.domain.NodeRequest; import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancer.Status; import org.jclouds.rackspace.cloudloadbalancers.domain.VirtualIP.Type; -import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerClient; -import org.jclouds.rackspace.cloudloadbalancers.internal.BaseCloudLoadBalancersClientLiveTest; +import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerApi; +import org.jclouds.rackspace.cloudloadbalancers.internal.BaseCloudLoadBalancersApiLiveTest; import org.testng.annotations.AfterGroups; import org.testng.annotations.Test; /** - * Tests behavior of {@code NodeClient} - * * @author Dan Lo Bianco */ @Test(groups = "live", singleThreaded = true, testName = "NodeClientLiveTest") -public class NodeClientLiveTest extends BaseCloudLoadBalancersClientLiveTest { +public class NodeApiLiveTest extends BaseCloudLoadBalancersApiLiveTest { private Map> nodes = Maps.newHashMap(); public void testCreateLoadBalancers() { @@ -57,7 +55,7 @@ public class NodeClientLiveTest extends BaseCloudLoadBalancersClientLiveTest { Logger.getAnonymousLogger().info("running against zones " + client.getConfiguredZones()); for (String zone : client.getConfiguredZones()) { Logger.getAnonymousLogger().info("starting lb in zone " + zone); - LoadBalancer lb = client.getLoadBalancerClient(zone).createLoadBalancer( + LoadBalancer lb = client.getLoadBalancerApiForZone(zone).create( LoadBalancerRequest.builder().name(prefix + "-" + zone).protocol("HTTP").port(80).virtualIPType( Type.PUBLIC).node(NodeRequest.builder().address("192.168.1.1").port(8080).build()).build()); nodes.put(lb, new HashSet()); @@ -71,14 +69,13 @@ public class NodeClientLiveTest extends BaseCloudLoadBalancersClientLiveTest { for (LoadBalancer lb : nodes.keySet()) { String region = lb.getRegion(); Logger.getAnonymousLogger().info("starting node on loadbalancer " + lb.getId() + " in region " + region); - Set newNodes = client.getNodeClient(region).createNodesInLoadBalancer( - ImmutableSet. of(NodeRequest.builder().address("192.168.1.2").port(8080).build()), - lb.getId()); + Set newNodes = client.getNodeApiForZoneAndLoadBalancer(region, lb.getId()).add( + ImmutableSet. of(NodeRequest.builder().address("192.168.1.2").port(8080).build())); for (Node n : newNodes) { assertEquals(n.getStatus(), Node.Status.ONLINE); nodes.get(lb).add(n); - assertEquals(client.getNodeClient(region).getNodeInLoadBalancer(n.getId(), lb.getId()).getStatus(), + assertEquals(client.getNodeApiForZoneAndLoadBalancer(region, lb.getId()).get(n.getId()).getStatus(), Node.Status.ONLINE); } @@ -91,12 +88,12 @@ public class NodeClientLiveTest extends BaseCloudLoadBalancersClientLiveTest { for (Entry> entry : nodes.entrySet()) { for (Node n : entry.getValue()) { String region = entry.getKey().getRegion(); - client.getNodeClient(region).updateAttributesForNodeInLoadBalancer(NodeAttributes.Builder.weight(23), - n.getId(), entry.getKey().getId()); - assertEquals(client.getNodeClient(region).getNodeInLoadBalancer(n.getId(), entry.getKey().getId()) + client.getNodeApiForZoneAndLoadBalancer(region, entry.getKey().getId()).update(n.getId(), + NodeAttributes.Builder.weight(23)); + assertEquals(client.getNodeApiForZoneAndLoadBalancer(region, entry.getKey().getId()).get(n.getId()) .getStatus(), Node.Status.ONLINE); - Node newNode = client.getNodeClient(region).getNodeInLoadBalancer(n.getId(), entry.getKey().getId()); + Node newNode = client.getNodeApiForZoneAndLoadBalancer(region, entry.getKey().getId()).get(n.getId()); assertEquals(newNode.getStatus(), Node.Status.ONLINE); assertEquals(newNode.getWeight(), (Integer) 23); } @@ -106,7 +103,7 @@ public class NodeClientLiveTest extends BaseCloudLoadBalancersClientLiveTest { @Test(dependsOnMethods = "testModifyNode") public void testListNodes() throws Exception { for (LoadBalancer lb : nodes.keySet()) { - Set response = client.getNodeClient(lb.getRegion()).listNodes(lb.getId()); + Set response = client.getNodeApiForZoneAndLoadBalancer(lb.getRegion(), lb.getId()).list().concat().toImmutableSet(); assert null != response; assertTrue(response.size() >= 0); for (Node n : response) { @@ -118,8 +115,8 @@ public class NodeClientLiveTest extends BaseCloudLoadBalancersClientLiveTest { assert !Arrays.asList(LoadBalancer.WEIGHTED_ALGORITHMS).contains(lb.getTypedAlgorithm()) || n.getWeight() != null : n; - Node getDetails = client.getNodeClient(lb.getRegion()).getNodeInLoadBalancer(n.getId(), lb.getId()); - System.out.println(n.toString()); + Node getDetails = client.getNodeApiForZoneAndLoadBalancer(lb.getRegion(), lb.getId()).get(n.getId()); + try { assertEquals(getDetails.getId(), n.getId()); assertEquals(getDetails.getCondition(), n.getCondition()); @@ -141,11 +138,11 @@ public class NodeClientLiveTest extends BaseCloudLoadBalancersClientLiveTest { protected void tearDownContext() { for (Entry> entry : nodes.entrySet()) { LoadBalancer lb = entry.getKey(); - LoadBalancerClient lbClient = client.getLoadBalancerClient(lb.getRegion()); + LoadBalancerApi lbClient = client.getLoadBalancerApiForZone(lb.getRegion()); - if (lbClient.getLoadBalancer(lb.getId()).getStatus() != Status.DELETED) { + if (lbClient.get(lb.getId()).getStatus() != Status.DELETED) { assert loadBalancerActive.apply(lb) : lb; - lbClient.removeLoadBalancer(lb.getId()); + lbClient.remove(lb.getId()); } assert loadBalancerDeleted.apply(lb) : lb; } diff --git a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/UnwrapLoadBalancerTest.java b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseLoadBalancerTest.java similarity index 93% rename from apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/UnwrapLoadBalancerTest.java rename to apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseLoadBalancerTest.java index 0b4a19a8f1..81dc05076a 100644 --- a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/UnwrapLoadBalancerTest.java +++ b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseLoadBalancerTest.java @@ -27,7 +27,7 @@ import org.jclouds.rackspace.cloudloadbalancers.domain.VirtualIP; import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancer.Status; import org.jclouds.rackspace.cloudloadbalancers.domain.VirtualIP.IPVersion; import org.jclouds.rackspace.cloudloadbalancers.functions.ConvertLB; -import org.jclouds.rackspace.cloudloadbalancers.functions.UnwrapLoadBalancer; +import org.jclouds.rackspace.cloudloadbalancers.functions.ParseLoadBalancer; import org.testng.annotations.Test; import com.google.common.base.Function; @@ -41,7 +41,7 @@ import com.google.inject.assistedinject.FactoryModuleBuilder; * @author Adrian Cole */ @Test(groups = "unit", testName = "UnwrapLoadBalancerTest") -public class UnwrapLoadBalancerTest extends BaseItemParserTest { +public class ParseLoadBalancerTest extends BaseItemParserTest { @Override public String resource() { @@ -88,6 +88,6 @@ public class UnwrapLoadBalancerTest extends BaseItemParserTest { @Override protected Function parser(Injector i) { - return i.getInstance(UnwrapLoadBalancer.class).setRegion("DFW"); + return i.getInstance(ParseLoadBalancer.class).setRegion("DFW"); } } diff --git a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/UnwrapLoadBalancerWhenDeletedTest.java b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseLoadBalancerWhenDeletedTest.java similarity index 91% rename from apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/UnwrapLoadBalancerWhenDeletedTest.java rename to apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseLoadBalancerWhenDeletedTest.java index 5056667794..c197f83f0d 100644 --- a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/UnwrapLoadBalancerWhenDeletedTest.java +++ b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseLoadBalancerWhenDeletedTest.java @@ -24,7 +24,7 @@ import org.jclouds.json.BaseItemParserTest; import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancer; import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancer.Status; import org.jclouds.rackspace.cloudloadbalancers.functions.ConvertLB; -import org.jclouds.rackspace.cloudloadbalancers.functions.UnwrapLoadBalancer; +import org.jclouds.rackspace.cloudloadbalancers.functions.ParseLoadBalancer; import org.testng.annotations.Test; import com.google.common.base.Function; @@ -37,7 +37,7 @@ import com.google.inject.assistedinject.FactoryModuleBuilder; * @author Adrian Cole */ @Test(groups = "unit", testName = "UnwrapLoadBalancerWhenDeletedTest") -public class UnwrapLoadBalancerWhenDeletedTest extends BaseItemParserTest { +public class ParseLoadBalancerWhenDeletedTest extends BaseItemParserTest { @Override public String resource() { @@ -67,6 +67,6 @@ public class UnwrapLoadBalancerWhenDeletedTest extends BaseItemParserTest parser(Injector i) { - return i.getInstance(UnwrapLoadBalancer.class).setRegion("LON"); + return i.getInstance(ParseLoadBalancer.class).setRegion("LON"); } } diff --git a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/UnwrapLoadBalancersTest.java b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseLoadBalancersTest.java similarity index 86% rename from apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/UnwrapLoadBalancersTest.java rename to apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseLoadBalancersTest.java index f238fb25d0..8f9de47895 100644 --- a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/UnwrapLoadBalancersTest.java +++ b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/functions/ParseLoadBalancersTest.java @@ -20,14 +20,14 @@ package org.jclouds.rackspace.cloudloadbalancers.functions; import java.util.Set; +import org.jclouds.collect.IterableWithMarker; +import org.jclouds.collect.IterableWithMarkers; import org.jclouds.date.internal.SimpleDateFormatDateService; import org.jclouds.http.HttpResponse; -import org.jclouds.json.BaseSetParserTest; +import org.jclouds.json.BaseIterableWithMarkerParserTest; import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancer; -import org.jclouds.rackspace.cloudloadbalancers.domain.VirtualIP; import org.jclouds.rackspace.cloudloadbalancers.domain.LoadBalancer.Status; -import org.jclouds.rackspace.cloudloadbalancers.functions.ConvertLB; -import org.jclouds.rackspace.cloudloadbalancers.functions.UnwrapLoadBalancers; +import org.jclouds.rackspace.cloudloadbalancers.domain.VirtualIP; import org.testng.annotations.Test; import com.google.common.base.Function; @@ -41,18 +41,10 @@ import com.google.inject.assistedinject.FactoryModuleBuilder; * @author Adrian Cole */ @Test(groups = "unit") -public class UnwrapLoadBalancersTest extends BaseSetParserTest { - - @Override - public String resource() { - return "/loadbalancers-list.json"; - } - - @Override - public Set expected() { +public class ParseLoadBalancersTest extends BaseIterableWithMarkerParserTest { + public Set data() { return ImmutableSet.of( - LoadBalancer .builder() .region("DFW") @@ -83,7 +75,16 @@ public class UnwrapLoadBalancersTest extends BaseSetParserTest { .type(VirtualIP.Type.PUBLIC).ipVersion(VirtualIP.IPVersion.IPV4).build())) .created(new SimpleDateFormatDateService().iso8601SecondsDateParse("2010-11-30T03:23:42Z")) .updated(new SimpleDateFormatDateService().iso8601SecondsDateParse("2010-11-30T03:23:44Z")).build()); + } + + @Override + public String resource() { + return "/loadbalancers-list.json"; + } + @Override + public IterableWithMarker expected() { + return IterableWithMarkers.from(data()); } // add factory binding as this is not default @@ -101,7 +102,7 @@ public class UnwrapLoadBalancersTest extends BaseSetParserTest { } @Override - protected Function> parser(Injector i) { - return i.getInstance(UnwrapLoadBalancers.class).setRegion("DFW"); + protected Function> parser(Injector i) { + return i.getInstance(ParseLoadBalancers.class).setRegion("DFW"); } } diff --git a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/internal/BaseCloudLoadBalancerExpectTest.java b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/internal/BaseCloudLoadBalancerApiExpectTest.java similarity index 93% rename from apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/internal/BaseCloudLoadBalancerExpectTest.java rename to apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/internal/BaseCloudLoadBalancerApiExpectTest.java index a74e4b16f8..518b10592b 100644 --- a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/internal/BaseCloudLoadBalancerExpectTest.java +++ b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/internal/BaseCloudLoadBalancerApiExpectTest.java @@ -30,13 +30,13 @@ import org.jclouds.rest.internal.BaseRestApiExpectTest; * * @author Everett Toews */ -public class BaseCloudLoadBalancerExpectTest extends BaseRestApiExpectTest { +public class BaseCloudLoadBalancerApiExpectTest extends BaseRestApiExpectTest { protected HttpRequest rackspaceAuthWithUsernameAndApiKey; protected String authToken; protected HttpResponse responseWithAccess; - public BaseCloudLoadBalancerExpectTest() { + public BaseCloudLoadBalancerApiExpectTest() { provider = "cloudloadbalancers"; rackspaceAuthWithUsernameAndApiKey = RackspaceFixture.INSTANCE diff --git a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/internal/BaseCloudLoadBalancersClientLiveTest.java b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/internal/BaseCloudLoadBalancersApiLiveTest.java similarity index 94% rename from apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/internal/BaseCloudLoadBalancersClientLiveTest.java rename to apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/internal/BaseCloudLoadBalancersApiLiveTest.java index 449b3b8459..f6edd93e18 100644 --- a/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/internal/BaseCloudLoadBalancersClientLiveTest.java +++ b/apis/rackspace-cloudloadbalancers/src/test/java/org/jclouds/rackspace/cloudloadbalancers/internal/BaseCloudLoadBalancersApiLiveTest.java @@ -45,9 +45,9 @@ import com.google.inject.Injector; * * @author Adrian Cole */ -public class BaseCloudLoadBalancersClientLiveTest extends BaseContextLiveTest> { +public class BaseCloudLoadBalancersApiLiveTest extends BaseContextLiveTest> { - public BaseCloudLoadBalancersClientLiveTest() { + public BaseCloudLoadBalancersApiLiveTest() { provider = "cloudloadbalancers"; } diff --git a/core/src/test/java/org/jclouds/json/BaseIterableWithMarkerParserTest.java b/core/src/test/java/org/jclouds/json/BaseIterableWithMarkerParserTest.java new file mode 100644 index 0000000000..53841c1dc8 --- /dev/null +++ b/core/src/test/java/org/jclouds/json/BaseIterableWithMarkerParserTest.java @@ -0,0 +1,37 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds 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.json; + +import static org.testng.Assert.assertEquals; + +import org.jclouds.collect.IterableWithMarker; + +import com.google.common.collect.ImmutableSortedSet; + +/** + * + * @author Adrian Cole + */ +public abstract class BaseIterableWithMarkerParserTest extends BaseParserTest, T> { + + public void compare(IterableWithMarker expects, IterableWithMarker response) { + assertEquals(ImmutableSortedSet.copyOf(response).toString(), ImmutableSortedSet.copyOf(expects).toString()); + } + +} diff --git a/providers/rackspace-cloudloadbalancers-uk/src/test/java/org/jclouds/rackspace/cloudloadbalancers/uk/CloudLoadBalancersUKLoadBalancerClientLiveTest.java b/providers/rackspace-cloudloadbalancers-uk/src/test/java/org/jclouds/rackspace/cloudloadbalancers/uk/CloudLoadBalancersUKLoadBalancerClientLiveTest.java index 3ada4ca63d..fd659e4067 100644 --- a/providers/rackspace-cloudloadbalancers-uk/src/test/java/org/jclouds/rackspace/cloudloadbalancers/uk/CloudLoadBalancersUKLoadBalancerClientLiveTest.java +++ b/providers/rackspace-cloudloadbalancers-uk/src/test/java/org/jclouds/rackspace/cloudloadbalancers/uk/CloudLoadBalancersUKLoadBalancerClientLiveTest.java @@ -18,7 +18,7 @@ */ package org.jclouds.rackspace.cloudloadbalancers.uk; -import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerClientLiveTest; +import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerApiLiveTest; import org.testng.annotations.Test; /** @@ -26,7 +26,7 @@ import org.testng.annotations.Test; * @author Dan Lo Bianco */ @Test(groups = "live", singleThreaded = true, testName = "CloudLoadBalancersUKLoadBalancerClientLiveTest") -public class CloudLoadBalancersUKLoadBalancerClientLiveTest extends LoadBalancerClientLiveTest { +public class CloudLoadBalancersUKLoadBalancerClientLiveTest extends LoadBalancerApiLiveTest { public CloudLoadBalancersUKLoadBalancerClientLiveTest() { provider = "cloudloadbalancers-uk"; } diff --git a/providers/rackspace-cloudloadbalancers-uk/src/test/java/org/jclouds/rackspace/cloudloadbalancers/uk/CloudLoadBalancersUKNodeClientLiveTest.java b/providers/rackspace-cloudloadbalancers-uk/src/test/java/org/jclouds/rackspace/cloudloadbalancers/uk/CloudLoadBalancersUKNodeClientLiveTest.java index d58f90306d..cd31ac21b1 100644 --- a/providers/rackspace-cloudloadbalancers-uk/src/test/java/org/jclouds/rackspace/cloudloadbalancers/uk/CloudLoadBalancersUKNodeClientLiveTest.java +++ b/providers/rackspace-cloudloadbalancers-uk/src/test/java/org/jclouds/rackspace/cloudloadbalancers/uk/CloudLoadBalancersUKNodeClientLiveTest.java @@ -18,7 +18,7 @@ */ package org.jclouds.rackspace.cloudloadbalancers.uk; -import org.jclouds.rackspace.cloudloadbalancers.features.NodeClientLiveTest; +import org.jclouds.rackspace.cloudloadbalancers.features.NodeApiLiveTest; import org.testng.annotations.Test; /** @@ -26,7 +26,7 @@ import org.testng.annotations.Test; * @author Dan Lo Bianco */ @Test(groups = "live", singleThreaded = true, testName = "CloudLoadBalancersUKNodeClientLiveTest") -public class CloudLoadBalancersUKNodeClientLiveTest extends NodeClientLiveTest { +public class CloudLoadBalancersUKNodeClientLiveTest extends NodeApiLiveTest { public CloudLoadBalancersUKNodeClientLiveTest() { provider = "cloudloadbalancers-uk"; } diff --git a/providers/rackspace-cloudloadbalancers-us/src/test/java/org/jclouds/rackspace/cloudloadbalancers/us/CloudLoadBalancersUSLoadBalancerClientLiveTest.java b/providers/rackspace-cloudloadbalancers-us/src/test/java/org/jclouds/rackspace/cloudloadbalancers/us/CloudLoadBalancersUSLoadBalancerClientLiveTest.java index 5fd790f617..2e23ff2239 100644 --- a/providers/rackspace-cloudloadbalancers-us/src/test/java/org/jclouds/rackspace/cloudloadbalancers/us/CloudLoadBalancersUSLoadBalancerClientLiveTest.java +++ b/providers/rackspace-cloudloadbalancers-us/src/test/java/org/jclouds/rackspace/cloudloadbalancers/us/CloudLoadBalancersUSLoadBalancerClientLiveTest.java @@ -18,7 +18,7 @@ */ package org.jclouds.rackspace.cloudloadbalancers.us; -import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerClientLiveTest; +import org.jclouds.rackspace.cloudloadbalancers.features.LoadBalancerApiLiveTest; import org.testng.annotations.Test; /** @@ -26,7 +26,7 @@ import org.testng.annotations.Test; * @author Dan Lo Bianco */ @Test(groups = "live", singleThreaded = true, testName = "CloudLoadBalancersUSLoadBalancerClientLiveTest") -public class CloudLoadBalancersUSLoadBalancerClientLiveTest extends LoadBalancerClientLiveTest { +public class CloudLoadBalancersUSLoadBalancerClientLiveTest extends LoadBalancerApiLiveTest { public CloudLoadBalancersUSLoadBalancerClientLiveTest() { provider = "cloudloadbalancers-us"; } diff --git a/providers/rackspace-cloudloadbalancers-us/src/test/java/org/jclouds/rackspace/cloudloadbalancers/us/CloudLoadBalancersUSNodeClientLiveTest.java b/providers/rackspace-cloudloadbalancers-us/src/test/java/org/jclouds/rackspace/cloudloadbalancers/us/CloudLoadBalancersUSNodeClientLiveTest.java index 0eeefb2971..56d8ffb07a 100644 --- a/providers/rackspace-cloudloadbalancers-us/src/test/java/org/jclouds/rackspace/cloudloadbalancers/us/CloudLoadBalancersUSNodeClientLiveTest.java +++ b/providers/rackspace-cloudloadbalancers-us/src/test/java/org/jclouds/rackspace/cloudloadbalancers/us/CloudLoadBalancersUSNodeClientLiveTest.java @@ -18,7 +18,7 @@ */ package org.jclouds.rackspace.cloudloadbalancers.us; -import org.jclouds.rackspace.cloudloadbalancers.features.NodeClientLiveTest; +import org.jclouds.rackspace.cloudloadbalancers.features.NodeApiLiveTest; import org.testng.annotations.Test; /** @@ -26,7 +26,7 @@ import org.testng.annotations.Test; * @author Dan Lo Bianco */ @Test(groups = "live", singleThreaded = true, testName = "CloudLoadBalancersUSNodeClientLiveTest") -public class CloudLoadBalancersUSNodeClientLiveTest extends NodeClientLiveTest { +public class CloudLoadBalancersUSNodeClientLiveTest extends NodeApiLiveTest { public CloudLoadBalancersUSNodeClientLiveTest() { provider = "cloudloadbalancers-us"; }