package com.getsentry.raven.log4j2;
import mockit.Injectable;
import mockit.Mocked;
import mockit.NonStrictExpectations;
import mockit.Verifications;
import com.getsentry.raven.Raven;
import com.getsentry.raven.RavenFactory;
import com.getsentry.raven.dsn.Dsn;
import com.getsentry.raven.environment.RavenEnvironment;
import com.getsentry.raven.event.Event;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.impl.Log4jLogEvent;
import org.apache.logging.log4j.message.SimpleMessage;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
public class SentryAppenderFailuresTest {
private SentryAppender sentryAppender;
private MockUpErrorHandler mockUpErrorHandler;
@Injectable
private Raven mockRaven = null;
@SuppressWarnings("unused")
@Mocked("ravenInstance")
private RavenFactory mockRavenFactory = null;
@BeforeMethod
public void setUp() throws Exception {
sentryAppender = new SentryAppender(mockRaven);
mockUpErrorHandler = new MockUpErrorHandler();
sentryAppender.setHandler(mockUpErrorHandler.getMockInstance());
}
@Test
public void testRavenFailureDoesNotPropagate() throws Exception {
new NonStrictExpectations() {{
mockRaven.sendEvent((Event) any);
result = new UnsupportedOperationException();
}};
sentryAppender.append(new Log4jLogEvent(null, null, null, Level.INFO, new SimpleMessage(""), null));
assertThat(mockUpErrorHandler.getErrorCount(), is(1));
}
@Test
public void testRavenFactoryFailureDoesNotPropagate() throws Exception {
new NonStrictExpectations() {{
RavenFactory.ravenInstance((Dsn) any, anyString);
result = new UnsupportedOperationException();
}};
SentryAppender sentryAppender = new SentryAppender();
sentryAppender.setHandler(mockUpErrorHandler.getMockInstance());
sentryAppender.setDsn("protocol://public:private@host/1");
sentryAppender.initRaven();
assertThat(mockUpErrorHandler.getErrorCount(), is(1));
}
@Test
public void testAppendFailIfCurrentThreadSpawnedByRaven() throws Exception {
RavenEnvironment.startManagingThread();
try {
sentryAppender.append(new Log4jLogEvent(null, null, null, Level.INFO, new SimpleMessage(""), null));
new Verifications() {{
mockRaven.sendEvent((Event) any);
times = 0;
}};
assertThat(mockUpErrorHandler.getErrorCount(), is(0));
} finally {
RavenEnvironment.stopManagingThread();
}
}
}