Package org.mule.api.processor

Source Code of org.mule.api.processor.LoggerMessageProcessorTestCase

/*
* Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.api.processor;

import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import org.mule.api.MuleEvent;
import org.mule.api.MuleMessage;
import org.mule.api.expression.ExpressionManager;
import org.mule.tck.junit4.AbstractMuleTestCase;

import org.apache.commons.logging.Log;
import org.junit.Test;
import org.mockito.verification.VerificationMode;

public class LoggerMessageProcessorTestCase extends AbstractMuleTestCase
{
   
    @Test 
    public void logNullEvent()
    {
        verifyNullEventByLevel("TRACE");
        verifyNullEventByLevel("DEBUG");
        verifyNullEventByLevel("INFO");
        verifyNullEventByLevel("WARN");
        verifyNullEventByLevel("ERROR");
    }
   
    @Test
    public void logMuleEvent()
    {
        verifyMuleEventByLevel("TRACE");
        verifyMuleEventByLevel("DEBUG");
        verifyMuleEventByLevel("INFO");
        verifyMuleEventByLevel("WARN");
        verifyMuleEventByLevel("ERROR");
    }
   
    @Test
    public void logWithMessage()
    {
        verifyLoggerMessageByLevel("TRACE");
        verifyLoggerMessageByLevel("DEBUG");
        verifyLoggerMessageByLevel("INFO");
        verifyLoggerMessageByLevel("WARN");
        verifyLoggerMessageByLevel("ERROR");
    }   
   
    // Verifies if the right call to the logger was made depending on the level enabled
    private void verifyLogCall(LoggerMessageProcessor loggerMessageProcessor, String logLevel, String enabledLevel, MuleEvent muleEvent, Object objectToLog)
    {
        when(loggerMessageProcessor.logger.isTraceEnabled()).thenReturn("TRACE".equals(enabledLevel));
        when(loggerMessageProcessor.logger.isDebugEnabled()).thenReturn("DEBUG".equals(enabledLevel));
        when(loggerMessageProcessor.logger.isInfoEnabled()).thenReturn("INFO".equals(enabledLevel));
        when(loggerMessageProcessor.logger.isWarnEnabled()).thenReturn("WARN".equals(enabledLevel));
        when(loggerMessageProcessor.logger.isErrorEnabled()).thenReturn("ERROR".equals(enabledLevel));
        loggerMessageProcessor.log(muleEvent);
        verify(loggerMessageProcessor.logger, times("TRACE".equals(enabledLevel) ? 1 : 0)).trace(objectToLog);
        verify(loggerMessageProcessor.logger, times("DEBUG".equals(enabledLevel) ? 1 : 0)).debug(objectToLog);
        verify(loggerMessageProcessor.logger, times("INFO".equals(enabledLevel) ? 1 : 0)).info(objectToLog);
        verify(loggerMessageProcessor.logger, times("WARN".equals(enabledLevel) ? 1 : 0)).warn(objectToLog);
        verify(loggerMessageProcessor.logger, times("ERROR".equals(enabledLevel) ? 1 : 0)).error(objectToLog);
    }
   
    // Verifies if the Mule expression is called or not depending on the logging level enabled
    private void verifyExpressionEvaluation(LoggerMessageProcessor loggerMessageProcessor, String level, String enabledLevel, MuleEvent muleEvent, VerificationMode timesEvaluateExpression)
    {
        when(loggerMessageProcessor.logger.isTraceEnabled()).thenReturn("TRACE".equals(enabledLevel));
        when(loggerMessageProcessor.logger.isDebugEnabled()).thenReturn("DEBUG".equals(enabledLevel));
        when(loggerMessageProcessor.logger.isInfoEnabled()).thenReturn("INFO".equals(enabledLevel));
        when(loggerMessageProcessor.logger.isWarnEnabled()).thenReturn("WARN".equals(enabledLevel));
        when(loggerMessageProcessor.logger.isErrorEnabled()).thenReturn("ERROR".equals(enabledLevel));       
        loggerMessageProcessor.expressionManager = buildExpressionManager();
        loggerMessageProcessor.log(muleEvent);
        verify(loggerMessageProcessor.expressionManager, timesEvaluateExpression).parse("some expression", muleEvent);
    }
   
    // Orchestrates the verifications for a call with a null MuleEvent
    private void verifyNullEventByLevel(String level)
    {
        LoggerMessageProcessor loggerMessageProcessor = buildLoggerMessageProcessorWithLevel(level);
        verifyLogCall(loggerMessageProcessor, level, level, null, null); // Level is enabled
        loggerMessageProcessor = buildLoggerMessageProcessorWithLevel(level);
        verifyLogCall(loggerMessageProcessor, level, "not" + level, null, null); // Level is disabled by prepending it with "not"
    }

    // Orchestrates the verifications for a call with a MuleEvent
    private void verifyMuleEventByLevel(String level)
    {
        LoggerMessageProcessor loggerMessageProcessor = buildLoggerMessageProcessorWithLevel(level);
        MuleEvent muleEvent = buildMuleEvent();
        verifyLogCall(loggerMessageProcessor, level, level, muleEvent, muleEvent.getMessage()); // Level is enabled
        loggerMessageProcessor = buildLoggerMessageProcessorWithLevel(level);
        verifyLogCall(loggerMessageProcessor, level, "not" + level, muleEvent, muleEvent.getMessage()); // Level is disabled by prepending it with "not"
    }

    // Orchestrates the verifications for a call with a 'message' set on the logger
    private void verifyLoggerMessageByLevel(String level)
    {
        MuleEvent muleEvent = buildMuleEvent();
        verifyLogCall(buildLoggerMessageProcessorForExpressionEvaluation(level), level, level, muleEvent, "text to log"); // Level is enabled
        verifyLogCall(buildLoggerMessageProcessorForExpressionEvaluation(level), level, "not" + level, muleEvent,"text to log"); // Level is disabled by prepending it with "not"
        verifyExpressionEvaluation(buildLoggerMessageProcessorForExpressionEvaluation(level), level, level, muleEvent, times(1)); // Expression should be evaluated when the level is enabled
        verifyExpressionEvaluation(buildLoggerMessageProcessorForExpressionEvaluation(level), level, "not"+ level, muleEvent, never()); // Expression should not be evaluated when the level is enabled
    }
   
    private Log buildMockLogger()
    {
        Log mockLogger = mock(Log.class);
        doNothing().when(mockLogger).error(any());
        doNothing().when(mockLogger).warn(any());
        doNothing().when(mockLogger).info(any());
        doNothing().when(mockLogger).debug(any());
        doNothing().when(mockLogger).trace(any());
       
        // All levels enabled by default
        when(mockLogger.isErrorEnabled()).thenReturn(true);
        when(mockLogger.isWarnEnabled()).thenReturn(true);
        when(mockLogger.isInfoEnabled()).thenReturn(true);
        when(mockLogger.isDebugEnabled()).thenReturn(true);
        when(mockLogger.isTraceEnabled()).thenReturn(true);       
        return mockLogger;
    }
   
    private LoggerMessageProcessor buildLoggerMessageProcessorWithLevel(String level)
    {
        LoggerMessageProcessor loggerMessageProcessor = new LoggerMessageProcessor();
        loggerMessageProcessor.initLogger();
        loggerMessageProcessor.logger = buildMockLogger();
        loggerMessageProcessor.setLevel(level);
        return loggerMessageProcessor;
    }
   
    private LoggerMessageProcessor buildLoggerMessageProcessorForExpressionEvaluation(String level)
    {
        LoggerMessageProcessor loggerMessageProcessor = buildLoggerMessageProcessorWithLevel(level);
        loggerMessageProcessor = buildLoggerMessageProcessorWithLevel(level);
        loggerMessageProcessor.expressionManager = buildExpressionManager();
        loggerMessageProcessor.setMessage("some expression");       
        return loggerMessageProcessor;
    }   
   
    private MuleEvent buildMuleEvent()
    {
        MuleEvent event = mock(MuleEvent.class);
        MuleMessage message = mock(MuleMessage.class);
        when(message.toString()).thenReturn("text to log");
        when(event.getMessage()).thenReturn(message );
        return event;
    }
   
    private ExpressionManager buildExpressionManager()
    {
        ExpressionManager expressionManager = mock(ExpressionManager.class);
        when(expressionManager.parse(anyString(), any(MuleEvent.class))).thenReturn("text to log");
        return expressionManager;
    }

}
TOP

Related Classes of org.mule.api.processor.LoggerMessageProcessorTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.