package io.airlift.airship.agent; import org.testng.annotations.Test; import static io.airlift.airship.shared.SlotLifecycleState.RUNNING; import static io.airlift.airship.shared.SlotLifecycleState.STOPPED; import static org.testng.Assert.assertEquals; public abstract class AbstractLifecycleManagerTest { protected LifecycleManager manager; protected Deployment appleDeployment; protected Deployment bananaDeployment; @Test public void testStateMachine() { // default state is stopped assertEquals(manager.status(appleDeployment), STOPPED); // stopped.start => running assertEquals(manager.start(appleDeployment), RUNNING); assertEquals(manager.status(appleDeployment), RUNNING); // running.start => running assertEquals(manager.start(appleDeployment), RUNNING); assertEquals(manager.status(appleDeployment), RUNNING); // running.stop => stopped assertEquals(manager.stop(appleDeployment), STOPPED); assertEquals(manager.status(appleDeployment), STOPPED); // stopped.stop => stopped assertEquals(manager.stop(appleDeployment), STOPPED); assertEquals(manager.status(appleDeployment), STOPPED); // stopped.restart => running assertEquals(manager.restart(appleDeployment), RUNNING); assertEquals(manager.status(appleDeployment), RUNNING); // running.restart => running assertEquals(manager.restart(appleDeployment), RUNNING); assertEquals(manager.status(appleDeployment), RUNNING); // running.kill => stopped assertEquals(manager.kill(appleDeployment), STOPPED); assertEquals(manager.status(appleDeployment), STOPPED); // stopped.kill => stopped assertEquals(manager.kill(appleDeployment), STOPPED); assertEquals(manager.status(appleDeployment), STOPPED); } @Test public void testIsolation() { // default state is stopped assertEquals(manager.status(appleDeployment), STOPPED); assertEquals(manager.status(bananaDeployment), STOPPED); // start 1 doesn't effect 2 assertEquals(manager.start(appleDeployment), RUNNING); assertEquals(manager.status(appleDeployment), RUNNING); assertEquals(manager.status(bananaDeployment), STOPPED); // now start 2 assertEquals(manager.start(bananaDeployment), RUNNING); assertEquals(manager.status(bananaDeployment), RUNNING); // stop 1 doesn't effect 2 assertEquals(manager.stop(appleDeployment), STOPPED); assertEquals(manager.status(appleDeployment), STOPPED); assertEquals(manager.status(bananaDeployment), RUNNING); // restart 2 doesn't effect 1 assertEquals(manager.restart(bananaDeployment), RUNNING); assertEquals(manager.status(bananaDeployment), RUNNING); assertEquals(manager.status(appleDeployment), STOPPED); // restart 1 doesn't effect 2 assertEquals(manager.restart(appleDeployment), RUNNING); assertEquals(manager.status(appleDeployment), RUNNING); assertEquals(manager.status(bananaDeployment), RUNNING); } }