@ -16,10 +16,16 @@
@@ -16,10 +16,16 @@
package org.springframework.boot.autoconfigure.hazelcast ;
import java.io.File ;
import java.io.FileReader ;
import java.io.FileWriter ;
import java.io.IOException ;
import java.net.InetSocketAddress ;
import java.net.MalformedURLException ;
import java.nio.file.Files ;
import com.hazelcast.client.HazelcastClient ;
import com.hazelcast.client.config.ClientConfig ;
import com.hazelcast.client.config.ClientConnectionStrategyConfig ;
import com.hazelcast.client.config.ConnectionRetryConfig ;
import com.hazelcast.client.impl.clientside.HazelcastClientProxy ;
import com.hazelcast.config.Config ;
import com.hazelcast.core.Hazelcast ;
@ -36,6 +42,7 @@ import org.springframework.boot.test.context.runner.ApplicationContextRunner;
@@ -36,6 +42,7 @@ import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.boot.test.context.runner.ContextConsumer ;
import org.springframework.context.annotation.Bean ;
import org.springframework.context.annotation.Configuration ;
import org.springframework.util.FileCopyUtils ;
import static org.assertj.core.api.Assertions.assertThat ;
@ -52,9 +59,15 @@ class HazelcastAutoConfigurationClientTests {
@@ -52,9 +59,15 @@ class HazelcastAutoConfigurationClientTests {
* /
private static HazelcastInstance hazelcastServer ;
private static String endpointAddress ;
@BeforeAll
static void init ( ) {
hazelcastServer = Hazelcast . newHazelcastInstance ( ) ;
Config config = Config . load ( ) ;
config . getNetworkConfig ( ) . setPort ( 0 ) ;
hazelcastServer = Hazelcast . newHazelcastInstance ( config ) ;
InetSocketAddress inetSocketAddress = ( InetSocketAddress ) hazelcastServer . getLocalEndpoint ( ) . getSocketAddress ( ) ;
endpointAddress = inetSocketAddress . getHostString ( ) + ":" + inetSocketAddress . getPort ( ) ;
}
@AfterAll
@ -69,73 +82,52 @@ class HazelcastAutoConfigurationClientTests {
@@ -69,73 +82,52 @@ class HazelcastAutoConfigurationClientTests {
@Test
void systemPropertyWithXml ( ) {
File config = prepareConfiguration ( "src/test/resources/org/springframework/"
+ "boot/autoconfigure/hazelcast/hazelcast-client-specific.xml" ) ;
this . contextRunner
. withSystemProperties ( HazelcastClientConfiguration . CONFIG_SYSTEM_PROPERTY
+ "=classpath:org/springframework/boot/autoconfigure/hazelcast/hazelcast-client-specific.xml" )
. withSystemProperties ( HazelcastClientConfiguration . CONFIG_SYSTEM_PROPERTY + "=" + config . getAbsolutePath ( ) )
. run ( assertSpecificHazelcastClient ( "explicit-xml" ) ) ;
}
@Test
void systemPropertyWithYaml ( ) {
File config = prepareConfiguration ( "src/test/resources/org/springframework/"
+ "boot/autoconfigure/hazelcast/hazelcast-client-specific.yaml" ) ;
this . contextRunner
. withSystemProperties ( HazelcastClientConfiguration . CONFIG_SYSTEM_PROPERTY
+ "=classpath:org/springframework/boot/autoconfigure/hazelcast/hazelcast-client-specific.yaml" )
. withSystemProperties ( HazelcastClientConfiguration . CONFIG_SYSTEM_PROPERTY + "=" + config . getAbsolutePath ( ) )
. run ( assertSpecificHazelcastClient ( "explicit-yaml" ) ) ;
}
@Test
void systemPropertyWithYml ( ) {
File config = prepareConfiguration ( "src/test/resources/org/springframework/"
+ "boot/autoconfigure/hazelcast/hazelcast-client-specific.yml" ) ;
this . contextRunner
. withSystemProperties ( HazelcastClientConfiguration . CONFIG_SYSTEM_PROPERTY
+ "=classpath:org/springframework/boot/autoconfigure/hazelcast/hazelcast-client-specific.yml" )
. run ( assertSpecificHazelcastClient ( "explicit-yml" ) ) ;
}
@Test
void explicitConfigFileWithXml ( ) {
this . contextRunner
. withPropertyValues ( "spring.hazelcast.config=org/springframework/boot/autoconfigure/"
+ "hazelcast/hazelcast-client-specific.xml" )
. run ( assertSpecificHazelcastClient ( "explicit-xml" ) ) ;
}
@Test
void explicitConfigFileWithYaml ( ) {
this . contextRunner
. withPropertyValues ( "spring.hazelcast.config=org/springframework/boot/autoconfigure/"
+ "hazelcast/hazelcast-client-specific.yaml" )
. run ( assertSpecificHazelcastClient ( "explicit-yaml" ) ) ;
}
@Test
void explicitConfigFileWithYml ( ) {
this . contextRunner
. withPropertyValues ( "spring.hazelcast.config=org/springframework/boot/autoconfigure/"
+ "hazelcast/hazelcast-client-specific.yml" )
. withSystemProperties ( HazelcastClientConfiguration . CONFIG_SYSTEM_PROPERTY + "=" + config . getAbsolutePath ( ) )
. run ( assertSpecificHazelcastClient ( "explicit-yml" ) ) ;
}
@Test
void explicitConfigUrlWithXml ( ) {
this . contextRunner
. withPropertyValues ( "spring.hazelcast.config=classpath:org/springframework/"
+ "boot/autoconfigure/hazelcast/hazelcast-client-specific.xml" )
void explicitConfigUrlWithXml ( ) throws MalformedURLException {
File config = prepareConfiguration ( "src/test/resources/org/springframework/"
+ "boot/autoconfigure/hazelcast/hazelcast-client-specific.xml" ) ;
this . contextRunner . withPropertyValues ( "spring.hazelcast.config=" + config . toURI ( ) . toURL ( ) )
. run ( assertSpecificHazelcastClient ( "explicit-xml" ) ) ;
}
@Test
void explicitConfigUrlWithYaml ( ) {
this . contextRunner
. withPropertyValues ( "spring.hazelcast.config=classpath:org/springframework/"
+ "boot/autoconfigure/hazelcast/hazelcast-client-specific.yaml" )
void explicitConfigUrlWithYaml ( ) throws MalformedURLException {
File config = prepareConfiguration ( "src/test/resources/org/springframework/"
+ "boot/autoconfigure/hazelcast/hazelcast-client-specific.yaml" ) ;
this . contextRunner . withPropertyValues ( "spring.hazelcast.config=" + config . toURI ( ) . toURL ( ) )
. run ( assertSpecificHazelcastClient ( "explicit-yaml" ) ) ;
}
@Test
void explicitConfigUrlWithYml ( ) {
this . contextRunner
. withPropertyValues ( "spring.hazelcast.config=classpath:org/springframework/"
+ "boot/autoconfigure/hazelcast/hazelcast-client-specific.yml" )
void explicitConfigUrlWithYml ( ) throws MalformedURLException {
File config = prepareConfiguration ( "src/test/resources/org/springframework/"
+ "boot/autoconfigure/hazelcast/hazelcast-client-specific.yml" ) ;
this . contextRunner . withPropertyValues ( "spring.hazelcast.config=" + config . toURI ( ) . toURL ( ) )
. run ( assertSpecificHazelcastClient ( "explicit-yml" ) ) ;
}
@ -156,28 +148,26 @@ class HazelcastAutoConfigurationClientTests {
@@ -156,28 +148,26 @@ class HazelcastAutoConfigurationClientTests {
}
@Test
void clientConfigWithInstanceNameCreatesClientIfNecessary ( ) {
void clientConfigWithInstanceNameCreatesClientIfNecessary ( ) throws MalformedURLException {
assertThat ( HazelcastClient . getHazelcastClientByName ( "spring-boot" ) ) . isNull ( ) ;
this . contextRunner
. withPropertyValues ( "spring.hazelcast.config=classpath:org/springframework/"
+ "boot/autoconfigure/hazelcast/hazelcast-client-instance.xml" )
File config = prepareConfiguration ( "src/test/resources/org/springframework/"
+ "boot/autoconfigure/hazelcast/hazelcast-client-instance.xml" ) ;
this . contextRunner . withPropertyValues ( "spring.hazelcast.config=" + config . toURI ( ) . toURL ( ) )
. run ( ( context ) - > assertThat ( context ) . getBean ( HazelcastInstance . class )
. extracting ( HazelcastInstance : : getName )
. isEqualTo ( "spring-boot" ) ) ;
}
@Test
void autoConfiguredClientConfigUsesApplicationClassLoader ( ) {
this . contextRunner
. withPropertyValues ( "spring.hazelcast.config=org/springframework/boot/autoconfigure/"
+ "hazelcast/hazelcast-client-specific.xml" )
. run ( ( context ) - > {
HazelcastInstance hazelcast = context . getBean ( HazelcastInstance . class ) ;
assertThat ( hazelcast ) . isInstanceOf ( HazelcastClientProxy . class ) ;
ClientConfig clientConfig = ( ( HazelcastClientProxy ) hazelcast ) . getClientConfig ( ) ;
assertThat ( clientConfig . getClassLoader ( ) )
. isSameAs ( context . getSourceApplicationContext ( ) . getClassLoader ( ) ) ;
} ) ;
void autoConfiguredClientConfigUsesApplicationClassLoader ( ) throws MalformedURLException {
File config = prepareConfiguration ( "src/test/resources/org/springframework/"
+ "boot/autoconfigure/hazelcast/hazelcast-client-specific.xml" ) ;
this . contextRunner . withPropertyValues ( "spring.hazelcast.config=" + config . toURI ( ) . toURL ( ) ) . run ( ( context ) - > {
HazelcastInstance hazelcast = context . getBean ( HazelcastInstance . class ) ;
assertThat ( hazelcast ) . isInstanceOf ( HazelcastClientProxy . class ) ;
ClientConfig clientConfig = ( ( HazelcastClientProxy ) hazelcast ) . getClientConfig ( ) ;
assertThat ( clientConfig . getClassLoader ( ) ) . isSameAs ( context . getSourceApplicationContext ( ) . getClassLoader ( ) ) ;
} ) ;
}
private ContextConsumer < AssertableApplicationContext > assertSpecificHazelcastClient ( String label ) {
@ -193,6 +183,22 @@ class HazelcastAutoConfigurationClientTests {
@@ -193,6 +183,22 @@ class HazelcastAutoConfigurationClientTests {
. anyMatch ( ( e ) - > e . equals ( label ) ) , "Label equals to " + label ) ;
}
private File prepareConfiguration ( String input ) {
File configFile = new File ( input ) ;
try {
String config = FileCopyUtils . copyToString ( new FileReader ( configFile ) ) ;
config = config . replace ( "${address}" , endpointAddress ) ;
System . out . println ( config ) ;
File outputFile = new File ( Files . createTempDirectory ( getClass ( ) . getSimpleName ( ) ) . toFile ( ) ,
configFile . getName ( ) ) ;
FileCopyUtils . copy ( config , new FileWriter ( outputFile ) ) ;
return outputFile ;
}
catch ( IOException ex ) {
throw new RuntimeException ( ex ) ;
}
}
@Configuration ( proxyBeanMethods = false )
static class HazelcastServerAndClientConfig {
@ -203,8 +209,10 @@ class HazelcastAutoConfigurationClientTests {
@@ -203,8 +209,10 @@ class HazelcastAutoConfigurationClientTests {
@Bean
ClientConfig clientConfig ( ) {
return new ClientConfig ( ) . setConnectionStrategyConfig ( new ClientConnectionStrategyConfig ( )
. setConnectionRetryConfig ( new ConnectionRetryConfig ( ) . setClusterConnectTimeoutMillis ( 60000 ) ) ) ;
ClientConfig config = new ClientConfig ( ) ;
config . getConnectionStrategyConfig ( ) . getConnectionRetryConfig ( ) . setClusterConnectTimeoutMillis ( 60000 ) ;
config . getNetworkConfig ( ) . getAddresses ( ) . add ( endpointAddress ) ;
return config ;
}
}