package org.wahlzeit.services; import org.junit.ClassRule; import org.junit.Test; import org.junit.rules.RuleChain; import org.wahlzeit.model.CaseId; import org.wahlzeit.testEnvironmentProvider.LocalDatastoreServiceTestConfigProvider; import org.wahlzeit.testEnvironmentProvider.RegisteredOfyEnvironmentProvider; import org.wahlzeit.testEnvironmentProvider.SysConfigProvider; import org.wahlzeit.testEnvironmentProvider.UserServiceProvider; import org.wahlzeit.testEnvironmentProvider.UserSessionProvider; import java.io.PrintWriter; import java.io.StringWriter; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.wahlzeit.services.LogBuilder.ACTION; import static org.wahlzeit.services.LogBuilder.CLIENT; import static org.wahlzeit.services.LogBuilder.EXCEPTION_REASON; import static org.wahlzeit.services.LogBuilder.INFO_SEPARATOR; import static org.wahlzeit.services.LogBuilder.LEVEL; import static org.wahlzeit.services.LogBuilder.NAME_VALUE_SEPARATOR; import static org.wahlzeit.services.LogBuilder.SESSION; import static org.wahlzeit.services.LogBuilder.STACKTRACE; import static org.wahlzeit.services.LogBuilder.SYSTEM_LEVEL; import static org.wahlzeit.services.LogBuilder.USER_LEVEL; /** * Test class for {@link LogBuilder}. * * @review */ public class LogBuilderTest { @ClassRule public static RuleChain ruleChain = RuleChain. outerRule(new LocalDatastoreServiceTestConfigProvider()). around(new RegisteredOfyEnvironmentProvider()). around(new SysConfigProvider()). around(new UserServiceProvider()). around(new UserSessionProvider()); @Test public void testCreateUserMessage() { String logMessage = LogBuilder.createUserMessage().toString(); assertNotNull(logMessage); assertEquals(getExpectedUserMessage(), logMessage); // make sure even when there is no thread local session that LogBuilder wont throw an exception Session session = SessionManager.getThreadLocalSession(); SessionManager.dropThreadLocalSession(); LogBuilder.createUserMessage().toString(); SessionManager.setThreadLocalSession(session); } protected String getExpectedUserMessage() { return LEVEL + NAME_VALUE_SEPARATOR + USER_LEVEL + INFO_SEPARATOR + SESSION + NAME_VALUE_SEPARATOR + UserSessionProvider.USER_SESSION_NAME + INFO_SEPARATOR + CLIENT + NAME_VALUE_SEPARATOR + SessionManager.getThreadLocalSession().getClientId(); } @Test public void testCreateSystemMessage() { String logMessage = LogBuilder.createSystemMessage().toString(); assertNotNull(logMessage); assertEquals(getExpectedSystemMessage(), logMessage); } protected String getExpectedSystemMessage() { return LEVEL + NAME_VALUE_SEPARATOR + SYSTEM_LEVEL + INFO_SEPARATOR + SESSION + NAME_VALUE_SEPARATOR + UserSessionProvider.USER_SESSION_NAME + INFO_SEPARATOR + CLIENT + NAME_VALUE_SEPARATOR + SessionManager.getThreadLocalSession().getClientId(); } @Test public void testAddParameterInt() { LogBuilder logBuilder = LogBuilder.createUserMessage().addParameter("Yoda", 1337); String logMessage = logBuilder.toString(); assertNotNull(logMessage); String expectedYodaMessage = INFO_SEPARATOR + "Yoda" + NAME_VALUE_SEPARATOR + "1337"; assertTrue(logMessage.contains(expectedYodaMessage)); logBuilder.addParameter(null, -1); logMessage = logBuilder.toString(); String expectedNullMessage = INFO_SEPARATOR + null + NAME_VALUE_SEPARATOR + "-1"; assertTrue(logMessage.contains(expectedYodaMessage + expectedNullMessage)); } @Test public void testAddParameterString() { LogBuilder logBuilder = LogBuilder.createUserMessage().addParameter("Yoda", "Frank Oz"); String logMessage = logBuilder.toString(); assertNotNull(logMessage); String expectedYodaMessage = INFO_SEPARATOR + "Yoda" + NAME_VALUE_SEPARATOR + "Frank Oz"; assertTrue(logMessage.contains(expectedYodaMessage)); logBuilder.addParameter("Han Solo", "42"); logMessage = logBuilder.toString(); String expectedHanMessage = INFO_SEPARATOR + "Han Solo" + NAME_VALUE_SEPARATOR + "42"; assertTrue(logMessage.contains(expectedYodaMessage + expectedHanMessage)); logBuilder.addParameter(null, null); logMessage = logBuilder.toString(); String expectedNullMessage = INFO_SEPARATOR + null + NAME_VALUE_SEPARATOR + null; assertTrue(logMessage.contains(expectedYodaMessage + expectedHanMessage + expectedNullMessage)); } @Test public void testAddParameterObject() { CaseId caseId1 = new CaseId(1108); LogBuilder logBuilder = LogBuilder.createUserMessage().addParameter("Didi", caseId1); String logMessage = logBuilder.toString(); assertNotNull(logMessage); String expectedDidiMessage = INFO_SEPARATOR + "Didi" + NAME_VALUE_SEPARATOR + "1108"; assertTrue(logMessage.contains(expectedDidiMessage)); CaseId caseId2 = new CaseId(512); logBuilder.addParameter("Elli", caseId2); logMessage = logBuilder.toString(); String expectedElliMessage = INFO_SEPARATOR + "Elli" + NAME_VALUE_SEPARATOR + "512"; assertTrue(logMessage.contains(expectedDidiMessage + expectedElliMessage)); logBuilder.addParameter(null, null); logMessage = logBuilder.toString(); String expectedNullMessage = INFO_SEPARATOR + null + NAME_VALUE_SEPARATOR + null; assertTrue(logMessage.contains(expectedDidiMessage + expectedElliMessage + expectedNullMessage)); } @Test public void testAddMessage() { LogBuilder logBuilder = LogBuilder.createSystemMessage().addMessage(""); String logMessage = logBuilder.toString(); String expectedLogMessage = getExpectedSystemMessage() + INFO_SEPARATOR; assertEquals(expectedLogMessage, logMessage); logBuilder.addMessage(null); expectedLogMessage = expectedLogMessage + INFO_SEPARATOR + null; logMessage = logBuilder.toString(); assertEquals(expectedLogMessage, logMessage); logBuilder.addMessage("Darth Vader, Yoda, Boba Fett, Han Solo"); expectedLogMessage = expectedLogMessage + INFO_SEPARATOR + "Darth Vader, Yoda, Boba Fett, Han Solo"; logMessage = logBuilder.toString(); assertEquals(expectedLogMessage, logMessage); } @Test public void testAddException() { Exception exception = new NullPointerException("sorry"); LogBuilder logBuilder = LogBuilder.createSystemMessage().addException("because I can", exception); String logMessage = logBuilder.toString(); StringWriter sw = new StringWriter(); exception.printStackTrace(new PrintWriter(sw)); String expectedLogMessage = getExpectedSystemMessage() + INFO_SEPARATOR + EXCEPTION_REASON + NAME_VALUE_SEPARATOR + "because I can" + INFO_SEPARATOR + STACKTRACE + NAME_VALUE_SEPARATOR + sw.toString(); assertEquals(expectedLogMessage, logMessage); } @Test public void testAddPerformedAction() { String action = "Build your own lightsaber"; LogBuilder logBuilder = LogBuilder.createUserMessage().addAction(action); String logMessage = logBuilder.toString(); String expectedLogMessage = getExpectedUserMessage() + INFO_SEPARATOR + ACTION + NAME_VALUE_SEPARATOR + action; assertEquals(expectedLogMessage, logMessage); logBuilder.addAction(null); logMessage = logBuilder.toString(); expectedLogMessage = expectedLogMessage + INFO_SEPARATOR + ACTION + NAME_VALUE_SEPARATOR + null; assertEquals(expectedLogMessage, logMessage); } }