ApplicationAvailabilityBeanTests Class — spring-boot Architecture
Architecture documentation for the ApplicationAvailabilityBeanTests class in ApplicationAvailabilityBeanTests.java from the spring-boot codebase.
Entity Profile
Source Code
core/spring-boot/src/test/java/org/springframework/boot/availability/ApplicationAvailabilityBeanTests.java lines 43–177
class ApplicationAvailabilityBeanTests {
private AnnotationConfigApplicationContext context;
private ApplicationAvailabilityBean availability;
private MockLog log;
@BeforeEach
void setup() {
this.context = new AnnotationConfigApplicationContext(TestConfiguration.class);
this.availability = this.context.getBean(ApplicationAvailabilityBean.class);
this.log = this.context.getBean(MockLog.class);
}
@Test
void getLivenessStateWhenNoEventHasBeenPublishedReturnsDefaultState() {
assertThat(this.availability.getLivenessState()).isEqualTo(LivenessState.BROKEN);
}
@Test
void getLivenessStateWhenEventHasBeenPublishedReturnsPublishedState() {
AvailabilityChangeEvent.publish(this.context, LivenessState.CORRECT);
assertThat(this.availability.getLivenessState()).isEqualTo(LivenessState.CORRECT);
}
@Test
void getReadinessStateWhenNoEventHasBeenPublishedReturnsDefaultState() {
assertThat(this.availability.getReadinessState()).isEqualTo(ReadinessState.REFUSING_TRAFFIC);
}
@Test
void getReadinessStateWhenEventHasBeenPublishedReturnsPublishedState() {
AvailabilityChangeEvent.publish(this.context, ReadinessState.ACCEPTING_TRAFFIC);
assertThat(this.availability.getReadinessState()).isEqualTo(ReadinessState.ACCEPTING_TRAFFIC);
}
@Test
void getStateWhenNoEventHasBeenPublishedReturnsDefaultState() {
assertThat(this.availability.getState(TestState.class)).isNull();
assertThat(this.availability.getState(TestState.class, TestState.ONE)).isEqualTo(TestState.ONE);
}
@Test
void getStateWhenEventHasBeenPublishedReturnsPublishedState() {
AvailabilityChangeEvent.publish(this.context, TestState.TWO);
assertThat(this.availability.getState(TestState.class)).isEqualTo(TestState.TWO);
assertThat(this.availability.getState(TestState.class, TestState.ONE)).isEqualTo(TestState.TWO);
}
@Test
void getLastChangeEventWhenNoEventHasBeenPublishedReturnsDefaultState() {
assertThat(this.availability.getLastChangeEvent(TestState.class)).isNull();
}
@Test
void getLastChangeEventWhenEventHasBeenPublishedReturnsPublishedState() {
AvailabilityChangeEvent.publish(this.context, TestState.TWO);
assertThat(this.availability.getLastChangeEvent(TestState.class)).isNotNull();
}
@Test
void stateChangesAreLogged() {
AvailabilityChangeEvent.publish(this.context, LivenessState.CORRECT);
assertThat(this.log.getLogged()).contains("Application availability state LivenessState changed to CORRECT");
AvailabilityChangeEvent.publish(this.context, LivenessState.BROKEN);
assertThat(this.log.getLogged())
.contains("Application availability state LivenessState changed from CORRECT to BROKEN");
}
@Test
void stateChangesAreLoggedWithExceptionSource() {
AvailabilityChangeEvent.publish(this.context, new IOException("connection error"), LivenessState.BROKEN);
assertThat(this.log.getLogged()).contains("Application availability state LivenessState changed to BROKEN: "
+ "java.io.IOException: connection error");
}
@Test
void stateChangesAreLoggedWithOtherSource() {
AvailabilityChangeEvent.publish(this.context, new CustomEventSource(), LivenessState.BROKEN);
assertThat(this.log.getLogged()).contains(
"Application availability state LivenessState changed to BROKEN: " + CustomEventSource.class.getName());
}
enum TestState implements AvailabilityState {
ONE {
@Override
public String test() {
return "spring";
}
},
TWO {
@Override
public String test() {
return "boot";
}
};
abstract String test();
}
static class CustomEventSource {
}
@Configuration
static class TestConfiguration {
@Bean
MockLog mockLog() {
List<String> logged = new ArrayList<>();
MockLog log = mock(MockLog.class);
given(log.isDebugEnabled()).willReturn(true);
given(log.getLogged()).willReturn(logged);
willAnswer((invocation) -> logged.add("" + invocation.getArguments()[0])).given(log).debug(any());
return log;
}
@Bean
ApplicationAvailabilityBean applicationAvailabilityBean(MockLog log) {
return new ApplicationAvailabilityBean(log);
}
}
interface MockLog extends Log {
List<String> getLogged();
}
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free