/* * Sakuli - Testing and Monitoring-Tool for Websites and common UIs. * * Copyright 2013 - 2015 the original author or authors. * * 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 org.sakuli.utils; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.Appender; import org.apache.commons.logging.LogConfigurationException; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.Spy; import org.sakuli.BaseTest; import org.sakuli.datamodel.properties.SakuliProperties; import org.sakuli.loader.BeanLoader; import org.slf4j.LoggerFactory; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; import static org.mockito.Mockito.*; public class LoggerInitializerTest extends BaseTest { private final String logFolder = BaseTest.TEST_FOLDER_PATH + File.separator + "_logs4test"; @Mock private SakuliProperties sakuliProperties; @Spy @InjectMocks private LoggerInitializer testling; @BeforeMethod public void setUp() throws Exception { MockitoAnnotations.initMocks(this); LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); context.reset(); when(sakuliProperties.getLogFolder()).thenReturn(Paths.get(logFolder)); when(sakuliProperties.getLogPattern()).thenReturn("%-5level [%d{YYYY-MM-dd HH:mm:ss}] - %msg%n"); } @AfterClass public void cleanUp() throws Throwable { //revert to default config BeanLoader.loadBean(LoggerInitializer.class).initLoggerContext(); deleteFile(Paths.get(logFolder + File.separator + "_sakuli.log")); deleteFile(Paths.get(logFolder)); } @Test public void testInitLoggerContextFromIncludeFolder() throws Throwable { LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); Logger root = context.getLogger("root"); Logger sakuliLogger = context.getLogger("org.sakuli"); Appender<ILoggingEvent> stdout = root.getAppender("stdout"); Appender<ILoggingEvent> sakuliAppender = root.getAppender("sakuli"); //no log config in classpath Assert.assertNull(stdout); Assert.assertNull(sakuliAppender); Assert.assertNotNull(sakuliLogger); Assert.assertNotNull(root); when(sakuliProperties.getConfigFolder()).thenReturn(Paths.get(BaseTest.SAKULI_HOME_FOLDER_PATH + SakuliProperties.CONFIG_FOLDER_APPEDER)); testling.initLoggerContext(); verify(testling).getConfigFileFromClasspath(); verify(testling).getConfigFile(); //verify root logger context = (LoggerContext) LoggerFactory.getILoggerFactory(); root = context.getLogger("root"); sakuliLogger = context.getLogger("org.sakuli"); stdout = root.getAppender("stdout"); sakuliAppender = root.getAppender("sakuli"); Assert.assertNotNull(stdout); Assert.assertNotNull(sakuliLogger); Assert.assertNotNull(sakuliAppender); Assert.assertNotNull(sakuliAppender); } @Test(expectedExceptions = LogConfigurationException.class) public void testInitLoggerContextException() throws Throwable { doReturn(null).when(testling).getConfigFileFromClasspath(); doReturn(null).when(testling).getConfigFile(); testling.initLoggerContext(); } @Test public void testGetConfigFileFromClasspath() throws Exception { String configFileFromClasspath = testling.getConfigFileFromClasspath(); Assert.assertNull(configFileFromClasspath); } @Test public void testGetConfigFileFromIncludeFolder() throws Throwable { when(sakuliProperties.getConfigFolder()).thenReturn(Paths.get(BaseTest.SAKULI_HOME_FOLDER_PATH + SakuliProperties.CONFIG_FOLDER_APPEDER)); String configFileFromConfigFolder = testling.getConfigFile(); Assert.assertNotNull(configFileFromConfigFolder); Assert.assertTrue(Files.exists(Paths.get(configFileFromConfigFolder))); } }