ApplicationPidFileWriterTests Class — spring-boot Architecture
Architecture documentation for the ApplicationPidFileWriterTests class in ApplicationPidFileWriterTests.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
core/spring-boot/src/test/java/org/springframework/boot/context/ApplicationPidFileWriterTests.java lines 54–207
class ApplicationPidFileWriterTests {
private static final ApplicationPreparedEvent EVENT = new ApplicationPreparedEvent(new SpringApplication(),
new String[] {}, mock(ConfigurableApplicationContext.class));
@TempDir
@SuppressWarnings("NullAway.Init")
File tempDir;
@BeforeEach
@AfterEach
void resetListener() {
System.clearProperty("PIDFILE");
System.clearProperty("PID_FAIL_ON_WRITE_ERROR");
ApplicationPidFileWriter.reset();
}
@Test
void createPidFile() {
File file = new File(this.tempDir, "pid");
ApplicationPidFileWriter listener = new ApplicationPidFileWriter(file);
listener.onApplicationEvent(EVENT);
assertThat(contentOf(file)).isNotEmpty();
}
@Test
void overridePidFile() {
File file = new File(this.tempDir, "pid");
System.setProperty("PIDFILE", new File(this.tempDir, "override").getAbsolutePath());
ApplicationPidFileWriter listener = new ApplicationPidFileWriter(file);
listener.onApplicationEvent(EVENT);
assertThat(contentOf(new File(System.getProperty("PIDFILE")))).isNotEmpty();
}
@Test
void overridePidFileWithSpring() {
File file = new File(this.tempDir, "pid");
SpringApplicationEvent event = createPreparedEvent("spring.pid.file", file.getAbsolutePath());
ApplicationPidFileWriter listener = new ApplicationPidFileWriter();
listener.onApplicationEvent(event);
assertThat(contentOf(file)).isNotEmpty();
}
@Test
void tryEnvironmentPreparedEvent() throws Exception {
File file = new File(this.tempDir, "pid");
file.createNewFile();
SpringApplicationEvent event = createEnvironmentPreparedEvent("spring.pid.file", file.getAbsolutePath());
ApplicationPidFileWriter listener = new ApplicationPidFileWriter();
listener.onApplicationEvent(event);
assertThat(contentOf(file)).isEmpty();
listener.setTriggerEventType(ApplicationEnvironmentPreparedEvent.class);
listener.onApplicationEvent(event);
assertThat(contentOf(file)).isNotEmpty();
}
@Test
void tryReadyEvent() throws Exception {
File file = new File(this.tempDir, "pid");
file.createNewFile();
SpringApplicationEvent event = createReadyEvent("spring.pid.file", file.getAbsolutePath());
ApplicationPidFileWriter listener = new ApplicationPidFileWriter();
listener.onApplicationEvent(event);
assertThat(contentOf(file)).isEmpty();
listener.setTriggerEventType(ApplicationReadyEvent.class);
listener.onApplicationEvent(event);
assertThat(contentOf(file)).isNotEmpty();
}
@Test
void withNoEnvironment() {
File file = new File(this.tempDir, "pid");
ApplicationPidFileWriter listener = new ApplicationPidFileWriter(file);
listener.setTriggerEventType(ApplicationStartingEvent.class);
listener.onApplicationEvent(
new ApplicationStartingEvent(new DefaultBootstrapContext(), new SpringApplication(), new String[] {}));
assertThat(contentOf(file)).isNotEmpty();
}
@Test
void continueWhenPidFileIsReadOnly() throws Exception {
withReadOnlyPidFile((file) -> {
ApplicationPidFileWriter listener = new ApplicationPidFileWriter(file);
listener.onApplicationEvent(EVENT);
assertThat(contentOf(file)).isEmpty();
});
}
@Test
void throwWhenPidFileIsReadOnly() throws Exception {
withReadOnlyPidFile((file) -> {
System.setProperty("PID_FAIL_ON_WRITE_ERROR", "true");
ApplicationPidFileWriter listener = new ApplicationPidFileWriter(file);
assertThatIllegalStateException().isThrownBy(() -> listener.onApplicationEvent(EVENT))
.withMessageContaining("Cannot create pid file");
});
}
@Test
void throwWhenPidFileIsReadOnlyWithSpring() throws Exception {
withReadOnlyPidFile((file) -> {
SpringApplicationEvent event = createPreparedEvent("spring.pid.fail-on-write-error", "true");
ApplicationPidFileWriter listener = new ApplicationPidFileWriter(file);
assertThatIllegalStateException().isThrownBy(() -> listener.onApplicationEvent(event))
.withMessageContaining("Cannot create pid file");
});
}
private void withReadOnlyPidFile(Consumer<File> consumer) throws IOException {
File file = new File(this.tempDir, "pid");
file.createNewFile();
file.setReadOnly();
try {
consumer.accept(file);
}
finally {
file.setWritable(true);
}
}
private SpringApplicationEvent createEnvironmentPreparedEvent(String propName, String propValue) {
ConfigurableEnvironment environment = createEnvironment(propName, propValue);
return new ApplicationEnvironmentPreparedEvent(new DefaultBootstrapContext(), new SpringApplication(),
new String[] {}, environment);
}
private SpringApplicationEvent createPreparedEvent(String propName, String propValue) {
ConfigurableEnvironment environment = createEnvironment(propName, propValue);
ConfigurableApplicationContext context = mock(ConfigurableApplicationContext.class);
given(context.getEnvironment()).willReturn(environment);
return new ApplicationPreparedEvent(new SpringApplication(), new String[] {}, context);
}
private SpringApplicationEvent createReadyEvent(String propName, String propValue) {
ConfigurableEnvironment environment = createEnvironment(propName, propValue);
ConfigurableApplicationContext context = mock(ConfigurableApplicationContext.class);
given(context.getEnvironment()).willReturn(environment);
return new ApplicationReadyEvent(new SpringApplication(), new String[] {}, context, null);
}
private ConfigurableEnvironment createEnvironment(String propName, String propValue) {
MockPropertySource propertySource = mockPropertySource(propName, propValue);
ConfigurableEnvironment environment = new StandardEnvironment();
environment.getPropertySources().addLast(propertySource);
return environment;
}
private MockPropertySource mockPropertySource(String name, String value) {
MockPropertySource propertySource = new MockPropertySource();
propertySource.setProperty(name, value);
return propertySource;
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free