From dd5c4c5c6bf2102cda4abaeb05becbdb57ea00e6 Mon Sep 17 00:00:00 2001 From: Daniel Broudy Date: Mon, 1 Dec 2014 12:24:03 -0800 Subject: [PATCH] Added targetPool:AggregatedList, getHealth. Updated HttpHealthCheck --- .../HttpHealthCheckCreationBinder.java | 4 +- ...viceGroupHealth.java => HealthStatus.java} | 18 +- .../domain/HttpHealthCheck.java | 24 +- .../features/AggregatedListApi.java | 51 ++++ .../features/BackendServiceApi.java | 4 +- .../features/HttpHealthCheckApi.java | 2 +- .../features/TargetPoolApi.java | 22 +- .../HttpHealthCheckCreationOptions.java | 247 ++++++++-------- .../HttpHealthCheckCreationBinderTest.java | 16 +- .../features/AggregatedListApiLiveTest.java | 18 ++ .../features/AggregatedListApiMockTest.java | 34 ++- .../features/BackendServiceApiMockTest.java | 6 +- .../HttpHealthCheckApiExpectTest.java | 4 +- .../features/HttpHealthCheckApiLiveTest.java | 43 +-- .../features/HttpHealthCheckApiMockTest.java | 8 +- .../features/TargetPoolApiExpectTest.java | 263 ------------------ .../features/TargetPoolApiLiveTest.java | 73 +++-- .../features/TargetPoolApiMockTest.java | 178 ++++++++++++ ...thTest.java => ParseHealthStatusTest.java} | 18 +- .../parse/ParseTargetPoolListTest.java | 7 +- .../parse/ParseTargetPoolTest.java | 9 +- .../aggregated_target_pool_list.json | 46 +++ .../aggregated_target_pool_list_empty.json | 43 +++ ...lth.json => health_status_get_health.json} | 2 +- .../resources/httphealthcheck_insert.json | 2 +- .../test/resources/httphealthcheck_patch.json | 1 + 26 files changed, 647 insertions(+), 496 deletions(-) rename providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/{BackendServiceGroupHealth.java => HealthStatus.java} (70%) delete mode 100644 providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiExpectTest.java create mode 100644 providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiMockTest.java rename providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/{ParseBackendServiceGetHealthTest.java => ParseHealthStatusTest.java} (71%) create mode 100644 providers/google-compute-engine/src/test/resources/aggregated_target_pool_list.json create mode 100644 providers/google-compute-engine/src/test/resources/aggregated_target_pool_list_empty.json rename providers/google-compute-engine/src/test/resources/{backend_service_get_health.json => health_status_get_health.json} (78%) create mode 100644 providers/google-compute-engine/src/test/resources/httphealthcheck_patch.json diff --git a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/binders/HttpHealthCheckCreationBinder.java b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/binders/HttpHealthCheckCreationBinder.java index 7b23a33768..636ccedba6 100644 --- a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/binders/HttpHealthCheckCreationBinder.java +++ b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/binders/HttpHealthCheckCreationBinder.java @@ -38,7 +38,7 @@ public class HttpHealthCheckCreationBinder extends BindToJsonPayload { HttpHealthCheckBinderHelper helper = new HttpHealthCheckBinderHelper(name, options); return super.bindToRequest(request, helper); } - + private class HttpHealthCheckBinderHelper{ /** @@ -62,7 +62,7 @@ public class HttpHealthCheckCreationBinder extends BindToJsonPayload { private Integer healthyThreshold; @SuppressWarnings("unused") private String description; - + private HttpHealthCheckBinderHelper(String name, HttpHealthCheckCreationOptions httpHealthCheckCreationOptions){ this.name = name; this.host = httpHealthCheckCreationOptions.host(); diff --git a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/BackendServiceGroupHealth.java b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/HealthStatus.java similarity index 70% rename from providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/BackendServiceGroupHealth.java rename to providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/HealthStatus.java index c31f64cfea..9d8f65b52d 100644 --- a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/BackendServiceGroupHealth.java +++ b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/HealthStatus.java @@ -25,20 +25,20 @@ import org.jclouds.json.SerializedNames; import com.google.auto.value.AutoValue; @AutoValue -public abstract class BackendServiceGroupHealth { +public abstract class HealthStatus { - public abstract List healthStatus(); + public abstract List healthStatus(); @SerializedNames({"healthStatus"}) - public static BackendServiceGroupHealth create(List healthStatus){ - return new AutoValue_BackendServiceGroupHealth(healthStatus); + public static HealthStatus create(List healthStatus){ + return new AutoValue_HealthStatus(healthStatus); } - BackendServiceGroupHealth(){ + HealthStatus(){ } @AutoValue - public abstract static class HealthStatus { + public abstract static class HealthStatusInternal { @Nullable public abstract String ipAddress(); public abstract Integer port(); @@ -46,11 +46,11 @@ public abstract class BackendServiceGroupHealth { public abstract String healthState(); @SerializedNames({"ipAddress", "port", "instance", "healthState"}) - public static HealthStatus create(String ipAddress, int port, URI instance, String healthState) { - return new AutoValue_BackendServiceGroupHealth_HealthStatus(ipAddress, port, instance, healthState); + public static HealthStatusInternal create(String ipAddress, int port, URI instance, String healthState) { + return new AutoValue_HealthStatus_HealthStatusInternal(ipAddress, port, instance, healthState); } - HealthStatus(){ + HealthStatusInternal(){ } } } diff --git a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/HttpHealthCheck.java b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/HttpHealthCheck.java index 0d49756d9e..00553f7591 100644 --- a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/HttpHealthCheck.java +++ b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/HttpHealthCheck.java @@ -40,31 +40,23 @@ public abstract class HttpHealthCheck { */ @Nullable public abstract String host(); - public abstract String requestPath(); + @Nullable public abstract String requestPath(); /** The TCP port number for the HTTP health check request. */ - public abstract int port(); + @Nullable public abstract Integer port(); /** How often (in seconds) to send a health check. */ - public abstract int checkIntervalSec(); + @Nullable public abstract Integer checkIntervalSec(); /** How long (in seconds) to wait before claiming failure. */ - public abstract int timeoutSec(); + @Nullable public abstract Integer timeoutSec(); /** A so-far healthy VM will be marked unhealthy after this many consecutive failures. */ - public abstract int unhealthyThreshold(); + @Nullable public abstract Integer unhealthyThreshold(); /** An unhealthy VM will be marked healthy after this many consecutive successes. */ - public abstract int healthyThreshold(); + @Nullable public abstract Integer healthyThreshold(); - /** - * @param requestPath Defaults to "/" when null. - * @param port Defaults to 80 when null. - * @param checkIntervalSec Defaults to 5 when null. - * @param timeoutSec Defaults to 5 when null. - * @param unhealthyThreshold Defaults to 2 when null. - * @param healthyThreshold Defaults to 2 when null. - */ @SerializedNames( { "id", "selfLink", "name", "description", "host", "requestPath", "port", "checkIntervalSec", "timeoutSec", "unhealthyThreshold", "healthyThreshold" }) @@ -72,9 +64,7 @@ public abstract class HttpHealthCheck { String requestPath, Integer port, Integer checkIntervalSec, Integer timeoutSec, Integer unhealthyThreshold, Integer healthyThreshold) { return new AutoValue_HttpHealthCheck(id, selfLink, name, description, host, - requestPath != null ? requestPath : "/", port != null ? port : 80, - checkIntervalSec != null ? checkIntervalSec : 5, timeoutSec != null ? timeoutSec : 5, - unhealthyThreshold != null ? unhealthyThreshold : 2, healthyThreshold != null ? healthyThreshold : 2); + requestPath, port, checkIntervalSec, timeoutSec, unhealthyThreshold, healthyThreshold); } HttpHealthCheck() { diff --git a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/AggregatedListApi.java b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/AggregatedListApi.java index 55ff6b238e..a663e420f8 100644 --- a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/AggregatedListApi.java +++ b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/AggregatedListApi.java @@ -37,6 +37,7 @@ import org.jclouds.googlecomputeengine.domain.Instance; import org.jclouds.googlecomputeengine.domain.MachineType; import org.jclouds.googlecomputeengine.domain.Operation; import org.jclouds.googlecomputeengine.domain.TargetInstance; +import org.jclouds.googlecomputeengine.domain.TargetPool; import org.jclouds.googlecomputeengine.internal.BaseToIteratorOfListPage; import org.jclouds.googlecomputeengine.options.ListOptions; import org.jclouds.javax.annotation.Nullable; @@ -447,4 +448,54 @@ public interface AggregatedListApi { }; } } + + /** + * Retrieves the list of TargetPool resources available to the + * specified project. By default the list as a maximum size of 100, if no + * options are provided or ListOptions#getMaxResults() has not been set. + * + * @param pageToken + * marks the beginning of the next list page + * @param listOptions + * listing options + * @return a page of the list + */ + @Named("TargetPool:aggregatedList") + @GET + @Path("/targetPools") + ListPage pageOfTargetPools(@Nullable @QueryParam("pageToken") String pageToken, + ListOptions listOptions); + + /** @see #pageOfTargetPools(String, ListOptions) */ + @Named("TargetPool:aggregatedList") + @GET + @Path("/targetPools") + @Transform(TargetPoolPages.class) + Iterator> targetPools(); + + /** @see #pageOfTargetPools(String, ListOptions) */ + @Named("TargetPool:aggregatedList") + @GET + @Path("/targetPools") + @Transform(TargetPoolPages.class) + Iterator> targetPools(ListOptions options); + + static final class TargetPoolPages extends BaseToIteratorOfListPage { + private final GoogleComputeEngineApi api; + + @Inject + TargetPoolPages(GoogleComputeEngineApi api) { + this.api = api; + } + + @Override + protected Function> fetchNextPage(final ListOptions options) { + return new Function>() { + @Override + public ListPage apply(String pageToken) { + return api.aggregatedList().pageOfTargetPools(pageToken, options); + } + }; + } + } } diff --git a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/BackendServiceApi.java b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/BackendServiceApi.java index f1e3776758..629a342a88 100644 --- a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/BackendServiceApi.java +++ b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/BackendServiceApi.java @@ -37,7 +37,7 @@ import org.jclouds.Fallbacks.NullOnNotFoundOr404; import org.jclouds.googlecloud.domain.ListPage; import org.jclouds.googlecomputeengine.GoogleComputeEngineApi; import org.jclouds.googlecomputeengine.domain.BackendService; -import org.jclouds.googlecomputeengine.domain.BackendServiceGroupHealth; +import org.jclouds.googlecomputeengine.domain.HealthStatus; import org.jclouds.googlecomputeengine.domain.Operation; import org.jclouds.googlecomputeengine.internal.BaseToIteratorOfListPage; import org.jclouds.googlecomputeengine.options.BackendServiceOptions; @@ -136,7 +136,7 @@ public interface BackendServiceApi { @Produces(APPLICATION_JSON) @Path("/{backendService}/getHealth") @MapBinder(BindToJsonPayload.class) - BackendServiceGroupHealth getHealth(@PathParam("backendService") String backendServiceName, + HealthStatus getHealth(@PathParam("backendService") String backendServiceName, @PayloadParam("group") URI group); /** diff --git a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApi.java b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApi.java index c1153b1807..17be6788e2 100644 --- a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApi.java +++ b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApi.java @@ -122,7 +122,7 @@ public interface HttpHealthCheckApi { /** * Updates a HttpHealthCheck resource in the specified project using the data included in the request. * Any options left blank will be overwritten! - * + * * @param name the name of the forwarding rule. * @param options the options to set for the healthCheck * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to diff --git a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/TargetPoolApi.java b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/TargetPoolApi.java index 206a66be2d..e623c121c7 100644 --- a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/TargetPoolApi.java +++ b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/TargetPoolApi.java @@ -39,6 +39,7 @@ import org.jclouds.googlecomputeengine.GoogleComputeEngineApi; import org.jclouds.googlecomputeengine.binders.TargetPoolChangeHealthChecksBinder; import org.jclouds.googlecomputeengine.binders.TargetPoolChangeInstancesBinder; import org.jclouds.googlecomputeengine.binders.TargetPoolCreationBinder; +import org.jclouds.googlecomputeengine.domain.HealthStatus; import org.jclouds.googlecomputeengine.domain.Operation; import org.jclouds.googlecomputeengine.domain.TargetPool; import org.jclouds.googlecomputeengine.internal.BaseCallerArg0ToIteratorOfListPage; @@ -105,7 +106,6 @@ public interface TargetPoolApi { @POST @Path("/{targetPool}/addInstance") @MapBinder(TargetPoolChangeInstancesBinder.class) - @Nullable Operation addInstance(@PathParam("targetPool") String targetPool, @PayloadParam("instances") List instances); /** @@ -121,7 +121,6 @@ public interface TargetPoolApi { @POST @Path("/{targetPool}/removeInstance") @MapBinder(TargetPoolChangeInstancesBinder.class) - @Nullable Operation removeInstance(@PathParam("targetPool") String targetPool, @PayloadParam("instances") List instances); /** @@ -137,7 +136,6 @@ public interface TargetPoolApi { @POST @Path("/{targetPool}/addHealthCheck") @MapBinder(TargetPoolChangeHealthChecksBinder.class) - @Nullable Operation addHealthCheck(@PathParam("targetPool") String targetPool, @PayloadParam("healthChecks") List healthChecks); @@ -150,13 +148,27 @@ public interface TargetPoolApi { * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to * you, and look for the status field. */ - @Named("TargetPools:removeHealthChek") + @Named("TargetPools:removeHealthCheck") @POST @Path("/{targetPool}/removeHealthCheck") @MapBinder(TargetPoolChangeHealthChecksBinder.class) - @Nullable Operation removeHealthCheck(@PathParam("targetPool") String targetPool, @PayloadParam("healthChecks") List healthChecks); + /** + * Gets the HealthStatus of an instance in a targetPool. + * + * @param targetPool the name of the target pool. + * @param healthChecks the self-links of the health checks to be removed from the targetPool. + * + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("TargetPools:getHealth") + @POST + @Path("/{targetPool}/getHealth") + @MapBinder(BindToJsonPayload.class) + HealthStatus getHealth(@PathParam("targetPool") String targetPool, @PayloadParam("instance") URI instance); + /** * Changes backup pool configurations. diff --git a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/HttpHealthCheckCreationOptions.java b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/HttpHealthCheckCreationOptions.java index 705b01ba60..a7af465eeb 100644 --- a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/HttpHealthCheckCreationOptions.java +++ b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/HttpHealthCheckCreationOptions.java @@ -16,145 +16,154 @@ */ package org.jclouds.googlecomputeengine.options; -public class HttpHealthCheckCreationOptions { +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; - private String host; - private String requestPath; - private Integer port; - private Integer checkIntervalSec; - private Integer timeoutSec; - private Integer unhealthyThreshold; - private Integer healthyThreshold; - private String description; +import com.google.auto.value.AutoValue; - /** - * The value of the host header in the HTTP health check request. - * @return host +@AutoValue +public abstract class HttpHealthCheckCreationOptions { + + @Nullable public abstract String host(); + @Nullable public abstract String requestPath(); + @Nullable public abstract Integer port(); + @Nullable public abstract Integer checkIntervalSec(); + @Nullable public abstract Integer timeoutSec(); + @Nullable public abstract Integer unhealthyThreshold(); + @Nullable public abstract Integer healthyThreshold(); + @Nullable public abstract String description(); + + static final String DEFAULT_REQUEST_PATH = "/"; + static final Integer DEFAULT_PORT = 80; + static final Integer DEFAULT_CHECK_INTERVAL_SEC = 5; + static final Integer DEFAULT_TIMEOUT_SEC = 5; + static final Integer DEFAULT_UNHEALTHY_THRESHOLD = 2; + static final Integer DEFAULT_HEALTHY_THRESHOLD = 2; + + /* + * Currently GCE is not setting the advertised defaults so we do so here. + * This only leads to trouble in the case of a PATCH operation which we now + * have a workaround for. */ - public String host(){ - return host; + /** + * @param requestPath Defaults to {@value #DEFAULT_REQUEST_PATH} when null. + * @param port Defaults to {@value #DEFAULT_PORT} when null. + * @param checkIntervalSec Defaults to {@value #DEFAULT_CHECK_INTERVAL_SEC} when null. + * @param timeoutSec Defaults to {@value #DEFAULT_TIMEOUT_SEC} when null. + * @param unhealthyThreshold Defaults to {@value #DEFAULT_UNHEALTHY_THRESHOLD} when null. + * @param healthyThreshold Defaults to {@value #DEFAULT_HEALTHY_THRESHOLD} when null. + */ + static HttpHealthCheckCreationOptions createWithDefaults(String host, + String requestPath, Integer port, Integer checkIntervalSec, Integer timeoutSec, Integer unhealthyThreshold, + Integer healthyThreshold, String description) { + return create(host, requestPath != null ? requestPath : DEFAULT_REQUEST_PATH, port != null ? port : DEFAULT_PORT, + checkIntervalSec != null ? checkIntervalSec : DEFAULT_CHECK_INTERVAL_SEC, + timeoutSec != null ? timeoutSec : DEFAULT_TIMEOUT_SEC, + unhealthyThreshold != null ? unhealthyThreshold : DEFAULT_UNHEALTHY_THRESHOLD, + healthyThreshold != null ? healthyThreshold : DEFAULT_HEALTHY_THRESHOLD, description); } - /** - * The request path of the HTTP health check request. The default value is /. - * @return requestPath - */ - public String requestPath(){ - return requestPath; + @SerializedNames( + { "host", "requestPath", "port", "checkIntervalSec", "timeoutSec", + "unhealthyThreshold", "healthyThreshold", "description"}) + static HttpHealthCheckCreationOptions create(String host, String requestPath, Integer port, + Integer checkIntervalSec, Integer timeoutSec, Integer unhealthyThreshold, + Integer healthyThreshold, String description) { + return new AutoValue_HttpHealthCheckCreationOptions(host, requestPath, port, + checkIntervalSec, timeoutSec, unhealthyThreshold, healthyThreshold, description); } - /** - * The TCP port number for the HTTP health check request. The default value is 80. - * @return port - */ - public Integer port(){ - return port; + HttpHealthCheckCreationOptions() { } - /** - * How often (in seconds) to send a health check. The default value is 5 seconds. - * @return checkIntervalSec - */ - public Integer checkIntervalSec(){ - return checkIntervalSec; - } + public static class Builder { - /** - * How long (in seconds) to wait before claiming failure. The default value is 5 seconds. - * @return timeoutSec - */ - public Integer timeoutSec(){ - return timeoutSec; - } + private String host; + private String requestPath; + private Integer port; + private Integer checkIntervalSec; + private Integer timeoutSec; + private Integer unhealthyThreshold; + private Integer healthyThreshold; + private String description; - /** - * A so-far healthy VM will be marked unhealthy after this many consecutive failures. - * The default value is 2. - * @return unhealthyThreashold - */ - public Integer unhealthyThreshold(){ - return unhealthyThreshold; - } - /** - * An unhealthy VM will be marked healthy after this many consecutive successes. - * The default value is 2. - * @return healthyThreashold - */ - public Integer healthyThreshold(){ - return healthyThreshold; - } + /** The value of the host header in the HTTP health check request. */ + public Builder host(String host){ + this.host = host; + return this; + } - /** - * An optional textual description of the TargetPool. - * @return description, provided by the client. - */ - public String description(){ - return description; - } + /** The request path of the HTTP health check request. The default value is {@value #DEFAULT_REQUEST_PATH}. */ + public Builder requestPath(String requestPath){ + this.requestPath = requestPath; + return this; + } - /** - * @see HttpHealthCheckCreationOptions#host() - */ - public HttpHealthCheckCreationOptions host(String host){ - this.host = host; - return this; - } + /** The TCP port number for the HTTP health check request. The default value is {@value #DEFAULT_PORT}. */ + public Builder port(Integer port){ + this.port = port; + return this; + } - /** - * @see HttpHealthCheckCreationOptions#requestPath() - */ - public HttpHealthCheckCreationOptions requestPath(String requestPath){ - this.requestPath = requestPath; - return this; - } + /** How often (in seconds) to send a health check. The default value is {@value #DEFAULT_CHECK_INTERVAL_SEC} seconds. */ + public Builder checkIntervalSec(Integer checkIntervalSec){ + this.checkIntervalSec = checkIntervalSec; + return this; + } - /** - * @see HttpHealthCheckCreationOptions#port() - */ - public HttpHealthCheckCreationOptions port(Integer port){ - this.port = port; - return this; - } + /** How long (in seconds) to wait before claiming failure. The default value is {@value #DEFAULT_TIMEOUT_SEC} seconds. */ + public Builder timeoutSec(Integer timeoutSec){ + this.timeoutSec = timeoutSec; + return this; + } - /** - * @see HttpHealthCheckCreationOptions#checkIntervalSec() - */ - public HttpHealthCheckCreationOptions checkIntervalSec(Integer checkIntervalSec){ - this.checkIntervalSec = checkIntervalSec; - return this; - } + /** + * A so-far healthy VM will be marked unhealthy after this many consecutive failures. + * The default value is {@value #DEFAULT_UNHEALTHY_THRESHOLD}. + */ + public Builder unhealthyThreshold(Integer unhealthyThreshold){ + this.unhealthyThreshold = unhealthyThreshold; + return this; + } - /** - * @see HttpHealthCheckCreationOptions#timeoutSec() - */ - public HttpHealthCheckCreationOptions timeoutSec(Integer timeoutSec){ - this.timeoutSec = timeoutSec; - return this; - } + /** + * An unhealthy VM will be marked healthy after this many consecutive successes. + * The default value is {@value #DEFAULT_HEALTHY_THRESHOLD}. + */ + public Builder healthyThreshold(Integer healthyThreshold){ + this.healthyThreshold = healthyThreshold; + return this; + } - /** - * @see HttpHealthCheckCreationOptions#unhealthyThreshold() - */ - public HttpHealthCheckCreationOptions unhealthyThreshold(Integer unhealthyThreshold){ - this.unhealthyThreshold = unhealthyThreshold; - return this; - } + /** An optional textual description of the TargetPool. */ + public Builder description(String description){ + this.description = description; + return this; + } - /** - * @see HttpHealthCheckCreationOptions#healthyThreshold() - */ - public HttpHealthCheckCreationOptions healthyThreshold(Integer healthyThreshold){ - this.healthyThreshold = healthyThreshold; - return this; - } + /** + * Fields left as null will be replaced with their default before the request + * is made. + * @param requestPath Defaults to {@value #DEFAULT_REQUEST_PATH} when null. + * @param port Defaults to {@value #DEFAULT_PORT} when null. + * @param checkIntervalSec Defaults to {@value #DEFAULT_CHECK_INTERVAL_SEC} when null. + * @param timeoutSec Defaults to {@value #DEFAULT_TIMEOUT_SEC} when null. + * @param unhealthyThreshold Defaults to {@value #DEFAULT_UNHEALTHY_THRESHOLD} when null. + * @param healthyThreshold Defaults to {@value #DEFAULT_HEALTHY_THRESHOLD} when null. + */ + public HttpHealthCheckCreationOptions buildWithDefaults() { + return HttpHealthCheckCreationOptions.createWithDefaults(host, requestPath, port, + checkIntervalSec, timeoutSec, unhealthyThreshold, healthyThreshold, description); + } - /** - * @see HttpHealthCheckCreationOptions#description() - */ - public HttpHealthCheckCreationOptions description(String description){ - this.description = description; - return this; + /** + * Useful when performing a PATCH operation and you do not want to overwrite + * unspecified values with the default values. + */ + public HttpHealthCheckCreationOptions buildNoDefaults() { + return HttpHealthCheckCreationOptions.create(host, requestPath, port, + checkIntervalSec, timeoutSec, unhealthyThreshold, healthyThreshold, description); + } } - } diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/binders/HttpHealthCheckCreationBinderTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/binders/HttpHealthCheckCreationBinderTest.java index e9a8fe4a63..fa4466f5d7 100644 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/binders/HttpHealthCheckCreationBinderTest.java +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/binders/HttpHealthCheckCreationBinderTest.java @@ -32,7 +32,7 @@ import com.google.gson.Gson; @Test(groups = "unit", testName = "HttpHealthCheckCreationBinderTest") public class HttpHealthCheckCreationBinderTest extends BaseGoogleComputeEngineExpectTest{ - + private String NAME = "testHttpHealthCheck"; private Integer TIMEOUTSEC = 3; private Integer UNHEALTHYTHRESHOLD = 5; @@ -40,15 +40,16 @@ public class HttpHealthCheckCreationBinderTest extends BaseGoogleComputeEngineEx private static String DESCRIPTION = "This is a test!"; Json json = new GsonWrapper(new Gson()); - + @Test public void testMap() throws SecurityException, NoSuchMethodException { HttpHealthCheckCreationBinder binder = new HttpHealthCheckCreationBinder(json); - HttpHealthCheckCreationOptions httpHealthCheckCreationOptions = new HttpHealthCheckCreationOptions() + HttpHealthCheckCreationOptions httpHealthCheckCreationOptions = new HttpHealthCheckCreationOptions.Builder() .timeoutSec(TIMEOUTSEC) .unhealthyThreshold(UNHEALTHYTHRESHOLD) .healthyThreshold(HEALTHYTHRESHOLD) - .description(DESCRIPTION); + .description(DESCRIPTION) + .buildWithDefaults(); HttpRequest request = HttpRequest.builder().method("GET").endpoint("http://momma").build(); Map postParams = ImmutableMap.of("name", NAME, "options", httpHealthCheckCreationOptions); @@ -56,8 +57,11 @@ public class HttpHealthCheckCreationBinderTest extends BaseGoogleComputeEngineEx binder.bindToRequest(request, postParams); assertEquals(request.getPayload().getRawContent(), - "{\"" - + "name\":\"" + NAME + "\"," + "{" + + "\"name\":\"" + NAME + "\"," + + "\"requestPath\":\"/\"," + + "\"port\":80," + + "\"checkIntervalSec\":5," + "\"timeoutSec\":" + TIMEOUTSEC + "," + "\"unhealthyThreshold\":" + UNHEALTHYTHRESHOLD + "," + "\"healthyThreshold\":" + HEALTHYTHRESHOLD + "," diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/AggregatedListApiLiveTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/AggregatedListApiLiveTest.java index c1e2f62bb6..00bb650740 100644 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/AggregatedListApiLiveTest.java +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/AggregatedListApiLiveTest.java @@ -31,6 +31,7 @@ import org.jclouds.googlecomputeengine.domain.ForwardingRule; import org.jclouds.googlecomputeengine.domain.MachineType; import org.jclouds.googlecomputeengine.domain.Operation; import org.jclouds.googlecomputeengine.domain.TargetInstance; +import org.jclouds.googlecomputeengine.domain.TargetPool; import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineApiLiveTest; import org.testng.SkipException; import org.testng.annotations.Test; @@ -147,4 +148,21 @@ public class AggregatedListApiLiveTest extends BaseGoogleComputeEngineApiLiveTes } assertEquals(count, 2); } + + public void targetPools() { + Iterator> pageIterator = api().targetPools(maxResults(1)); + // make sure that in spite of having only one result per page we get at + // least two results + int count = 0; + for (; count < 2 && pageIterator.hasNext();) { + ListPage result = pageIterator.next(); + if (!result.isEmpty()) { + count++; + } + } + if (count < 2) { + throw new SkipException("Not enough target pools"); + } + assertEquals(count, 2); + } } diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/AggregatedListApiMockTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/AggregatedListApiMockTest.java index a02ec0757b..1d8bf0acc9 100644 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/AggregatedListApiMockTest.java +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/AggregatedListApiMockTest.java @@ -35,7 +35,7 @@ public class AggregatedListApiMockTest extends BaseGoogleComputeEngineApiMockTes assertSent(server, "GET", "/projects/party/aggregated/machineTypes"); } - public void machineTypesResponseIs4xx() throws Exception { + public void machineTypes_4xx() throws Exception { server.enqueue(jsonResponse("/aggregated_instance_list_empty.json")); AggregatedListApi aggregatedList = api().aggregatedList(); @@ -55,7 +55,7 @@ public class AggregatedListApiMockTest extends BaseGoogleComputeEngineApiMockTes assertSent(server, "GET", "/projects/party/aggregated/instances"); } - public void instancesResponseIs4xx() throws Exception { + public void instances_4xx() throws Exception { server.enqueue(jsonResponse("/aggregated_instance_list_empty.json")); AggregatedListApi aggregatedList = api().aggregatedList(); @@ -75,7 +75,7 @@ public class AggregatedListApiMockTest extends BaseGoogleComputeEngineApiMockTes assertSent(server, "GET", "/projects/party/aggregated/addresses"); } - public void addressesResponseIs4xx() throws Exception { + public void addresses_4xx() throws Exception { server.enqueue(jsonResponse("/aggregated_address_list_empty.json")); AggregatedListApi aggregatedList = api().aggregatedList(); @@ -95,7 +95,7 @@ public class AggregatedListApiMockTest extends BaseGoogleComputeEngineApiMockTes assertSent(server, "GET", "/projects/party/aggregated/disks"); } - public void disksResponseIs4xx() throws Exception { + public void disks_4xx() throws Exception { server.enqueue(jsonResponse("/aggregated_disk_list_empty.json")); AggregatedListApi aggregatedList = api().aggregatedList(); @@ -115,7 +115,7 @@ public class AggregatedListApiMockTest extends BaseGoogleComputeEngineApiMockTes assertSent(server, "GET", "/projects/party/aggregated/diskTypes"); } - public void diskTypesResponseIs4xx() throws Exception { + public void diskTypes_4xx() throws Exception { server.enqueue(jsonResponse("/aggregated_disktype_list_empty.json")); AggregatedListApi aggregatedList = api().aggregatedList(); @@ -135,7 +135,7 @@ public class AggregatedListApiMockTest extends BaseGoogleComputeEngineApiMockTes assertSent(server, "GET", "/projects/party/aggregated/operations"); } - public void globalOperationsResponseIs4xx() throws Exception { + public void globalOperations_4xx() throws Exception { server.enqueue(jsonResponse("/aggregated_global_operation_list_empty.json")); AggregatedListApi aggregatedList = api().aggregatedList(); @@ -175,7 +175,7 @@ public class AggregatedListApiMockTest extends BaseGoogleComputeEngineApiMockTes assertSent(server, "GET", "/projects/party/aggregated/targetInstances"); } - public void targetInstancesResponseIs4xx() throws Exception { + public void targetInstances_4xx() throws Exception { server.enqueue(jsonResponse("/aggregated_target_instance_list_empty.json")); AggregatedListApi aggregatedList = api().aggregatedList(); @@ -184,4 +184,24 @@ public class AggregatedListApiMockTest extends BaseGoogleComputeEngineApiMockTes assertSent(server, "GET", "/projects/party/aggregated/targetInstances"); } + + public void targetPools() throws Exception { + server.enqueue(jsonResponse("/aggregated_target_pool_list.json")); + + AggregatedListApi aggregatedList = api().aggregatedList(); + + assertTrue(aggregatedList.targetPools().hasNext()); + + assertSent(server, "GET", "/projects/party/aggregated/targetPools"); + } + + public void targetPools_4xx() throws Exception { + server.enqueue(jsonResponse("/aggregated_target_pool_list_empty.json")); + + AggregatedListApi aggregatedList = api().aggregatedList(); + + assertFalse(aggregatedList.targetPools().hasNext()); + + assertSent(server, "GET", "/projects/party/aggregated/targetPools"); + } } diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/BackendServiceApiMockTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/BackendServiceApiMockTest.java index 0434401105..ba5bfe0825 100644 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/BackendServiceApiMockTest.java +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/BackendServiceApiMockTest.java @@ -25,7 +25,7 @@ import java.util.List; import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineApiMockTest; import org.jclouds.googlecomputeengine.options.BackendServiceOptions; -import org.jclouds.googlecomputeengine.parse.ParseBackendServiceGetHealthTest; +import org.jclouds.googlecomputeengine.parse.ParseHealthStatusTest; import org.jclouds.googlecomputeengine.parse.ParseBackendServiceListTest; import org.jclouds.googlecomputeengine.parse.ParseBackendServiceTest; import org.jclouds.googlecomputeengine.parse.ParseOperationTest; @@ -118,13 +118,13 @@ public class BackendServiceApiMockTest extends BaseGoogleComputeEngineApiMockTes } public void getHealth() throws Exception { - server.enqueue(jsonResponse("/backend_service_get_health.json")); + server.enqueue(jsonResponse("/health_status_get_health.json")); URI group = URI.create("https://www.googleapis.com/resourceviews/v1beta1/" + "projects/myproject/zones/us-central1-a/" + "resourceViews/jclouds-test"); assertEquals(backendServiceApi().getHealth("jclouds-test", group), - new ParseBackendServiceGetHealthTest().expected(url("/projects"))); + new ParseHealthStatusTest().expected(url("/projects"))); assertSent(server, "POST", "/projects/party/global/backendServices/jclouds-test/getHealth", stringFromResource("/backend_service_get_health_request.json")); diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiExpectTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiExpectTest.java index 1e1549a80e..2b505374f1 100644 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiExpectTest.java +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiExpectTest.java @@ -39,7 +39,7 @@ public class HttpHealthCheckApiExpectTest extends BaseGoogleComputeEngineExpectT .endpoint(BASE_URL + "/party/global/httpHealthChecks/" + healthCheckName) .addHeader("Accept", "application/json") .addHeader("Authorization", "Bearer " + TOKEN) - .payload(payloadFromResourceWithContentType("/httphealthcheck_insert.json", MediaType.APPLICATION_JSON)) + .payload(payloadFromResourceWithContentType("/httphealthcheck_patch.json", MediaType.APPLICATION_JSON)) .build(); HttpResponse insertHttpHealthCheckResponse = HttpResponse.builder().statusCode(200) @@ -48,7 +48,7 @@ public class HttpHealthCheckApiExpectTest extends BaseGoogleComputeEngineExpectT HttpHealthCheckApi api = requestsSendResponses(requestForScopes(COMPUTE_SCOPE), TOKEN_RESPONSE, patch, insertHttpHealthCheckResponse).httpHeathChecks(); - HttpHealthCheckCreationOptions options = new HttpHealthCheckCreationOptions().timeoutSec(0).unhealthyThreshold(0); + HttpHealthCheckCreationOptions options = new HttpHealthCheckCreationOptions.Builder().timeoutSec(0).unhealthyThreshold(0).buildNoDefaults(); assertEquals(api.patch(healthCheckName, options), new ParseGlobalOperationTest().expected()); } diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiLiveTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiLiveTest.java index e8863da4e9..ec2cad8ad0 100644 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiLiveTest.java +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiLiveTest.java @@ -32,7 +32,7 @@ import com.google.common.collect.Iterables; public class HttpHealthCheckApiLiveTest extends BaseGoogleComputeEngineApiLiveTest { private static final String HTTP_HEALTH_CHECK_NAME = "http-health-check-api-live-test"; - private static final int OFFSET = 2; + private static final Integer OFFSET = 2; private HttpHealthCheckCreationOptions options; @@ -42,13 +42,14 @@ public class HttpHealthCheckApiLiveTest extends BaseGoogleComputeEngineApiLiveTe @Test(groups = "live") public void testInsertHttpHealthCheck() { - options = new HttpHealthCheckCreationOptions() + options = new HttpHealthCheckCreationOptions.Builder() .port(56) .checkIntervalSec(40) .timeoutSec(40) .healthyThreshold(30) .unhealthyThreshold(15) - .description("A First Health Check!"); + .description("A First Health Check!") + .buildWithDefaults(); assertOperationDoneSuccessfully(api().insert(HTTP_HEALTH_CHECK_NAME, options)); } @@ -57,11 +58,11 @@ public class HttpHealthCheckApiLiveTest extends BaseGoogleComputeEngineApiLiveTe HttpHealthCheck httpHealthCheck = api().get(HTTP_HEALTH_CHECK_NAME); assertNotNull(httpHealthCheck); assertEquals(httpHealthCheck.name(), HTTP_HEALTH_CHECK_NAME); - assertEquals(httpHealthCheck.port(), options.port().intValue()); - assertEquals(httpHealthCheck.checkIntervalSec(), options.checkIntervalSec().intValue()); - assertEquals(httpHealthCheck.timeoutSec(), options.timeoutSec().intValue()); - assertEquals(httpHealthCheck.healthyThreshold(), options.healthyThreshold().intValue()); - assertEquals(httpHealthCheck.unhealthyThreshold(), options.unhealthyThreshold().intValue()); + assertEquals(httpHealthCheck.port(), options.port()); + assertEquals(httpHealthCheck.checkIntervalSec(), options.checkIntervalSec()); + assertEquals(httpHealthCheck.timeoutSec(), options.timeoutSec()); + assertEquals(httpHealthCheck.healthyThreshold(), options.healthyThreshold()); + assertEquals(httpHealthCheck.unhealthyThreshold(), options.unhealthyThreshold()); assertEquals(httpHealthCheck.description(), options.description()); } @@ -73,44 +74,46 @@ public class HttpHealthCheckApiLiveTest extends BaseGoogleComputeEngineApiLiveTe @Test(groups = "live", dependsOnMethods = "testGetHttpHealthCheck") public void testPatchHttpHealthCheck() { - HttpHealthCheckCreationOptions newOptions = new HttpHealthCheckCreationOptions() + HttpHealthCheckCreationOptions newOptions = new HttpHealthCheckCreationOptions.Builder() .port(options.port() + OFFSET) .checkIntervalSec(options.checkIntervalSec() + OFFSET) - .timeoutSec(options.timeoutSec() + OFFSET); + .timeoutSec(options.timeoutSec() + OFFSET) + .buildNoDefaults(); assertOperationDoneSuccessfully(api().patch(HTTP_HEALTH_CHECK_NAME, newOptions)); // Check changes happened and others unchanged. HttpHealthCheck httpHealthCheck = api().get(HTTP_HEALTH_CHECK_NAME); assertNotNull(httpHealthCheck); assertEquals(httpHealthCheck.name(), HTTP_HEALTH_CHECK_NAME); - assertEquals(httpHealthCheck.port(), newOptions.port().intValue()); - assertEquals(httpHealthCheck.checkIntervalSec(), newOptions.checkIntervalSec().intValue()); - assertEquals(httpHealthCheck.timeoutSec(), newOptions.timeoutSec().intValue()); - assertEquals(httpHealthCheck.healthyThreshold(), options.healthyThreshold().intValue()); - assertEquals(httpHealthCheck.unhealthyThreshold(), options.unhealthyThreshold().intValue()); + assertEquals(httpHealthCheck.port(), newOptions.port()); + assertEquals(httpHealthCheck.checkIntervalSec(), newOptions.checkIntervalSec()); + assertEquals(httpHealthCheck.timeoutSec(), newOptions.timeoutSec()); + assertEquals(httpHealthCheck.healthyThreshold(), options.healthyThreshold()); + assertEquals(httpHealthCheck.unhealthyThreshold(), options.unhealthyThreshold()); assertEquals(httpHealthCheck.description(), options.description()); } @Test(groups = "live", dependsOnMethods = "testPatchHttpHealthCheck") public void testUpdateHttpHealthCheck() { - HttpHealthCheckCreationOptions newOptions = new HttpHealthCheckCreationOptions() + HttpHealthCheckCreationOptions newOptions = new HttpHealthCheckCreationOptions.Builder() .checkIntervalSec(options.checkIntervalSec() - OFFSET) - .timeoutSec(options.timeoutSec() - OFFSET); + .timeoutSec(options.timeoutSec() - OFFSET) + .buildWithDefaults(); assertOperationDoneSuccessfully(api().update(HTTP_HEALTH_CHECK_NAME, newOptions)); // Check changes happened. HttpHealthCheck httpHealthCheck = api().get(HTTP_HEALTH_CHECK_NAME); assertNotNull(httpHealthCheck); assertEquals(httpHealthCheck.name(), HTTP_HEALTH_CHECK_NAME); - assertEquals(httpHealthCheck.checkIntervalSec(), newOptions.checkIntervalSec().intValue()); - assertEquals(httpHealthCheck.timeoutSec(), newOptions.timeoutSec().intValue()); + assertEquals(httpHealthCheck.checkIntervalSec(), newOptions.checkIntervalSec()); + assertEquals(httpHealthCheck.timeoutSec(), newOptions.timeoutSec()); // Update overwrites unspecified parameters to their defaults. assertNotEquals(httpHealthCheck.healthyThreshold(), options.healthyThreshold()); assertNotEquals(httpHealthCheck.unhealthyThreshold(), options.unhealthyThreshold()); assertNotEquals(httpHealthCheck.description(), options.description()); } - @Test(groups = "live", dependsOnMethods = {"testListHttpHealthCheck", "testUpdateHttpHealthCheck"}) + @Test(groups = "live", dependsOnMethods = {"testListHttpHealthCheck", "testUpdateHttpHealthCheck"}, alwaysRun = true) public void testDeleteHttpHealthCheck() { assertOperationDoneSuccessfully(api().delete(HTTP_HEALTH_CHECK_NAME)); } diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiMockTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiMockTest.java index 35b4e03778..2943a33248 100644 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiMockTest.java +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiMockTest.java @@ -49,8 +49,8 @@ public class HttpHealthCheckApiMockTest extends BaseGoogleComputeEngineApiMockTe public void insert() throws Exception { server.enqueue(jsonResponse("/global_operation.json")); - HttpHealthCheckCreationOptions options = new HttpHealthCheckCreationOptions() - .timeoutSec(0).unhealthyThreshold(0); + HttpHealthCheckCreationOptions options = new HttpHealthCheckCreationOptions.Builder() + .timeoutSec(0).unhealthyThreshold(0).buildWithDefaults(); assertEquals(httpHealthCheckApi().insert("http-health-check", options), new ParseGlobalOperationTest().expected(url("/projects"))); @@ -78,8 +78,8 @@ public class HttpHealthCheckApiMockTest extends BaseGoogleComputeEngineApiMockTe public void update() throws Exception { server.enqueue(jsonResponse("/global_operation.json")); - HttpHealthCheckCreationOptions options = new HttpHealthCheckCreationOptions() - .timeoutSec(0).unhealthyThreshold(0); + HttpHealthCheckCreationOptions options = new HttpHealthCheckCreationOptions.Builder() + .timeoutSec(0).unhealthyThreshold(0).buildWithDefaults(); assertEquals(httpHealthCheckApi().update("http-health-check", options), new ParseGlobalOperationTest().expected(url("/projects"))); diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiExpectTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiExpectTest.java deleted file mode 100644 index 6d5c4a779e..0000000000 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiExpectTest.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.googlecomputeengine.features; - -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.AssertJUnit.assertNull; - -import java.net.URI; -import java.util.List; - -import javax.ws.rs.core.MediaType; - -import org.jclouds.googlecomputeengine.GoogleComputeEngineApi; -import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineExpectTest; -import org.jclouds.googlecomputeengine.options.TargetPoolCreationOptions; -import org.jclouds.googlecomputeengine.parse.ParseRegionOperationTest; -import org.jclouds.googlecomputeengine.parse.ParseTargetPoolListTest; -import org.jclouds.googlecomputeengine.parse.ParseTargetPoolTest; -import org.jclouds.http.HttpRequest; -import org.jclouds.http.HttpResponse; -import org.testng.annotations.Test; - -import com.google.common.collect.ImmutableList; - -@Test(groups = "unit", testName = "TargetPoolApiExpectTest") -public class TargetPoolApiExpectTest extends BaseGoogleComputeEngineExpectTest { - - private static final List INSTANCES = ImmutableList - .of(URI.create(BASE_URL + "/party/zones/europe-west1-a/instances/test")); - - private static final List HEALTH_CHECKS = ImmutableList - .of(URI.create(BASE_URL + "/party/global/httpHealthChecks/health-check-1")); - - private static final URI TARGET_POOL = URI.create(BASE_URL + "/party/regions/us-central1/targetPools/tpool"); - - public void testGetTargetPoolResponseIs2xx() throws Exception { - HttpRequest get = HttpRequest - .builder() - .method("GET") - .endpoint(BASE_URL + "/party/regions/us-central1/targetPools/test") - .addHeader("Accept", "application/json") - .addHeader("Authorization", "Bearer " + TOKEN).build(); - - HttpResponse response = HttpResponse.builder().statusCode(200) - .payload(payloadFromResource("/targetpool_get.json")).build(); - - TargetPoolApi api = requestsSendResponses(requestForScopes(COMPUTE_READONLY_SCOPE), - TOKEN_RESPONSE, get, response).targetPoolsInRegion("us-central1"); - - assertEquals(api.get("test"), new ParseTargetPoolTest().expected()); - } - - public void testGetTargetPoolResponseIs4xx() throws Exception { - HttpRequest get = HttpRequest - .builder() - .method("GET") - .endpoint(BASE_URL + "/party/regions/us-central1/targetPools/test") - .addHeader("Accept", "application/json") - .addHeader("Authorization", "Bearer " + TOKEN).build(); - - HttpResponse response = HttpResponse.builder().statusCode(404).build(); - - TargetPoolApi api = requestsSendResponses(requestForScopes(COMPUTE_READONLY_SCOPE), - TOKEN_RESPONSE, get, response).targetPoolsInRegion("us-central1"); - - assertNull(api.get("test")); - } - - public void testInsertTargetPoolResponseIs2xx() { - HttpRequest insert = HttpRequest - .builder() - .method("POST") - .endpoint(BASE_URL + "/party/regions/us-central1/targetPools") - .addHeader("Accept", "application/json") - .addHeader("Authorization", "Bearer " + TOKEN) - .payload(payloadFromResourceWithContentType("/targetpool_insert.json", MediaType.APPLICATION_JSON)) - .build(); - - HttpResponse insertTargetPoolResponse = HttpResponse.builder().statusCode(200) - .payload(payloadFromResource("/region_operation.json")).build(); - - TargetPoolApi api = requestsSendResponses(requestForScopes(COMPUTE_SCOPE), - TOKEN_RESPONSE, insert, - insertTargetPoolResponse).targetPoolsInRegion("us-central1"); - TargetPoolCreationOptions targetPoolCreationOptions = new TargetPoolCreationOptions(); - assertEquals(api.create("test", targetPoolCreationOptions), new ParseRegionOperationTest().expected()); - } - - public void testDeleteTargetPoolResponseIs2xx() { - HttpRequest delete = HttpRequest - .builder() - .method("DELETE") - .endpoint(BASE_URL + "/party/regions/us-central1/targetPools/test-targetPool") - .addHeader("Accept", "application/json") - .addHeader("Authorization", "Bearer " + TOKEN).build(); - - HttpResponse deleteResponse = HttpResponse.builder().statusCode(200) - .payload(payloadFromResource("/region_operation.json")).build(); - - TargetPoolApi api = requestsSendResponses(requestForScopes(COMPUTE_SCOPE), - TOKEN_RESPONSE, delete, deleteResponse).targetPoolsInRegion("us-central1"); - - assertEquals(api.delete("test-targetPool"), - new ParseRegionOperationTest().expected()); - } - - public void testDeleteTargetPoolResponseIs4xx() { - HttpRequest delete = HttpRequest - .builder() - .method("DELETE") - .endpoint(BASE_URL + "/party/regions/us-central1/targetPools/test-targetPool") - .addHeader("Accept", "application/json") - .addHeader("Authorization", "Bearer " + TOKEN).build(); - - HttpResponse deleteResponse = HttpResponse.builder().statusCode(404).build(); - - TargetPoolApi api = requestsSendResponses(requestForScopes(COMPUTE_SCOPE), - TOKEN_RESPONSE, delete, deleteResponse).targetPoolsInRegion("us-central1"); - - assertNull(api.delete("test-targetPool")); - } - - HttpRequest list = HttpRequest - .builder() - .method("GET") - .endpoint(BASE_URL + "/party/regions/us-central1/targetPools") - .addHeader("Accept", "application/json") - .addHeader("Authorization", "Bearer " + TOKEN).build(); - - public void list() { - HttpResponse response = HttpResponse.builder().statusCode(200) - .payload(payloadFromResource("/targetpool_list.json")).build(); - - TargetPoolApi api = requestsSendResponses(requestForScopes(COMPUTE_READONLY_SCOPE), - TOKEN_RESPONSE, list, response).targetPoolsInRegion("us-central1"); - - assertEquals(api.list().next(), new ParseTargetPoolListTest().expected()); - } - - public void listEmpty() { - HttpResponse response = HttpResponse.builder().statusCode(200) - .payload(payloadFromResource("/list_empty.json")).build(); - - TargetPoolApi api = requestsSendResponses(requestForScopes(COMPUTE_READONLY_SCOPE), - TOKEN_RESPONSE, list, response).targetPoolsInRegion("us-central1"); - - assertFalse(api.list().hasNext()); - } - - public void testAddInstanceResponseIs2xx() throws Exception { - HttpRequest addInstance = makeGenericRequest("POST", "addInstance", "/targetpool_addinstance.json"); - HttpResponse response = HttpResponse.builder().statusCode(200) - .payload(payloadFromResource("/region_operation.json")).build(); - - TargetPoolApi api = requestsSendResponses(requestForScopes(COMPUTE_SCOPE), - TOKEN_RESPONSE, addInstance, response).targetPoolsInRegion("us-central1"); - - assertEquals(api.addInstance("test", INSTANCES), - new ParseRegionOperationTest().expected()); - } - - public void testRemoveInstanceResponseIs2xx(){ - HttpRequest removeInstance = makeGenericRequest("POST", "removeInstance", "/targetpool_addinstance.json"); - - HttpResponse response = HttpResponse.builder().statusCode(200) - .payload(payloadFromResource("/region_operation.json")).build(); - - TargetPoolApi api = requestsSendResponses(requestForScopes(COMPUTE_SCOPE), - TOKEN_RESPONSE, removeInstance, response).targetPoolsInRegion("us-central1"); - - assertEquals(api.removeInstance("test", INSTANCES), - new ParseRegionOperationTest().expected()); - } - - public void testAddHealthCheckResponseIs2xx(){ - HttpRequest addHealthCheck = makeGenericRequest("POST", "addHealthCheck", "/targetpool_changehealthcheck.json"); - - HttpResponse response = HttpResponse.builder().statusCode(200) - .payload(payloadFromResource("/region_operation.json")).build(); - - TargetPoolApi api = requestsSendResponses(requestForScopes(COMPUTE_SCOPE), - TOKEN_RESPONSE, addHealthCheck, response).targetPoolsInRegion("us-central1"); - - assertEquals(api.addHealthCheck("test", HEALTH_CHECKS), new ParseRegionOperationTest().expected()); - } - - public void testRemoveHealthCheckResponseIs2xx(){ - HttpRequest removeHealthCheck = makeGenericRequest("POST", "removeHealthCheck", "/targetpool_changehealthcheck.json"); - - HttpResponse response = HttpResponse.builder().statusCode(200) - .payload(payloadFromResource("/region_operation.json")).build(); - - TargetPoolApi api = requestsSendResponses(requestForScopes(COMPUTE_SCOPE), - TOKEN_RESPONSE, removeHealthCheck, response).targetPoolsInRegion("us-central1"); - - assertEquals(api.removeHealthCheck("test", HEALTH_CHECKS), new ParseRegionOperationTest().expected()); - } - - public void testSetBackupResponseIs2xx(){ - HttpRequest SetBackup = HttpRequest - .builder() - .method("POST") - .endpoint(BASE_URL + "/party/regions/us-central1/targetPools/testpool/setBackup") - .addHeader("Accept", "application/json") - .addHeader("Authorization", "Bearer " + TOKEN) - .payload(payloadFromResourceWithContentType("/targetpool_setbackup.json", MediaType.APPLICATION_JSON)) - .build(); - HttpResponse response = HttpResponse.builder().statusCode(200) - .payload(payloadFromResource("/region_operation.json")).build(); - - TargetPoolApi api = requestsSendResponses(requestForScopes(COMPUTE_SCOPE), - TOKEN_RESPONSE, SetBackup, response).targetPoolsInRegion("us-central1"); - - assertEquals(api.setBackup("testpool", TARGET_POOL), new ParseRegionOperationTest().expected()); - } - - public void testSetBackupWithFailoverRatioResponseIs2xx(){ - HttpRequest SetBackup = HttpRequest - .builder() - .method("POST") - .endpoint(BASE_URL + "/party/regions/" - + "us-central1/targetPools/testpool/setBackup?failoverRatio=0.5") - .addHeader("Accept", "application/json") - .addHeader("Authorization", "Bearer " + TOKEN) - .payload(payloadFromResourceWithContentType("/targetpool_setbackup.json", MediaType.APPLICATION_JSON)) - .build(); - HttpResponse response = HttpResponse.builder().statusCode(200) - .payload(payloadFromResource("/region_operation.json")).build(); - - TargetPoolApi api = requestsSendResponses(requestForScopes(COMPUTE_SCOPE), - TOKEN_RESPONSE, SetBackup, response).targetPoolsInRegion("us-central1"); - - Float failoverRatio = Float.valueOf("0.5"); - assertEquals(api.setBackup("testpool", failoverRatio, TARGET_POOL), new ParseRegionOperationTest().expected()); - } - - public HttpRequest makeGenericRequest(String method, String endpoint, String requestPayloadFile){ - HttpRequest request = HttpRequest - .builder() - .method(method) - .endpoint(BASE_URL + "/party/regions/us-central1/targetPools/test/" + endpoint) - .addHeader("Accept", "application/json") - .addHeader("Authorization", "Bearer " + TOKEN) - .payload(payloadFromResourceWithContentType(requestPayloadFile, MediaType.APPLICATION_JSON)) - .build(); - return request; - } -} diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiLiveTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiLiveTest.java index 174407696a..d94a6160ea 100644 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiLiveTest.java +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiLiveTest.java @@ -26,12 +26,15 @@ import java.util.ArrayList; import java.util.List; import org.jclouds.googlecloud.domain.ListPage; +import org.jclouds.googlecomputeengine.domain.HealthStatus; import org.jclouds.googlecomputeengine.domain.HttpHealthCheck; import org.jclouds.googlecomputeengine.domain.Image; import org.jclouds.googlecomputeengine.domain.Instance; import org.jclouds.googlecomputeengine.domain.NewInstance; import org.jclouds.googlecomputeengine.domain.TargetPool; +import org.jclouds.googlecomputeengine.domain.ForwardingRule.IPProtocol; import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineApiLiveTest; +import org.jclouds.googlecomputeengine.options.ForwardingRuleCreationOptions; import org.jclouds.googlecomputeengine.options.HttpHealthCheckCreationOptions; import org.jclouds.googlecomputeengine.options.TargetPoolCreationOptions; import org.jclouds.googlecomputeengine.options.TargetPoolCreationOptions.SessionAffinityValue; @@ -54,8 +57,7 @@ public class TargetPoolApiLiveTest extends BaseGoogleComputeEngineApiLiveTest { private static final String INSTANCE_NAME = "target-pool-api-live-test-instance"; private static final String IPV4_RANGE = "10.0.0.0/8"; private static final String HEALTHCHECK_NAME = "target-pool-test-health-check"; - - private static final int DEFAULT_DISK_SIZE_GB = 10; + private static final String FORWARDING_RULE_NAME = "target-pool-api-forwarding-rule"; private List instances; private List httpHealthChecks; @@ -64,7 +66,7 @@ public class TargetPoolApiLiveTest extends BaseGoogleComputeEngineApiLiveTest { return api.targetPoolsInRegion(DEFAULT_REGION_NAME); } - @Test(groups = "live") + @Test(groups = "live", dependsOnMethods = "testInsertTargetPool2") public void testCreateInstanceAndHealthCheck(){ InstanceApi instanceApi = api.instancesInZone(DEFAULT_ZONE_NAME); HttpHealthCheckApi httpHealthCheckApi = api.httpHeathChecks(); @@ -99,14 +101,27 @@ public class TargetPoolApiLiveTest extends BaseGoogleComputeEngineApiLiveTest { instances.add(instance.selfLink()); // Create a healthCheck - HttpHealthCheckCreationOptions options = new HttpHealthCheckCreationOptions() - .checkIntervalSec(30) - .timeoutSec(20) - .description("A test HealthCheck for adding to targetPools"); + HttpHealthCheckCreationOptions options = new HttpHealthCheckCreationOptions.Builder() + .checkIntervalSec(3) + .timeoutSec(2) + .description("A test HealthCheck for adding to targetPools") + .buildWithDefaults(); assertOperationDoneSuccessfully(httpHealthCheckApi.insert(HEALTHCHECK_NAME, options)); HttpHealthCheck healthCheck = httpHealthCheckApi.get(HEALTHCHECK_NAME); httpHealthChecks = new ArrayList(); httpHealthChecks.add(healthCheck.selfLink()); + + // Create a forwarding rule + TargetPool targetPool = api().get(TARGETPOOL_NAME); + URI target = targetPool.selfLink(); + + ForwardingRuleCreationOptions forwardingRuleOptions = new ForwardingRuleCreationOptions() + .ipProtocol(IPProtocol.TCP) + .portRange("80-80") + .target(target); + + assertOperationDoneSuccessfully(api.forwardingRulesInRegion(DEFAULT_REGION_NAME) + .create(FORWARDING_RULE_NAME, forwardingRuleOptions)); } @Test(groups = "live") @@ -148,24 +163,13 @@ public class TargetPoolApiLiveTest extends BaseGoogleComputeEngineApiLiveTest { @Test(groups = "live", dependsOnMethods = {"testInsertTargetPool", "testCreateInstanceAndHealthCheck"}) public void testAddInstanceTargetPool() { - assertOperationDoneSuccessfully(api().addInstance(BACKUP_TARGETPOOL_NAME, instances)); - TargetPool targetPool = api().get(BACKUP_TARGETPOOL_NAME); + assertOperationDoneSuccessfully(api().addInstance(TARGETPOOL_NAME, instances)); + TargetPool targetPool = api().get(TARGETPOOL_NAME); assertNotNull(targetPool); - assertEquals(targetPool.name(), BACKUP_TARGETPOOL_NAME); + assertEquals(targetPool.name(), TARGETPOOL_NAME); assertEquals(targetPool.instances(), instances); } - @Test(groups = "live", dependsOnMethods = "testAddInstanceTargetPool") - public void testRemoveInstanceTargetPool() { - assertOperationDoneSuccessfully(api().removeInstance(BACKUP_TARGETPOOL_NAME, instances)); - - TargetPool targetPool = api().get(BACKUP_TARGETPOOL_NAME); - - assertNotNull(targetPool); - assertEquals(targetPool.name(), BACKUP_TARGETPOOL_NAME); - assertNotEquals(targetPool.instances(), instances); - } - @Test(groups = "live", dependsOnMethods = {"testInsertTargetPool2", "testCreateInstanceAndHealthCheck"}) public void testAddHealthCheckTargetPool() { assertOperationDoneSuccessfully(api().addHealthCheck(TARGETPOOL_NAME, httpHealthChecks)); @@ -175,7 +179,31 @@ public class TargetPoolApiLiveTest extends BaseGoogleComputeEngineApiLiveTest { assertEquals(targetPool.healthChecks(), httpHealthChecks); } - @Test(groups = "live", dependsOnMethods = "testAddHealthCheckTargetPool") + @Test(groups = "live", dependsOnMethods = {"testAddHealthCheckTargetPool", "testAddInstanceTargetPool"} ) + public void testGetHealthTargetPool() { + TargetPool targetPool = api().get(TARGETPOOL_NAME); + assertNotNull(targetPool); + assertEquals(targetPool.instances(), instances); + assertEquals(targetPool.healthChecks(), httpHealthChecks); + + HealthStatus healthStatus = api().getHealth(TARGETPOOL_NAME, instances.get(0)); + assertNotNull(healthStatus); + assertEquals(healthStatus.healthStatus().get(0).instance(), instances.get(0)); + assertEquals(healthStatus.healthStatus().get(0).healthState(), "UNHEALTHY"); + } + + @Test(groups = "live", dependsOnMethods = "testGetHealthTargetPool") + public void testRemoveInstanceTargetPool() { + assertOperationDoneSuccessfully(api().removeInstance(TARGETPOOL_NAME, instances)); + + TargetPool targetPool = api().get(TARGETPOOL_NAME); + + assertNotNull(targetPool); + assertEquals(targetPool.name(), TARGETPOOL_NAME); + assertNotEquals(targetPool.instances(), instances); + } + + @Test(groups = "live", dependsOnMethods = "testGetHealthTargetPool") public void testRemoveHealthCheckTargetPool() { assertOperationDoneSuccessfully(api().removeHealthCheck(TARGETPOOL_NAME, httpHealthChecks)); @@ -220,6 +248,7 @@ public class TargetPoolApiLiveTest extends BaseGoogleComputeEngineApiLiveTest { public void testDeleteTargetPool() { // Note: This ordering matters due one being the backup of the other ect. assertOperationDoneSuccessfully(api().delete(THIRD_TARGETPOOL_NAME)); + assertOperationDoneSuccessfully(api.forwardingRulesInRegion(DEFAULT_REGION_NAME).delete(FORWARDING_RULE_NAME)); assertOperationDoneSuccessfully(api().delete(TARGETPOOL_NAME)); assertOperationDoneSuccessfully(api().delete(BACKUP_TARGETPOOL_NAME)); } diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiMockTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiMockTest.java new file mode 100644 index 0000000000..f45a38409c --- /dev/null +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiMockTest.java @@ -0,0 +1,178 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.googlecomputeengine.features; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.AssertJUnit.assertNull; + +import java.net.URI; +import java.util.List; + +import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineApiMockTest; +import org.jclouds.googlecomputeengine.options.TargetPoolCreationOptions; +import org.jclouds.googlecomputeengine.parse.ParseHealthStatusTest; +import org.jclouds.googlecomputeengine.parse.ParseRegionOperationTest; +import org.jclouds.googlecomputeengine.parse.ParseTargetPoolListTest; +import org.jclouds.googlecomputeengine.parse.ParseTargetPoolTest; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableList; + +@Test(groups = "unit", testName = "TargetPoolApiMockTest", singleThreaded = true) +public class TargetPoolApiMockTest extends BaseGoogleComputeEngineApiMockTest { + + public void get() throws Exception { + server.enqueue(jsonResponse("/targetpool_get.json")); + + assertEquals(targetPoolApi().get("test"), + new ParseTargetPoolTest().expected(url("/projects"))); + assertSent(server, "GET", "/projects/party/regions/us-central1/targetPools/test"); + } + + public void get_4xx() throws Exception { + server.enqueue(response404()); + + assertNull(targetPoolApi().get("test")); + assertSent(server, "GET", "/projects/party/regions/us-central1/targetPools/test"); + } + + public void insert() throws Exception { + server.enqueue(jsonResponse("/region_operation.json")); + + TargetPoolCreationOptions targetPoolCreationOptions = new TargetPoolCreationOptions(); + assertEquals(targetPoolApi().create("test", targetPoolCreationOptions), + new ParseRegionOperationTest().expected(url("/projects"))); + assertSent(server, "POST", "/projects/party/regions/us-central1/targetPools", + stringFromResource("/targetpool_insert.json")); + } + + public void delete() throws Exception { + server.enqueue(jsonResponse("/region_operation.json")); + + assertEquals(targetPoolApi().delete("test-targetPool"), + new ParseRegionOperationTest().expected(url("/projects"))); + assertSent(server, "DELETE", "/projects/party/regions/us-central1/targetPools/test-targetPool"); + } + + public void delete_4xx() throws Exception { + server.enqueue(response404()); + + assertNull(targetPoolApi().delete("test-targetPool")); + assertSent(server, "DELETE", "/projects/party/regions/us-central1/targetPools/test-targetPool"); + } + + public void list() throws Exception { + server.enqueue(jsonResponse("/targetpool_list.json")); + + assertEquals(targetPoolApi().list().next(), new ParseTargetPoolListTest().expected(url("/projects"))); + assertSent(server, "GET", "/projects/party/regions/us-central1/targetPools"); + } + + public void list_empty() throws Exception { + server.enqueue(jsonResponse("/list_empty.json")); + + assertFalse(targetPoolApi().list().hasNext()); + assertSent(server, "GET", "/projects/party/regions/us-central1/targetPools"); + } + + public void addInstance() throws Exception { + server.enqueue(jsonResponse("/region_operation.json")); + + List instances = ImmutableList + .of(URI.create(url("/projects/party/zones/europe-west1-a/instances/test"))); + + assertEquals(targetPoolApi().addInstance("test", instances), + new ParseRegionOperationTest().expected(url("/projects"))); + assertSent(server, "POST", "/projects/party/regions/us-central1/targetPools/test/addInstance", + stringFromResource("/targetpool_addinstance.json")); + } + + public void removeInstance() throws Exception { + server.enqueue(jsonResponse("/region_operation.json")); + + List instances = ImmutableList + .of(URI.create(url("/projects/party/zones/europe-west1-a/instances/test"))); + + assertEquals(targetPoolApi().removeInstance("test", instances), + new ParseRegionOperationTest().expected(url("/projects"))); + assertSent(server, "POST", "/projects/party/regions/us-central1/targetPools/test/removeInstance", + stringFromResource("/targetpool_addinstance.json")); + } + + public void addHealthCheck() throws Exception { + server.enqueue(jsonResponse("/region_operation.json")); + + List healthChecks = ImmutableList + .of(URI.create(url("/projects/party/global/httpHealthChecks/health-check-1"))); + + assertEquals(targetPoolApi().addHealthCheck("test", healthChecks), + new ParseRegionOperationTest().expected(url("/projects"))); + assertSent(server, "POST", "/projects/party/regions/us-central1/targetPools/test/addHealthCheck", + stringFromResource("/targetpool_changehealthcheck.json")); + } + + public void removeHealthCheck() throws Exception { + server.enqueue(jsonResponse("/region_operation.json")); + + List healthChecks = ImmutableList + .of(URI.create(url("/projects/party/global/httpHealthChecks/health-check-1"))); + + assertEquals(targetPoolApi().removeHealthCheck("test", healthChecks), + new ParseRegionOperationTest().expected(url("/projects"))); + assertSent(server, "POST", "/projects/party/regions/us-central1/targetPools/test/removeHealthCheck", + stringFromResource("/targetpool_changehealthcheck.json")); + } + + public void setBackup() throws Exception { + server.enqueue(jsonResponse("/region_operation.json")); + + URI backup = URI.create(url("/projects/party/regions/us-central1/targetPools/tpool")); + + assertEquals(targetPoolApi().setBackup("test", backup), + new ParseRegionOperationTest().expected(url("/projects"))); + assertSent(server, "POST", "/projects/party/regions/us-central1/targetPools/test/setBackup", + stringFromResource("/targetpool_setbackup.json")); + } + + public void setBackup_FailoverRatio() throws Exception { + server.enqueue(jsonResponse("/region_operation.json")); + + URI backup = URI.create(url("/projects/party/regions/us-central1/targetPools/tpool")); + + Float failoverRatio = Float.valueOf("0.5"); + assertEquals(targetPoolApi().setBackup("test", failoverRatio, backup), + new ParseRegionOperationTest().expected(url("/projects"))); + assertSent(server, "POST", "/projects/party/regions/us-central1/targetPools/" + + "test/setBackup?failoverRatio=0.5", + stringFromResource("/targetpool_setbackup.json")); + } + + public void getHealth() throws Exception { + server.enqueue(jsonResponse("/health_status_get_health.json")); + + URI instance = URI.create(url("/party/zones/us-central1-a/instances/jclouds-test")); + assertEquals(targetPoolApi().getHealth("test-pool", instance), + new ParseHealthStatusTest().expected(url("/projects"))); + assertSent(server, "POST", "/projects/party/regions/us-central1/targetPools/test-pool/getHealth", + "{\"instance\": \"" + instance.toString() + "\"}"); + } + + public TargetPoolApi targetPoolApi() { + return api().targetPoolsInRegion("us-central1"); + } +} diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseBackendServiceGetHealthTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseHealthStatusTest.java similarity index 71% rename from providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseBackendServiceGetHealthTest.java rename to providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseHealthStatusTest.java index 5eab5291e0..b425db99a9 100644 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseBackendServiceGetHealthTest.java +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseHealthStatusTest.java @@ -21,33 +21,33 @@ import static javax.ws.rs.core.MediaType.APPLICATION_JSON; import java.net.URI; import javax.ws.rs.Consumes; -import org.jclouds.googlecomputeengine.domain.BackendServiceGroupHealth; -import org.jclouds.googlecomputeengine.domain.BackendServiceGroupHealth.HealthStatus; +import org.jclouds.googlecomputeengine.domain.HealthStatus; +import org.jclouds.googlecomputeengine.domain.HealthStatus.HealthStatusInternal; import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineParseTest; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; @Test(groups = "unit") -public class ParseBackendServiceGetHealthTest extends BaseGoogleComputeEngineParseTest { +public class ParseHealthStatusTest extends BaseGoogleComputeEngineParseTest { @Override public String resource() { - return "/backend_service_get_health.json"; + return "/health_status_get_health.json"; } @Override @Consumes(APPLICATION_JSON) - public BackendServiceGroupHealth expected() { + public HealthStatus expected() { return expected(BASE_URL); } @Consumes(APPLICATION_JSON) - public BackendServiceGroupHealth expected(String baseUrl) { - URI uri = URI.create(baseUrl + "/myproject/zones/us-central1-a/instances/" + public HealthStatus expected(String baseUrl) { + URI uri = URI.create(baseUrl + "/party/zones/us-central1-a/instances/" + "jclouds-test"); - return BackendServiceGroupHealth.create( - ImmutableList.of(HealthStatus.create( + return HealthStatus.create( + ImmutableList.of(HealthStatusInternal.create( null, // ipAddress 80, // port uri, // instance diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseTargetPoolListTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseTargetPoolListTest.java index c4071e2fb2..b53f805574 100644 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseTargetPoolListTest.java +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseTargetPoolListTest.java @@ -38,8 +38,13 @@ public class ParseTargetPoolListTest extends BaseGoogleComputeEngineParseTest
  • expected() { + return expected(BASE_URL); + } + + @Consumes(APPLICATION_JSON) + public ListPage expected(String baseUrl) { return ForwardingListPage.create( // - ImmutableList.of(new ParseTargetPoolTest().expected()), // items + ImmutableList.of(new ParseTargetPoolTest().expected(baseUrl)), // items null // nextPageToken ); } diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseTargetPoolTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseTargetPoolTest.java index 81f357c4ca..efa2ee99e8 100644 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseTargetPoolTest.java +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseTargetPoolTest.java @@ -36,12 +36,17 @@ public class ParseTargetPoolTest extends BaseGoogleComputeEngineParseTest