package com.intrbiz.bergamot.result; import static org.junit.Assert.*; import java.sql.Timestamp; import java.util.UUID; import org.junit.Test; import com.intrbiz.bergamot.model.Host; import com.intrbiz.bergamot.model.RealCheck; import com.intrbiz.bergamot.model.Status; import com.intrbiz.bergamot.model.message.result.ActiveResultMO; import com.intrbiz.bergamot.model.message.result.ResultMO; import com.intrbiz.bergamot.model.state.CheckState; import com.intrbiz.bergamot.result.DefaultResultProcessor; public class DefaultResultProcessorTests extends DefaultResultProcessor { private CheckState newState(Status status, boolean hard, int attempt, boolean transitioning, Status lastStatus, boolean lastHard) { CheckState state = new CheckState(); state.setCheckId(UUID.randomUUID()); state.setStatus(status); state.setOk(status.isOk()); state.setOutput(status.toString().toLowerCase()); state.setHard(hard); state.setAttempt(attempt); state.setTransitioning(transitioning); state.setLastHardOk(lastStatus.isOk()); state.setLastHardStatus(lastStatus); state.setLastHardOutput(lastStatus.toString().toLowerCase()); state.setLastHardOk(lastHard); state.setLastStateChange(new Timestamp(System.currentTimeMillis())); return state; } private ResultMO newResult(boolean ok, String status, String output) { ResultMO resultMO = new ActiveResultMO(); resultMO.setOk(ok); resultMO.setStatus(status); resultMO.setOutput(output); return resultMO; } private RealCheck<?, ?> newCheck(int alertThreshold, int recoveryThreshold) { Host h = new Host(); h.setAlertAttemptThreshold(alertThreshold); h.setRecoveryAttemptThreshold(recoveryThreshold); return h; } @Test public void testSimpleBadTransition() { RealCheck<?,?> check = newCheck(2, 2); CheckState state = newState(Status.OK, true, 2, false, Status.PENDING, true); // the transition Transition transition; // apply a bad result transition = this.computeResultTransition(check, state, newResult(false, "CRITICAL", "critical")); assertTrue("Is a state change", transition.stateChange == true); assertTrue("Is not a hard change", transition.hardChange == false); assertTrue("Is not an alert", transition.alert == false); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is not ok", transition.nextState.isOk() == false); assertTrue("Next state is critical", transition.nextState.getStatus() == Status.CRITICAL); assertTrue("Next state attempt is 1", transition.nextState.getAttempt() == 1); assertTrue("Next state is not hard", transition.nextState.isHard() == false); assertTrue("Next state is transitioning", transition.nextState.isTransitioning() == true); assertTrue("Next state last hard ok copied", transition.previousState.isOk() == transition.nextState.isLastHardOk()); assertTrue("Next state last hard status copied", transition.previousState.getStatus() == transition.nextState.getLastHardStatus()); state = transition.nextState; // apply a second bad result transition = this.computeResultTransition(check, state, newResult(false, "CRITICAL", "critical")); assertTrue("Is not a state change", transition.stateChange == false); assertTrue("Is a hard change", transition.hardChange == true); assertTrue("Is an alert", transition.alert == true); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is not ok", transition.nextState.isOk() == false); assertTrue("Next state is critical", transition.nextState.getStatus() == Status.CRITICAL); assertTrue("Next state attempt is 2", transition.nextState.getAttempt() == 2); assertTrue("Next state is hard", transition.nextState.isHard() == true); assertTrue("Next state is no transitioning", transition.nextState.isTransitioning() == false); } @Test public void testSimpleGoodTransition() { RealCheck<?,?> check = newCheck(2, 2); CheckState state = newState(Status.CRITICAL, true, 2, false, Status.OK, true); // the transition Transition transition; // apply a good result transition = this.computeResultTransition(check, state, newResult(true, "OK", "ok")); assertTrue("Is a state change", transition.stateChange == true); assertTrue("Is not a hard change", transition.hardChange == false); assertTrue("Is not an alert", transition.alert == false); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is ok", transition.nextState.isOk() == true); assertTrue("Next state is ok", transition.nextState.getStatus() == Status.OK); assertTrue("Next state attempt is 1", transition.nextState.getAttempt() == 1); assertTrue("Next state is not hard", transition.nextState.isHard() == false); assertTrue("Next state is transitioning", transition.nextState.isTransitioning() == true); assertTrue("Next state last hard ok copied", transition.previousState.isOk() == transition.nextState.isLastHardOk()); assertTrue("Next state last hard status copied", transition.previousState.getStatus() == transition.nextState.getLastHardStatus()); state = transition.nextState; // apply a second good result transition = this.computeResultTransition(check, state, newResult(false, "OK", "ok")); assertTrue("Is not a state change", transition.stateChange == false); assertTrue("Is a hard change", transition.hardChange == true); assertTrue("Is an alert", transition.alert == false); assertTrue("Is a recovery", transition.recovery == true); assertTrue("Next state is ok", transition.nextState.isOk() == true); assertTrue("Next state is ok", transition.nextState.getStatus() == Status.OK); assertTrue("Next state attempt is 2", transition.nextState.getAttempt() == 2); assertTrue("Next state is hard", transition.nextState.isHard() == true); assertTrue("Next state is no transitioning", transition.nextState.isTransitioning() == false); } @Test public void testFlappingBadTransition() { RealCheck<?,?> check = newCheck(2, 2); CheckState state = newState(Status.OK, true, 2, false, Status.PENDING, true); // the transition Transition transition; // apply a bad result transition = this.computeResultTransition(check, state, newResult(false, "CRITICAL", "critical")); assertTrue("Is a state change", transition.stateChange == true); assertTrue("Is not a hard change", transition.hardChange == false); assertTrue("Is not an alert", transition.alert == false); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is not ok", transition.nextState.isOk() == false); assertTrue("Next state is critical", transition.nextState.getStatus() == Status.CRITICAL); assertTrue("Next state attempt is 1", transition.nextState.getAttempt() == 1); assertTrue("Next state is not hard", transition.nextState.isHard() == false); assertTrue("Next state is transitioning", transition.nextState.isTransitioning() == true); assertTrue("Next state last hard ok copied", transition.previousState.isOk() == transition.nextState.isLastHardOk()); assertTrue("Next state last hard status copied", transition.previousState.getStatus() == transition.nextState.getLastHardStatus()); state = transition.nextState; // apply a good result transition = this.computeResultTransition(check, state, newResult(true, "OK", "ok")); assertTrue("Is a state change", transition.stateChange == true); assertTrue("Is not a hard change", transition.hardChange == false); assertTrue("Is not an alert", transition.alert == false); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is ok", transition.nextState.isOk() == true); assertTrue("Next state is ok", transition.nextState.getStatus() == Status.OK); assertTrue("Next state attempt is 1", transition.nextState.getAttempt() == 1); assertTrue("Next state is not hard", transition.nextState.isHard() == false); assertTrue("Next state is transitioning", transition.nextState.isTransitioning() == true); state = transition.nextState; // apply a bad result transition = this.computeResultTransition(check, state, newResult(false, "CRITICAL", "critical")); assertTrue("Is a state change", transition.stateChange == true); assertTrue("Is not a hard change", transition.hardChange == false); assertTrue("Is not an alert", transition.alert == false); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is not ok", transition.nextState.isOk() == false); assertTrue("Next state is critical", transition.nextState.getStatus() == Status.CRITICAL); assertTrue("Next state attempt is 1", transition.nextState.getAttempt() == 1); assertTrue("Next state is not hard", transition.nextState.isHard() == false); assertTrue("Next state is transitioning", transition.nextState.isTransitioning() == true); state = transition.nextState; // apply a second bad result transition = this.computeResultTransition(check, state, newResult(false, "CRITICAL", "critical")); assertTrue("Is not a state change", transition.stateChange == false); assertTrue("Is a hard change", transition.hardChange == true); assertTrue("Is an alert", transition.alert == true); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is not ok", transition.nextState.isOk() == false); assertTrue("Next state is critical", transition.nextState.getStatus() == Status.CRITICAL); assertTrue("Next state attempt is 2", transition.nextState.getAttempt() == 2); assertTrue("Next state is hard", transition.nextState.isHard() == true); assertTrue("Next state is no transitioning", transition.nextState.isTransitioning() == false); } @Test public void testFlappingGoodTransition() { RealCheck<?,?> check = newCheck(2, 2); CheckState state = newState(Status.CRITICAL, true, 2, false, Status.OK, true); // the transition Transition transition; // apply a good result transition = this.computeResultTransition(check, state, newResult(true, "OK", "ok")); assertTrue("Is a state change", transition.stateChange == true); assertTrue("Is not a hard change", transition.hardChange == false); assertTrue("Is not an alert", transition.alert == false); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is ok", transition.nextState.isOk() == true); assertTrue("Next state is ok", transition.nextState.getStatus() == Status.OK); assertTrue("Next state attempt is 1", transition.nextState.getAttempt() == 1); assertTrue("Next state is not hard", transition.nextState.isHard() == false); assertTrue("Next state is transitioning", transition.nextState.isTransitioning() == true); assertTrue("Next state last hard ok copied", transition.previousState.isOk() == transition.nextState.isLastHardOk()); assertTrue("Next state last hard status copied", transition.previousState.getStatus() == transition.nextState.getLastHardStatus()); state = transition.nextState; // apply a bad result transition = this.computeResultTransition(check, state, newResult(false, "CRITICAL", "critical")); assertTrue("Is a state change", transition.stateChange == true); assertTrue("Is not a hard change", transition.hardChange == false); assertTrue("Is not an alert", transition.alert == false); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is not ok", transition.nextState.isOk() == false); assertTrue("Next state is critical", transition.nextState.getStatus() == Status.CRITICAL); assertTrue("Next state attempt is 1", transition.nextState.getAttempt() == 1); assertTrue("Next state is not hard", transition.nextState.isHard() == false); assertTrue("Next state is transitioning", transition.nextState.isTransitioning() == true); state = transition.nextState; // apply a good result transition = this.computeResultTransition(check, state, newResult(true, "OK", "ok")); assertTrue("Is a state change", transition.stateChange == true); assertTrue("Is not a hard change", transition.hardChange == false); assertTrue("Is not an alert", transition.alert == false); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is ok", transition.nextState.isOk() == true); assertTrue("Next state is ok", transition.nextState.getStatus() == Status.OK); assertTrue("Next state attempt is 1", transition.nextState.getAttempt() == 1); assertTrue("Next state is not hard", transition.nextState.isHard() == false); assertTrue("Next state is transitioning", transition.nextState.isTransitioning() == true); state = transition.nextState; // apply a second good result transition = this.computeResultTransition(check, state, newResult(false, "OK", "ok")); assertTrue("Is not a state change", transition.stateChange == false); assertTrue("Is a hard change", transition.hardChange == true); assertTrue("Is an alert", transition.alert == false); assertTrue("Is a recovery", transition.recovery == true); assertTrue("Next state is ok", transition.nextState.isOk() == true); assertTrue("Next state is ok", transition.nextState.getStatus() == Status.OK); assertTrue("Next state attempt is 2", transition.nextState.getAttempt() == 2); assertTrue("Next state is hard", transition.nextState.isHard() == true); assertTrue("Next state is no transitioning", transition.nextState.isTransitioning() == false); } @Test public void testStagedBadTransition() { RealCheck<?,?> check = newCheck(3, 3); CheckState state = newState(Status.OK, true, 2, false, Status.PENDING, true); // the transition Transition transition; // apply a bad result transition = this.computeResultTransition(check, state, newResult(false, "WARNING", "warning")); assertTrue("Is a state change", transition.stateChange == true); assertTrue("Is not a hard change", transition.hardChange == false); assertTrue("Is not an alert", transition.alert == false); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is not ok", transition.nextState.isOk() == false); assertTrue("Next state is warning", transition.nextState.getStatus() == Status.WARNING); assertTrue("Next state attempt is 1", transition.nextState.getAttempt() == 1); assertTrue("Next state is not hard", transition.nextState.isHard() == false); assertTrue("Next state is transitioning", transition.nextState.isTransitioning() == true); assertTrue("Next state last hard ok copied", transition.previousState.isOk() == transition.nextState.isLastHardOk()); assertTrue("Next state last hard status copied", transition.previousState.getStatus() == transition.nextState.getLastHardStatus()); state = transition.nextState; // apply a second bad result transition = this.computeResultTransition(check, state, newResult(false, "WARNING", "warning")); assertTrue("Is not a state change", transition.stateChange == false); assertTrue("Is not a hard change", transition.hardChange == false); assertTrue("Is not an alert", transition.alert == false); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is not ok", transition.nextState.isOk() == false); assertTrue("Next state is warning", transition.nextState.getStatus() == Status.WARNING); assertTrue("Next state attempt is 2", transition.nextState.getAttempt() == 2); assertTrue("Next state is not hard", transition.nextState.isHard() == false); assertTrue("Next state is transitioning", transition.nextState.isTransitioning() == true); state = transition.nextState; // apply a final bad result transition = this.computeResultTransition(check, state, newResult(false, "CRITICAL", "critical")); assertTrue("Is not a state change", transition.stateChange == false); assertTrue("Is a hard change", transition.hardChange == true); assertTrue("Is an alert", transition.alert == true); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is not ok", transition.nextState.isOk() == false); assertTrue("Next state is critical", transition.nextState.getStatus() == Status.CRITICAL); assertTrue("Next state attempt is 3", transition.nextState.getAttempt() == 3); assertTrue("Next state is hard", transition.nextState.isHard() == true); assertTrue("Next state is no transitioning", transition.nextState.isTransitioning() == false); } @Test public void testSimpleCombinedTransition() { RealCheck<?,?> check = newCheck(2, 2); CheckState state = newState(Status.OK, true, 2, false, Status.PENDING, true); // the transition Transition transition; // apply a bad result transition = this.computeResultTransition(check, state, newResult(false, "CRITICAL", "critical")); assertTrue("Is a state change", transition.stateChange == true); assertTrue("Is not a hard change", transition.hardChange == false); assertTrue("Is not an alert", transition.alert == false); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is not ok", transition.nextState.isOk() == false); assertTrue("Next state is critical", transition.nextState.getStatus() == Status.CRITICAL); assertTrue("Next state attempt is 1", transition.nextState.getAttempt() == 1); assertTrue("Next state is not hard", transition.nextState.isHard() == false); assertTrue("Next state is transitioning", transition.nextState.isTransitioning() == true); assertTrue("Next state last hard ok copied", transition.previousState.isOk() == transition.nextState.isLastHardOk()); assertTrue("Next state last hard status copied", transition.previousState.getStatus() == transition.nextState.getLastHardStatus()); state = transition.nextState; // apply a second bad result transition = this.computeResultTransition(check, state, newResult(false, "CRITICAL", "critical")); assertTrue("Is not a state change", transition.stateChange == false); assertTrue("Is a hard change", transition.hardChange == true); assertTrue("Is an alert", transition.alert == true); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is not ok", transition.nextState.isOk() == false); assertTrue("Next state is critical", transition.nextState.getStatus() == Status.CRITICAL); assertTrue("Next state attempt is 2", transition.nextState.getAttempt() == 2); assertTrue("Next state is hard", transition.nextState.isHard() == true); assertTrue("Next state is no transitioning", transition.nextState.isTransitioning() == false); state = transition.nextState; // apply a good result transition = this.computeResultTransition(check, state, newResult(true, "OK", "ok")); assertTrue("Is a state change", transition.stateChange == true); assertTrue("Is not a hard change", transition.hardChange == false); assertTrue("Is not an alert", transition.alert == false); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is ok", transition.nextState.isOk() == true); assertTrue("Next state is ok", transition.nextState.getStatus() == Status.OK); assertTrue("Next state attempt is 1", transition.nextState.getAttempt() == 1); assertTrue("Next state is not hard", transition.nextState.isHard() == false); assertTrue("Next state is transitioning", transition.nextState.isTransitioning() == true); assertTrue("Next state last hard ok copied", transition.previousState.isOk() == transition.nextState.isLastHardOk()); assertTrue("Next state last hard status copied", transition.previousState.getStatus() == transition.nextState.getLastHardStatus()); state = transition.nextState; // apply a second good result transition = this.computeResultTransition(check, state, newResult(false, "OK", "ok")); assertTrue("Is not a state change", transition.stateChange == false); assertTrue("Is a hard change", transition.hardChange == true); assertTrue("Is an alert", transition.alert == false); assertTrue("Is a recovery", transition.recovery == true); assertTrue("Next state is ok", transition.nextState.isOk() == true); assertTrue("Next state is ok", transition.nextState.getStatus() == Status.OK); assertTrue("Next state attempt is 2", transition.nextState.getAttempt() == 2); assertTrue("Next state is hard", transition.nextState.isHard() == true); assertTrue("Next state is no transitioning", transition.nextState.isTransitioning() == false); } @Test public void testImmediateBadTransition() { RealCheck<?,?> check = newCheck(1, 1); CheckState state = newState(Status.OK, true, 2, false, Status.PENDING, true); // the transition Transition transition; // apply a bad result transition = this.computeResultTransition(check, state, newResult(false, "CRITICAL", "critical")); assertTrue("Is a state change", transition.stateChange == true); assertTrue("Is a hard change", transition.hardChange == true); assertTrue("Is an alert", transition.alert == true); assertTrue("Is not a recovery", transition.recovery == false); assertTrue("Next state is not ok", transition.nextState.isOk() == false); assertTrue("Next state is critical", transition.nextState.getStatus() == Status.CRITICAL); assertTrue("Next state attempt is 1", transition.nextState.getAttempt() == 1); assertTrue("Next state is hard", transition.nextState.isHard() == true); assertTrue("Next state is no transitioning", transition.nextState.isTransitioning() == false); assertTrue("Next state last hard ok copied", transition.previousState.isOk() == transition.nextState.isLastHardOk()); assertTrue("Next state last hard status copied", transition.previousState.getStatus() == transition.nextState.getLastHardStatus()); } @Test public void testImmediateGoodTransition() { RealCheck<?,?> check = newCheck(1, 1); CheckState state = newState(Status.CRITICAL, true, 2, false, Status.OK, true); // the transition Transition transition; // apply a good result transition = this.computeResultTransition(check, state, newResult(false, "OK", "ok")); assertTrue("Is a state change", transition.stateChange == true); assertTrue("Is a hard change", transition.hardChange == true); assertTrue("Is an alert", transition.alert == false); assertTrue("Is a recovery", transition.recovery == true); assertTrue("Next state is ok", transition.nextState.isOk() == true); assertTrue("Next state is ok", transition.nextState.getStatus() == Status.OK); assertTrue("Next state attempt is 1", transition.nextState.getAttempt() == 1); assertTrue("Next state is hard", transition.nextState.isHard() == true); assertTrue("Next state is no transitioning", transition.nextState.isTransitioning() == false); assertTrue("Next state last hard ok copied", transition.previousState.isOk() == transition.nextState.isLastHardOk()); assertTrue("Next state last hard status copied", transition.previousState.getStatus() == transition.nextState.getLastHardStatus()); } }