@ -21,6 +21,8 @@ import java.io.FileOutputStream;
import java.io.IOException ;
import java.io.IOException ;
import java.io.OutputStream ;
import java.io.OutputStream ;
import java.nio.file.Files ;
import java.nio.file.Files ;
import java.util.Collections ;
import java.util.Map ;
import java.util.Properties ;
import java.util.Properties ;
import org.junit.jupiter.api.BeforeEach ;
import org.junit.jupiter.api.BeforeEach ;
@ -47,12 +49,12 @@ class DevToolsHomePropertiesPostProcessorTests {
private File home ;
private File home ;
private File rootDir ;
private File customHome ;
@BeforeEach
@BeforeEach
void setup ( @TempDir File tempDir , @TempDir File rootDir ) {
void setup ( @TempDir File tempDir ) {
this . home = tempDir ;
this . home = new File ( tempDir , "default-home" ) ;
this . rootDir = rootDir ;
this . customHome = new File ( tempDir , "custom-home" ) ;
this . configDir = this . home + "/.config/spring-boot/" ;
this . configDir = this . home + "/.config/spring-boot/" ;
new File ( this . configDir ) . mkdirs ( ) ;
new File ( this . configDir ) . mkdirs ( ) ;
}
}
@ -67,17 +69,25 @@ class DevToolsHomePropertiesPostProcessorTests {
}
}
@Test
@Test
void loadsRootFolderProperties ( ) throws Exception {
void loadsPropertiesFromCustomHomeDirectorySetUsingSystemProperty ( ) throws Exception {
System . setProperty ( "PROJECT_ROOT_FOLDER" , this . rootDir . getAbsolutePath ( ) ) ;
Properties properties = new Properties ( ) ;
Properties properties = new Properties ( ) ;
properties . put ( "uvw" , "xyz" ) ;
properties . put ( "uvw" , "xyz" ) ;
OutputStream out = new FileOutputStream (
writeFile ( properties , this . customHome , ".config/spring-boot/spring-boot-devtools.properties" ) ;
new File ( this . rootDir , ".config/spring-boot/spring-boot-devtools.properties" ) ) ;
Properties systemProperties = new Properties ( ) ;
properties . store ( out , null ) ;
systemProperties . setProperty ( "spring.devtools.home" , this . customHome . getAbsolutePath ( ) ) ;
out . close ( ) ;
ConfigurableEnvironment environment = getPostProcessedEnvironment ( systemProperties ) ;
ConfigurableEnvironment environment = new MockEnvironment ( ) ;
assertThat ( environment . getProperty ( "uvw" ) ) . isEqualTo ( "xyz" ) ;
MockDevToolHomePropertiesPostProcessor postProcessor = new MockDevToolHomePropertiesPostProcessor ( ) ;
}
runPostProcessor ( ( ) - > postProcessor . postProcessEnvironment ( environment , null ) ) ;
@Test
void loadsPropertiesFromCustomHomeDirectorySetUsingEnvironmentVariable ( ) throws Exception {
Properties properties = new Properties ( ) ;
properties . put ( "uvw" , "xyz" ) ;
writeFile ( properties , this . customHome , ".config/spring-boot/spring-boot-devtools.properties" ) ;
Properties systemProperties = new Properties ( ) ;
systemProperties . setProperty ( "spring.devtools.home" , this . customHome . getAbsolutePath ( ) ) ;
ConfigurableEnvironment environment = getPostProcessedEnvironment (
Collections . singletonMap ( "SPRING_DEVTOOLS_HOME" , this . customHome . getAbsolutePath ( ) ) ) ;
assertThat ( environment . getProperty ( "uvw" ) ) . isEqualTo ( "xyz" ) ;
assertThat ( environment . getProperty ( "uvw" ) ) . isEqualTo ( "xyz" ) ;
}
}
@ -169,15 +179,39 @@ class DevToolsHomePropertiesPostProcessorTests {
assertThat ( environment . getProperty ( "abc" ) ) . isNull ( ) ;
assertThat ( environment . getProperty ( "abc" ) ) . isNull ( ) ;
}
}
private void writeFile ( Properties properties , String s ) throws IOException {
private void writeFile ( Properties properties , String path ) throws IOException {
OutputStream out = new FileOutputStream ( new File ( this . home , s ) ) ;
writeFile ( properties , this . home , path ) ;
properties . store ( out , null ) ;
}
out . close ( ) ;
private void writeFile ( Properties properties , File home , String path ) throws IOException {
File file = new File ( home , path ) ;
file . getParentFile ( ) . mkdirs ( ) ;
try ( OutputStream out = new FileOutputStream ( file ) ) {
properties . store ( out , null ) ;
}
}
}
private ConfigurableEnvironment getPostProcessedEnvironment ( ) throws Exception {
private ConfigurableEnvironment getPostProcessedEnvironment ( ) throws Exception {
return getPostProcessedEnvironment ( null , null ) ;
}
private ConfigurableEnvironment getPostProcessedEnvironment ( Properties systemProperties ) throws Exception {
return getPostProcessedEnvironment ( null , systemProperties ) ;
}
private ConfigurableEnvironment getPostProcessedEnvironment ( Map < String , String > env ) throws Exception {
return getPostProcessedEnvironment ( env , null ) ;
}
private ConfigurableEnvironment getPostProcessedEnvironment ( Map < String , String > env , Properties systemProperties )
throws Exception {
if ( systemProperties = = null ) {
systemProperties = new Properties ( ) ;
systemProperties . setProperty ( "user.home" , this . home . getAbsolutePath ( ) ) ;
}
ConfigurableEnvironment environment = new MockEnvironment ( ) ;
ConfigurableEnvironment environment = new MockEnvironment ( ) ;
MockDevToolHomePropertiesPostProcessor postProcessor = new MockDevToolHomePropertiesPostProcessor ( ) ;
DevToolsHomePropertiesPostProcessor postProcessor = new DevToolsHomePropertiesPostProcessor (
( env ! = null ) ? env : Collections . emptyMap ( ) , systemProperties ) ;
runPostProcessor ( ( ) - > postProcessor . postProcessEnvironment ( environment , null ) ) ;
runPostProcessor ( ( ) - > postProcessor . postProcessEnvironment ( environment , null ) ) ;
return environment ;
return environment ;
}
}
@ -188,13 +222,4 @@ class DevToolsHomePropertiesPostProcessorTests {
thread . join ( ) ;
thread . join ( ) ;
}
}
private class MockDevToolHomePropertiesPostProcessor extends DevToolsHomePropertiesPostProcessor {
@Override
protected File getHomeDirectory ( ) {
return DevToolsHomePropertiesPostProcessorTests . this . home ;
}
}
}
}