Commit 6cb1208c by Johannes Edmeier

Add legacy trace conversion, update to current snapshot

parent 668d19c1
...@@ -13,8 +13,11 @@ ...@@ -13,8 +13,11 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId> <artifactId>spring-boot-starter-web</artifactId>
<scope>provided</scope> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>de.codecentric</groupId> <groupId>de.codecentric</groupId>
...@@ -24,10 +27,10 @@ ...@@ -24,10 +27,10 @@
<groupId>de.codecentric</groupId> <groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server</artifactId> <artifactId>spring-boot-admin-server</artifactId>
</dependency> </dependency>
<!-- dependency> <dependency>
<groupId>de.codecentric</groupId> <groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId> <artifactId>spring-boot-admin-server-ui</artifactId>
</dependency --> </dependency>
</dependencies> </dependencies>
<build> <build>
<finalName>${project.artifactId}</finalName> <finalName>${project.artifactId}</finalName>
......
...@@ -7,12 +7,23 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; ...@@ -7,12 +7,23 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration @Configuration
@EnableAutoConfiguration @EnableAutoConfiguration
@EnableAdminServer @EnableAdminServer
public class SpringBootAdminApplication extends SpringBootServletInitializer { public class SpringBootAdminApplication extends SpringBootServletInitializer {
@Configuration
public static class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().permitAll()//
.and().csrf().disable();
}
}
@Override @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application; return application;
......
info:
stage: test
spring: spring:
application: application:
name: spring-boot-admin-sample-war name: spring-boot-admin-sample-war
boot: boot:
admin: admin:
client:
url: http://localhost:8080 url: http://localhost:8080
cloud:
config:
enabled: false
endpoints: management:
health: endpoints:
sensitive: false web:
expose: "*"
...@@ -43,6 +43,10 @@ ...@@ -43,6 +43,10 @@
<artifactId>spring-boot-starter-security</artifactId> <artifactId>spring-boot-starter-security</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId> <groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId> <artifactId>spring-boot-admin-starter-client</artifactId>
</dependency> </dependency>
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
info: info:
scm-url: "@scm.url@" scm-url: "@scm.url@"
build-url: "http://travis-ci.org/@env.TRAVIS_REPO_SLUG@/builds/@env.TRAVIS_BUILD_ID@" build-url: "http://travis-ci.org/@env.TRAVIS_REPO_SLUG@/builds/@env.TRAVIS_BUILD_ID@"
stage: test
logging: logging:
file: "target/boot-admin-sample.log" file: "target/boot-admin-sample.log"
...@@ -10,14 +9,11 @@ logging: ...@@ -10,14 +9,11 @@ logging:
management: management:
endpoints: endpoints:
web: web:
base-path: "/actuator"
expose: "*" expose: "*"
jolokia:
enabled: true
spring: spring:
application: application:
name: "@pom.artifactId@" name: spring-boot-admin-sample
boot: boot:
admin: admin:
client: client:
......
...@@ -36,6 +36,15 @@ ...@@ -36,6 +36,15 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId> <artifactId>spring-boot-starter-actuator</artifactId>
</dependency> </dependency>
<dependency> <dependency>
......
...@@ -29,12 +29,12 @@ public class AdminServerProperties { ...@@ -29,12 +29,12 @@ public class AdminServerProperties {
private MonitorProperties monitor = new MonitorProperties(); private MonitorProperties monitor = new MonitorProperties();
/** /**
* For Spring Boot 2.x applications the endpoints should be discovered automatically. * For Spring Boot 2.x applications the endpoints should be discovered automatically using the actuator links.
* For Spring Boot 1.x applications SBA probes for the specified endpoints using an OPTIONS request. * For Spring Boot 1.x applications SBA probes for the specified endpoints using an OPTIONS request.
* If the path differs from the id you can specify this as id:path (e.g. health:ping). * If the path differs from the id you can specify this as id:path (e.g. health:ping).
*/ */
private String[] probedEndpoints = {"health", "env", "metrics", "trace", "dump", "jolokia", "info", "logfile", private String[] probedEndpoints = {"health", "env", "metrics", "trace", "threaddump:dump", "jolokia", "info",
"refresh", "flyway", "liquibase", "heapdump", "loggers", "auditevents"}; "logfile", "refresh", "flyway", "liquibase", "heapdump", "loggers", "auditevents"};
public void setContextPath(String pathPrefix) { public void setContextPath(String pathPrefix) {
if (!pathPrefix.startsWith("/") || pathPrefix.endsWith("/")) { if (!pathPrefix.startsWith("/") || pathPrefix.endsWith("/")) {
......
...@@ -24,6 +24,7 @@ public class Endpoint implements Serializable { ...@@ -24,6 +24,7 @@ public class Endpoint implements Serializable {
public static final String INFO = "info"; public static final String INFO = "info";
public static final String HEALTH = "health"; public static final String HEALTH = "health";
public static final String ENV = "env"; public static final String ENV = "env";
public static final String TRACE = "trace";
private final String id; private final String id;
private final String url; private final String url;
......
...@@ -22,6 +22,7 @@ import io.netty.handler.timeout.ReadTimeoutHandler; ...@@ -22,6 +22,7 @@ import io.netty.handler.timeout.ReadTimeoutHandler;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.springframework.boot.actuate.endpoint.http.ActuatorMediaType;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.client.reactive.ReactorClientHttpConnector; import org.springframework.http.client.reactive.ReactorClientHttpConnector;
...@@ -44,6 +45,7 @@ public class InstanceWebClient { ...@@ -44,6 +45,7 @@ public class InstanceWebClient {
filters.add(InstanceFilterFunctions.rewriteEndpointUrl()); filters.add(InstanceFilterFunctions.rewriteEndpointUrl());
filters.add(InstanceFilterFunctions.convertLegacyEndpoint(LegacyEndpointConverters.health())); filters.add(InstanceFilterFunctions.convertLegacyEndpoint(LegacyEndpointConverters.health()));
filters.add(InstanceFilterFunctions.convertLegacyEndpoint(LegacyEndpointConverters.env())); filters.add(InstanceFilterFunctions.convertLegacyEndpoint(LegacyEndpointConverters.env()));
filters.add(InstanceFilterFunctions.convertLegacyEndpoint(LegacyEndpointConverters.trace()));
}).build(); }).build();
} }
...@@ -68,7 +70,8 @@ public class InstanceWebClient { ...@@ -68,7 +70,8 @@ public class InstanceWebClient {
})); }));
return WebClient.builder() return WebClient.builder()
.clientConnector(connector) .clientConnector(connector)
.defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE) .defaultHeader(HttpHeaders.ACCEPT, ActuatorMediaType.V2_JSON, ActuatorMediaType.V1_JSON,
MediaType.APPLICATION_JSON_VALUE)
.build(); .build();
} }
} }
...@@ -35,25 +35,36 @@ import org.springframework.http.codec.json.Jackson2JsonEncoder; ...@@ -35,25 +35,36 @@ import org.springframework.http.codec.json.Jackson2JsonEncoder;
import static java.util.Collections.singletonMap; import static java.util.Collections.singletonMap;
public class LegacyEndpointConverters { public class LegacyEndpointConverters {
private static final ParameterizedTypeReference<Map<String, Object>> RESPONSE_TYPE = new ParameterizedTypeReference<Map<String, Object>>() { private static final ParameterizedTypeReference<Map<String, Object>> RESPONSE_TYPE_MAP = new ParameterizedTypeReference<Map<String, Object>>() {
};
private static final ParameterizedTypeReference<List<Object>> RESPONSE_TYPE_LIST = new ParameterizedTypeReference<List<Object>>() {
}; };
private static final Jackson2JsonDecoder DECODER = new Jackson2JsonDecoder(); private static final Jackson2JsonDecoder DECODER = new Jackson2JsonDecoder();
private static final Jackson2JsonEncoder ENCODER = new Jackson2JsonEncoder(); private static final Jackson2JsonEncoder ENCODER = new Jackson2JsonEncoder();
public static LegacyEndpointConverter health() { public static LegacyEndpointConverter health() {
return new LegacyEndpointConverter(Endpoint.HEALTH, convertMapUsing(LegacyEndpointConverters::convertHealth)); return new LegacyEndpointConverter(Endpoint.HEALTH,
convertUsing(RESPONSE_TYPE_MAP, RESPONSE_TYPE_MAP, LegacyEndpointConverters::convertHealth));
} }
public static LegacyEndpointConverter env() { public static LegacyEndpointConverter env() {
return new LegacyEndpointConverter(Endpoint.ENV, convertMapUsing(LegacyEndpointConverters::convertEnv)); return new LegacyEndpointConverter(Endpoint.ENV,
convertUsing(RESPONSE_TYPE_MAP, RESPONSE_TYPE_MAP, LegacyEndpointConverters::convertEnv));
}
public static LegacyEndpointConverter trace() {
return new LegacyEndpointConverter(Endpoint.TRACE,
convertUsing(RESPONSE_TYPE_LIST, RESPONSE_TYPE_MAP, LegacyEndpointConverters::convertTrace));
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private static Function<Flux<DataBuffer>, Flux<DataBuffer>> convertMapUsing(Function<Map<String, Object>, Map<String, Object>> converterFn) { private static <S, T> Function<Flux<DataBuffer>, Flux<DataBuffer>> convertUsing(ParameterizedTypeReference<S> sourceType,
return input -> DECODER.decodeToMono(input, ResolvableType.forType(RESPONSE_TYPE), null, null) ParameterizedTypeReference<T> targetType,
.map(body -> converterFn.apply((Map<String, Object>) body)) Function<S, T> converterFn) {
return input -> DECODER.decodeToMono(input, ResolvableType.forType(sourceType), null, null)
.map(body -> converterFn.apply((S) body))
.flatMapMany(output -> ENCODER.encode(Mono.just(output), new DefaultDataBufferFactory(), .flatMapMany(output -> ENCODER.encode(Mono.just(output), new DefaultDataBufferFactory(),
ResolvableType.forType(RESPONSE_TYPE), null, null)); ResolvableType.forType(targetType), null, null));
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
...@@ -104,4 +115,7 @@ public class LegacyEndpointConverters { ...@@ -104,4 +115,7 @@ public class LegacyEndpointConverters {
return converted; return converted;
} }
private static Map<String, Object> convertTrace(List<Object> traces) {
return singletonMap("traces", traces);
}
} }
...@@ -132,7 +132,7 @@ public abstract class AbstractAdminApplicationTest { ...@@ -132,7 +132,7 @@ public abstract class AbstractAdminApplicationTest {
private Registration createRegistration() { private Registration createRegistration() {
return Registration.builder() return Registration.builder()
.name("Test-Instance") .name("Test-Instance")
.healthUrl("http://localhost:" + port + "/mgmt/status") .healthUrl("http://localhost:" + port + "/mgmt/health")
.managementUrl("http://localhost:" + port + "/mgmt") .managementUrl("http://localhost:" + port + "/mgmt")
.serviceUrl("http://localhost:" + port) .serviceUrl("http://localhost:" + port)
.build(); .build();
......
...@@ -54,7 +54,7 @@ public class AdminApplicationTest extends AbstractAdminApplicationTest { ...@@ -54,7 +54,7 @@ public class AdminApplicationTest extends AbstractAdminApplicationTest {
public static class TestAdminApplication { public static class TestAdminApplication {
@Bean @Bean
SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) { public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
return http.authorizeExchange().anyExchange().permitAll()// return http.authorizeExchange().anyExchange().permitAll()//
.and().csrf().disable()// .and().csrf().disable()//
.build(); .build();
......
...@@ -70,7 +70,9 @@ public class InstanceWebClientTest { ...@@ -70,7 +70,9 @@ public class InstanceWebClientTest {
StepVerifier.create(exchange).expectNextCount(1).verifyComplete(); StepVerifier.create(exchange).expectNextCount(1).verifyComplete();
wireMock.verify(1, wireMock.verify(1,
getRequestedFor(urlEqualTo("/status")).withHeader(ACCEPT, equalTo(MediaType.APPLICATION_JSON_VALUE))); getRequestedFor(urlEqualTo("/status")).withHeader(ACCEPT, equalTo(MediaType.APPLICATION_JSON_VALUE))
.withHeader(ACCEPT, equalTo(ActuatorMediaType.V1_JSON))
.withHeader(ACCEPT, equalTo(ActuatorMediaType.V2_JSON)));
} }
@Test @Test
......
...@@ -71,6 +71,22 @@ public class LegacyEndpointConvertersTest { ...@@ -71,6 +71,22 @@ public class LegacyEndpointConvertersTest {
.verifyComplete(); .verifyComplete();
} }
@Test
public void should_convert_trace() {
LegacyEndpointConverter converter = LegacyEndpointConverters.trace();
assertThat(converter.canConvert("trace")).isTrue();
assertThat(converter.canConvert("foo")).isFalse();
Flux<DataBuffer> legacyInput = this.read("trace-legacy.json");
Flux<Object> converted = converter.convert(legacyInput).transform(this::unmarshal);
Flux<Object> expected = this.read("trace-expected.json").transform(this::unmarshal);
StepVerifier.create(Flux.zip(converted, expected))
.assertNext(t -> assertThat(t.getT1()).isEqualTo(t.getT2()))
.verifyComplete();
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private Flux<Object> unmarshal(Flux<DataBuffer> buffer) { private Flux<Object> unmarshal(Flux<DataBuffer> buffer) {
return decoder.decode(buffer, type, null, null); return decoder.decode(buffer, type, null, null);
......
{
"traces": [
{
"timestamp": "15610000",
"info": {
"status": 200
}
},
{
"timestamp": "15610001",
"info": {
"status": 200
}
}
]
}
\ No newline at end of file
[
{
"timestamp": "15610000",
"info": {
"status": 200
}
},
{
"timestamp": "15610001",
"info": {
"status": 200
}
}
]
\ No newline at end of file
...@@ -65,12 +65,12 @@ public class DefaultApplicationFactoryTest { ...@@ -65,12 +65,12 @@ public class DefaultApplicationFactoryTest {
@Test @Test
public void test_default() { public void test_default() {
when(endpointPathProvider.getPath("health")).thenReturn("/application/health"); when(endpointPathProvider.getPath("health")).thenReturn("/actuator/health");
publishApplicationReadyEvent(factory, 8080, null); publishApplicationReadyEvent(factory, 8080, null);
Application app = factory.createApplication(); Application app = factory.createApplication();
assertThat(app.getManagementUrl()).isEqualTo("http://" + getHostname() + ":8080/application"); assertThat(app.getManagementUrl()).isEqualTo("http://" + getHostname() + ":8080/actuator");
assertThat(app.getHealthUrl()).isEqualTo("http://" + getHostname() + ":8080/application/health"); assertThat(app.getHealthUrl()).isEqualTo("http://" + getHostname() + ":8080/actuator/health");
assertThat(app.getServiceUrl()).isEqualTo("http://" + getHostname() + ":8080/"); assertThat(app.getServiceUrl()).isEqualTo("http://" + getHostname() + ":8080/");
} }
...@@ -78,12 +78,12 @@ public class DefaultApplicationFactoryTest { ...@@ -78,12 +78,12 @@ public class DefaultApplicationFactoryTest {
public void test_ssl() { public void test_ssl() {
server.setSsl(new Ssl()); server.setSsl(new Ssl());
server.getSsl().setEnabled(true); server.getSsl().setEnabled(true);
when(endpointPathProvider.getPath("health")).thenReturn("/application/health"); when(endpointPathProvider.getPath("health")).thenReturn("/actuator/health");
publishApplicationReadyEvent(factory, 8080, null); publishApplicationReadyEvent(factory, 8080, null);
Application app = factory.createApplication(); Application app = factory.createApplication();
assertThat(app.getManagementUrl()).isEqualTo("https://" + getHostname() + ":8080/application"); assertThat(app.getManagementUrl()).isEqualTo("https://" + getHostname() + ":8080/actuator");
assertThat(app.getHealthUrl()).isEqualTo("https://" + getHostname() + ":8080/application/health"); assertThat(app.getHealthUrl()).isEqualTo("https://" + getHostname() + ":8080/actuator/health");
assertThat(app.getServiceUrl()).isEqualTo("https://" + getHostname() + ":8080/"); assertThat(app.getServiceUrl()).isEqualTo("https://" + getHostname() + ":8080/");
} }
...@@ -91,12 +91,12 @@ public class DefaultApplicationFactoryTest { ...@@ -91,12 +91,12 @@ public class DefaultApplicationFactoryTest {
public void test_ssl_management() { public void test_ssl_management() {
management.setSsl(new Ssl()); management.setSsl(new Ssl());
management.getSsl().setEnabled(true); management.getSsl().setEnabled(true);
when(endpointPathProvider.getPath("health")).thenReturn("/application/alive"); when(endpointPathProvider.getPath("health")).thenReturn("/actuator/alive");
publishApplicationReadyEvent(factory, 8080, 9090); publishApplicationReadyEvent(factory, 8080, 9090);
Application app = factory.createApplication(); Application app = factory.createApplication();
assertThat(app.getManagementUrl()).isEqualTo("https://" + getHostname() + ":9090/application"); assertThat(app.getManagementUrl()).isEqualTo("https://" + getHostname() + ":9090/actuator");
assertThat(app.getHealthUrl()).isEqualTo("https://" + getHostname() + ":9090/application/alive"); assertThat(app.getHealthUrl()).isEqualTo("https://" + getHostname() + ":9090/actuator/alive");
assertThat(app.getServiceUrl()).isEqualTo("http://" + getHostname() + ":8080/"); assertThat(app.getServiceUrl()).isEqualTo("http://" + getHostname() + ":8080/");
} }
...@@ -117,7 +117,7 @@ public class DefaultApplicationFactoryTest { ...@@ -117,7 +117,7 @@ public class DefaultApplicationFactoryTest {
publishApplicationReadyEvent(factory, 8080, 8081); publishApplicationReadyEvent(factory, 8080, 8081);
Application app = factory.createApplication(); Application app = factory.createApplication();
assertThat(app.getManagementUrl()).matches("http://\\d{0,3}\\.\\d{0,3}\\.\\d{0,3}\\.\\d{0,3}:8081/application"); assertThat(app.getManagementUrl()).matches("http://\\d{0,3}\\.\\d{0,3}\\.\\d{0,3}\\.\\d{0,3}:8081/actuator");
} }
@Test @Test
...@@ -125,12 +125,12 @@ public class DefaultApplicationFactoryTest { ...@@ -125,12 +125,12 @@ public class DefaultApplicationFactoryTest {
instanceProperties.setPreferIp(true); instanceProperties.setPreferIp(true);
server.setAddress(InetAddress.getByName("127.0.0.1")); server.setAddress(InetAddress.getByName("127.0.0.1"));
management.setAddress(InetAddress.getByName("127.0.0.2")); management.setAddress(InetAddress.getByName("127.0.0.2"));
when(endpointPathProvider.getPath("health")).thenReturn("/application/health"); when(endpointPathProvider.getPath("health")).thenReturn("/actuator/health");
publishApplicationReadyEvent(factory, 8080, 8081); publishApplicationReadyEvent(factory, 8080, 8081);
Application app = factory.createApplication(); Application app = factory.createApplication();
assertThat(app.getManagementUrl()).isEqualTo("http://127.0.0.2:8081/application"); assertThat(app.getManagementUrl()).isEqualTo("http://127.0.0.2:8081/actuator");
assertThat(app.getHealthUrl()).isEqualTo("http://127.0.0.2:8081/application/health"); assertThat(app.getHealthUrl()).isEqualTo("http://127.0.0.2:8081/actuator/health");
assertThat(app.getServiceUrl()).isEqualTo("http://127.0.0.1:8080/"); assertThat(app.getServiceUrl()).isEqualTo("http://127.0.0.1:8080/");
} }
......
...@@ -79,12 +79,12 @@ public class ServletApplicationFactoryTest { ...@@ -79,12 +79,12 @@ public class ServletApplicationFactoryTest {
@Test @Test
public void test_contextPath() { public void test_contextPath() {
servletContext.setContextPath("app"); servletContext.setContextPath("app");
when(endpointPathProvider.getPath("health")).thenReturn("/application/health"); when(endpointPathProvider.getPath("health")).thenReturn("/actuator/health");
publishApplicationReadyEvent(factory, 80, null); publishApplicationReadyEvent(factory, 80, null);
Application app = factory.createApplication(); Application app = factory.createApplication();
assertThat(app.getManagementUrl()).isEqualTo("http://" + getHostname() + ":80/app/application"); assertThat(app.getManagementUrl()).isEqualTo("http://" + getHostname() + ":80/app/actuator");
assertThat(app.getHealthUrl()).isEqualTo("http://" + getHostname() + ":80/app/application/health"); assertThat(app.getHealthUrl()).isEqualTo("http://" + getHostname() + ":80/app/actuator/health");
assertThat(app.getServiceUrl()).isEqualTo("http://" + getHostname() + ":80/app"); assertThat(app.getServiceUrl()).isEqualTo("http://" + getHostname() + ":80/app");
} }
...@@ -92,12 +92,12 @@ public class ServletApplicationFactoryTest { ...@@ -92,12 +92,12 @@ public class ServletApplicationFactoryTest {
public void test_servletPath() { public void test_servletPath() {
server.getServlet().setPath("app"); server.getServlet().setPath("app");
servletContext.setContextPath("srv"); servletContext.setContextPath("srv");
when(endpointPathProvider.getPath("health")).thenReturn("/application/health"); when(endpointPathProvider.getPath("health")).thenReturn("/actuator/health");
publishApplicationReadyEvent(factory, 80, null); publishApplicationReadyEvent(factory, 80, null);
Application app = factory.createApplication(); Application app = factory.createApplication();
assertThat(app.getManagementUrl()).isEqualTo("http://" + getHostname() + ":80/srv/app/application"); assertThat(app.getManagementUrl()).isEqualTo("http://" + getHostname() + ":80/srv/app/actuator");
assertThat(app.getHealthUrl()).isEqualTo("http://" + getHostname() + ":80/srv/app/application/health"); assertThat(app.getHealthUrl()).isEqualTo("http://" + getHostname() + ":80/srv/app/actuator/health");
assertThat(app.getServiceUrl()).isEqualTo("http://" + getHostname() + ":80/srv"); assertThat(app.getServiceUrl()).isEqualTo("http://" + getHostname() + ":80/srv");
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment