/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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.apache.catalina.startup; import java.io.File; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import java.util.logging.LogManager; import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Rule; import org.junit.rules.TestName; import org.apache.juli.ClassLoaderLogManager; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; /** * Base class that provides logging support for test cases that respects the * standard conf/logging.properties configuration file. * *
* It also provides support for cleaning up temporary files after shutdown. See * {@link #addDeleteOnTearDown(File)}. * *
* Note that the logging configuration uses
*
* It is used as ${catalina.base} value and thus we take care about that property
* even if the tests do not use Tomcat.
*/
public abstract class LoggingBaseTest {
private static List${catalina.base} for the instance of Tomcat
* that is being started, but can be used to store other temporary files as
* well. Its work and webapps subdirectories are
* deleted at {@link #tearDown()}. If you have other files or directories
* that have to be deleted on cleanup, register them with
* {@link #addDeleteOnTearDown(File)}.
*/
public File getTemporaryDirectory() {
return tempDir;
}
/**
* Schedule the given file or directory to be deleted during after-test
* cleanup.
*
* @param file
* File or directory
*/
public void addDeleteOnTearDown(File file) {
deleteOnTearDown.add(file);
}
@BeforeClass
public static void setUpPerTestClass() throws Exception {
// Create catalina.base directory
File tempBase = new File(System.getProperty("tomcat.test.temp", "output/tmp"));
if (!tempBase.mkdirs() && !tempBase.isDirectory()) {
Assert.fail("Unable to create base temporary directory for tests");
}
Path tempBasePath = FileSystems.getDefault().getPath(tempBase.getAbsolutePath());
tempDir = Files.createTempDirectory(tempBasePath, "test").toFile();
System.setProperty("catalina.base", tempDir.getAbsolutePath());
// Configure logging
System.setProperty("java.util.logging.manager",
"org.apache.juli.ClassLoaderLogManager");
System.setProperty("java.util.logging.config.file",
new File(System.getProperty("tomcat.test.basedir"),
"conf/logging.properties").toString());
}
@Before
public void setUp() throws Exception {
log = LogFactory.getLog(getClass());
log.info("Starting test case [" + testName.getMethodName() + "]");
}
@After
public void tearDown() throws Exception {
for (File file : deleteOnTearDown) {
ExpandWar.delete(file);
}
deleteOnTearDown.clear();
// tempDir contains log files which will be open until JULI shuts down
deleteOnClassTearDown.add(tempDir);
}
@AfterClass
public static void tearDownPerTestClass() throws Exception {
LogManager logManager = LogManager.getLogManager();
if (logManager instanceof ClassLoaderLogManager) {
((ClassLoaderLogManager) logManager).shutdown();
} else {
logManager.reset();
}
for (File file : deleteOnClassTearDown) {
ExpandWar.delete(file);
}
deleteOnClassTearDown.clear();
}
}