@Override public NodeMetadata destroyNode(String id) { String[] parts = AWSUtils.parseHandle(id); String region = parts[0]; String instanceId = parts[1]; // TODO: can there be multiple? releaseAnyPublicIpForInstanceInRegion(instanceId, region); destroyInstanceInRegion(instanceId, region); return getNode.getNode(id); }
@SuppressWarnings("unchecked") @Test public void testDestroyNodeTerminatesInstanceAndReturnsRefreshedNode() throws Exception { EC2Api client = createMock(EC2Api.class); InstanceApi instanceClient = createMock(InstanceApi.class); GetNodeMetadataStrategy getNode = createMock(GetNodeMetadataStrategy.class); LoadingCache<RegionAndName, String> elasticIpCache = createMock(LoadingCache.class); NodeMetadata node = createMock(NodeMetadata.class); expect(client.getInstanceApi()).andReturn((Optional) Optional.of(instanceClient)).atLeastOnce(); expect(instanceClient.terminateInstancesInRegion("region", "i-blah")).andReturn(null); expect(getNode.getNode("region/i-blah")).andReturn(node); replay(client); replay(getNode); replay(instanceClient); replay(elasticIpCache); EC2DestroyNodeStrategy destroyer = new EC2DestroyNodeStrategy(client, getNode, elasticIpCache); assertEquals(destroyer.destroyNode("region/i-blah"), node); verify(client); verify(getNode); verify(instanceClient); verify(elasticIpCache); }
@Override protected void destroyInstanceInRegion(String id, String region) { String spotId = id; if (id.indexOf("sir-") != 0) { try { spotId = getOnlyElement( Iterables.concat(client.getInstanceApi().get().describeInstancesInRegion(region, id))) .getSpotInstanceRequestId(); credentialStore.remove("node#" + region + "/" + spotId); } catch (NoSuchElementException e) { } super.destroyInstanceInRegion(id, region); } else { client.getSpotInstanceApi().get().cancelSpotInstanceRequestsInRegion(region, spotId); credentialStore.remove("node#" + region + "/" + id); } } }
@SuppressWarnings("unchecked") @Test public void testDestroyNodeTerminatesInstanceAndReturnsRefreshedNode() throws Exception { EC2Client client = createMock(EC2Client.class); InstanceClient instanceClient = createMock(InstanceClient.class); GetNodeMetadataStrategy getNode = createMock(GetNodeMetadataStrategy.class); LoadingCache<RegionAndName, String> elasticIpCache = createMock(LoadingCache.class); NodeMetadata node = createMock(NodeMetadata.class); expect(client.getInstanceServices()).andReturn(instanceClient).atLeastOnce(); expect(instanceClient.terminateInstancesInRegion("region", "i-blah")).andReturn(null); expect(getNode.getNode("region/i-blah")).andReturn(node); replay(client); replay(getNode); replay(instanceClient); replay(elasticIpCache); EC2DestroyNodeStrategy destroyer = new EC2DestroyNodeStrategy(client, getNode, elasticIpCache); assertEquals(destroyer.destroyNode("region/i-blah"), node); verify(client); verify(getNode); verify(instanceClient); verify(elasticIpCache); }
@Override protected void destroyInstanceInRegion(String id, String region) { String spotId = id; if (id.indexOf("sir-") != 0) { try { spotId = getOnlyElement( Iterables.concat(client.getInstanceApi().get().describeInstancesInRegion(region, id))) .getSpotInstanceRequestId(); credentialStore.remove("node#" + region + "/" + spotId); } catch (NoSuchElementException e) { } super.destroyInstanceInRegion(id, region); } else { client.getSpotInstanceApi().get().cancelSpotInstanceRequestsInRegion(region, spotId); credentialStore.remove("node#" + region + "/" + id); } } }
@Override public NodeMetadata destroyNode(String id) { String[] parts = AWSUtils.parseHandle(id); String region = parts[0]; String instanceId = parts[1]; // TODO: can there be multiple? releaseAnyPublicIpForInstanceInRegion(instanceId, region); destroyInstanceInRegion(instanceId, region); return getNode.getNode(id); }
replay(ipClient); EC2DestroyNodeStrategy destroyer = new EC2DestroyNodeStrategy(client, getNode, elasticIpCache); destroyer.autoAllocateElasticIps = true; assertEquals(destroyer.destroyNode("region/i-blah"), node);
@Override protected void destroyInstanceInRegion(String id, String region) { String spotId = id; if (id.indexOf("sir-") != 0) { try { spotId = getOnlyElement( Iterables.concat(client.getInstanceApi().get().describeInstancesInRegion(region, id))) .getSpotInstanceRequestId(); credentialStore.remove("node#" + region + "/" + spotId); } catch (NoSuchElementException e) { } super.destroyInstanceInRegion(id, region); } else { client.getSpotInstanceApi().get().cancelSpotInstanceRequestsInRegion(region, spotId); credentialStore.remove("node#" + region + "/" + id); } } }
@Override public NodeMetadata destroyNode(String id) { String[] parts = AWSUtils.parseHandle(id); String region = parts[0]; String instanceId = parts[1]; // TODO: can there be multiple? releaseAnyPublicIpForInstanceInRegion(instanceId, region); destroyInstanceInRegion(instanceId, region); return getNode.getNode(id); }
@SuppressWarnings("unchecked") @Test public void testDestroyNodeSafeOnCacheMissThenTerminatesInstanceAndReturnsRefreshedNode() throws Exception { EC2Client client = createMock(EC2Client.class); GetNodeMetadataStrategy getNode = createMock(GetNodeMetadataStrategy.class); LoadingCache<RegionAndName, String> elasticIpCache = createMock(LoadingCache.class); ElasticIPAddressClient ipClient = createMock(ElasticIPAddressClient.class); InstanceClient instanceClient = createMock(InstanceClient.class); NodeMetadata node = createMock(NodeMetadata.class); expect(elasticIpCache.get(new RegionAndName("region", "i-blah"))).andThrow(new CacheLoader.InvalidCacheLoadException(null)); expect(client.getInstanceServices()).andReturn(instanceClient).atLeastOnce(); expect(instanceClient.terminateInstancesInRegion("region", "i-blah")).andReturn(null); expect(getNode.getNode("region/i-blah")).andReturn(node); replay(client); replay(getNode); replay(elasticIpCache); replay(instanceClient); replay(ipClient); EC2DestroyNodeStrategy destroyer = new EC2DestroyNodeStrategy(client, getNode, elasticIpCache); destroyer.autoAllocateElasticIps = true; assertEquals(destroyer.destroyNode("region/i-blah"), node); verify(client); verify(getNode); verify(elasticIpCache); verify(instanceClient); verify(ipClient); }
@Override public NodeMetadata destroyNode(String id) { String[] parts = AWSUtils.parseHandle(id); String region = parts[0]; String instanceId = parts[1]; // TODO: can there be multiple? releaseAnyPublicIpForInstanceInRegion(instanceId, region); destroyInstanceInRegion(instanceId, region); return getNode.getNode(id); }
replay(ipClient); EC2DestroyNodeStrategy destroyer = new EC2DestroyNodeStrategy(client, getNode, elasticIpCache); destroyer.autoAllocateElasticIps = true; assertEquals(destroyer.destroyNode("region/i-blah"), node);
@Override public NodeMetadata destroyNode(String id) { String[] parts = AWSUtils.parseHandle(id); String region = parts[0]; String instanceId = parts[1]; // TODO: can there be multiple? releaseAnyPublicIpForInstanceInRegion(instanceId, region); destroyInstanceInRegion(instanceId, region); return getNode.getNode(id); }
@SuppressWarnings("unchecked") @Test public void testDestroyNodeSafeOnCacheMissThenTerminatesInstanceAndReturnsRefreshedNode() throws Exception { EC2Api client = createMock(EC2Api.class); GetNodeMetadataStrategy getNode = createMock(GetNodeMetadataStrategy.class); LoadingCache<RegionAndName, String> elasticIpCache = createMock(LoadingCache.class); ElasticIPAddressApi ipClient = createMock(ElasticIPAddressApi.class); InstanceApi instanceClient = createMock(InstanceApi.class); NodeMetadata node = createMock(NodeMetadata.class); expect(elasticIpCache.get(new RegionAndName("region", "i-blah"))).andThrow(new CacheLoader.InvalidCacheLoadException(null)); expect(client.getInstanceApi()).andReturn((Optional) Optional.of(instanceClient)).atLeastOnce(); expect(instanceClient.terminateInstancesInRegion("region", "i-blah")).andReturn(null); expect(getNode.getNode("region/i-blah")).andReturn(node); replay(client); replay(getNode); replay(elasticIpCache); replay(instanceClient); replay(ipClient); EC2DestroyNodeStrategy destroyer = new EC2DestroyNodeStrategy(client, getNode, elasticIpCache); destroyer.autoAllocateElasticIps = true; assertEquals(destroyer.destroyNode("region/i-blah"), node); verify(client); verify(getNode); verify(elasticIpCache); verify(instanceClient); verify(ipClient); }
replay(ipClient); EC2DestroyNodeStrategy destroyer = new EC2DestroyNodeStrategy(client, getNode, elasticIpCache); destroyer.autoAllocateElasticIps = true; assertEquals(destroyer.destroyNode("region/i-blah"), node);
replay(ipClient); EC2DestroyNodeStrategy destroyer = new EC2DestroyNodeStrategy(client, getNode, elasticIpCache); destroyer.autoAllocateElasticIps = true; assertEquals(destroyer.destroyNode("region/i-blah"), node);