From e2236a816eb9fc5ad6ade81cec82665c9ee25952 Mon Sep 17 00:00:00 2001 From: Felipe Adorno Date: Wed, 17 Feb 2021 19:26:30 -0300 Subject: [PATCH] Support management.server.base-path (#3962) Fixes gh-3947 --- .../eureka/EurekaClientAutoConfiguration.java | 5 ++ .../EurekaClientAutoConfigurationTests.java | 64 +++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java index fc66d4cef..51853f72e 100644 --- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java @@ -133,7 +133,12 @@ public class EurekaClientAutoConfiguration { int serverPort = Integer.parseInt(env.getProperty("server.port", env.getProperty("port", "8080"))); Integer managementPort = env.getProperty("management.server.port", Integer.class); + String managementContextPath = env.getProperty("management.server.servlet.context-path"); + if (!StringUtils.hasText(managementContextPath)) { + managementContextPath = env.getProperty("management.server.base-path"); + } + Integer jmxPort = env.getProperty("com.sun.management.jmxremote.port", Integer.class); EurekaInstanceConfigBean instance = new EurekaInstanceConfigBean(inetUtils); diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java index 72c4a0a9e..bbd0ce3d5 100644 --- a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java @@ -283,6 +283,70 @@ public class EurekaClientAutoConfigurationTests { .as("Wrong health check: " + instance.getHealthCheckUrl()).isTrue(); } + @Test + public void statusPageUrl_and_healthCheckUrl_contain_management_base_path() throws Exception { + TestPropertyValues.of("server.port=8989", "management.server.base-path=/management").applyTo(this.context); + + setupContext(RefreshAutoConfiguration.class); + EurekaInstanceConfigBean instance = this.context.getBean(EurekaInstanceConfigBean.class); + assertThat(instance.getStatusPageUrl().endsWith(":8989/management/actuator/info")) + .as("Wrong status page: " + instance.getStatusPageUrl()).isTrue(); + assertThat(instance.getHealthCheckUrl().endsWith(":8989/management/actuator/health")) + .as("Wrong health check: " + instance.getHealthCheckUrl()).isTrue(); + } + + @Test + public void statusPageUrl_and_healthCheckUrl_contain_management_base_path_random_port() throws Exception { + TestPropertyValues.of("server.port=0", "management.server.base-path=/management").applyTo(this.context); + + setupContext(RefreshAutoConfiguration.class); + EurekaInstanceConfigBean instance = this.context.getBean(EurekaInstanceConfigBean.class); + assertThat(instance.getStatusPageUrlPath().equals("/management/actuator/info")) + .as("Wrong status page: " + instance.getStatusPageUrlPath()).isTrue(); + assertThat(instance.getHealthCheckUrlPath().equals("/management/actuator/health")) + .as("Wrong health check: " + instance.getHealthCheckUrlPath()).isTrue(); + } + + @Test + public void statusPageUrlPathAndManagementPortAndBasePath() { + TestPropertyValues.of("server.port=8989", "management.server.port=9999", "management.server.base-path=/manage", + "eureka.instance.status-page-url-path=/myStatusPage").applyTo(this.context); + setupContext(RefreshAutoConfiguration.class); + EurekaInstanceConfigBean instance = this.context.getBean(EurekaInstanceConfigBean.class); + assertThat(instance.getStatusPageUrl().endsWith(":9999/manage/myStatusPage")) + .as("Wrong status page: " + instance.getStatusPageUrl()).isTrue(); + } + + @Test + public void healthCheckUrlPathAndManagementPortAndBasePath() { + TestPropertyValues.of("server.port=8989", "management.server.port=9999", "management.server.base-path=/manage", + "eureka.instance.health-check-url-path=/myHealthCheck").applyTo(this.context); + setupContext(RefreshAutoConfiguration.class); + EurekaInstanceConfigBean instance = this.context.getBean(EurekaInstanceConfigBean.class); + assertThat(instance.getHealthCheckUrl().endsWith(":9999/manage/myHealthCheck")) + .as("Wrong health check: " + instance.getHealthCheckUrl()).isTrue(); + } + + @Test + public void statusPageUrlPathAndManagementPortAndBasePathKebobCase() { + TestPropertyValues.of("server.port=8989", "management.server.port=9999", "management.server.base-path=/manage", + "eureka.instance.status-page-url-path=/myStatusPage").applyTo(this.context); + setupContext(RefreshAutoConfiguration.class); + EurekaInstanceConfigBean instance = this.context.getBean(EurekaInstanceConfigBean.class); + assertThat(instance.getStatusPageUrl().endsWith(":9999/manage/myStatusPage")) + .as("Wrong status page: " + instance.getStatusPageUrl()).isTrue(); + } + + @Test + public void healthCheckUrlPathAndManagementPortAndBasePathKebobCase() { + TestPropertyValues.of("server.port=8989", "management.server.port=9999", "management.server.base-path=/manage", + "eureka.instance.health-check-url-path=/myHealthCheck").applyTo(this.context); + setupContext(RefreshAutoConfiguration.class); + EurekaInstanceConfigBean instance = this.context.getBean(EurekaInstanceConfigBean.class); + assertThat(instance.getHealthCheckUrl().endsWith(":9999/manage/myHealthCheck")) + .as("Wrong health check: " + instance.getHealthCheckUrl()).isTrue(); + } + @Test public void healthCheckUrlPathWithServerPortAndContextPathKebobCase() { TestPropertyValues