Repository: jclouds-labs-google Updated Branches: refs/heads/master 059a394f2 -> d045567aa
Improved live tests for Load Balancing. Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/commit/d045567a Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/tree/d045567a Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/diff/d045567a Branch: refs/heads/master Commit: d045567aad432150c196ce31b49223bf6e6e1d6d Parents: 059a394 Author: Daniel Broudy <[email protected]> Authored: Thu Oct 30 16:51:37 2014 -0700 Committer: Adrian Cole <[email protected]> Committed: Fri Oct 31 15:59:42 2014 -0700 ---------------------------------------------------------------------- .../features/ForwardingRuleApi.java | 5 +- .../features/TargetPoolApi.java | 10 +- .../features/ForwardingRuleApiExpectTest.java | 3 +- .../features/ForwardingRuleApiLiveTest.java | 38 +++- .../features/HttpHealthCheckApiLiveTest.java | 63 +++++- .../features/TargetPoolApiLiveTest.java | 206 ++++++++++++++++++- 6 files changed, 310 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/d045567a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/ForwardingRuleApi.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/ForwardingRuleApi.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/ForwardingRuleApi.java index 8e1b630..baeed4f 100644 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/ForwardingRuleApi.java +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/ForwardingRuleApi.java @@ -16,6 +16,8 @@ */ package org.jclouds.googlecomputeengine.features; +import java.net.URI; + import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404; import org.jclouds.Fallbacks.NullOnNotFoundOr404; import org.jclouds.collect.IterableWithMarker; @@ -48,7 +50,6 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; - import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_READONLY_SCOPE; import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_SCOPE; @@ -148,5 +149,5 @@ public interface ForwardingRuleApi { @MapBinder(BindToJsonPayload.class) @Nullable Operation setTarget(@PathParam("forwardingRule") String forwardingRule, - @PayloadParam("target") String target); + @PayloadParam("target") URI target); } http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/d045567a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/TargetPoolApi.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/TargetPoolApi.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/TargetPoolApi.java index 3e19eda..09cf874 100644 --- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/TargetPoolApi.java +++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/TargetPoolApi.java @@ -83,7 +83,7 @@ public interface TargetPoolApi { * Creates a TargetPool resource in the specified project and region using the data included in the request. * * @param targetPoolName the name of the targetPool. - * @param the options of the TargetPool to create. + * @param the options of the TargetPool to create. * @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. */ @@ -204,13 +204,17 @@ public interface TargetPoolApi { @MapBinder(TargetPoolChangeHealthChecksBinder.class) @Nullable Operation removeHealthCheck(@PathParam("targetPool") String targetPool, @PayloadParam("healthChecks") Set<URI> healthChecks); - + /** * Changes backup pool configurations. * * @param targetPool the name of the target pool. * @param target the URL of target pool for which you want to use as backup. + * WARNING: failoverRatio and BackupPool must either both be set or not set. This method + * is only for updating the backup pool on a Target Pool that already has a + * failoverRatio. + * @see <a href = "https://cloud.google.com/compute/docs/reference/latest/targetPools/setBackup"/> * * @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. @@ -222,7 +226,7 @@ public interface TargetPoolApi { @MapBinder(BindToJsonPayload.class) @Nullable Operation setBackup(@PathParam("targetPool") String targetPool, @PayloadParam("target") URI target); - + /** * Changes backup pool configurations. * http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/d045567a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ForwardingRuleApiExpectTest.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ForwardingRuleApiExpectTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ForwardingRuleApiExpectTest.java index a8b948a..6fc0cdf 100644 --- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ForwardingRuleApiExpectTest.java +++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ForwardingRuleApiExpectTest.java @@ -187,7 +187,8 @@ public class ForwardingRuleApiExpectTest extends BaseGoogleComputeEngineApiExpec ForwardingRuleApi api = requestsSendResponses(requestForScopes(COMPUTE_SCOPE), TOKEN_RESPONSE, setTarget, setTargetResponse).getForwardingRuleApi("myproject", "us-central1"); - String newTarget = "https://www.googleapis.com/compute/v1/projects/myproject/regions/europe-west1/targetPools/test-target-pool"; + URI newTarget = URI.create("https://www.googleapis.com/compute/v1/projects/" + + "myproject/regions/europe-west1/targetPools/test-target-pool"); assertEquals(api.setTarget(ruleName, newTarget), new ParseRegionOperationTest().expected()); } http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/d045567a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ForwardingRuleApiLiveTest.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ForwardingRuleApiLiveTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ForwardingRuleApiLiveTest.java index 2412b33..ff93ce6 100644 --- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ForwardingRuleApiLiveTest.java +++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ForwardingRuleApiLiveTest.java @@ -17,8 +17,10 @@ package org.jclouds.googlecomputeengine.features; import org.jclouds.collect.IterableWithMarker; +import org.jclouds.googlecomputeengine.domain.Address; import org.jclouds.googlecomputeengine.domain.ForwardingRule; import org.jclouds.googlecomputeengine.domain.TargetPool; +import org.jclouds.googlecomputeengine.domain.ForwardingRule.IPProtocolOption; import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineApiLiveTest; import org.jclouds.googlecomputeengine.options.ForwardingRuleCreationOptions; import org.jclouds.googlecomputeengine.options.ListOptions; @@ -29,13 +31,19 @@ import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; +import static com.google.common.base.Optional.fromNullable; public class ForwardingRuleApiLiveTest extends BaseGoogleComputeEngineApiLiveTest { private static final String FORWARDING_RULE_NAME = "forwarding-rule-api-live-test"; private static final String TARGETPOOL_NAME = "forwarding-rule-api-live-test-targetpool"; + private static final String TARGETPOOL_NAME_NEW = "forwarding-rule-api-live-test-new-targetpool"; + private static final String DESCRIPTION = "Forwarding rule api live test forwarding rule."; + private static final String ADDRESS_NAME = "forwarding-rule-api-address"; private static final int TIME_WAIT = 30; private TargetPool targetPool; + private TargetPool newTargetPool; + private Address address; /** * The API under test @@ -49,21 +57,36 @@ public class ForwardingRuleApiLiveTest extends BaseGoogleComputeEngineApiLiveTes return api.getTargetPoolApi(userProject.get(), DEFAULT_REGION_NAME); } + private AddressApi addressApi(){ + return api.getAddressApi(userProject.get()); + } + @BeforeClass public void init() { TargetPoolCreationOptions targetPoolCreationOptions = new TargetPoolCreationOptions(); assertRegionOperationDoneSucessfully(targetPoolApi().create(TARGETPOOL_NAME, targetPoolCreationOptions), TIME_WAIT); targetPool = targetPoolApi().get(TARGETPOOL_NAME); + + assertRegionOperationDoneSucessfully(targetPoolApi().create(TARGETPOOL_NAME_NEW, targetPoolCreationOptions), TIME_WAIT); + newTargetPool = targetPoolApi().get(TARGETPOOL_NAME_NEW); + + assertRegionOperationDoneSucessfully(addressApi().createInRegion(DEFAULT_REGION_NAME, ADDRESS_NAME), TIME_WAIT); + address = addressApi().getInRegion(DEFAULT_REGION_NAME, ADDRESS_NAME); } @AfterClass public void tearDown() { assertRegionOperationDoneSucessfully(targetPoolApi().delete(TARGETPOOL_NAME), TIME_WAIT); + assertRegionOperationDoneSucessfully(targetPoolApi().delete(TARGETPOOL_NAME_NEW), TIME_WAIT); + assertRegionOperationDoneSucessfully(addressApi().deleteInRegion(DEFAULT_REGION_NAME, ADDRESS_NAME), TIME_WAIT); } @Test(groups = "live") public void testInsertForwardingRule() { ForwardingRuleCreationOptions forwardingRuleCreationOptions = new ForwardingRuleCreationOptions() + .description(DESCRIPTION) + .ipAddress(address.getAddress()) + .ipProtocol(IPProtocolOption.TCP) .target(targetPool.getSelfLink()); assertRegionOperationDoneSucessfully(api().create(FORWARDING_RULE_NAME, forwardingRuleCreationOptions), TIME_WAIT); } @@ -73,9 +96,22 @@ public class ForwardingRuleApiLiveTest extends BaseGoogleComputeEngineApiLiveTes ForwardingRule forwardingRule = api().get(FORWARDING_RULE_NAME); assertNotNull(forwardingRule); assertEquals(forwardingRule.getName(), FORWARDING_RULE_NAME); + assertEquals(forwardingRule.getDescription(), fromNullable(DESCRIPTION)); + assertEquals(forwardingRule.getIpAddress(), fromNullable(address.getAddress())); + assertEquals(forwardingRule.getIpProtocol(), fromNullable(IPProtocolOption.TCP)); + assertEquals(forwardingRule.getTarget(), targetPool.getSelfLink()); } @Test(groups = "live", dependsOnMethods = "testGetForwardingRule") + public void testSetTargetForwardingRule(){ + assertRegionOperationDoneSucessfully(api().setTarget(FORWARDING_RULE_NAME, newTargetPool.getSelfLink()), TIME_WAIT); + ForwardingRule forwardingRule = api().get(FORWARDING_RULE_NAME); + assertNotNull(forwardingRule); + assertEquals(forwardingRule.getName(), FORWARDING_RULE_NAME); + assertEquals(forwardingRule.getTarget(), newTargetPool.getSelfLink()); + } + + @Test(groups = "live", dependsOnMethods = "testInsertForwardingRule") public void testListForwardingRule() { IterableWithMarker<ForwardingRule> forwardingRule = api().list(new ListOptions.Builder() @@ -83,7 +119,7 @@ public class ForwardingRuleApiLiveTest extends BaseGoogleComputeEngineApiLiveTes assertEquals(forwardingRule.toList().size(), 1); } - @Test(groups = "live", dependsOnMethods = "testListForwardingRule") + @Test(groups = "live", dependsOnMethods = {"testListForwardingRule", "testSetTargetForwardingRule"}, alwaysRun = true) public void testDeleteForwardingRule() { assertRegionOperationDoneSucessfully(api().delete(FORWARDING_RULE_NAME), TIME_WAIT); } http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/d045567a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiLiveTest.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiLiveTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiLiveTest.java index 1491cab..bdcfded 100644 --- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiLiveTest.java +++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/HttpHealthCheckApiLiveTest.java @@ -19,24 +19,38 @@ package org.jclouds.googlecomputeengine.features; import org.jclouds.collect.IterableWithMarker; import org.jclouds.googlecomputeengine.domain.HttpHealthCheck; import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineApiLiveTest; +import org.jclouds.googlecomputeengine.options.HttpHealthCheckCreationOptions; import org.jclouds.googlecomputeengine.options.ListOptions; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotEquals; import static org.testng.Assert.assertNotNull; +import static com.google.common.base.Optional.fromNullable; public class HttpHealthCheckApiLiveTest extends BaseGoogleComputeEngineApiLiveTest { private static final String HTTP_HEALTH_CHECK_NAME = "http-health-check-api-live-test"; private static final int TIME_WAIT = 60; + private static final int OFFSET = 2; + + private HttpHealthCheckCreationOptions options; + private HttpHealthCheckApi api() { return api.getHttpHealthCheckApi(userProject.get()); } @Test(groups = "live") public void testInsertHttpHealthCheck() { - assertGlobalOperationDoneSucessfully(api().insert(HTTP_HEALTH_CHECK_NAME), TIME_WAIT); + options = new HttpHealthCheckCreationOptions() + .port(56) + .checkIntervalSec(40) + .timeoutSec(40) + .healthyThreshold(30) + .unhealthyThreshold(15) + .description("A First Health Check!"); + assertGlobalOperationDoneSucessfully(api().insert(HTTP_HEALTH_CHECK_NAME, options), TIME_WAIT); } @Test(groups = "live", dependsOnMethods = "testInsertHttpHealthCheck") @@ -44,6 +58,12 @@ public class HttpHealthCheckApiLiveTest extends BaseGoogleComputeEngineApiLiveTe HttpHealthCheck httpHealthCheck = api().get(HTTP_HEALTH_CHECK_NAME); assertNotNull(httpHealthCheck); assertEquals(httpHealthCheck.getName(), HTTP_HEALTH_CHECK_NAME); + assertEquals(httpHealthCheck.getPort(), fromNullable(options.getPort())); + assertEquals(httpHealthCheck.getCheckIntervalSec(), fromNullable(options.getCheckIntervalSec())); + assertEquals(httpHealthCheck.getTimeoutSec(), fromNullable(options.getTimeoutSec())); + assertEquals(httpHealthCheck.getHealthyThreshold(), fromNullable(options.getHealthyThreshold())); + assertEquals(httpHealthCheck.getUnhealthyThreshold(), fromNullable(options.getUnhealthyThreshold())); + assertEquals(httpHealthCheck.getDescription(), fromNullable(options.getDescription())); } @Test(groups = "live", dependsOnMethods = "testInsertHttpHealthCheck") @@ -53,7 +73,46 @@ public class HttpHealthCheckApiLiveTest extends BaseGoogleComputeEngineApiLiveTe assertEquals(httpHealthCheck.toList().size(), 1); } - @Test(groups = "live", dependsOnMethods = {"testListHttpHealthCheck", "testGetHttpHealthCheck"}) + @Test(groups = "live", dependsOnMethods = "testGetHttpHealthCheck") + public void testPatchHttpHealthCheck() { + HttpHealthCheckCreationOptions newOptions = new HttpHealthCheckCreationOptions() + .port(options.getPort() + OFFSET) + .checkIntervalSec(options.getCheckIntervalSec() + OFFSET) + .timeoutSec(options.getTimeoutSec() + OFFSET); + assertGlobalOperationDoneSucessfully(api().patch(HTTP_HEALTH_CHECK_NAME, newOptions), TIME_WAIT); + + // Check changes happened and others unchanged. + HttpHealthCheck httpHealthCheck = api().get(HTTP_HEALTH_CHECK_NAME); + assertNotNull(httpHealthCheck); + assertEquals(httpHealthCheck.getName(), HTTP_HEALTH_CHECK_NAME); + assertEquals(httpHealthCheck.getPort(), fromNullable(newOptions.getPort())); + assertEquals(httpHealthCheck.getCheckIntervalSec(), fromNullable(newOptions.getCheckIntervalSec())); + assertEquals(httpHealthCheck.getTimeoutSec(), fromNullable(newOptions.getTimeoutSec())); + assertEquals(httpHealthCheck.getHealthyThreshold(), fromNullable(options.getHealthyThreshold())); + assertEquals(httpHealthCheck.getUnhealthyThreshold(), fromNullable(options.getUnhealthyThreshold())); + assertEquals(httpHealthCheck.getDescription(), fromNullable(options.getDescription())); + } + + @Test(groups = "live", dependsOnMethods = "testPatchHttpHealthCheck") + public void testUpdateHttpHealthCheck() { + HttpHealthCheckCreationOptions newOptions = new HttpHealthCheckCreationOptions() + .checkIntervalSec(options.getCheckIntervalSec() - OFFSET) + .timeoutSec(options.getTimeoutSec() - OFFSET); + assertGlobalOperationDoneSucessfully(api().update(HTTP_HEALTH_CHECK_NAME, newOptions), TIME_WAIT); + + // Check changes happened. + HttpHealthCheck httpHealthCheck = api().get(HTTP_HEALTH_CHECK_NAME); + assertNotNull(httpHealthCheck); + assertEquals(httpHealthCheck.getName(), HTTP_HEALTH_CHECK_NAME); + assertEquals(httpHealthCheck.getCheckIntervalSec(), fromNullable(newOptions.getCheckIntervalSec())); + assertEquals(httpHealthCheck.getTimeoutSec(), fromNullable(newOptions.getTimeoutSec())); + // Update overwrites unspecified parameters to their defaults. + assertNotEquals(httpHealthCheck.getHealthyThreshold(), fromNullable(options.getHealthyThreshold())); + assertNotEquals(httpHealthCheck.getUnhealthyThreshold(), fromNullable(options.getUnhealthyThreshold())); + assertNotEquals(httpHealthCheck.getDescription(), fromNullable(options.getDescription())); + } + + @Test(groups = "live", dependsOnMethods = {"testListHttpHealthCheck", "testUpdateHttpHealthCheck"}) public void testDeleteHttpHealthCheck() { assertGlobalOperationDoneSucessfully(api().delete(HTTP_HEALTH_CHECK_NAME), TIME_WAIT); } http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/d045567a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiLiveTest.java ---------------------------------------------------------------------- diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiLiveTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiLiveTest.java index 032b31f..7fd29c4 100644 --- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiLiveTest.java +++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/TargetPoolApiLiveTest.java @@ -16,56 +16,250 @@ */ package org.jclouds.googlecomputeengine.features; +import java.net.URI; +import java.util.HashSet; +import java.util.Set; + import org.jclouds.collect.IterableWithMarker; +import org.jclouds.googlecomputeengine.domain.HttpHealthCheck; +import org.jclouds.googlecomputeengine.domain.Image; +import org.jclouds.googlecomputeengine.domain.Instance; +import org.jclouds.googlecomputeengine.domain.InstanceTemplate; import org.jclouds.googlecomputeengine.domain.TargetPool; import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineApiLiveTest; +import org.jclouds.googlecomputeengine.options.DiskCreationOptions; +import org.jclouds.googlecomputeengine.options.HttpHealthCheckCreationOptions; import org.jclouds.googlecomputeengine.options.ListOptions; import org.jclouds.googlecomputeengine.options.TargetPoolCreationOptions; import org.jclouds.googlecomputeengine.options.TargetPoolCreationOptions.SessionAffinityValue; +import org.testng.annotations.AfterClass; import org.testng.annotations.Test; +import com.google.common.base.Predicate; + import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotEquals; import static org.testng.Assert.assertNotNull; import static com.google.common.base.Optional.fromNullable; public class TargetPoolApiLiveTest extends BaseGoogleComputeEngineApiLiveTest { - private static final String TARGETPOOL_NAME = "targetpool-api-live-test"; + private static final String BACKUP_TARGETPOOL_NAME = "targetpool-api-live-test-backup"; + private static final String TARGETPOOL_NAME = "targetpool-api-live-test-primary"; + private static final String THIRD_TARGETPOOL_NAME = "targetpool-apo-live-test-third"; private static final int TIME_WAIT = 30; private static final String DESCRIPTION = "A New TargetPool!"; + private static final String DESCRIPTION_BACKUP = "A backup target pool!"; + + private static final String INSTANCE_NETWORK_NAME = "target-pool-api-live-test-network"; + private static final String INSTANCE_NAME = "target-pool-api-live-test-instance"; + private static final String BOOT_DISK_NAME = INSTANCE_NAME + "-boot-disk"; + 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 int TIME_WAIT_LONG = 600; + + private Set<URI> instances; + private Set<URI> httpHealthChecks; private TargetPoolApi api() { return api.getTargetPoolApi(userProject.get(), DEFAULT_REGION_NAME); } @Test(groups = "live") + public void testCreateInstanceAndHealthCheck(){ + InstanceApi instanceApi = api.getInstanceApi(userProject.get()); + HttpHealthCheckApi httpHealthCheckApi = api.getHttpHealthCheckApi(userProject.get()); + + // Get an imageUri + URI imageUri = api.getImageApi("centos-cloud") + .list(new ListOptions.Builder().filter("name eq centos.*")) + .concat() + .filter(new Predicate<Image>() { + @Override + public boolean apply(Image input) { + // filter out all deprecated images + return !(input.getDeprecated().isPresent() && input.getDeprecated().get().getState().isPresent()); + } + }) + .first().get().getSelfLink(); + + // Make and instanceTemplate + InstanceTemplate instanceTemplate = InstanceTemplate.builder() + .forMachineType(getDefaultMachineTypeUrl(userProject.get())) + .addNetworkInterface(getNetworkUrl(userProject.get(), INSTANCE_NETWORK_NAME), + Instance.NetworkInterface.AccessConfig.Type.ONE_TO_ONE_NAT) + .addMetadata("mykey", "myvalue") + .description("a description") + .addDisk(InstanceTemplate.PersistentDisk.Mode.READ_WRITE, getDiskUrl(userProject.get(), BOOT_DISK_NAME), + null, true, true) + .image(imageUri); + + + // Insert a network. + assertGlobalOperationDoneSucessfully(api.getNetworkApi(userProject.get()).createInIPv4Range + (INSTANCE_NETWORK_NAME, IPV4_RANGE), TIME_WAIT_LONG); + + // Create a disk. + DiskCreationOptions diskCreationOptions = new DiskCreationOptions().sourceImage(instanceTemplate.getImage()); + assertZoneOperationDoneSucessfully(api.getDiskApi(userProject.get()) + .createInZone(BOOT_DISK_NAME, DEFAULT_DISK_SIZE_GB, DEFAULT_ZONE_NAME, diskCreationOptions), + TIME_WAIT_LONG); + + // Create an instance. + assertZoneOperationDoneSucessfully(instanceApi.createInZone(INSTANCE_NAME, + DEFAULT_ZONE_NAME, + instanceTemplate), + TIME_WAIT_LONG); + Instance instance = instanceApi.getInZone(DEFAULT_ZONE_NAME, INSTANCE_NAME); + instances = new HashSet<URI>(); + instances.add(instance.getSelfLink()); + + // Create a healthCheck + HttpHealthCheckCreationOptions options = new HttpHealthCheckCreationOptions() + .checkIntervalSec(30) + .timeoutSec(20) + .description("A test HealthCheck for adding to targetPools"); + assertGlobalOperationDoneSucessfully(httpHealthCheckApi.insert(HEALTHCHECK_NAME, options), TIME_WAIT); + HttpHealthCheck healthCheck = httpHealthCheckApi.get(HEALTHCHECK_NAME); + httpHealthChecks = new HashSet<URI>(); + httpHealthChecks.add(healthCheck.getSelfLink()); + } + + @Test(groups = "live") public void testInsertTargetPool() { TargetPoolCreationOptions targetPoolCreationOptions = new TargetPoolCreationOptions() - .description(DESCRIPTION) + .description(DESCRIPTION_BACKUP) .sessionAffinity(SessionAffinityValue.CLIENT_IP); + assertRegionOperationDoneSucessfully(api().create(BACKUP_TARGETPOOL_NAME, targetPoolCreationOptions), TIME_WAIT); + } + + @Test(groups = "live", dependsOnMethods = "testInsertTargetPool") + public void testInsertTargetPool2(){ + TargetPool targetPool = api().get(BACKUP_TARGETPOOL_NAME); + assertNotNull(targetPool); + // Make a Target Pool with a backup and failoverRatio specified. + TargetPoolCreationOptions targetPoolCreationOptions = new TargetPoolCreationOptions() + .description(DESCRIPTION) + .sessionAffinity(SessionAffinityValue.CLIENT_IP) + .backupPool(targetPool.getSelfLink()) + .failoverRatio((float) 0.5); assertRegionOperationDoneSucessfully(api().create(TARGETPOOL_NAME, targetPoolCreationOptions), TIME_WAIT); + TargetPool targetPool2 = api().get(TARGETPOOL_NAME); + assertNotNull(targetPool2); + assertEquals(targetPool2.getName(), TARGETPOOL_NAME); + assertEquals(targetPool2.getDescription(), fromNullable(DESCRIPTION)); + assertEquals(targetPool2.getFailoverRatio(), (float) 0.5); + assertEquals(targetPool2.getBackupPool(), fromNullable(targetPool.getSelfLink())); + assertEquals(targetPool2.getSessionAffinity(), fromNullable(SessionAffinityValue.CLIENT_IP)); } @Test(groups = "live", dependsOnMethods = "testInsertTargetPool") public void testGetTargetPool() { + TargetPool targetPool = api().get(BACKUP_TARGETPOOL_NAME); + assertNotNull(targetPool); + assertEquals(targetPool.getName(), BACKUP_TARGETPOOL_NAME); + assertEquals(targetPool.getDescription(), fromNullable(DESCRIPTION_BACKUP)); + assertEquals(targetPool.getSessionAffinity(), fromNullable(SessionAffinityValue.CLIENT_IP)); + } + + @Test(groups = "live", dependsOnMethods = {"testInsertTargetPool", "testCreateInstanceAndHealthCheck"}) + public void testAddInstanceTargetPool() { + assertRegionOperationDoneSucessfully(api().addInstance(BACKUP_TARGETPOOL_NAME, instances), TIME_WAIT); + TargetPool targetPool = api().get(BACKUP_TARGETPOOL_NAME); + assertNotNull(targetPool); + assertEquals(targetPool.getName(), BACKUP_TARGETPOOL_NAME); + assertEquals(targetPool.getInstances(), instances); + } + + @Test(groups = "live", dependsOnMethods = "testAddInstanceTargetPool") + public void testRemoveInstanceTargetPool() { + assertRegionOperationDoneSucessfully(api().removeInstance(BACKUP_TARGETPOOL_NAME, instances), TIME_WAIT); + + TargetPool targetPool = api().get(BACKUP_TARGETPOOL_NAME); + + assertNotNull(targetPool); + assertEquals(targetPool.getName(), BACKUP_TARGETPOOL_NAME); + assertNotEquals(targetPool.getInstances(), fromNullable(instances)); + } + + @Test(groups = "live", dependsOnMethods = {"testInsertTargetPool2", "testCreateInstanceAndHealthCheck"}) + public void testAddHealthCheckTargetPool() { + assertRegionOperationDoneSucessfully(api().addHealthCheck(TARGETPOOL_NAME, httpHealthChecks), TIME_WAIT); TargetPool targetPool = api().get(TARGETPOOL_NAME); assertNotNull(targetPool); assertEquals(targetPool.getName(), TARGETPOOL_NAME); - assertEquals(targetPool.getDescription(), fromNullable(DESCRIPTION)); - assertEquals(targetPool.getSessionAffinity(), fromNullable(SessionAffinityValue.CLIENT_IP)); + assertEquals(targetPool.getHealthChecks(), httpHealthChecks); + } + + @Test(groups = "live", dependsOnMethods = "testAddHealthCheckTargetPool") + public void testRemoveHealthCheckTargetPool() { + assertRegionOperationDoneSucessfully(api().removeHealthCheck(TARGETPOOL_NAME, httpHealthChecks), TIME_WAIT); + + TargetPool targetPool = api().get(TARGETPOOL_NAME); + + assertNotNull(targetPool); + assertEquals(targetPool.getName(), TARGETPOOL_NAME); + assertNotEquals(targetPool.getHealthChecks(), fromNullable(httpHealthChecks)); } @Test(groups = "live", dependsOnMethods = "testInsertTargetPool") public void testListTargetPool() { IterableWithMarker<TargetPool> targetPool = api().list(new ListOptions.Builder() - .filter("name eq " + TARGETPOOL_NAME)); + .filter("name eq " + BACKUP_TARGETPOOL_NAME)); assertEquals(targetPool.toList().size(), 1); } - @Test(groups = "live", dependsOnMethods = {"testListTargetPool", "testGetTargetPool"}) + @Test(groups = "live", dependsOnMethods = {"testInsertTargetPool2"}) + public void testSetBackupTargetPool() { + TargetPoolCreationOptions options = new TargetPoolCreationOptions().description("A targetPool for testing setBackup."); + assertRegionOperationDoneSucessfully(api().create(THIRD_TARGETPOOL_NAME, options), TIME_WAIT); + TargetPool targetPool = api().get(THIRD_TARGETPOOL_NAME); + assertNotNull(targetPool); + assertEquals(targetPool.getName(), THIRD_TARGETPOOL_NAME); + assertEquals(targetPool.getBackupPool(), fromNullable(null)); + + URI selfLink = api().get(TARGETPOOL_NAME).getSelfLink(); + + Float failoverRatio = Float.valueOf((float) 0.5); + assertRegionOperationDoneSucessfully(api().setBackup(THIRD_TARGETPOOL_NAME, failoverRatio, selfLink), TIME_WAIT); + + TargetPool targetPoolUpdated = api().get(THIRD_TARGETPOOL_NAME); + assertNotNull(targetPoolUpdated); + assertEquals(targetPoolUpdated.getName(), THIRD_TARGETPOOL_NAME); + assertEquals(targetPoolUpdated.getBackupPool(), fromNullable(selfLink)); + } + + @Test(groups = "live", dependsOnMethods = {"testListTargetPool", + "testGetTargetPool", + "testRemoveInstanceTargetPool", + "testRemoveHealthCheckTargetPool", + "testSetBackupTargetPool"}, alwaysRun = true) public void testDeleteTargetPool() { + // Note: This ordering matters due one being the backup of the other ect. + assertRegionOperationDoneSucessfully(api().delete(THIRD_TARGETPOOL_NAME), TIME_WAIT); assertRegionOperationDoneSucessfully(api().delete(TARGETPOOL_NAME), TIME_WAIT); + assertRegionOperationDoneSucessfully(api().delete(BACKUP_TARGETPOOL_NAME), TIME_WAIT); + } + + @AfterClass(groups = { "integration", "live" }) + public void testCleanup(){ + InstanceApi instanceApi = api.getInstanceApi(userProject.get()); + HttpHealthCheckApi httpHealthCheckApi = api.getHttpHealthCheckApi(userProject.get()); + + try { + waitZoneOperationDone(instanceApi.deleteInZone(DEFAULT_ZONE_NAME, INSTANCE_NAME), TIME_WAIT_LONG); + + waitZoneOperationDone(api.getDiskApi(userProject.get()).deleteInZone(DEFAULT_ZONE_NAME, BOOT_DISK_NAME), + TIME_WAIT); + waitGlobalOperationDone(api.getNetworkApi(userProject.get()).delete(INSTANCE_NETWORK_NAME), TIME_WAIT_LONG); + + waitGlobalOperationDone(httpHealthCheckApi.delete(HEALTHCHECK_NAME), TIME_WAIT); + } catch (Exception e) { + // we don't really care about any exception here, so just delete away. + } } }
