blob: a63f0b85c71e5f77aae65782483fd146b98af48f [file] [log] [blame]
/*
* 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.logging.log4j.core.junit;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.extension.ExtendWith;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;
/**
* Specifies a configuration file to use for unit tests. This configuration file will be loaded once and used for all tests
* executed in the annotated test class unless otherwise specified by {@link #reconfigure()}. When annotated on a test method,
* this will override the class-level configuration if provided for that method. By using this JUnit 5 extension, the following
* types can be injected into tests via constructor or method parameters:
*
* <ul>
* <li>{@link LoggerContext};</li>
* <li>{@link Configuration};</li>
* <li>any subclass of {@link Appender} paired with a {@link Named} annotation to select the appender by name.</li>
* </ul>
*
* Tests using this extension will automatically be tagged as {@code functional} to indicate they perform functional tests that
* rely on configuration files and production code.
*
* @since 2.14.0
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
@Inherited
@Tag("functional")
@ExtendWith(LoggerContextResolver.class)
@ExtendWith(ConfigurationResolver.class)
@ExtendWith(AppenderResolver.class)
public @interface LoggerContextSource {
/**
* Specifies the name of the configuration file to use for the annotated test.
*/
String value();
/**
* Specifies when to {@linkplain LoggerContext#reconfigure() reconfigure} the logging system.
*/
ReconfigurationPolicy reconfigure() default ReconfigurationPolicy.NEVER;
/**
* Specifies the shutdown timeout limit. Defaults to 0 to mean no limit.
*/
long timeout() default 0L;
/**
* Specifies the time unit {@link #timeout()} is measured in.
*/
TimeUnit unit() default TimeUnit.SECONDS;
}