ConditionEvaluationReportLoggingListenerTests Class — spring-boot Architecture
Architecture documentation for the ConditionEvaluationReportLoggingListenerTests class in ConditionEvaluationReportLoggingListenerTests.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
core/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/logging/ConditionEvaluationReportLoggingListenerTests.java lines 53–171
@ExtendWith(OutputCaptureExtension.class)
class ConditionEvaluationReportLoggingListenerTests {
private final ConditionEvaluationReportLoggingListener initializer = new ConditionEvaluationReportLoggingListener();
@Test
void logsDebugOnContextRefresh(CapturedOutput output) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
this.initializer.initialize(context);
context.register(Config.class);
withDebugLogging(context::refresh);
assertThat(output).contains("CONDITIONS EVALUATION REPORT");
}
@Test
void logsDebugOnApplicationFailedEvent(CapturedOutput output) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
this.initializer.initialize(context);
context.register(ErrorConfig.class);
assertThatException().isThrownBy(context::refresh)
.satisfies((ex) -> withDebugLogging(() -> context
.publishEvent(new ApplicationFailedEvent(new SpringApplication(), new String[0], context, ex))));
assertThat(output).contains("CONDITIONS EVALUATION REPORT");
}
@Test
void logsInfoGuidanceToEnableDebugLoggingOnApplicationFailedEvent(CapturedOutput output) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
this.initializer.initialize(context);
context.register(ErrorConfig.class);
assertThatException().isThrownBy(context::refresh)
.satisfies((ex) -> withInfoLogging(() -> context
.publishEvent(new ApplicationFailedEvent(new SpringApplication(), new String[0], context, ex))));
assertThat(output).doesNotContain("CONDITIONS EVALUATION REPORT")
.contains("re-run your application with 'debug' enabled");
}
@Test
void canBeUsedInApplicationContext() {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.register(Config.class);
new ConditionEvaluationReportLoggingListener().initialize(context);
context.refresh();
assertThat(context.getBean(ConditionEvaluationReport.class)).isNotNull();
}
@Test
void canBeUsedInNonGenericApplicationContext() {
AnnotationConfigServletWebApplicationContext context = new AnnotationConfigServletWebApplicationContext();
context.setServletContext(new MockServletContext());
context.register(Config.class);
new ConditionEvaluationReportLoggingListener().initialize(context);
context.refresh();
assertThat(context.getBean(ConditionEvaluationReport.class)).isNotNull();
}
private void withDebugLogging(Runnable runnable) {
withLoggingLevel(Level.DEBUG, runnable);
}
private void withInfoLogging(Runnable runnable) {
withLoggingLevel(Level.INFO, runnable);
}
private void withLoggingLevel(Level logLevel, Runnable runnable) {
Logger logger = ((LoggerContext) LoggerFactory.getILoggerFactory())
.getLogger(ConditionEvaluationReportLogger.class);
Level currentLevel = logger.getLevel();
logger.setLevel(logLevel);
try {
runnable.run();
}
finally {
logger.setLevel(currentLevel);
}
}
@Configuration(proxyBeanMethods = false)
@ImportAutoConfiguration({ MatchingAutoConfiguration.class, NonMatchingAutoConfiguration.class,
UnconditionalAutoConfiguration.class })
static class Config {
}
@Configuration(proxyBeanMethods = false)
@ImportAutoConfiguration({ MatchingAutoConfiguration.class, NonMatchingAutoConfiguration.class,
UnconditionalAutoConfiguration.class })
static class ErrorConfig {
@Bean
String iBreak() {
throw new RuntimeException();
}
}
@AutoConfiguration
@ConditionalOnProperty(name = "com.example.property", matchIfMissing = true)
public static final class MatchingAutoConfiguration {
}
@AutoConfiguration
@ConditionalOnBean(Duration.class)
public static final class NonMatchingAutoConfiguration {
}
@AutoConfiguration
public static final class UnconditionalAutoConfiguration {
@Bean
String example() {
return "example";
}
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free