Modified: whirr/trunk/core/src/main/java/org/apache/whirr/service/DryRunModule.java URL: http://svn.apache.org/viewvc/whirr/trunk/core/src/main/java/org/apache/whirr/service/DryRunModule.java?rev=1235735&r1=1235734&r2=1235735&view=diff ============================================================================== --- whirr/trunk/core/src/main/java/org/apache/whirr/service/DryRunModule.java (original) +++ whirr/trunk/core/src/main/java/org/apache/whirr/service/DryRunModule.java Wed Jan 25 13:22:35 2012 @@ -18,28 +18,17 @@ package org.apache.whirr.service; -import static com.google.common.collect.Iterables.concat; -import static com.google.common.collect.Iterables.contains; -import static com.google.common.collect.Iterables.find; -import static com.google.common.collect.Multimaps.synchronizedListMultimap; -import static com.google.common.io.ByteStreams.newInputStreamSupplier; -import static com.google.inject.matcher.Matchers.identicalTo; -import static com.google.inject.matcher.Matchers.returns; -import static com.google.inject.matcher.Matchers.subclassesOf; - -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.atomic.AtomicInteger; - -import javax.annotation.Nullable; -import javax.inject.Inject; -import javax.inject.Singleton; - +import com.google.common.base.Function; +import com.google.common.base.Objects; +import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.LinkedListMultimap; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.MapMaker; +import com.google.common.collect.Maps; +import com.google.common.io.InputSupplier; +import com.google.inject.AbstractModule; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.jclouds.compute.callables.RunScriptOnNode; @@ -56,17 +45,26 @@ import org.jclouds.ssh.SshClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Function; -import com.google.common.base.Objects; -import com.google.common.base.Predicate; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableListMultimap; -import com.google.common.collect.LinkedListMultimap; -import com.google.common.collect.ListMultimap; -import com.google.common.collect.MapMaker; -import com.google.common.collect.Maps; -import com.google.common.io.InputSupplier; -import com.google.inject.AbstractModule; +import javax.annotation.Nullable; +import javax.inject.Inject; +import javax.inject.Singleton; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicInteger; + +import static com.google.common.collect.Iterables.concat; +import static com.google.common.collect.Iterables.contains; +import static com.google.common.collect.Iterables.find; +import static com.google.common.collect.Multimaps.synchronizedListMultimap; +import static com.google.common.io.ByteStreams.newInputStreamSupplier; +import static com.google.inject.matcher.Matchers.identicalTo; +import static com.google.inject.matcher.Matchers.returns; +import static com.google.inject.matcher.Matchers.subclassesOf; /** * Outputs orchestration jclouds does to INFO logging and saves an ordered list @@ -105,6 +103,7 @@ public class DryRunModule extends Abstra public static void resetDryRun() { DryRun.INSTANCE.executedScripts.clear(); + DryRun.INSTANCE.totallyOrderedScripts.clear(); } // enum singleton pattern
Added: whirr/trunk/core/src/test/java/org/apache/whirr/actions/CleanupClusterActionTest.java URL: http://svn.apache.org/viewvc/whirr/trunk/core/src/test/java/org/apache/whirr/actions/CleanupClusterActionTest.java?rev=1235735&view=auto ============================================================================== --- whirr/trunk/core/src/test/java/org/apache/whirr/actions/CleanupClusterActionTest.java (added) +++ whirr/trunk/core/src/test/java/org/apache/whirr/actions/CleanupClusterActionTest.java Wed Jan 25 13:22:35 2012 @@ -0,0 +1,43 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.whirr.actions; + +import com.google.common.base.Function; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.service.ClusterActionHandler; +import org.jclouds.compute.ComputeServiceContext; + +import java.util.Map; +import java.util.Set; + +public class CleanupClusterActionTest extends ScriptBasedClusterActionTest<CleanupClusterAction> { + + @Override + public String getActionName() { + return ClusterActionHandler.CLEANUP_ACTION; + } + + @Override + public CleanupClusterAction newClusterActionInstance( + Function<ClusterSpec, ComputeServiceContext> getCompute, Map<String, ClusterActionHandler> handlerMap, + Set<String> targetRoles, Set<String> targetInstanceIds + ) { + return new CleanupClusterAction(getCompute, handlerMap, targetRoles, targetInstanceIds); + } +} Added: whirr/trunk/core/src/test/java/org/apache/whirr/actions/ConfigureServicesActionTest.java URL: http://svn.apache.org/viewvc/whirr/trunk/core/src/test/java/org/apache/whirr/actions/ConfigureServicesActionTest.java?rev=1235735&view=auto ============================================================================== --- whirr/trunk/core/src/test/java/org/apache/whirr/actions/ConfigureServicesActionTest.java (added) +++ whirr/trunk/core/src/test/java/org/apache/whirr/actions/ConfigureServicesActionTest.java Wed Jan 25 13:22:35 2012 @@ -0,0 +1,44 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.whirr.actions; + +import com.google.common.base.Function; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.service.ClusterActionHandler; +import org.jclouds.compute.ComputeServiceContext; + +import java.util.Map; +import java.util.Set; + +public class ConfigureServicesActionTest extends ScriptBasedClusterActionTest<ConfigureServicesAction> { + + @Override + public String getActionName() { + return ClusterActionHandler.CONFIGURE_ACTION; + } + + @Override + public ConfigureServicesAction newClusterActionInstance( + Function<ClusterSpec, ComputeServiceContext> getCompute, Map<String, ClusterActionHandler> handlerMap, + Set<String> targetRoles, Set<String> targetInstanceIds + ) { + return new ConfigureServicesAction(getCompute, handlerMap, targetRoles, targetInstanceIds); + } + +} Added: whirr/trunk/core/src/test/java/org/apache/whirr/actions/ScriptBasedClusterActionTest.java URL: http://svn.apache.org/viewvc/whirr/trunk/core/src/test/java/org/apache/whirr/actions/ScriptBasedClusterActionTest.java?rev=1235735&view=auto ============================================================================== --- whirr/trunk/core/src/test/java/org/apache/whirr/actions/ScriptBasedClusterActionTest.java (added) +++ whirr/trunk/core/src/test/java/org/apache/whirr/actions/ScriptBasedClusterActionTest.java Wed Jan 25 13:22:35 2012 @@ -0,0 +1,262 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.whirr.actions; + +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.HandlerMapFactory; +import org.apache.whirr.InstanceTemplate; +import org.apache.whirr.service.ClusterActionEvent; +import org.apache.whirr.service.ClusterActionHandler; +import org.apache.whirr.service.ClusterActionHandlerSupport; +import org.apache.whirr.service.ComputeCache; +import org.apache.whirr.service.DryRunModule; +import org.jclouds.compute.ComputeServiceContext; +import org.jclouds.compute.callables.RunScriptOnNode; +import org.jclouds.scriptbuilder.domain.OsFamily; +import org.junit.Before; +import org.junit.Test; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static com.google.common.collect.Sets.newHashSet; +import static org.apache.whirr.service.DryRunModule.DryRun; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.jclouds.scriptbuilder.domain.Statements.exec; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public abstract class ScriptBasedClusterActionTest<T extends ScriptBasedClusterAction> { + + public static class Noop1ClusterActionHandler extends + ClusterActionHandlerSupport { + + @Override + public String getRole() { + return "noop1"; + } + + @Override + public void beforeConfigure(ClusterActionEvent event) { + addStatement(event, exec("echo noop1-configure")); + } + + @Override + public void beforeStart(ClusterActionEvent event) { + addStatement(event, exec("echo noop1-start")); + } + + @Override + public void beforeStop(ClusterActionEvent event) { + addStatement(event, exec("echo noop1-stop")); + } + + @Override + public void beforeCleanup(ClusterActionEvent event) { + addStatement(event, exec("echo noop1-cleanup")); + } + + @Override + public void beforeDestroy(ClusterActionEvent event) { + addStatement(event, exec("echo noop1-destroy")); + } + } + + private final static Map<String, ClusterActionHandler> HANDLERMAP = HandlerMapFactory.create(); + private final static Set<String> EMPTYSET = ImmutableSet.of(); + + private ClusterSpec clusterSpec; + private Cluster cluster; + + @Before + public void setUp() throws Exception { + clusterSpec = ClusterSpec.withTemporaryKeys(); + + clusterSpec.setClusterName("test-cluster-for-script-exection"); + clusterSpec.setProvider("stub"); + clusterSpec.setIdentity("dummy"); + clusterSpec.setStateStore("none"); + + clusterSpec.setInstanceTemplates(ImmutableList.of( + newInstanceTemplate("noop"), + newInstanceTemplate("noop", "noop1", "noop2"), + newInstanceTemplate("noop1", "noop3") + )); + + ClusterController controller = new ClusterController(); + cluster = controller.launchCluster(clusterSpec); + + DryRunModule.resetDryRun(); + } + + private InstanceTemplate newInstanceTemplate(String... roles) { + return InstanceTemplate.builder().numberOfInstance(1).roles(roles).build(); + } + + @Test + public void testActionIsExecutedOnAllRelevantNodes() throws Exception { + T action = newClusterActionInstance(EMPTYSET, EMPTYSET); + action.execute(clusterSpec, cluster); + + List<RunScriptOnNode> executions = DryRunModule.getDryRun() + .getTotallyOrderedExecutions(); + + // only 2 out of 3 because one instance has only noop + assertThat(executions.size(), is(2)); + } + + @Test + public void testFilterScriptExecutionByRole() throws Exception { + String instanceId = getInstaceForRole(cluster, "noop2").getId(); + T action = newClusterActionInstance(ImmutableSet.of("noop2"), EMPTYSET); + action.execute(clusterSpec, cluster); + + List<RunScriptOnNode> executions = DryRunModule.getDryRun() + .getTotallyOrderedExecutions(); + + assertThat(executions.size(), is(1)); + assertHasRole(executions.get(0), cluster, "noop2"); + assertEquals(executions.get(0).getNode().getId(), instanceId); + + assertAnyStatementContains(DryRun.INSTANCE, "noop2-" + getActionName()); + assertNoStatementContains(DryRun.INSTANCE, "noop1-" + getActionName(), "noop3-" + getActionName()); + } + + @Test + public void testFilterScriptExecutionByInstanceId() throws Exception { + String instanceId = getInstaceForRole(cluster, "noop3").getId(); + T action = newClusterActionInstance(EMPTYSET, newHashSet(instanceId)); + action.execute(clusterSpec, cluster); + + List<RunScriptOnNode> executions = DryRunModule.getDryRun() + .getTotallyOrderedExecutions(); + + assertThat(executions.size(), is(1)); + assertHasRole(executions.get(0), cluster, "noop3"); + assertEquals(executions.get(0).getNode().getId(), instanceId); + + assertAnyStatementContains(DryRun.INSTANCE, "noop1-" + getActionName(), "noop3-" + getActionName()); + } + + @Test + public void testFilterScriptExecutionByRoleAndInstanceId() throws Exception { + String instanceId = getInstaceForRole(cluster, "noop1").getId(); + T action = newClusterActionInstance(newHashSet("noop1"), newHashSet(instanceId)); + action.execute(clusterSpec, cluster); + + List<RunScriptOnNode> executions = DryRunModule.getDryRun() + .getTotallyOrderedExecutions(); + + assertThat(executions.size(), is(1)); + assertHasRole(executions.get(0), cluster, "noop1"); + assertEquals(executions.get(0).getNode().getId(), instanceId); + + assertAnyStatementContains(DryRun.INSTANCE, "noop1-" + getActionName()); + assertNoStatementContains(DryRun.INSTANCE, "noop2-" + getActionName(), "noop3-" + getActionName()); + } + + @Test + public void testNoScriptExecutionsForNoop() throws Exception { + T action = newClusterActionInstance(ImmutableSet.of("noop"), EMPTYSET); + action.execute(clusterSpec, cluster); + + List<RunScriptOnNode> executions = DryRunModule.getDryRun() + .getTotallyOrderedExecutions(); + + // empty because noop does not emit any statements + assertThat(executions.size(), is(0)); + } + + private void assertHasRole(final RunScriptOnNode node, Cluster cluster, String... roles) { + Cluster.Instance instance = getInstanceForNode(node, cluster); + for (String role : roles) { + assertTrue(instance.getRoles().contains(role)); + } + } + + private void assertAnyStatementContains(DryRun dryRun, String... values) { + Set<String> toCheck = newHashSet(values); + for (RunScriptOnNode node : dryRun.getTotallyOrderedExecutions()) { + String statement = node.getStatement().render(OsFamily.UNIX); + for (String term : ImmutableSet.copyOf(toCheck)) { + if (statement.contains(term)) { + toCheck.remove(term); + } + } + } + assertTrue("Unable to find the following terms in any statement: " + + toCheck.toString(), toCheck.size() == 0); + } + + private void assertNoStatementContains(DryRun dryRun, String... values) { + Set<String> foundTerms = newHashSet(); + for (RunScriptOnNode node : dryRun.getTotallyOrderedExecutions()) { + String statement = node.getStatement().render(OsFamily.UNIX); + for (String term : values) { + if (statement.contains(term)) { + foundTerms.add(term); + } + } + } + assertTrue("Some terms are present in statements: " + + foundTerms, foundTerms.size() == 0); + } + + private Cluster.Instance getInstaceForRole(Cluster cluster, final String role) { + return Iterables.find(cluster.getInstances(), + new Predicate<Cluster.Instance>() { + @Override + public boolean apply(Cluster.Instance instance) { + return instance.getRoles().contains(role); + } + }); + } + + private Cluster.Instance getInstanceForNode(final RunScriptOnNode node, Cluster cluster) { + return Iterables.find(cluster.getInstances(), + new Predicate<Cluster.Instance>() { + @Override + public boolean apply(Cluster.Instance input) { + return input.getId().equals(node.getNode().getId()); + } + }); + } + + private T newClusterActionInstance(Set<String> targetRoles, Set<String> targetInstanceIds) { + return newClusterActionInstance(ComputeCache.INSTANCE, HANDLERMAP, targetRoles, targetInstanceIds); + } + + public abstract T newClusterActionInstance( + Function<ClusterSpec, ComputeServiceContext> getCompute, + Map<String, ClusterActionHandler> handlerMap, + Set<String> targetRoles, + Set<String> targetInstanceIds + ); + + public abstract String getActionName(); +} Added: whirr/trunk/core/src/test/java/org/apache/whirr/actions/StartServicesActionTest.java URL: http://svn.apache.org/viewvc/whirr/trunk/core/src/test/java/org/apache/whirr/actions/StartServicesActionTest.java?rev=1235735&view=auto ============================================================================== --- whirr/trunk/core/src/test/java/org/apache/whirr/actions/StartServicesActionTest.java (added) +++ whirr/trunk/core/src/test/java/org/apache/whirr/actions/StartServicesActionTest.java Wed Jan 25 13:22:35 2012 @@ -0,0 +1,43 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.whirr.actions; + +import com.google.common.base.Function; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.service.ClusterActionHandler; +import org.jclouds.compute.ComputeServiceContext; + +import java.util.Map; +import java.util.Set; + +public class StartServicesActionTest extends ScriptBasedClusterActionTest<StartServicesAction> { + + @Override + public String getActionName() { + return ClusterActionHandler.START_ACTION; + } + + @Override + public StartServicesAction newClusterActionInstance( + Function<ClusterSpec, ComputeServiceContext> getCompute, Map<String, ClusterActionHandler> handlerMap, + Set<String> targetRoles, Set<String> targetInstanceIds + ) { + return new StartServicesAction(getCompute, handlerMap, targetRoles, targetInstanceIds); + } +} Added: whirr/trunk/core/src/test/java/org/apache/whirr/actions/StopServicesActionTest.java URL: http://svn.apache.org/viewvc/whirr/trunk/core/src/test/java/org/apache/whirr/actions/StopServicesActionTest.java?rev=1235735&view=auto ============================================================================== --- whirr/trunk/core/src/test/java/org/apache/whirr/actions/StopServicesActionTest.java (added) +++ whirr/trunk/core/src/test/java/org/apache/whirr/actions/StopServicesActionTest.java Wed Jan 25 13:22:35 2012 @@ -0,0 +1,44 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.whirr.actions; + +import com.google.common.base.Function; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.service.ClusterActionHandler; +import org.jclouds.compute.ComputeServiceContext; + +import java.util.Map; +import java.util.Set; + +public class StopServicesActionTest extends ScriptBasedClusterActionTest<StopServicesAction> { + + @Override + public String getActionName() { + return ClusterActionHandler.STOP_ACTION; + } + + @Override + public StopServicesAction newClusterActionInstance( + Function<ClusterSpec, ComputeServiceContext> getCompute, Map<String, ClusterActionHandler> handlerMap, + Set<String> targetRoles, Set<String> targetInstanceIds + ) { + return new StopServicesAction(getCompute, handlerMap, targetRoles, targetInstanceIds); + } + +} Modified: whirr/trunk/core/src/test/java/org/apache/whirr/service/DryRunModuleTest.java URL: http://svn.apache.org/viewvc/whirr/trunk/core/src/test/java/org/apache/whirr/service/DryRunModuleTest.java?rev=1235735&r1=1235734&r2=1235735&view=diff ============================================================================== --- whirr/trunk/core/src/test/java/org/apache/whirr/service/DryRunModuleTest.java (original) +++ whirr/trunk/core/src/test/java/org/apache/whirr/service/DryRunModuleTest.java Wed Jan 25 13:22:35 2012 @@ -18,19 +18,10 @@ package org.apache.whirr.service; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertSame; -import static junit.framework.Assert.assertTrue; -import static org.jclouds.scriptbuilder.domain.Statements.exec; - -import java.io.IOException; -import java.util.Collection; -import java.util.List; -import java.util.Map.Entry; -import java.util.Stack; - import com.google.common.collect.ImmutableList; +import com.google.common.collect.ListMultimap; import com.google.common.collect.Lists; +import com.jcraft.jsch.JSchException; import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.ConfigurationException; import org.apache.whirr.ClusterController; @@ -43,8 +34,16 @@ import org.jclouds.scriptbuilder.InitBui import org.junit.Before; import org.junit.Test; -import com.google.common.collect.ListMultimap; -import com.jcraft.jsch.JSchException; +import java.io.IOException; +import java.util.Collection; +import java.util.List; +import java.util.Map.Entry; +import java.util.Stack; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertSame; +import static junit.framework.Assert.assertTrue; +import static org.jclouds.scriptbuilder.domain.Statements.exec; public class DryRunModuleTest { @@ -58,17 +57,27 @@ public class DryRunModuleTest { @Override public void beforeConfigure(ClusterActionEvent event) { - addStatement(event, exec("echo 1")); + addStatement(event, exec("echo noop2-configure")); } @Override public void beforeStart(ClusterActionEvent event) { - addStatement(event, exec("echo 2")); + addStatement(event, exec("echo noop2-start")); + } + + @Override + public void beforeStop(ClusterActionEvent event) { + addStatement(event, exec("echo noop2-stop")); + } + + @Override + public void beforeCleanup(ClusterActionEvent event) { + addStatement(event, exec("echo noop2-cleanup")); } @Override public void beforeDestroy(ClusterActionEvent event) { - addStatement(event, exec("echo 3")); + addStatement(event, exec("echo noop2-destroy")); } } @@ -82,17 +91,27 @@ public class DryRunModuleTest { @Override public void beforeConfigure(ClusterActionEvent event) { - addStatement(event, exec("echo 1")); + addStatement(event, exec("echo noop3-configure")); } @Override public void beforeStart(ClusterActionEvent event) { - addStatement(event, exec("echo 2")); + addStatement(event, exec("echo noop3-start")); + } + + @Override + public void beforeStop(ClusterActionEvent event) { + addStatement(event, exec("echo noop3-stop")); + } + + @Override + public void beforeCleanup(ClusterActionEvent event) { + addStatement(event, exec("echo noop3-cleanup")); } @Override public void beforeDestroy(ClusterActionEvent event) { - addStatement(event, exec("echo 3")); + addStatement(event, exec("echo noop3-destroy")); } } Modified: whirr/trunk/core/src/test/resources/META-INF/services/org.apache.whirr.service.ClusterActionHandler URL: http://svn.apache.org/viewvc/whirr/trunk/core/src/test/resources/META-INF/services/org.apache.whirr.service.ClusterActionHandler?rev=1235735&r1=1235734&r2=1235735&view=diff ============================================================================== --- whirr/trunk/core/src/test/resources/META-INF/services/org.apache.whirr.service.ClusterActionHandler (original) +++ whirr/trunk/core/src/test/resources/META-INF/services/org.apache.whirr.service.ClusterActionHandler Wed Jan 25 13:22:35 2012 @@ -10,6 +10,7 @@ # See the License for the specific language governing permissions and # limitations under the License. org.apache.whirr.service.NoopClusterActionHandler +org.apache.whirr.actions.ScriptBasedClusterActionTest$Noop1ClusterActionHandler org.apache.whirr.service.DryRunModuleTest$Noop2ClusterActionHandler org.apache.whirr.service.DryRunModuleTest$Noop3ClusterActionHandler org.apache.whirr.actions.integration.PhaseExecutionBarrierTest$PhaseBarrierTestActionHandler \ No newline at end of file
