package org.stagemonitor.core; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.slf4j.Logger; import org.stagemonitor.configuration.ConfigurationRegistry; import java.util.Arrays; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class StagemonitorTest { private static ConfigurationRegistry originalConfiguration; private ConfigurationRegistry configuration = mock(ConfigurationRegistry.class); private CorePlugin corePlugin = mock(CorePlugin.class); private Logger logger = mock(Logger.class); @BeforeClass public static void beforeClass() { originalConfiguration = Stagemonitor.getConfiguration(); } @AfterClass public static void afterClass() { Stagemonitor.setConfiguration(originalConfiguration); Stagemonitor.reset(); } @Before public void before() { when(configuration.getConfig(CorePlugin.class)).thenReturn(corePlugin); Stagemonitor.reset(); Stagemonitor.setConfiguration(configuration); Stagemonitor.setLogger(logger); assertFalse(Stagemonitor.isStarted()); } @After public void after() { Stagemonitor.reset(); } @Test public void testStartMonitoring() throws Exception { when(corePlugin.isStagemonitorActive()).thenReturn(true); Stagemonitor.setConfiguration(configuration); Stagemonitor.reset(); final MeasurementSession measurementSession = new MeasurementSession("StagemonitorTest", "testHost", "testInstance"); Stagemonitor.startMonitoring(measurementSession); Stagemonitor.startMonitoring(new MeasurementSession("StagemonitorTest2", "testHost2", "testInstance2")); assertTrue(Stagemonitor.isStarted()); assertTrue(Stagemonitor.getMeasurementSession().isInitialized()); assertSame(measurementSession, Stagemonitor.getMeasurementSession()); verify(logger).info("Initializing plugin {}", "TestPlugin"); verify(logger).info("Initializing plugin {}", "TestExceptionPlugin"); } @Test public void testStartMonitoringNotActive() throws Exception { when(corePlugin.isStagemonitorActive()).thenReturn(false); final MeasurementSession measurementSession = new MeasurementSession("StagemonitorTest", "testHost", "testInstance"); Stagemonitor.startMonitoring(measurementSession); assertTrue(Stagemonitor.isDisabled()); assertFalse(Stagemonitor.isStarted()); assertFalse(Stagemonitor.getMeasurementSession().isInitialized()); verify(logger, times(0)).info("Initializing plugin {}", "TestPlugin"); verify(logger, times(0)).info("Initializing plugin {}", "TestExceptionPlugin"); } @Test public void testDisabledPlugin() throws Exception { when(corePlugin.isStagemonitorActive()).thenReturn(true); when(corePlugin.getDisabledPlugins()).thenReturn(Arrays.asList("TestExceptionPlugin")); Stagemonitor.startMonitoring(new MeasurementSession("StagemonitorTest", "testHost", "testInstance")); verify(logger).info("Initializing plugin {}", "TestPlugin"); verify(logger).info("Not initializing disabled plugin {}", "TestExceptionPlugin"); verify(logger, times(0)).info("Initializing plugin {}", "TestExceptionPlugin"); } @Test public void testNotInitialized() throws Exception { when(corePlugin.isStagemonitorActive()).thenReturn(true); final MeasurementSession measurementSession = new MeasurementSession(null, "testHost", "testInstance"); Stagemonitor.startMonitoring(measurementSession); assertFalse(Stagemonitor.isStarted()); } }