diff --git a/.gitignore b/.gitignore index e7a1549f..5de4ddb0 100644 --- a/.gitignore +++ b/.gitignore @@ -49,6 +49,7 @@ Thumbs.db */bin /test-output */test-output +/classes # IntelliJ specific files/directories out diff --git a/build.gradle b/build.gradle index fd388daf..e3158fea 100644 --- a/build.gradle +++ b/build.gradle @@ -69,7 +69,7 @@ test { useTestNG() } -tasks.withType(Compile) { +tasks.withType(JavaCompile) { options.compilerArgs << "-Xlint" << "-Werror" } diff --git a/gradle/convention.gradle b/gradle/convention.gradle index 45acabee..5d325336 100644 --- a/gradle/convention.gradle +++ b/gradle/convention.gradle @@ -58,28 +58,28 @@ status = project.hasProperty('preferredStatus')?project.preferredStatus:(version test.runtimeClasspath += project.configurations.provided } -apply plugin: 'github-pages' // Used to create publishGhPages task +// apply plugin: 'github-pages' // Used to create publishGhPages task def docTasks = [:] [Javadoc,ScalaDoc,Groovydoc].each{ Class docClass -> tasks.withType(docClass).each { docTask -> docTasks[docTask.name] = docTask - processGhPages.dependsOn(docTask) +// processGhPages.dependsOn(docTask) } } -githubPages { - repoUri = "git@github.com:Netflix/${rootProject.githubProjectName}.git" - pages { - docTasks.each { shortName, docTask -> - from(docTask.outputs.files) { - into "docs/${shortName}" - } - } - } -} +// githubPages { +// repoUri = "git@github.com:Netflix/${rootProject.githubProjectName}.git" +// pages { +// docTasks.each { shortName, docTask -> +// from(docTask.outputs.files) { +// into "docs/${shortName}" +// } +// } +// } +// } // Generate wrapper, which is distributed as part of source to alleviate the need of installing gradle task createWrapper(type: Wrapper) { - gradleVersion = '1.12' + gradleVersion = '2.2.1' } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 6a8c608b..0e7e1b2d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-bin.zip +distributionUrl=http\://services.gradle.org/distributions/gradle-2.2.1-bin.zip diff --git a/src/main/java/com/netflix/simianarmy/aws/janitor/VolumeTaggingMonkey.java b/src/main/java/com/netflix/simianarmy/aws/janitor/VolumeTaggingMonkey.java index e99ff832..a41e8daf 100644 --- a/src/main/java/com/netflix/simianarmy/aws/janitor/VolumeTaggingMonkey.java +++ b/src/main/java/com/netflix/simianarmy/aws/janitor/VolumeTaggingMonkey.java @@ -313,8 +313,8 @@ private static String getTagValue(String key, List tags) { */ private static boolean needsUpdate(Map metadata, String owner, String instance, Date lastDetachTime) { - return (owner != null && !StringUtils.equals(metadata.get(JanitorMonkey.OWNER_TAG_KEY), owner)) - || (instance != null && !StringUtils.equals(metadata.get(JanitorMonkey.INSTANCE_TAG_KEY), instance)) + return owner != null && !StringUtils.equals(metadata.get(JanitorMonkey.OWNER_TAG_KEY), owner) + || instance != null && !StringUtils.equals(metadata.get(JanitorMonkey.INSTANCE_TAG_KEY), instance) || lastDetachTime != null; } diff --git a/src/main/java/com/netflix/simianarmy/basic/BasicScheduler.java b/src/main/java/com/netflix/simianarmy/basic/BasicScheduler.java index 1c44f3b7..2c087b43 100644 --- a/src/main/java/com/netflix/simianarmy/basic/BasicScheduler.java +++ b/src/main/java/com/netflix/simianarmy/basic/BasicScheduler.java @@ -109,7 +109,7 @@ public void start(Monkey monkey, Runnable command) { // we have events, so set the start time to the time left in what would have been the last cycle Date eventTime = events.get(0).eventTime(); Date now = new Date(); - long init = cycle - (now.getTime() - eventTime.getTime()); + long init = cycle - now.getTime() + eventTime.getTime(); LOGGER.info("Detected previous events within cycle, setting " + monkey.type().name() + " start to " + new Date(now.getTime() + init)); futures.put(monkey.type().name(), diff --git a/src/main/java/com/netflix/simianarmy/chaos/BurnCpuChaosType.java b/src/main/java/com/netflix/simianarmy/chaos/BurnCpuChaosType.java index 647a2c1f..bf94f55c 100644 --- a/src/main/java/com/netflix/simianarmy/chaos/BurnCpuChaosType.java +++ b/src/main/java/com/netflix/simianarmy/chaos/BurnCpuChaosType.java @@ -30,7 +30,6 @@ public class BurnCpuChaosType extends ScriptChaosType { * * @param config * Configuration to use - * @throws IOException */ public BurnCpuChaosType(MonkeyConfiguration config) { super(config, "BurnCpu"); diff --git a/src/main/java/com/netflix/simianarmy/chaos/BurnIoChaosType.java b/src/main/java/com/netflix/simianarmy/chaos/BurnIoChaosType.java index e957c130..5148692f 100644 --- a/src/main/java/com/netflix/simianarmy/chaos/BurnIoChaosType.java +++ b/src/main/java/com/netflix/simianarmy/chaos/BurnIoChaosType.java @@ -59,7 +59,6 @@ public class BurnIoChaosType extends ScriptChaosType { * * @param config * Configuration to use - * @throws IOException */ public BurnIoChaosType(MonkeyConfiguration config) { super(config, "BurnIO"); diff --git a/src/main/java/com/netflix/simianarmy/chaos/ChaosType.java b/src/main/java/com/netflix/simianarmy/chaos/ChaosType.java index a322a3ef..7d93cc65 100644 --- a/src/main/java/com/netflix/simianarmy/chaos/ChaosType.java +++ b/src/main/java/com/netflix/simianarmy/chaos/ChaosType.java @@ -142,6 +142,6 @@ protected boolean isRootVolumeEbs(ChaosInstance instance) { List withRoot = cloudClient.listAttachedVolumes(instanceId, true); List withoutRoot = cloudClient.listAttachedVolumes(instanceId, false); - return (withRoot.size() != withoutRoot.size()); + return withRoot.size() != withoutRoot.size(); } } diff --git a/src/main/java/com/netflix/simianarmy/chaos/FailDnsChaosType.java b/src/main/java/com/netflix/simianarmy/chaos/FailDnsChaosType.java index 2b6057c1..57151640 100644 --- a/src/main/java/com/netflix/simianarmy/chaos/FailDnsChaosType.java +++ b/src/main/java/com/netflix/simianarmy/chaos/FailDnsChaosType.java @@ -20,7 +20,7 @@ import com.netflix.simianarmy.MonkeyConfiguration; /** - * Blocks TCP & UDP port 53, so DNS resolution fails. + * Blocks TCP & UDP port 53, so DNS resolution fails. */ public class FailDnsChaosType extends ScriptChaosType { /** @@ -28,7 +28,6 @@ public class FailDnsChaosType extends ScriptChaosType { * * @param config * Configuration to use - * @throws IOException */ public FailDnsChaosType(MonkeyConfiguration config) { super(config, "FailDns"); diff --git a/src/main/java/com/netflix/simianarmy/chaos/FailDynamoDbChaosType.java b/src/main/java/com/netflix/simianarmy/chaos/FailDynamoDbChaosType.java index c76ee079..45e79294 100644 --- a/src/main/java/com/netflix/simianarmy/chaos/FailDynamoDbChaosType.java +++ b/src/main/java/com/netflix/simianarmy/chaos/FailDynamoDbChaosType.java @@ -28,7 +28,6 @@ public class FailDynamoDbChaosType extends ScriptChaosType { * * @param config * Configuration to use - * @throws IOException */ public FailDynamoDbChaosType(MonkeyConfiguration config) { super(config, "FailDynamoDb"); diff --git a/src/main/java/com/netflix/simianarmy/chaos/FailEc2ChaosType.java b/src/main/java/com/netflix/simianarmy/chaos/FailEc2ChaosType.java index 77a58a97..683855f8 100644 --- a/src/main/java/com/netflix/simianarmy/chaos/FailEc2ChaosType.java +++ b/src/main/java/com/netflix/simianarmy/chaos/FailEc2ChaosType.java @@ -28,7 +28,6 @@ public class FailEc2ChaosType extends ScriptChaosType { * * @param config * Configuration to use - * @throws IOException */ public FailEc2ChaosType(MonkeyConfiguration config) { super(config, "FailEc2"); diff --git a/src/main/java/com/netflix/simianarmy/chaos/FailS3ChaosType.java b/src/main/java/com/netflix/simianarmy/chaos/FailS3ChaosType.java index ecd97afe..883ec9d7 100644 --- a/src/main/java/com/netflix/simianarmy/chaos/FailS3ChaosType.java +++ b/src/main/java/com/netflix/simianarmy/chaos/FailS3ChaosType.java @@ -28,7 +28,6 @@ public class FailS3ChaosType extends ScriptChaosType { * * @param config * Configuration to use - * @throws IOException */ public FailS3ChaosType(MonkeyConfiguration config) { super(config, "FailS3"); diff --git a/src/main/java/com/netflix/simianarmy/chaos/FillDiskChaosType.java b/src/main/java/com/netflix/simianarmy/chaos/FillDiskChaosType.java index 6b8f9b17..255fad47 100644 --- a/src/main/java/com/netflix/simianarmy/chaos/FillDiskChaosType.java +++ b/src/main/java/com/netflix/simianarmy/chaos/FillDiskChaosType.java @@ -42,7 +42,6 @@ public class FillDiskChaosType extends ScriptChaosType { * * @param config * Configuration to use - * @throws IOException */ public FillDiskChaosType(MonkeyConfiguration config) { super(config, "FillDisk"); diff --git a/src/main/java/com/netflix/simianarmy/chaos/KillProcessesChaosType.java b/src/main/java/com/netflix/simianarmy/chaos/KillProcessesChaosType.java index 4ed6924a..00047df6 100644 --- a/src/main/java/com/netflix/simianarmy/chaos/KillProcessesChaosType.java +++ b/src/main/java/com/netflix/simianarmy/chaos/KillProcessesChaosType.java @@ -30,7 +30,6 @@ public class KillProcessesChaosType extends ScriptChaosType { * * @param config * Configuration to use - * @throws IOException */ public KillProcessesChaosType(MonkeyConfiguration config) { super(config, "KillProcesses"); diff --git a/src/main/java/com/netflix/simianarmy/chaos/NetworkCorruptionChaosType.java b/src/main/java/com/netflix/simianarmy/chaos/NetworkCorruptionChaosType.java index a33ed155..b0db0c60 100644 --- a/src/main/java/com/netflix/simianarmy/chaos/NetworkCorruptionChaosType.java +++ b/src/main/java/com/netflix/simianarmy/chaos/NetworkCorruptionChaosType.java @@ -28,7 +28,6 @@ public class NetworkCorruptionChaosType extends ScriptChaosType { * * @param config * Configuration to use - * @throws IOException */ public NetworkCorruptionChaosType(MonkeyConfiguration config) { super(config, "NetworkCorruption"); diff --git a/src/main/java/com/netflix/simianarmy/chaos/NetworkLatencyChaosType.java b/src/main/java/com/netflix/simianarmy/chaos/NetworkLatencyChaosType.java index 06c00803..33fd5731 100644 --- a/src/main/java/com/netflix/simianarmy/chaos/NetworkLatencyChaosType.java +++ b/src/main/java/com/netflix/simianarmy/chaos/NetworkLatencyChaosType.java @@ -28,7 +28,6 @@ public class NetworkLatencyChaosType extends ScriptChaosType { * * @param config * Configuration to use - * @throws IOException */ public NetworkLatencyChaosType(MonkeyConfiguration config) { super(config, "NetworkLatency"); diff --git a/src/main/java/com/netflix/simianarmy/chaos/NetworkLossChaosType.java b/src/main/java/com/netflix/simianarmy/chaos/NetworkLossChaosType.java index c30a2cd8..86d8c670 100644 --- a/src/main/java/com/netflix/simianarmy/chaos/NetworkLossChaosType.java +++ b/src/main/java/com/netflix/simianarmy/chaos/NetworkLossChaosType.java @@ -28,7 +28,6 @@ public class NetworkLossChaosType extends ScriptChaosType { * * @param config * Configuration to use - * @throws IOException */ public NetworkLossChaosType(MonkeyConfiguration config) { super(config, "NetworkLoss"); diff --git a/src/main/java/com/netflix/simianarmy/chaos/NullRouteChaosType.java b/src/main/java/com/netflix/simianarmy/chaos/NullRouteChaosType.java index 2ec4b733..0517ed23 100644 --- a/src/main/java/com/netflix/simianarmy/chaos/NullRouteChaosType.java +++ b/src/main/java/com/netflix/simianarmy/chaos/NullRouteChaosType.java @@ -33,7 +33,6 @@ public class NullRouteChaosType extends ScriptChaosType { * * @param config * Configuration to use - * @throws IOException */ public NullRouteChaosType(MonkeyConfiguration config) { super(config, "NullRoute"); diff --git a/src/main/java/com/netflix/simianarmy/chaos/ScriptChaosType.java b/src/main/java/com/netflix/simianarmy/chaos/ScriptChaosType.java index 81dc3648..329d5d26 100644 --- a/src/main/java/com/netflix/simianarmy/chaos/ScriptChaosType.java +++ b/src/main/java/com/netflix/simianarmy/chaos/ScriptChaosType.java @@ -42,7 +42,6 @@ public abstract class ScriptChaosType extends ChaosType { * Configuration to use * @param key * Key for the chaos money - * @throws IOException */ public ScriptChaosType(MonkeyConfiguration config, String key) { super(config, key); diff --git a/src/main/java/com/netflix/simianarmy/chaos/SshConfig.java b/src/main/java/com/netflix/simianarmy/chaos/SshConfig.java index 64163c4e..b5a2b589 100644 --- a/src/main/java/com/netflix/simianarmy/chaos/SshConfig.java +++ b/src/main/java/com/netflix/simianarmy/chaos/SshConfig.java @@ -45,7 +45,6 @@ public class SshConfig { * * @param config * Configuration to use - * @throws IOException */ public SshConfig(MonkeyConfiguration config) { String sshUser = config.getStrOrElse("simianarmy.chaos.ssh.user", "root"); diff --git a/src/main/java/com/netflix/simianarmy/client/aws/AWSClient.java b/src/main/java/com/netflix/simianarmy/client/aws/AWSClient.java index baac755b..84c9cf19 100644 --- a/src/main/java/com/netflix/simianarmy/client/aws/AWSClient.java +++ b/src/main/java/com/netflix/simianarmy/client/aws/AWSClient.java @@ -312,7 +312,7 @@ public List describeElasticLoadBalancers(String... name /** * Describe a set of specific ELBs. * - * @param names the ELB names + * @param name the ELB name * @return the ELBs */ public LoadBalancerAttributes describeElasticLoadBalancerAttributes(String name) { diff --git a/src/main/java/com/netflix/simianarmy/client/aws/chaos/ASGChaosCrawler.java b/src/main/java/com/netflix/simianarmy/client/aws/chaos/ASGChaosCrawler.java index f0d52efc..02d31add 100644 --- a/src/main/java/com/netflix/simianarmy/client/aws/chaos/ASGChaosCrawler.java +++ b/src/main/java/com/netflix/simianarmy/client/aws/chaos/ASGChaosCrawler.java @@ -23,6 +23,7 @@ import com.amazonaws.services.autoscaling.model.AutoScalingGroup; import com.amazonaws.services.autoscaling.model.Instance; + import com.netflix.simianarmy.GroupType; import com.netflix.simianarmy.basic.chaos.BasicInstanceGroup; import com.netflix.simianarmy.chaos.ChaosCrawler; @@ -38,45 +39,55 @@ public class ASGChaosCrawler implements ChaosCrawler { */ public enum Types implements GroupType { - /** only crawls AutoScalingGroups. */ + /** + * only crawls AutoScalingGroups. + */ ASG; } - /** The aws client. */ + /** + * The aws client. + */ private final AWSClient awsClient; /** * Instantiates a new basic chaos crawler. * - * @param awsClient - * the aws client + * @param awsClient the aws client */ - public ASGChaosCrawler(AWSClient awsClient) { + public ASGChaosCrawler(final AWSClient awsClient) { this.awsClient = awsClient; } - /** {@inheritDoc} */ + /** + * {@inheritDoc} + */ @Override - public EnumSet groupTypes() { + @SuppressWarnings("rawtypes") + public EnumSet groupTypes() { return EnumSet.allOf(Types.class); } - /** {@inheritDoc} */ + /** + * {@inheritDoc} + */ @Override public List groups() { return groups((String[]) null); } @Override - public List groups(String... names) { + public List groups(final String... names) { List list = new LinkedList(); for (AutoScalingGroup asg : awsClient.describeAutoScalingGroups(names)) { InstanceGroup ig = new BasicInstanceGroup(asg.getAutoScalingGroupName(), Types.ASG, awsClient.region()); for (Instance inst : asg.getInstances()) { ig.addInstance(inst.getInstanceId()); } + list.add(ig); } + return list; } } diff --git a/src/test/java/com/netflix/simianarmy/basic/TestBasicScheduler.java b/src/test/java/com/netflix/simianarmy/basic/TestBasicScheduler.java index 3be78682..1c3f9e08 100644 --- a/src/test/java/com/netflix/simianarmy/basic/TestBasicScheduler.java +++ b/src/test/java/com/netflix/simianarmy/basic/TestBasicScheduler.java @@ -108,7 +108,7 @@ public void testDelayedStart() throws Exception { task = new FutureTask(Callables.returning(null)); sched.start(mockMonkey, task); try { - task.get(100, TimeUnit.MILLISECONDS); + task.get(100L, TimeUnit.MILLISECONDS); Assert.fail("The task shouldn't have been completed in 100ms"); } catch (TimeoutException e) { // NOPMD - This is an expected exception } diff --git a/src/test/java/com/netflix/simianarmy/basic/chaos/TestBasicChaosInstanceSelector.java b/src/test/java/com/netflix/simianarmy/basic/chaos/TestBasicChaosInstanceSelector.java index d2140989..700a214f 100644 --- a/src/test/java/com/netflix/simianarmy/basic/chaos/TestBasicChaosInstanceSelector.java +++ b/src/test/java/com/netflix/simianarmy/basic/chaos/TestBasicChaosInstanceSelector.java @@ -116,8 +116,8 @@ public void testEvenSelections(double probability) { // allow for 4% variation over all the selection runs int avg = Double.valueOf((RUNS / (double) group.instances().size()) * probability).intValue(); - int max = Double.valueOf(avg + (avg * 0.04)).intValue(); - int min = Double.valueOf(avg - (avg * 0.04)).intValue(); + int max = Double.valueOf(avg + avg * 0.04).intValue(); + int min = Double.valueOf(avg - avg * 0.04).intValue(); for (Map.Entry pair : selectMap.entrySet()) { Assert.assertTrue(pair.getValue() > min && pair.getValue() < max, pair.getKey() + " selected " + avg diff --git a/src/test/java/com/netflix/simianarmy/chaos/TestChaosMonkeyContext.java b/src/test/java/com/netflix/simianarmy/chaos/TestChaosMonkeyContext.java index f6e75821..90eeced3 100644 --- a/src/test/java/com/netflix/simianarmy/chaos/TestChaosMonkeyContext.java +++ b/src/test/java/com/netflix/simianarmy/chaos/TestChaosMonkeyContext.java @@ -19,6 +19,7 @@ package com.netflix.simianarmy.chaos; import java.io.InputStream; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -33,15 +34,20 @@ import org.jclouds.compute.ComputeService; import org.jclouds.compute.domain.ExecChannel; import org.jclouds.compute.domain.ExecResponse; + import org.jclouds.domain.LoginCredentials; + import org.jclouds.io.Payload; + import org.jclouds.ssh.SshClient; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Joiner; import com.google.common.collect.Lists; import com.google.common.collect.Maps; + import com.netflix.simianarmy.CloudClient; import com.netflix.simianarmy.GroupType; import com.netflix.simianarmy.MonkeyConfiguration; @@ -58,13 +64,14 @@ public TestChaosMonkeyContext() { this(new Properties()); } - protected TestChaosMonkeyContext(Properties properties) { + protected TestChaosMonkeyContext(final Properties properties) { super(ChaosMonkey.Type.CHAOS); cfg = new BasicConfiguration(properties); } - public TestChaosMonkeyContext(String propFile) { + public TestChaosMonkeyContext(final String propFile) { super(ChaosMonkey.Type.CHAOS); + Properties props = new Properties(); try { InputStream is = TestChaosMonkeyContext.class.getResourceAsStream(propFile); @@ -76,6 +83,7 @@ public TestChaosMonkeyContext(String propFile) { } catch (Exception e) { LOGGER.error("Unable to load properties file " + propFile, e); } + cfg = new BasicConfiguration(props); } @@ -90,7 +98,8 @@ public static class TestInstanceGroup implements InstanceGroup { private final String region; private final List instances = new ArrayList(); - public TestInstanceGroup(GroupType type, String name, String region, String... instances) { + public TestInstanceGroup(final GroupType type, final String name, final String region, + final String... instances) { this.type = type; this.name = name; this.region = region; @@ -120,28 +129,32 @@ public List instances() { } @Override - public void addInstance(String ignored) { - } + public void addInstance(final String ignored) { } - public void deleteInstance(String id) { + public void deleteInstance(final String id) { instances.remove(id); } @Override - public InstanceGroup copyAs(String newName) { + public InstanceGroup copyAs(final String newName) { return new TestInstanceGroup(this.type, newName, this.region, instances().toString()); } } public enum CrawlerTypes implements GroupType { - TYPE_A, TYPE_B, TYPE_C, TYPE_D - }; + TYPE_A, + TYPE_B, + TYPE_C, + TYPE_D + } + ; @Override public ChaosCrawler chaosCrawler() { return new ChaosCrawler() { @Override - public EnumSet groupTypes() { + @SuppressWarnings("rawtypes") + public EnumSet groupTypes() { return EnumSet.allOf(CrawlerTypes.class); } @@ -155,30 +168,35 @@ public List groups() { "3:i-123456785"); InstanceGroup gC2 = new TestInstanceGroup(CrawlerTypes.TYPE_C, "name5", "reg1", "3:i-123456786", "3:i-123456787"); - InstanceGroup gD0 = new TestInstanceGroup(CrawlerTypes.TYPE_D, "new-group-TestGroup1-XXXXXXXXX", - "reg1", "3:i-123456786", "3:i-123456787"); + InstanceGroup gD0 = new TestInstanceGroup(CrawlerTypes.TYPE_D, "new-group-TestGroup1-XXXXXXXXX", "reg1", + "3:i-123456786", "3:i-123456787"); return Arrays.asList(gA0, gA1, gB2, gB3, gC1, gC2, gD0); } @Override - public List groups(String... names) { + public List groups(final String... names) { Map nameToGroup = new HashMap(); for (InstanceGroup ig : groups()) { nameToGroup.put(ig.name(), ig); } + List list = new LinkedList(); for (String name : names) { InstanceGroup ig = nameToGroup.get(name); if (ig == null) { continue; } + for (String instanceId : selected) { + // Remove selected instances from crawler list TestInstanceGroup testIg = (TestInstanceGroup) ig; testIg.deleteInstance(instanceId); } + list.add(ig); } + return list; } }; @@ -194,8 +212,9 @@ public List selectedOn() { public ChaosInstanceSelector chaosInstanceSelector() { return new BasicChaosInstanceSelector() { @Override - public Collection select(InstanceGroup group, double probability) { + public Collection select(final InstanceGroup group, final double probability) { selectedOn.add(group); + Collection instances = super.select(group, probability); selected.addAll(instances); return instances; @@ -217,47 +236,42 @@ public List terminated() { public CloudClient cloudClient() { return new CloudClient() { @Override - public void terminateInstance(String instanceId) { + public void terminateInstance(final String instanceId) { terminated.add(instanceId); } @Override - public void createTagsForResources(Map keyValueMap, String... resourceIds) { - } + public void createTagsForResources(final Map keyValueMap, final String... resourceIds) { } @Override - public void deleteAutoScalingGroup(String asgName) { - } + public void deleteAutoScalingGroup(final String asgName) { } @Override - public void deleteVolume(String volumeId) { - } + public void deleteVolume(final String volumeId) { } @Override - public void deleteSnapshot(String snapshotId) { - } + public void deleteSnapshot(final String snapshotId) { } @Override - public void deleteImage(String imageId) { - } + public void deleteImage(final String imageId) { } @Override - public void deleteLaunchConfiguration(String launchConfigName) { - } + public void deleteLaunchConfiguration(final String launchConfigName) { } @Override - public List listAttachedVolumes(String instanceId, boolean includeRoot) { + public List listAttachedVolumes(final String instanceId, final boolean includeRoot) { List volumes = Lists.newArrayList(); if (includeRoot) { volumes.add("volume-0"); } + volumes.add("volume-1"); volumes.add("volume-2"); return volumes; } @Override - public void detachVolume(String instanceId, String volumeId, boolean force) { + public void detachVolume(final String instanceId, final String volumeId, final boolean force) { cloudActions.add("detach:" + instanceId + ":" + volumeId); } @@ -267,22 +281,23 @@ public ComputeService getJcloudsComputeService() { } @Override - public String getJcloudsId(String instanceId) { + public String getJcloudsId(final String instanceId) { throw new UnsupportedOperationException(); } @Override - public SshClient connectSsh(String instanceId, LoginCredentials credentials) { + public SshClient connectSsh(final String instanceId, final LoginCredentials credentials) { return new MockSshClient(instanceId, credentials); } @Override - public String findSecurityGroup(String instanceId, String groupName) { + public String findSecurityGroup(final String instanceId, final String groupName) { return securityGroupNames.get(groupName); } @Override - public String createSecurityGroup(String instanceId, String groupName, String description) { + public String createSecurityGroup(final String instanceId, final String groupName, + final String description) { String id = "sg-" + (securityGroupNames.size() + 1); securityGroupNames.put(groupName, id); cloudActions.add("createSecurityGroup:" + instanceId + ":" + groupName); @@ -290,12 +305,12 @@ public String createSecurityGroup(String instanceId, String groupName, String de } @Override - public boolean canChangeInstanceSecurityGroups(String instanceId) { + public boolean canChangeInstanceSecurityGroups(final String instanceId) { return true; } @Override - public void setInstanceSecurityGroups(String instanceId, List groupIds) { + public void setInstanceSecurityGroups(final String instanceId, final List groupIds) { cloudActions.add("setInstanceSecurityGroups:" + instanceId + ":" + Joiner.on(',').join(groupIds)); } }; @@ -335,7 +350,7 @@ private class MockSshClient implements SshClient { private final String instanceId; private final LoginCredentials credentials; - public MockSshClient(String instanceId, LoginCredentials credentials) { + public MockSshClient(final String instanceId, final LoginCredentials credentials) { this.instanceId = instanceId; this.credentials = credentials; } @@ -351,17 +366,17 @@ public String getHostAddress() { } @Override - public void put(String path, Payload contents) { + public void put(final String path, final Payload contents) { throw new UnsupportedOperationException(); } @Override - public Payload get(String path) { + public Payload get(final String path) { throw new UnsupportedOperationException(); } @Override - public ExecResponse exec(String command) { + public ExecResponse exec(final String command) { SshAction action = new SshAction(); action.method = "exec"; action.instanceId = instanceId; @@ -375,20 +390,18 @@ public ExecResponse exec(String command) { } @Override - public ExecChannel execChannel(String command) { + public ExecChannel execChannel(final String command) { throw new UnsupportedOperationException(); } @Override - public void connect() { - } + public void connect() { } @Override - public void disconnect() { - } + public void disconnect() { } @Override - public void put(String path, String contents) { + public void put(final String path, final String contents) { SshAction action = new SshAction(); action.method = "put"; action.instanceId = instanceId; @@ -405,7 +418,7 @@ static class Notification { private final String instance; private final ChaosType chaosType; - public Notification(String instance, ChaosType chaosType) { + public Notification(final String instance, final ChaosType chaosType) { this.instance = instance; this.chaosType = chaosType; } @@ -423,27 +436,29 @@ public ChaosType getChaosType() { public ChaosEmailNotifier chaosEmailNotifier() { return new ChaosEmailNotifier(null) { @Override - public String getSourceAddress(String to) { + public String getSourceAddress(final String to) { return "source@chaosMonkey.foo"; } @Override - public String[] getCcAddresses(String to) { + public String[] getCcAddresses(final String to) { return new String[] {}; } @Override - public String buildEmailSubject(String to) { + public String buildEmailSubject(final String to) { return String.format("Testing Chaos termination notification for %s", to); } @Override - public void sendTerminationNotification(InstanceGroup group, String instance, ChaosType chaosType) { + public void sendTerminationNotification(final InstanceGroup group, final String instance, + final ChaosType chaosType) { groupNotified.add(new Notification(instance, chaosType)); } @Override - public void sendTerminationGlobalNotification(InstanceGroup group, String instance, ChaosType chaosType) { + public void sendTerminationGlobalNotification(final InstanceGroup group, final String instance, + final ChaosType chaosType) { globallyNotified.add(new Notification(instance, chaosType)); } }; diff --git a/src/test/java/com/netflix/simianarmy/janitor/TestAbstractJanitor.java b/src/test/java/com/netflix/simianarmy/janitor/TestAbstractJanitor.java index 164d9e09..73130d1e 100644 --- a/src/test/java/com/netflix/simianarmy/janitor/TestAbstractJanitor.java +++ b/src/test/java/com/netflix/simianarmy/janitor/TestAbstractJanitor.java @@ -522,7 +522,7 @@ public List getResources(ResourceType resourceType, CleanupState state List result = new ArrayList(); for (Resource r : resources.values()) { if (r.getResourceType().equals(resourceType) - && (r.getState() != null && r.getState().equals(state)) + && r.getState() != null && r.getState().equals(state) && r.getRegion().equals(region)) { result.add(r.cloneResource()); }