diff --git a/apis/ec2/src/main/java/org/jclouds/ec2/compute/functions/AddElasticIpsToNodemetadata.java b/apis/ec2/src/main/java/org/jclouds/ec2/compute/functions/AddElasticIpsToNodemetadata.java index 236dc30c49..a8b9a9bdeb 100644 --- a/apis/ec2/src/main/java/org/jclouds/ec2/compute/functions/AddElasticIpsToNodemetadata.java +++ b/apis/ec2/src/main/java/org/jclouds/ec2/compute/functions/AddElasticIpsToNodemetadata.java @@ -52,7 +52,11 @@ public class AddElasticIpsToNodemetadata implements Function builder().addAll(arg0.getPublicAddresses()).add(publicIp).build()).build(); + // Replace existing public addresses with elastic IP (see note above) + return NodeMetadataBuilder.fromNodeMetadata(arg0) + .publicAddresses(ImmutableSet. builder().add(publicIp).build()).build(); } catch (NullPointerException e) { // no ip was found return arg0; @@ -70,4 +75,4 @@ public class AddElasticIpsToNodemetadata implements Function nodes = context.getComputeService().createNodesInGroup(group, 1); - assertTrue(nodes.size() == 1); + assertEquals(nodes.size(), 1, "One node should have been created"); - // Get public IPs (on EC2 we should get 2, on Nova only 1) + // Get public IPs (We should get 1) NodeMetadata node = Iterables.get(nodes, 0); String region = node.getLocation().getParent().getId(); Set publicIps = node.getPublicAddresses(); + assertFalse(Iterables.isEmpty(publicIps), String.format("no public addresses attached to node %s", node)); + assertEquals(Iterables.size(publicIps), 1); - // Check that all ips are public and port 22 is accessible - for (String ip: publicIps) { - assertFalse(InetAddresses2.isPrivateIPAddress(ip)); - IPSocket socket = new IPSocket(ip, 22); - assert socketTester.apply(socket) : String.format("failed to open socket %s on node %s", socket, - node); - } + // Check that the address is public and port 22 is accessible + String ip = Iterables.getOnlyElement(publicIps); + assertFalse(InetAddresses2.isPrivateIPAddress(ip)); + IPSocket socket = new IPSocket(ip, 22); + assertTrue(socketTester.apply(socket), String.format("failed to open socket %s on node %s", socket, node)); // check that there is an elastic ip correlating to it EC2Client ec2 = EC2Client.class.cast(context.getProviderSpecificContext().getApi()); Set ipidpairs = ec2.getElasticIPAddressServices().describeAddressesInRegion(region, publicIps.toArray(new String[0])); - assert (ipidpairs.size() == 1) : ipidpairs; + assertEquals(ipidpairs.size(), 1, String.format("there should only be one address pair (%s)", + Iterables.toString(ipidpairs))); // check that the elastic ip is in node.publicAddresses PublicIpInstanceIdPair ipidpair = Iterables.get(ipidpairs, 0); - assertTrue(ipidpair.getInstanceId() == node.getId()); + assertEquals(ipidpair.getInstanceId(), node.getId()); // delete the node context.getComputeService().destroyNodesMatching(NodePredicates.inGroup(group)); @@ -219,11 +218,10 @@ public class EC2ComputeServiceLiveTest extends BaseComputeServiceLiveTest { // check that the ip is deallocated try { ec2.getElasticIPAddressServices().describeAddressesInRegion(region, ipidpair.getPublicIp()); - assert false; + fail("address has not been deallocated"); } catch (HttpResponseException e) { - // do nothing. .. it is expected to fail. + // do nothing ... this is expected to fail } - } finally { context.getComputeService().destroyNodesMatching(NodePredicates.inGroup(group)); if (context != null) diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/compute/functions/AddElasticIpsToNodemetadataTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/compute/functions/AddElasticIpsToNodemetadataTest.java index 0c44f1a890..d5ddfef608 100644 --- a/apis/ec2/src/test/java/org/jclouds/ec2/compute/functions/AddElasticIpsToNodemetadataTest.java +++ b/apis/ec2/src/test/java/org/jclouds/ec2/compute/functions/AddElasticIpsToNodemetadataTest.java @@ -45,14 +45,14 @@ public class AddElasticIpsToNodemetadataTest { .build(); @Test - public void testReturnsNodeWithExtraIpWhenFoundInCacheAndNodeHadAPublicIp() throws Exception { + public void testReturnsNodeWithElasticIpWhenFoundInCacheAndNodeHadAPublicIp() throws Exception { RegionAndName key = new RegionAndName("us-east-1", node.getProviderId()); String val = "1.1.1.1"; Cache cache = cacheOf(key, val); AddElasticIpsToNodemetadata fn = new AddElasticIpsToNodemetadata(cache); - assertEquals(fn.apply(node).getPublicAddresses(), ImmutableSet.of("174.129.173.155", "1.1.1.1")); + assertEquals(fn.apply(node).getPublicAddresses(), ImmutableSet.of("1.1.1.1")); } @Test