From ddd7979a25edf39bbdb53849a74fc9b11475b0d6 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Wed, 20 Jan 2016 13:52:58 -0700 Subject: [PATCH] Don't refresh the ipAddress if set by user config. fixes gh-573 --- .../eureka/EurekaInstanceConfigBean.java | 14 +++---- .../eureka/EurekaInstanceConfigBeanTests.java | 38 ++++++++++++++++++- 2 files changed, 43 insertions(+), 9 deletions(-) diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBean.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBean.java index 4cd24991..4d618f95 100644 --- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBean.java +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBean.java @@ -308,16 +308,16 @@ public class EurekaInstanceConfigBean implements CloudEurekaInstanceConfig { this.hostInfo.override = true; } + public void setIpAddress(String ipAddress) { + this.ipAddress = ipAddress; + this.hostInfo.override = true; + } + @Override public String getHostName(boolean refresh) { - if (refresh) { - boolean originalOverride = this.hostInfo.override; - this.hostInfo = this.inetUtils.findFirstNonLoopbackHostInfo(); - this.hostInfo.setOverride(originalOverride); + if (refresh && !this.hostInfo.override) { this.ipAddress = this.hostInfo.getIpAddress(); - if (!this.hostInfo.override) { - this.hostname = this.hostInfo.getHostname(); - } + this.hostname = this.hostInfo.getHostname(); } return this.preferIpAddress ? this.ipAddress : this.hostname; } diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBeanTests.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBeanTests.java index fbc109f7..16bf54e4 100644 --- a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBeanTests.java +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBeanTests.java @@ -43,11 +43,14 @@ public class EurekaInstanceConfigBeanTests { private AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); private String hostName; + private String ipAddress; @Before public void init() { - this.hostName = new InetUtils(new InetUtilsProperties()) - .findFirstNonLoopbackHostInfo().getHostname(); + InetUtils.HostInfo hostInfo = new InetUtils(new InetUtilsProperties()) + .findFirstNonLoopbackHostInfo(); + this.hostName = hostInfo.getHostname(); + this.ipAddress = hostInfo.getIpAddress(); } @After @@ -110,6 +113,37 @@ public class EurekaInstanceConfigBeanTests { assertEquals("marvin", getInstanceConfig().getHostname()); } + @Test + public void initialIpAddress() { + addEnvironment(this.context, "eureka.instance.appGroupName=mygroup"); + setupContext(); + if (this.ipAddress != null) { + assertEquals(this.ipAddress, getInstanceConfig().getIpAddress()); + } + } + + @Test + public void refreshIpAddress() { + addEnvironment(this.context, "eureka.instance.appGroupName=mygroup"); + setupContext(); + ReflectionTestUtils.setField(getInstanceConfig(), "ipAddress", "10.0.0.1"); + assertEquals("10.0.0.1", getInstanceConfig().getIpAddress()); + getInstanceConfig().getHostName(true); + if (this.ipAddress != null) { + assertEquals(this.ipAddress, getInstanceConfig().getIpAddress()); + } + } + + @Test + public void refreshIpAddressWhenSetByUser() { + addEnvironment(this.context, "eureka.instance.appGroupName=mygroup"); + setupContext(); + getInstanceConfig().setIpAddress("10.0.0.1"); + assertEquals("10.0.0.1", getInstanceConfig().getIpAddress()); + getInstanceConfig().getHostName(true); + assertEquals("10.0.0.1", getInstanceConfig().getIpAddress()); + } + @Test public void testDefaultInitialStatus() { setupContext();