/* * Copyright (c) 2008-2017, Hazelcast, Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.hazelcast.logging; import com.hazelcast.test.HazelcastSerialClassRunner; import com.hazelcast.test.HazelcastTestSupport; import com.hazelcast.test.SaveLoggingPropertiesRule; import com.hazelcast.test.annotation.QuickTest; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import java.lang.reflect.Field; /** * Unit tests for {@link com.hazelcast.logging.Logger} class. */ @RunWith(HazelcastSerialClassRunner.class) @Category(QuickTest.class) public class LoggerTest extends HazelcastTestSupport { private static final String LOGGING_TYPE_PROPERTY_NAME = "hazelcast.logging.type"; private static final String LOGGING_CLASS_PROPERTY_NAME = "hazelcast.logging.class"; private static final String LOGGING_TYPE_LOG4J = "log4j"; private static final String LOGGING_TYPE_LOG4J2 = "log4j2"; private static final String LOGGING_TYPE_SLF4J = "slf4j"; private static final String LOGGING_TYPE_JDK = "jdk"; private static final String LOGGING_TYPE_NONE = "none"; private static Field LOGGER_FACTORY_FIELD; @Rule public SaveLoggingPropertiesRule saveLoggingPropertiesRule = new SaveLoggingPropertiesRule(); @BeforeClass public static void beforeClass() { try { LOGGER_FACTORY_FIELD = Logger.class.getDeclaredField("loggerFactory"); LOGGER_FACTORY_FIELD.setAccessible(true); } catch (NoSuchFieldException e) { throw new IllegalStateException( "Couldn't retrieve \"loggerFactory\" field from " + Logger.class.getName() + " class !", e); } } @Before public void before() { try { // reset logger factory field LOGGER_FACTORY_FIELD.set(null, null); } catch (IllegalAccessException e) { throw new IllegalStateException( "Couldn't clear \"loggerFactory\" field from " + Logger.class.getName() + " class !", e); } System.clearProperty(LOGGING_CLASS_PROPERTY_NAME); } @Test public void testConstructor() { assertUtilityConstructor(Logger.class); } @Test public void getLogger_thenLog4j_thenReturnLog4jLogger() { System.setProperty(LOGGING_TYPE_PROPERTY_NAME, LOGGING_TYPE_LOG4J); assertInstanceOf(Log4jFactory.Log4jLogger.class, Logger.getLogger(getClass())); } @Test public void getLogger_thenLog4j2_thenReturnLog4j2Logger() { System.setProperty(LOGGING_TYPE_PROPERTY_NAME, LOGGING_TYPE_LOG4J2); assertInstanceOf(Log4j2Factory.Log4j2Logger.class, Logger.getLogger(getClass())); } @Test public void getLogger_whenSlf4j_thenReturnSlf4jLogger() { System.setProperty(LOGGING_TYPE_PROPERTY_NAME, LOGGING_TYPE_SLF4J); assertInstanceOf(Slf4jFactory.Slf4jLogger.class, Logger.getLogger(getClass())); } @Test public void getLogger_whenJdk_thenReturnStandardLogger() { System.setProperty(LOGGING_TYPE_PROPERTY_NAME, LOGGING_TYPE_JDK); assertInstanceOf(StandardLoggerFactory.StandardLogger.class, Logger.getLogger(getClass())); } @Test public void getLogger_whenNone_thenReturnNoLogger() { System.setProperty(LOGGING_TYPE_PROPERTY_NAME, LOGGING_TYPE_NONE); assertInstanceOf(NoLogFactory.NoLogger.class, Logger.getLogger(getClass())); } @Test public void getLogger_whenInvalidConfiguration_thenCreateStandardLogger() { System.setProperty(LOGGING_TYPE_PROPERTY_NAME, "invalid"); assertInstanceOf(StandardLoggerFactory.StandardLogger.class, Logger.getLogger(getClass())); } @Test public void noLogger() { assertInstanceOf(NoLogFactory.NoLogger.class, Logger.noLogger()); } }