Fix AWS and EC2 TemplateBuilder live tests

This commit is contained in:
Ignasi Barrera 2015-07-08 17:44:45 +02:00 committed by Andrew Bayer
parent 1a27a619d2
commit 569c07b982
5 changed files with 83 additions and 29 deletions

View File

@ -104,7 +104,7 @@ public class EC2TemplateOptions extends TemplateOptions implements Cloneable {
EC2TemplateOptions that = EC2TemplateOptions.class.cast(o); EC2TemplateOptions that = EC2TemplateOptions.class.cast(o);
return super.equals(that) && equal(this.groupNames, that.groupNames) && equal(this.keyPair, that.keyPair) return super.equals(that) && equal(this.groupNames, that.groupNames) && equal(this.keyPair, that.keyPair)
&& equal(this.noKeyPair, that.noKeyPair) && equal(this.userData, that.userData) && equal(this.noKeyPair, that.noKeyPair) && equal(this.userData, that.userData)
&& equal(this.blockDeviceMappings, that.blockDeviceMappings) && equal(this.blockDeviceMappings.build(), that.blockDeviceMappings.build())
&& equal(this.maxCount, that.maxCount) && equal(this.maxCount, that.maxCount)
&& equal(this.clientToken, that.clientToken); && equal(this.clientToken, that.clientToken);
} }
@ -112,7 +112,7 @@ public class EC2TemplateOptions extends TemplateOptions implements Cloneable {
@Override @Override
public int hashCode() { public int hashCode() {
return Objects return Objects
.hashCode(super.hashCode(), groupNames, keyPair, noKeyPair, userData, userData, blockDeviceMappings, .hashCode(super.hashCode(), groupNames, keyPair, noKeyPair, userData, userData, blockDeviceMappings.build(),
maxCount, clientToken); maxCount, clientToken);
} }

View File

@ -17,6 +17,7 @@
package org.jclouds.ec2.features; package org.jclouds.ec2.features;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.collect.Iterables.getOnlyElement;
import static java.util.concurrent.TimeUnit.SECONDS; import static java.util.concurrent.TimeUnit.SECONDS;
import static org.jclouds.ec2.options.CreateVolumeOptions.Builder.fromSnapshotId; import static org.jclouds.ec2.options.CreateVolumeOptions.Builder.fromSnapshotId;
import static org.jclouds.ec2.options.CreateVolumeOptions.Builder.withSize; import static org.jclouds.ec2.options.CreateVolumeOptions.Builder.withSize;
@ -25,28 +26,30 @@ import static org.jclouds.util.Predicates2.retry;
import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
import java.util.Set; import java.util.Set;
import java.util.SortedSet; import java.util.SortedSet;
import com.google.common.base.Predicate;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import org.jclouds.aws.AWSResponseException; import org.jclouds.aws.AWSResponseException;
import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest; import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest;
import org.jclouds.ec2.EC2Api; import org.jclouds.ec2.EC2Api;
import org.jclouds.ec2.domain.AvailabilityZoneInfo; import org.jclouds.ec2.domain.AvailabilityZoneInfo;
import org.jclouds.ec2.domain.Snapshot; import org.jclouds.ec2.domain.Snapshot;
import org.jclouds.ec2.domain.Volume; import org.jclouds.ec2.domain.Volume;
import org.jclouds.ec2.domain.Volume.Status;
import org.jclouds.ec2.predicates.SnapshotCompleted; import org.jclouds.ec2.predicates.SnapshotCompleted;
import org.jclouds.ec2.predicates.VolumeAvailable; import org.jclouds.ec2.predicates.VolumeAvailable;
import org.testng.annotations.AfterClass; import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.base.Predicate;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
/** /**
* Tests behavior of {@code ElasticBlockStoreApi} * Tests behavior of {@code ElasticBlockStoreApi}
*/ */
@ -112,9 +115,9 @@ public class ElasticBlockStoreApiLiveTest extends BaseComputeServiceContextLiveT
assertNotNull(allResults); assertNotNull(allResults);
assertFalse(allResults.isEmpty()); assertFalse(allResults.isEmpty());
Volume volume = allResults.last(); Volume volume = allResults.last();
SortedSet<Volume> result = Sets.newTreeSet(client.describeVolumesInRegionWithFilter(region, client.describeVolumesInRegionWithFilter(region,
ImmutableMultimap.<String, String>builder() ImmutableMultimap.<String, String>builder()
.put("invalid-filter", volume.getId()).build())); .put("invalid-filter", volume.getId()).build());
} }
@Test @Test
@ -139,7 +142,7 @@ public class ElasticBlockStoreApiLiveTest extends BaseComputeServiceContextLiveT
Predicate<Snapshot> snapshotted = retry(new SnapshotCompleted(client), 600, 10, SECONDS); Predicate<Snapshot> snapshotted = retry(new SnapshotCompleted(client), 600, 10, SECONDS);
assert snapshotted.apply(snapshot); assert snapshotted.apply(snapshot);
Snapshot result = Iterables.getOnlyElement(client.describeSnapshotsInRegion(snapshot.getRegion(), Snapshot result = Iterables.getOnlyElement(client.describeSnapshotsInRegion(defaultRegion,
snapshotIds(snapshot.getId()))); snapshotIds(snapshot.getId())));
assertEquals(result.getProgress(), 100); assertEquals(result.getProgress(), 100);
@ -154,13 +157,13 @@ public class ElasticBlockStoreApiLiveTest extends BaseComputeServiceContextLiveT
Predicate<Volume> availabile = retry(new VolumeAvailable(client), 600, 10, SECONDS); Predicate<Volume> availabile = retry(new VolumeAvailable(client), 600, 10, SECONDS);
assert availabile.apply(volume); assert availabile.apply(volume);
Volume result = Iterables.getOnlyElement(client.describeVolumesInRegion(snapshot.getRegion(), volume.getId())); Volume result = Iterables.getOnlyElement(client.describeVolumesInRegion(defaultRegion, volume.getId()));
assertEquals(volume.getId(), result.getId()); assertEquals(volume.getId(), result.getId());
assertEquals(volume.getSnapshotId(), snapshot.getId()); assertEquals(volume.getSnapshotId(), snapshot.getId());
assertEquals(volume.getAvailabilityZone(), defaultZone); assertEquals(volume.getAvailabilityZone(), defaultZone);
assertEquals(result.getStatus(), Volume.Status.AVAILABLE); assertEquals(result.getStatus(), Volume.Status.AVAILABLE);
client.deleteVolumeInRegion(snapshot.getRegion(), result.getId()); client.deleteVolumeInRegion(defaultRegion, result.getId());
} }
@Test(dependsOnMethods = "testCreateVolumeFromSnapshotInAvailabilityZone") @Test(dependsOnMethods = "testCreateVolumeFromSnapshotInAvailabilityZone")
@ -172,13 +175,13 @@ public class ElasticBlockStoreApiLiveTest extends BaseComputeServiceContextLiveT
Predicate<Volume> availabile = retry(new VolumeAvailable(client), 600, 10, SECONDS); Predicate<Volume> availabile = retry(new VolumeAvailable(client), 600, 10, SECONDS);
assert availabile.apply(volume); assert availabile.apply(volume);
Volume result = Iterables.getOnlyElement(client.describeVolumesInRegion(snapshot.getRegion(), volume.getId())); Volume result = Iterables.getOnlyElement(client.describeVolumesInRegion(defaultRegion, volume.getId()));
assertEquals(volume.getId(), result.getId()); assertEquals(volume.getId(), result.getId());
assertEquals(volume.getSnapshotId(), snapshot.getId()); assertEquals(volume.getSnapshotId(), snapshot.getId());
assertEquals(volume.getAvailabilityZone(), defaultZone); assertEquals(volume.getAvailabilityZone(), defaultZone);
assertEquals(result.getStatus(), Volume.Status.AVAILABLE); assertEquals(result.getStatus(), Volume.Status.AVAILABLE);
client.deleteVolumeInRegion(snapshot.getRegion(), result.getId()); client.deleteVolumeInRegion(defaultRegion, result.getId());
} }
@Test(dependsOnMethods = "testCreateVolumeFromSnapshotInAvailabilityZoneWithOptions") @Test(dependsOnMethods = "testCreateVolumeFromSnapshotInAvailabilityZoneWithOptions")
@ -189,14 +192,14 @@ public class ElasticBlockStoreApiLiveTest extends BaseComputeServiceContextLiveT
Predicate<Volume> availabile = retry(new VolumeAvailable(client), 600, 10, SECONDS); Predicate<Volume> availabile = retry(new VolumeAvailable(client), 600, 10, SECONDS);
assert availabile.apply(volume); assert availabile.apply(volume);
Volume result = Iterables.getOnlyElement(client.describeVolumesInRegion(snapshot.getRegion(), volume.getId())); Volume result = Iterables.getOnlyElement(client.describeVolumesInRegion(defaultRegion, volume.getId()));
assertEquals(volume.getId(), result.getId()); assertEquals(volume.getId(), result.getId());
assertEquals(volume.getSnapshotId(), snapshot.getId()); assertEquals(volume.getSnapshotId(), snapshot.getId());
assertEquals(volume.getAvailabilityZone(), defaultZone); assertEquals(volume.getAvailabilityZone(), defaultZone);
assertEquals(volume.getSize(), 2); assertEquals(volume.getSize(), 2);
assertEquals(result.getStatus(), Volume.Status.AVAILABLE); assertEquals(result.getStatus(), Volume.Status.AVAILABLE);
client.deleteVolumeInRegion(snapshot.getRegion(), result.getId()); client.deleteVolumeInRegion(defaultRegion, result.getId());
} }
@Test @Test
@ -245,9 +248,9 @@ public class ElasticBlockStoreApiLiveTest extends BaseComputeServiceContextLiveT
assertNotNull(allResults); assertNotNull(allResults);
if (!allResults.isEmpty()) { if (!allResults.isEmpty()) {
Snapshot snapshot = allResults.last(); Snapshot snapshot = allResults.last();
Snapshot result = Iterables.getOnlyElement(client.describeSnapshotsInRegionWithFilter(region, client.describeSnapshotsInRegionWithFilter(region,
ImmutableMultimap.<String, String>builder() ImmutableMultimap.<String, String>builder()
.put("invalid-filter", snapshot.getId()).build())); .put("invalid-filter", snapshot.getId()).build());
} }
} }
@ -277,29 +280,30 @@ public class ElasticBlockStoreApiLiveTest extends BaseComputeServiceContextLiveT
@Test(dependsOnMethods = "testCreateVolumeFromSnapshotInAvailabilityZoneWithSize") @Test(dependsOnMethods = "testCreateVolumeFromSnapshotInAvailabilityZoneWithSize")
public void testGetCreateVolumePermissionForSnapshot() { public void testGetCreateVolumePermissionForSnapshot() {
client.getCreateVolumePermissionForSnapshotInRegion(snapshot.getRegion(), snapshot.getId()); client.getCreateVolumePermissionForSnapshotInRegion(defaultRegion, snapshot.getId());
} }
@Test(dependsOnMethods = "testGetCreateVolumePermissionForSnapshot") @Test(dependsOnMethods = "testGetCreateVolumePermissionForSnapshot")
void testDeleteVolumeInRegion() { void testDeleteVolumeInRegion() {
client.deleteVolumeInRegion(defaultRegion, volumeId); client.deleteVolumeInRegion(defaultRegion, volumeId);
assertEquals(client.describeVolumesInRegionWithFilter(defaultRegion, Set<Volume> volumes = client.describeVolumesInRegionWithFilter(defaultRegion, ImmutableMultimap
ImmutableMultimap.<String, String>builder() .<String, String> builder().put("volume-id", volumeId).build());
.put("volume-id", volumeId).build()), // The volume may not exist or remain in "deleting" state for a while
ImmutableSet.of()); Volume volume = getOnlyElement(volumes, null);
assertTrue(volume == null || Status.DELETING == volume.getStatus());
} }
@Test(dependsOnMethods = "testDeleteVolumeInRegion") @Test(dependsOnMethods = "testDeleteVolumeInRegion")
void testDeleteSnapshotInRegion() { void testDeleteSnapshotInRegion() {
client.deleteSnapshotInRegion(snapshot.getRegion(), snapshot.getId()); client.deleteSnapshotInRegion(defaultRegion, snapshot.getId());
assert client.describeSnapshotsInRegion(snapshot.getRegion(), snapshotIds(snapshot.getId())).size() == 0; assert client.describeSnapshotsInRegion(defaultRegion, snapshotIds(snapshot.getId())).size() == 0;
} }
@AfterClass(groups = { "integration", "live" }) @AfterClass(groups = { "integration", "live" })
@Override @Override
protected void tearDownContext() { protected void tearDownContext() {
try { try {
client.deleteSnapshotInRegion(snapshot.getRegion(), snapshot.getId()); client.deleteSnapshotInRegion(defaultRegion, snapshot.getId());
client.deleteVolumeInRegion(defaultRegion, volumeId); client.deleteVolumeInRegion(defaultRegion, volumeId);
} catch (Exception e) { } catch (Exception e) {
// we don't really care about any exception here, so just delete away. // we don't really care about any exception here, so just delete away.

View File

@ -852,6 +852,11 @@ public abstract class BaseComputeServiceLiveTest extends BaseComputeServiceConte
@Test(enabled = true) @Test(enabled = true)
public void testCompareSizes() throws Exception { public void testCompareSizes() throws Exception {
// Allow to override the comparison but keeping testng dependencies happy
doCompareSizes();
}
protected void doCompareSizes() throws Exception {
Hardware defaultSize = client.templateBuilder().build().getHardware(); Hardware defaultSize = client.templateBuilder().build().getHardware();
Hardware smallest = client.templateBuilder().smallest().build().getHardware(); Hardware smallest = client.templateBuilder().smallest().build().getHardware();

View File

@ -20,6 +20,7 @@ import static com.google.common.collect.Iterables.getOnlyElement;
import static com.google.common.collect.Sets.newTreeSet; import static com.google.common.collect.Sets.newTreeSet;
import static org.jclouds.compute.domain.OsFamily.AMZN_LINUX; import static org.jclouds.compute.domain.OsFamily.AMZN_LINUX;
import static org.jclouds.compute.options.RunScriptOptions.Builder.runAsRoot; import static org.jclouds.compute.options.RunScriptOptions.Builder.runAsRoot;
import static org.jclouds.compute.util.ComputeServiceUtils.getCores;
import static org.jclouds.ec2.util.IpPermissions.permit; import static org.jclouds.ec2.util.IpPermissions.permit;
import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertEquals;
@ -41,6 +42,7 @@ import org.jclouds.cloudwatch.domain.GetMetricStatisticsResponse;
import org.jclouds.cloudwatch.domain.Statistics; import org.jclouds.cloudwatch.domain.Statistics;
import org.jclouds.cloudwatch.domain.Unit; import org.jclouds.cloudwatch.domain.Unit;
import org.jclouds.compute.domain.ExecResponse; import org.jclouds.compute.domain.ExecResponse;
import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.NodeMetadata;
import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.Template;
import org.jclouds.compute.predicates.NodePredicates; import org.jclouds.compute.predicates.NodePredicates;
@ -189,4 +191,25 @@ public class AWSEC2ComputeServiceLiveTest extends EC2ComputeServiceLiveTest {
cleanupExtendedStuffInRegion(region, securityGroupApi, keyPairApi, group); cleanupExtendedStuffInRegion(region, securityGroupApi, keyPairApi, group);
} }
} }
@Override
protected void doCompareSizes() throws Exception {
Hardware defaultSize = view.getComputeService().templateBuilder().build().getHardware();
Hardware smallest = view.getComputeService().templateBuilder().smallest().build().getHardware();
Hardware fastest = view.getComputeService().templateBuilder().fastest().build().getHardware();
Hardware biggest = view.getComputeService().templateBuilder().biggest().build().getHardware();
assertEquals(defaultSize, smallest);
assert getCores(smallest) <= getCores(fastest) : String.format("%s ! <= %s", smallest, fastest);
// m4.10xlarge is slower but has more cores than c4.8xlarge
// assert getCores(biggest) <= getCores(fastest) : String.format("%s ! <= %s", biggest, fastest);
// assert getCores(fastest) >= getCores(biggest) : String.format("%s ! >= %s", fastest, biggest);
assert biggest.getRam() >= fastest.getRam() : String.format("%s ! >= %s", biggest, fastest);
assert biggest.getRam() >= smallest.getRam() : String.format("%s ! >= %s", biggest, smallest);
assert getCores(fastest) >= getCores(smallest) : String.format("%s ! >= %s", fastest, smallest);
}
} }

View File

@ -32,6 +32,7 @@ import org.jclouds.aws.ec2.AWSEC2Api;
import org.jclouds.aws.ec2.AWSEC2ProviderMetadata; import org.jclouds.aws.ec2.AWSEC2ProviderMetadata;
import org.jclouds.aws.ec2.reference.AWSEC2Constants; import org.jclouds.aws.ec2.reference.AWSEC2Constants;
import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.OsFamily; import org.jclouds.compute.domain.OsFamily;
import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.Template;
import org.jclouds.ec2.EC2Api; import org.jclouds.ec2.EC2Api;
@ -122,7 +123,7 @@ public class AWSEC2TemplateBuilderLiveTest extends EC2TemplateBuilderLiveTest {
public void testTemplateBuilderCanUseImageIdAndHardwareIdAndAZ() { public void testTemplateBuilderCanUseImageIdAndHardwareIdAndAZ() {
Template template = view.getComputeService().templateBuilder().imageId("us-east-1/ami-ccb35ea5") Template template = view.getComputeService().templateBuilder().imageId("us-east-1/ami-ccb35ea5")
.hardwareId(InstanceType.M2_2XLARGE).locationId("us-east-1a").build(); .hardwareId(InstanceType.M2_2XLARGE).locationId("us-east-1b").build();
assert template.getImage().getProviderId().startsWith("ami-") : template; assert template.getImage().getProviderId().startsWith("ami-") : template;
assertEquals(template.getImage().getOperatingSystem().getVersion(), "5.4"); assertEquals(template.getImage().getOperatingSystem().getVersion(), "5.4");
@ -130,7 +131,7 @@ public class AWSEC2TemplateBuilderLiveTest extends EC2TemplateBuilderLiveTest {
assertEquals(template.getImage().getOperatingSystem().getFamily(), OsFamily.CENTOS); assertEquals(template.getImage().getOperatingSystem().getFamily(), OsFamily.CENTOS);
assertEquals(template.getImage().getVersion(), "4.4.10"); assertEquals(template.getImage().getVersion(), "4.4.10");
assertEquals(template.getImage().getUserMetadata().get("rootDeviceType"), "instance-store"); assertEquals(template.getImage().getUserMetadata().get("rootDeviceType"), "instance-store");
assertEquals(template.getLocation().getId(), "us-east-1a"); assertEquals(template.getLocation().getId(), "us-east-1b");
assertEquals(template.getImage().getLocation().getId(), "us-east-1"); assertEquals(template.getImage().getLocation().getId(), "us-east-1");
assertEquals(getCores(template.getHardware()), 4.0d); assertEquals(getCores(template.getHardware()), 4.0d);
assertEquals(template.getHardware().getId(), InstanceType.M2_2XLARGE); assertEquals(template.getHardware().getId(), InstanceType.M2_2XLARGE);
@ -326,6 +327,27 @@ public class AWSEC2TemplateBuilderLiveTest extends EC2TemplateBuilderLiveTest {
assertEquals(defaultTemplate.getImage().getId(), imageId); assertEquals(defaultTemplate.getImage().getId(), imageId);
} }
@Override
public void testCompareSizes() throws Exception {
Hardware defaultSize = view.getComputeService().templateBuilder().build().getHardware();
Hardware smallest = view.getComputeService().templateBuilder().smallest().build().getHardware();
Hardware fastest = view.getComputeService().templateBuilder().fastest().build().getHardware();
Hardware biggest = view.getComputeService().templateBuilder().biggest().build().getHardware();
assertEquals(defaultSize, smallest);
assert getCores(smallest) <= getCores(fastest) : String.format("%s ! <= %s", smallest, fastest);
// m4.10xlarge is slower but has more cores than c4.8xlarge
// assert getCores(biggest) <= getCores(fastest) : String.format("%s ! <= %s", biggest, fastest);
// assert getCores(fastest) >= getCores(biggest) : String.format("%s ! >= %s", fastest, biggest);
assert biggest.getRam() >= fastest.getRam() : String.format("%s ! >= %s", biggest, fastest);
assert biggest.getRam() >= smallest.getRam() : String.format("%s ! >= %s", biggest, smallest);
assert getCores(fastest) >= getCores(smallest) : String.format("%s ! >= %s", fastest, smallest);
}
@Test @Test
public void testAssignability() { public void testAssignability() {
view.unwrapApi(EC2Api.class); view.unwrapApi(EC2Api.class);