From b41eedf882d23afdfa0aa1e0fe649c5fdebab156 Mon Sep 17 00:00:00 2001 From: Adrian Cole Date: Thu, 25 Nov 2010 20:09:27 +0100 Subject: [PATCH] issue 378:cannot recreate a destroyed node set in ec2 --- .../aws/ec2/compute/EC2ComputeService.java | 4 +- .../compute/TestCanRecreateTagLiveTest.java | 106 ++++++++++++++++++ 2 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 aws/core/src/test/java/org/jclouds/aws/ec2/compute/TestCanRecreateTagLiveTest.java diff --git a/aws/core/src/main/java/org/jclouds/aws/ec2/compute/EC2ComputeService.java b/aws/core/src/main/java/org/jclouds/aws/ec2/compute/EC2ComputeService.java index 681b81acc3..c1ab245837 100644 --- a/aws/core/src/main/java/org/jclouds/aws/ec2/compute/EC2ComputeService.java +++ b/aws/core/src/main/java/org/jclouds/aws/ec2/compute/EC2ComputeService.java @@ -116,7 +116,7 @@ public class EC2ComputeService extends BaseComputeService { ec2Client.getPlacementGroupServices().deletePlacementGroupInRegion(region, group); checkState(placementGroupDeleted.apply(new PlacementGroup(region, group, "cluster", State.PENDING)), String.format("placementGroup region(%s) name(%s) failed to delete", region, group)); - placementGroupMap.remove(new RegionAndName(region, tag)); + placementGroupMap.remove(new RegionAndName(region, group)); logger.debug("<< deleted placementGroup(%s)", group); } catch (AWSResponseException e) { if (e.getError().getCode().equals("InvalidPlacementGroup.InUse")) { @@ -142,7 +142,7 @@ public class EC2ComputeService extends BaseComputeService { logger.debug(">> deleting securityGroup(%s)", group); ec2Client.getSecurityGroupServices().deleteSecurityGroupInRegion(region, group); // TODO: test this clear happens - securityGroupMap.remove(new RegionNameAndIngressRules(region, tag, null, false)); + securityGroupMap.remove(new RegionNameAndIngressRules(region, group, null, false)); logger.debug("<< deleted securityGroup(%s)", group); } } diff --git a/aws/core/src/test/java/org/jclouds/aws/ec2/compute/TestCanRecreateTagLiveTest.java b/aws/core/src/test/java/org/jclouds/aws/ec2/compute/TestCanRecreateTagLiveTest.java new file mode 100644 index 0000000000..b706ccb0f3 --- /dev/null +++ b/aws/core/src/test/java/org/jclouds/aws/ec2/compute/TestCanRecreateTagLiveTest.java @@ -0,0 +1,106 @@ +/** + * + * Copyright (C) 2010 Cloud Conscious, LLC. + * + * ==================================================================== + * Licensed 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.aws.ec2.compute; + +import static com.google.common.base.Preconditions.checkNotNull; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Properties; + +import org.jclouds.Constants; +import org.jclouds.compute.ComputeServiceContext; +import org.jclouds.compute.ComputeServiceContextFactory; +import org.jclouds.compute.RunNodesException; +import org.jclouds.compute.predicates.NodePredicates; +import org.jclouds.logging.log4j.config.Log4JLoggingModule; +import org.jclouds.ssh.jsch.config.JschSshClientModule; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeGroups; +import org.testng.annotations.Test; + +import com.google.common.base.Throwables; +import com.google.common.collect.ImmutableSet; +import com.google.inject.Module; + +/** + * + * @author Adrian Cole + */ +@Test(groups = "live") +public class TestCanRecreateTagLiveTest { + + private ComputeServiceContext context; + protected String provider = "ec2"; + protected String identity; + protected String credential; + protected String endpoint; + protected String apiversion; + + @BeforeClass + protected void setupCredentials() { + identity = checkNotNull(System.getProperty("test." + provider + ".identity"), "test." + provider + ".identity"); + credential = System.getProperty("test." + provider + ".credential"); + endpoint = System.getProperty("test." + provider + ".endpoint"); + apiversion = System.getProperty("test." + provider + ".apiversion"); + } + + protected Properties setupProperties() { + Properties overrides = new Properties(); + overrides.setProperty(Constants.PROPERTY_TRUST_ALL_CERTS, "true"); + overrides.setProperty(Constants.PROPERTY_RELAX_HOSTNAME, "true"); + overrides.setProperty(provider + ".identity", identity); + if (credential != null) + overrides.setProperty(provider + ".credential", credential); + if (endpoint != null) + overrides.setProperty(provider + ".endpoint", endpoint); + if (apiversion != null) + overrides.setProperty(provider + ".apiversion", apiversion); + return overrides; + } + + @BeforeGroups(groups = { "live" }) + public void setupClient() throws FileNotFoundException, IOException { + setupCredentials(); + Properties overrides = setupProperties(); + context = new ComputeServiceContextFactory().createContext(provider, + ImmutableSet. of(new Log4JLoggingModule(), new JschSshClientModule()), overrides); + } + + public void testCanRecreateTag() throws Exception { + + String tag = PREFIX + "recreate"; + context.getComputeService().destroyNodesMatching(NodePredicates.withTag(tag)); + + try { + context.getComputeService().runNodesWithTag(tag, 1); + context.getComputeService().destroyNodesMatching(NodePredicates.withTag(tag)); + context.getComputeService().runNodesWithTag(tag, 1); + } catch (RunNodesException e) { + System.err.println(e.getNodeErrors().keySet()); + Throwables.propagate(e); + } finally { + context.getComputeService().destroyNodesMatching(NodePredicates.withTag(tag)); + } + } + + public static final String PREFIX = System.getProperty("user.name") + "ec2"; + +}