package uk.gov.gds.performance.collector; import com.equalexperts.logging.OpsLogger; import com.equalexperts.logging.OpsLoggerTestDouble; import org.junit.Test; import org.mockito.Mockito; import static org.junit.Assert.fail; import static org.mockito.Mockito.*; public class ClassThatLogsTest { private final OpsLogger<CollectorLogMessages> mockLogger = OpsLoggerTestDouble.withSpyFunction(Mockito::spy); private final ClassThatLogs theClass = new ClassThatLogs(mockLogger); @Test public void foo_shouldLogASuccessMessage() throws Exception { theClass.foo(); verify(mockLogger).log(CollectorLogMessages.SUCCESS, 42); verifyNoMoreInteractions(mockLogger); } @Test public void bar_shouldLogAnUnknownErrorMessageAndThrowAnException() throws Exception { try { theClass.bar(); fail("expected an exception"); } catch (RuntimeException e) { verify(mockLogger).logThrowable(CollectorLogMessages.UNKNOWN_ERROR, e); } } @Test public void baz_shouldNotLogAnyMessages() throws Exception { theClass.baz(); verifyZeroInteractions(mockLogger); } @Test public void logContextsAcrossThreads_shouldCarryDiagnosticContextAcrossThreads() throws Exception { String jobId = theClass.logContextsAcrossThreads(); OpsLogger<CollectorLogMessages> nestedLogger = mockLogger.with(new ClassThatLogs.LocalContext(jobId)); verify(nestedLogger).log(CollectorLogMessages.SUCCESS, 1); verify(nestedLogger).log(CollectorLogMessages.SUCCESS, 2); verify(nestedLogger).log(CollectorLogMessages.SUCCESS, 3); verify(nestedLogger).log(CollectorLogMessages.SUCCESS, 4); verify(nestedLogger).log(CollectorLogMessages.SUCCESS, 5); verifyNoMoreInteractions(nestedLogger); nestedLogger = mockLogger.with(new ClassThatLogs.LocalContext("fred")); verify(nestedLogger).log(CollectorLogMessages.SUCCESS, 6); verify(nestedLogger).log(CollectorLogMessages.SUCCESS, 7); verify(nestedLogger).log(CollectorLogMessages.SUCCESS, 8); verify(nestedLogger).log(CollectorLogMessages.SUCCESS, 9); verify(nestedLogger).log(CollectorLogMessages.SUCCESS, 10); verifyNoMoreInteractions(nestedLogger); } }