/* * $Id$ * * Copyright 2006, The jCoderZ.org Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * Neither the name of the jCoderZ.org Project nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package org.jcoderz.commons; import java.util.Set; import java.util.logging.Level; import junit.framework.TestCase; /** * Test for LoggableImpl class. * * @author Andreas Mandel */ public class LoggableImplTest extends TestCase { private static final String TEST_INSTANCE_ID = "TEST_INSTANCE"; private static final String TEST_NODE = "TEST_NODE"; private static final long TEST_THREAD_ID = 12345L; private static final String TEST_THREAD_NAME = "THIS_IS_A_TEST_THREAD_123"; private static final String TEST_THREAD_NAME_CUT = "HREAD_123"; private static final String TEST_DUMMY_PARAMETER_NAME = "DUMMY"; private static final LogMessageInfo TEST_LOG_MESSAGE_INFO = new TestLogMessageInfo(); /** * Test for void LoggableImpl(LogMessageInfo, long, String, String). */ public final void testLoggableImplLogMessageInfolongStringString () { final LoggableImpl testObject = new LoggableImpl(null, TEST_LOG_MESSAGE_INFO, TEST_THREAD_ID, TEST_THREAD_NAME, TEST_INSTANCE_ID, TEST_NODE); assertEquals("Instance id getter changes value.", TEST_INSTANCE_ID, testObject.getInstanceId()); assertEquals("Instance id parameter changes value.", TEST_INSTANCE_ID, testObject.getParameter(LoggableImpl.INSTANCE_ID_PARAMETER_NAME) .get(0)); assertEquals("Node id getter changes value.", TEST_NODE, testObject .getNodeId()); assertEquals("Node id parameter changes value.", TEST_NODE, testObject .getParameter(LoggableImpl.NODE_ID_PARAMETER_NAME).get(0)); assertEquals("Thread id getter changes value.", TEST_THREAD_ID, testObject.getThreadId()); assertEquals("Thread name getter changes value.", TEST_THREAD_NAME, testObject.getThreadName()); assertEquals("Thread id parameter changes value.", new Long( TEST_THREAD_ID), testObject.getParameter( LoggableImpl.THREAD_ID_PARAMETER_NAME).get(0)); assertEquals("Symbol of testclass changed.", "FOO_SYMBOL", TEST_LOG_MESSAGE_INFO.getSymbol()); TEST_LOG_MESSAGE_INFO.formatMessage(null, null); // coverage TEST_LOG_MESSAGE_INFO.getSolution(); TEST_LOG_MESSAGE_INFO.getBusinessImpact(); } /** Tests LoggableImpl(LogMessageInfo, long, String, String, Throwable). */ public final void testLoggableImplLogMessageInfolongStringStringThrowable () { final Exception testException = new Exception(); final LoggableImpl testObject = new LoggableImpl(null, TEST_LOG_MESSAGE_INFO, TEST_THREAD_ID, TEST_THREAD_NAME, TEST_INSTANCE_ID, TEST_NODE, testException); assertEquals("Cause getter changes value.", testException, testObject.getCause()); } /** Tests initCause method. */ public final void testInitCause () { final LoggableImpl testObject = new LoggableImpl(null, TEST_LOG_MESSAGE_INFO, TEST_THREAD_ID, TEST_THREAD_NAME, TEST_INSTANCE_ID, TEST_NODE); testObject.initCause(null); assertEquals("Cause getter changes value. (null)", null, testObject.getCause()); } /** Test the addParameter, getParameter and getParameterNames method. */ public final void testAddParameter () { final LoggableImpl testObject = new LoggableImpl(null, TEST_LOG_MESSAGE_INFO, TEST_THREAD_ID, TEST_THREAD_NAME, TEST_INSTANCE_ID, TEST_NODE); testObject.addParameter(TEST_DUMMY_PARAMETER_NAME, "value1"); testObject.addParameter(TEST_DUMMY_PARAMETER_NAME, "value2"); testObject.addParameter("FOO_NULL", null); testObject.addParameter("FOO_NULL", "value2"); assertEquals("Parameter value not as expected 1st.", "value1", testObject.getParameter(TEST_DUMMY_PARAMETER_NAME).get(0)); assertEquals("Parameter value not as expected 2nd.", "value2", testObject.getParameter(TEST_DUMMY_PARAMETER_NAME).get(1)); assertEquals("Parameter value (null) not as expected 2st.", null, testObject.getParameter("FOO_NULL").get(0)); final Set names = testObject.getParameterNames(); assertTrue("Parameter name not in list (" + TEST_DUMMY_PARAMETER_NAME + ")", names.contains(TEST_DUMMY_PARAMETER_NAME)); assertTrue("Internal parameter name not in list (" + LoggableImpl.EVENT_TIME_PARAMETER_NAME + ")", names.contains(LoggableImpl.EVENT_TIME_PARAMETER_NAME)); } /** Tests the getLogMessageInfo method. */ public final void testGetLogMessageInfo () { final LoggableImpl testObject = new LoggableImpl(null, TEST_LOG_MESSAGE_INFO, TEST_THREAD_ID, TEST_THREAD_NAME, TEST_INSTANCE_ID, TEST_NODE); assertEquals("Message info changed?", TEST_LOG_MESSAGE_INFO, testObject.getLogMessageInfo()); } /** Tests the get tracking number method. */ public final void testGetTrackingNumber () { final LoggableImpl testObject1 = new LoggableImpl(null, TEST_LOG_MESSAGE_INFO, TEST_THREAD_ID, TEST_THREAD_NAME, TEST_INSTANCE_ID, TEST_NODE); final LoggableImpl testObject2 = new LoggableImpl(null, TEST_LOG_MESSAGE_INFO, TEST_THREAD_ID, TEST_THREAD_NAME, TEST_INSTANCE_ID, TEST_NODE); assertFalse("Tracking number should never be the same.", testObject1.getTrackingNumber().equals( testObject2.getTrackingNumber())); } /** Tests the GetTrackingNumberInheritance. */ public final void testGetTrackingNumberInheritance () { final BaseException a = new BaseException(TEST_LOG_MESSAGE_INFO); final Loggable b = new BaseException(TEST_LOG_MESSAGE_INFO, a); assertEquals("Tracking number must be inherited from cause.", a.getTrackingNumber(), b.getTrackingNumber()); } /** Tests the get event time method. */ public final void testGetEventTime () { final long before = System.currentTimeMillis(); final LoggableImpl testObject1 = new LoggableImpl(null, TEST_LOG_MESSAGE_INFO, TEST_THREAD_ID, TEST_THREAD_NAME, TEST_INSTANCE_ID, TEST_NODE); final long after = System.currentTimeMillis(); assertTrue("Timestamp must be after before mark.", before <= testObject1.getEventTime()); assertTrue("Timestamp must be after after mark.", testObject1.getEventTime() <= after); } /** Tests the get node id method. */ public final void testGetNodeId () { final LoggableImpl testObject = new LoggableImpl(null, TEST_LOG_MESSAGE_INFO, TEST_THREAD_ID, TEST_THREAD_NAME, TEST_INSTANCE_ID, TEST_NODE); assertEquals("Node id getter changes value.", TEST_NODE, testObject.getNodeId()); final LoggableImpl testNullObject = new LoggableImpl(null, TEST_LOG_MESSAGE_INFO, TEST_THREAD_ID, TEST_THREAD_NAME, TEST_INSTANCE_ID, null); assertEquals("Node id getter changes value (null).", null, testNullObject.getNodeId()); } /** Tests the get instance id method. */ public final void testGetInstanceId () { final LoggableImpl testObject = new LoggableImpl(null, TEST_LOG_MESSAGE_INFO, TEST_THREAD_ID, TEST_THREAD_NAME, TEST_INSTANCE_ID, TEST_NODE); assertEquals("Instance id getter changes value.", TEST_INSTANCE_ID, testObject.getInstanceId()); } /** Tests the get thread id method. */ public final void testGetThreadId () { final LoggableImpl testObject = new LoggableImpl(null, TEST_LOG_MESSAGE_INFO, TEST_THREAD_ID, TEST_THREAD_NAME, TEST_INSTANCE_ID, TEST_NODE); assertEquals("Thread id getter changes value.", TEST_THREAD_ID, testObject.getThreadId()); } /** Tests the get cause method. */ public final void testGetCause () { final Exception testException = new RuntimeException("Runtime", new ArgumentMalformedException("foo", "val", "This is wrong!")); final LoggableImpl testObject = new LoggableImpl(null, TEST_LOG_MESSAGE_INFO, TEST_THREAD_ID, TEST_THREAD_NAME, TEST_INSTANCE_ID, TEST_NODE, testException); // testException.initCause(); // testObject.initCause(testException); System.out.println("TEST: " + testObject.toDetailedString()); assertEquals("Cause getter changes value.", testException, testObject.getCause()); assertEquals("Cause getter changes value. (parameter)", testException, testObject.getParameter(LoggableImpl.CAUSE_PARAMETER_NAME) .get(0)); } /** Tests the log method. */ public final void testLog () { final LoggableImpl testObject = new LoggableImpl(null, TEST_LOG_MESSAGE_INFO, TEST_THREAD_ID, TEST_THREAD_NAME, TEST_INSTANCE_ID, TEST_NODE); testObject.log(); // should not throw a exception... } /** Tests the get message method. */ public final void testGetMessage () { final LoggableImpl testObject = new LoggableImpl(null, TEST_LOG_MESSAGE_INFO, TEST_THREAD_ID, TEST_THREAD_NAME, TEST_INSTANCE_ID, TEST_NODE); testObject.addParameter(TEST_DUMMY_PARAMETER_NAME, "value"); final String message = testObject.getMessage(); assertTrue("Message must contain dummy object '" + message + "'.", message.indexOf("DUMMY:value") != -1); } /** Internal test class. */ private static final class TestLogMessageInfo extends LogMessageInfoImpl implements LogMessageInfo { static final int INT_VALUE = 4711; static final long serialVersionUID = 1; private TestLogMessageInfo () { super("FOO_SYMBOL", INT_VALUE, Level.INFO, "Test Pattern {0} {1,DATE} {1,TIME} DUMMY:{2} ", "solution", BusinessImpact.MIDDLE, Category.SECURITY, new String[] { LoggableImpl.THREAD_ID_PARAMETER_NAME, LoggableImpl.EVENT_TIME_PARAMETER_NAME, TEST_DUMMY_PARAMETER_NAME }, "Application Foo", "Foo", "Group Bar", "Bar" ); } } }