/*
* 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.runtime.module.launcher.log4j2;
import static java.lang.System.getProperty;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import org.mule.tck.junit4.AbstractMuleTestCase;
import org.mule.tck.size.SmallTest;
import java.util.HashMap;
import java.util.Map;
import org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@SmallTest
public class MuleLog4jContextFactoryTestCase extends AbstractMuleTestCase {
private static final String LOG_CONFIGURATION_FACTORY_PROPERTY = "log4j.configurationFactory";
private static final String ASYNC_LOGGER_EXCEPTION_HANDLER_PROPERTY = "AsyncLoggerConfig.ExceptionHandler";
private Map<String, String> originalSystemProperties;
@Before
public void before() {
originalSystemProperties = new HashMap<>();
originalSystemProperties.put(LOG_CONFIGURATION_FACTORY_PROPERTY, getProperty(LOG_CONFIGURATION_FACTORY_PROPERTY));
originalSystemProperties.put(ASYNC_LOGGER_EXCEPTION_HANDLER_PROPERTY, getProperty(ASYNC_LOGGER_EXCEPTION_HANDLER_PROPERTY));
}
@After
public void after() {
for (Map.Entry<String, String> entry : originalSystemProperties.entrySet()) {
if (entry.getValue() != null) {
System.setProperty(entry.getKey(), entry.getValue());
} else {
System.clearProperty(entry.getKey());
}
}
}
@Test
public void systemProperties() {
new MuleLog4jContextFactory();
assertThat(XmlConfigurationFactory.class.getName(), equalTo(getProperty(LOG_CONFIGURATION_FACTORY_PROPERTY)));
assertThat(AsyncLoggerExceptionHandler.class.getName(), equalTo(getProperty(ASYNC_LOGGER_EXCEPTION_HANDLER_PROPERTY)));
}
@Test
public void customExceptionHandler() {
final String customHandler = "custom";
System.setProperty(ASYNC_LOGGER_EXCEPTION_HANDLER_PROPERTY, customHandler);
new MuleLog4jContextFactory();
assertThat(customHandler, equalTo(getProperty(ASYNC_LOGGER_EXCEPTION_HANDLER_PROPERTY)));
}
@Test
public void dispose() {
ArtifactAwareContextSelector contextSelector = mock(ArtifactAwareContextSelector.class);
MuleLog4jContextFactory factory = new MuleLog4jContextFactory(contextSelector);
factory.dispose();
verify(contextSelector).dispose();
}
}