package rocks.inspectit.server.alerting;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.testng.annotations.Test;
import rocks.inspectit.server.alerting.action.AlertingActionService;
import rocks.inspectit.server.alerting.state.AlertingState;
import rocks.inspectit.shared.all.testbase.TestBase;
/**
* Tests the {@link AlertingStateLifecycleManager}.
*
* @author Alexander Wert
* @author Marius Oehler
*
*/
@SuppressWarnings("PMD")
public class AlertingStateLifecycleManagerTest extends TestBase {
@InjectMocks
AlertingStateLifecycleManager lifecycleManager;
@Mock
Logger log;
@Mock
AlertingActionService alertingActionService;
/**
* Tests the {@link AlertingStateLifecycleManager#violation(AlertingState, double)} method.
*
* @author Alexander Wert
*
*/
public static class Violation extends AlertingStateLifecycleManagerTest {
@Test
public void alertStarted() {
double violationValue = 100D;
AlertingState alertingState = Mockito.mock(AlertingState.class);
when(alertingState.isAlertActive()).thenReturn(false);
lifecycleManager.violation(alertingState, violationValue);
verify(alertingState).isAlertActive();
verifyNoMoreInteractions(alertingState);
verify(alertingActionService).alertStarting(alertingState, violationValue);
verifyNoMoreInteractions(alertingActionService);
}
@Test
public void alertOngoing() {
double violationValue = 100D;
AlertingState alertingState = Mockito.mock(AlertingState.class);
when(alertingState.isAlertActive()).thenReturn(true);
lifecycleManager.violation(alertingState, violationValue);
verify(alertingState).isAlertActive();
verify(alertingState).setValidCount(0);
verifyNoMoreInteractions(alertingState);
verify(alertingActionService).alertOngoing(alertingState, violationValue);
verifyNoMoreInteractions(alertingActionService);
}
@Test
public void alertingStateNull() {
lifecycleManager.violation(null, 0);
verifyZeroInteractions(alertingActionService);
}
}
/**
* Tests the {@link AlertingStateLifecycleManager#valid(AlertingState)} method.
*
* @author Alexander Wert
* @author Marius Oehler
*
*/
public static class Valid extends AlertingStateLifecycleManagerTest {
@Test
public void noAlertActive() {
AlertingState alertingState = Mockito.mock(AlertingState.class);
when(alertingState.isAlertActive()).thenReturn(false);
lifecycleManager.valid(alertingState);
verify(alertingState).isAlertActive();
verifyNoMoreInteractions(alertingState);
verifyZeroInteractions(alertingActionService);
}
@Test
public void alertActiveNoReset() {
AlertingState alertingState = Mockito.mock(AlertingState.class);
when(alertingState.isAlertActive()).thenReturn(true);
when(alertingState.getValidCount()).thenReturn(1);
lifecycleManager.thresholdResetCount = 2;
lifecycleManager.valid(alertingState);
verify(alertingState).isAlertActive();
verify(alertingState).getValidCount();
verify(alertingState).setValidCount(2);
verifyNoMoreInteractions(alertingState);
verifyZeroInteractions(alertingActionService);
}
@Test
public void resetActiveAlert() {
AlertingState alertingState = Mockito.mock(AlertingState.class);
when(alertingState.isAlertActive()).thenReturn(true);
when(alertingState.getValidCount()).thenReturn(2);
lifecycleManager.thresholdResetCount = 2;
lifecycleManager.valid(alertingState);
verify(alertingState).isAlertActive();
verify(alertingState).getValidCount();
verifyNoMoreInteractions(alertingState);
verify(alertingActionService).alertEnding(alertingState);
verifyNoMoreInteractions(alertingActionService);
}
@Test
public void alertingStateNull() {
lifecycleManager.valid(null);
verifyZeroInteractions(alertingActionService);
}
}
/**
* Tests the {@link AlertingStateLifecycleManager#noData(AlertingState)} method.
*
* @author Alexander Wert
*
*/
public static class NoData extends AlertingStateLifecycleManagerTest {
@Test
public void noAlertActive() {
AlertingState alertingState = Mockito.mock(AlertingState.class);
when(alertingState.isAlertActive()).thenReturn(false);
lifecycleManager.noData(alertingState);
verifyZeroInteractions(alertingActionService);
verify(alertingState, times(2)).isAlertActive();
verifyNoMoreInteractions(alertingState);
}
@Test
public void noAlertActiveCountPositive() {
AlertingState alertingState = Mockito.mock(AlertingState.class);
when(alertingState.isAlertActive()).thenReturn(false);
when(alertingState.getValidCount()).thenReturn(10);
lifecycleManager.noData(alertingState);
verifyZeroInteractions(alertingActionService);
verify(alertingState, times(2)).isAlertActive();
verifyNoMoreInteractions(alertingState);
}
@Test
public void alertActiveContinuousViolation() {
AlertingState alertingState = Mockito.mock(AlertingState.class);
when(alertingState.isAlertActive()).thenReturn(true);
when(alertingState.getValidCount()).thenReturn(0);
lifecycleManager.thresholdResetCount = 0;
lifecycleManager.noData(alertingState);
verify(alertingActionService, times(1)).alertOngoing(alertingState, Double.NaN);
verifyNoMoreInteractions(alertingActionService);
verify(alertingState, times(2)).isAlertActive();
verify(alertingState).setValidCount(0);
verify(alertingState).getValidCount();
verifyNoMoreInteractions(alertingState);
}
@Test
public void alertActiveDataWasValid() {
AlertingState alertingState = Mockito.mock(AlertingState.class);
when(alertingState.isAlertActive()).thenReturn(true);
when(alertingState.getValidCount()).thenReturn(1);
lifecycleManager.thresholdResetCount = 2;
lifecycleManager.noData(alertingState);
verify(alertingState, times(2)).isAlertActive();
verify(alertingState, times(2)).getValidCount();
verify(alertingState).setValidCount(2);
verifyNoMoreInteractions(alertingState);
verifyZeroInteractions(alertingActionService);
}
@Test
public void resetActiveAlert() {
AlertingState alertingState = Mockito.mock(AlertingState.class);
when(alertingState.isAlertActive()).thenReturn(true);
when(alertingState.getValidCount()).thenReturn(1);
lifecycleManager.thresholdResetCount = 0;
lifecycleManager.noData(alertingState);
verify(alertingState, times(2)).isAlertActive();
verify(alertingState, times(2)).getValidCount();
verifyNoMoreInteractions(alertingState);
verify(alertingActionService).alertEnding(alertingState);
verifyNoMoreInteractions(alertingActionService);
}
@Test
public void alertingStateNull() {
lifecycleManager.noData(null);
verifyZeroInteractions(alertingActionService);
}
}
}