mirror of https://github.com/apache/jclouds.git
Added targetPool:AggregatedList, getHealth. Updated HttpHealthCheck
This commit is contained in:
parent
94d42c3c6c
commit
dd5c4c5c6b
|
@ -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();
|
||||
|
|
|
@ -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> healthStatus();
|
||||
public abstract List<HealthStatusInternal> healthStatus();
|
||||
|
||||
@SerializedNames({"healthStatus"})
|
||||
public static BackendServiceGroupHealth create(List<HealthStatus> healthStatus){
|
||||
return new AutoValue_BackendServiceGroupHealth(healthStatus);
|
||||
public static HealthStatus create(List<HealthStatusInternal> 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(){
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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() {
|
||||
|
|
|
@ -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<TargetPool> pageOfTargetPools(@Nullable @QueryParam("pageToken") String pageToken,
|
||||
ListOptions listOptions);
|
||||
|
||||
/** @see #pageOfTargetPools(String, ListOptions) */
|
||||
@Named("TargetPool:aggregatedList")
|
||||
@GET
|
||||
@Path("/targetPools")
|
||||
@Transform(TargetPoolPages.class)
|
||||
Iterator<ListPage<TargetPool>> targetPools();
|
||||
|
||||
/** @see #pageOfTargetPools(String, ListOptions) */
|
||||
@Named("TargetPool:aggregatedList")
|
||||
@GET
|
||||
@Path("/targetPools")
|
||||
@Transform(TargetPoolPages.class)
|
||||
Iterator<ListPage<TargetPool>> targetPools(ListOptions options);
|
||||
|
||||
static final class TargetPoolPages extends BaseToIteratorOfListPage<TargetPool, TargetPoolPages> {
|
||||
private final GoogleComputeEngineApi api;
|
||||
|
||||
@Inject
|
||||
TargetPoolPages(GoogleComputeEngineApi api) {
|
||||
this.api = api;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Function<String, ListPage<TargetPool>> fetchNextPage(final ListOptions options) {
|
||||
return new Function<String, ListPage<TargetPool>>() {
|
||||
@Override
|
||||
public ListPage<TargetPool> apply(String pageToken) {
|
||||
return api.aggregatedList().pageOfTargetPools(pageToken, options);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
/**
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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<URI> 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<URI> 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<URI> 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<URI> 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.
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ import com.google.gson.Gson;
|
|||
|
||||
@Test(groups = "unit", testName = "HttpHealthCheckCreationBinderTest")
|
||||
public class HttpHealthCheckCreationBinderTest extends BaseGoogleComputeEngineExpectTest<Object>{
|
||||
|
||||
|
||||
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<String, Object> 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 + ","
|
||||
|
|
|
@ -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<ListPage<TargetPool>> 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<TargetPool> result = pageIterator.next();
|
||||
if (!result.isEmpty()) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
if (count < 2) {
|
||||
throw new SkipException("Not enough target pools");
|
||||
}
|
||||
assertEquals(count, 2);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"));
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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")));
|
||||
|
||||
|
|
|
@ -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<GoogleComputeEngineApi> {
|
||||
|
||||
private static final List<URI> INSTANCES = ImmutableList
|
||||
.of(URI.create(BASE_URL + "/party/zones/europe-west1-a/instances/test"));
|
||||
|
||||
private static final List<URI> 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;
|
||||
}
|
||||
}
|
|
@ -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<URI> instances;
|
||||
private List<URI> 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<URI>();
|
||||
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));
|
||||
}
|
||||
|
|
|
@ -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<URI> 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<URI> 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<URI> 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<URI> 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");
|
||||
}
|
||||
}
|
|
@ -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<BackendServiceGroupHealth> {
|
||||
public class ParseHealthStatusTest extends BaseGoogleComputeEngineParseTest<HealthStatus> {
|
||||
|
||||
@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
|
|
@ -38,8 +38,13 @@ public class ParseTargetPoolListTest extends BaseGoogleComputeEngineParseTest<Li
|
|||
|
||||
@Override @Consumes(APPLICATION_JSON)
|
||||
public ListPage<TargetPool> expected() {
|
||||
return expected(BASE_URL);
|
||||
}
|
||||
|
||||
@Consumes(APPLICATION_JSON)
|
||||
public ListPage<TargetPool> expected(String baseUrl) {
|
||||
return ForwardingListPage.create( //
|
||||
ImmutableList.of(new ParseTargetPoolTest().expected()), // items
|
||||
ImmutableList.of(new ParseTargetPoolTest().expected(baseUrl)), // items
|
||||
null // nextPageToken
|
||||
);
|
||||
}
|
||||
|
|
|
@ -36,12 +36,17 @@ public class ParseTargetPoolTest extends BaseGoogleComputeEngineParseTest<Target
|
|||
|
||||
@Override @Consumes(MediaType.APPLICATION_JSON)
|
||||
public TargetPool expected() {
|
||||
return expected(BASE_URL);
|
||||
}
|
||||
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
public TargetPool expected(String baseUrl) {
|
||||
return TargetPool.create( //
|
||||
"5199309593612841404", // id
|
||||
URI.create(BASE_URL + "/party/regions/us-central1/targetPools/test-targetpool"), // selfLink
|
||||
URI.create(baseUrl + "/party/regions/us-central1/targetPools/test-targetpool"), // selfLink
|
||||
"test-targetpool", // name
|
||||
null, // description
|
||||
URI.create(BASE_URL + "/party/regions/us-central1"), // region
|
||||
URI.create(baseUrl + "/party/regions/us-central1"), // region
|
||||
null, // healthChecks
|
||||
null, // instances
|
||||
SessionAffinityValue.NONE, // sessionAffinity
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
"kind": "compute#targetPoolAggregatedList",
|
||||
"selfLink": "https://www.googleapis.com/compute/v1/projects/party/aggregated/targetPools",
|
||||
"id": "projects/party/aggregated/targetPools",
|
||||
"items": {
|
||||
"regions/asia-east1": {
|
||||
"warning": {
|
||||
"code": "NO_RESULTS_ON_PAGE",
|
||||
"message": "There are no results for scope 'regions/asia-east1' on this page.",
|
||||
"data": [
|
||||
{
|
||||
"key": "scope",
|
||||
"value": "regions/asia-east1"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"regions/europe-west1": {
|
||||
"warning": {
|
||||
"code": "NO_RESULTS_ON_PAGE",
|
||||
"message": "There are no results for scope 'regions/europe-west1' on this page.",
|
||||
"data": [
|
||||
{
|
||||
"key": "scope",
|
||||
"value": "regions/europe-west1"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"regions/us-central1": {
|
||||
"targetPools": [
|
||||
{
|
||||
|
||||
"kind": "compute#targetPool",
|
||||
"id": "17592955481805765508",
|
||||
"creationTimestamp": "2014-12-01T11:51:15.611-08:00",
|
||||
"name": "test",
|
||||
"description": "a Pool!",
|
||||
"region": "https://www.googleapis.com/compute/v1/projects/party/regions/us-central1",
|
||||
"sessionAffinity": "NONE",
|
||||
"selfLink": "https://www.googleapis.com/compute/v1/projects/party/regions/us-central1/targetPools/test"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"kind": "compute#targetPoolAggregatedList",
|
||||
"selfLink": "https://www.googleapis.com/compute/v1/projects/party/aggregated/targetPools",
|
||||
"id": "projects/party/aggregated/targetPools",
|
||||
"items": {
|
||||
"regions/asia-east1": {
|
||||
"warning": {
|
||||
"code": "NO_RESULTS_ON_PAGE",
|
||||
"message": "There are no results for scope 'regions/asia-east1' on this page.",
|
||||
"data": [
|
||||
{
|
||||
"key": "scope",
|
||||
"value": "regions/asia-east1"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"regions/europe-west1": {
|
||||
"warning": {
|
||||
"code": "NO_RESULTS_ON_PAGE",
|
||||
"message": "There are no results for scope 'regions/europe-west1' on this page.",
|
||||
"data": [
|
||||
{
|
||||
"key": "scope",
|
||||
"value": "regions/europe-west1"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"regions/us-central1": {
|
||||
"warning": {
|
||||
"code": "NO_RESULTS_ON_PAGE",
|
||||
"message": "There are no results for scope 'regions/us-central1' on this page.",
|
||||
"data": [
|
||||
{
|
||||
"key": "scope",
|
||||
"value": "regions/us-central1"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,7 +3,7 @@
|
|||
"healthStatus": [
|
||||
{
|
||||
"port": 80,
|
||||
"instance": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances/jclouds-test",
|
||||
"instance": "https://www.googleapis.com/compute/v1/projects/party/zones/us-central1-a/instances/jclouds-test",
|
||||
"healthState": "HEALTHY"
|
||||
}
|
||||
]
|
|
@ -1 +1 @@
|
|||
{"name":"http-health-check","timeoutSec":0,"unhealthyThreshold":0}
|
||||
{"name":"http-health-check","requestPath":"/","port":80,"checkIntervalSec":5,"timeoutSec":0,"unhealthyThreshold":0,"healthyThreshold":2}
|
|
@ -0,0 +1 @@
|
|||
{"name":"http-health-check","timeoutSec":0,"unhealthyThreshold":0}
|
Loading…
Reference in New Issue