Reuse pause and resume endpoints to the can be disabled.

fixes gh-86
This commit is contained in:
Spencer Gibb
2016-02-03 12:38:18 -07:00
parent 9c6aeba780
commit 8a21f71ad1
6 changed files with 70 additions and 26 deletions

View File

@@ -72,13 +72,15 @@ public class LifecycleMvcEndpointAutoConfiguration {
}
@Bean
public MvcEndpoint pauseMvcEndpoint(RestartMvcEndpoint restartEndpoint) {
return restartEndpoint.getPauseEndpoint();
@ConditionalOnBean(RestartEndpoint.PauseEndpoint.class)
public MvcEndpoint pauseMvcEndpoint(RestartEndpoint.PauseEndpoint pauseEndpoint) {
return new GenericPostableMvcEndpoint(pauseEndpoint);
}
@Bean
public MvcEndpoint resumeMvcEndpoint(RestartMvcEndpoint restartEndpoint) {
return restartEndpoint.getResumeEndpoint();
@ConditionalOnBean(RestartEndpoint.ResumeEndpoint.class)
public MvcEndpoint resumeMvcEndpoint(RestartEndpoint.ResumeEndpoint resumeEndpoint) {
return new GenericPostableMvcEndpoint(resumeEndpoint);
}
}

View File

@@ -94,13 +94,13 @@ public class RefreshEndpointAutoConfiguration {
@Bean
@ConfigurationProperties("endpoints.pause")
public Endpoint<Boolean> pauseEndpoint(RestartEndpoint restartEndpoint) {
public RestartEndpoint.PauseEndpoint pauseEndpoint(RestartEndpoint restartEndpoint) {
return restartEndpoint.getPauseEndpoint();
}
@Bean
@ConfigurationProperties("endpoints.resume")
public Endpoint<Boolean> resumeEndpoint(RestartEndpoint restartEndpoint) {
public RestartEndpoint.ResumeEndpoint resumeEndpoint(RestartEndpoint restartEndpoint) {
return restartEndpoint.getResumeEndpoint();
}

View File

@@ -107,15 +107,15 @@ public class RestartEndpoint extends AbstractEndpoint<Boolean> implements
}
}
public Endpoint<Boolean> getPauseEndpoint() {
public PauseEndpoint getPauseEndpoint() {
return new PauseEndpoint();
}
public Endpoint<Boolean> getResumeEndpoint() {
public ResumeEndpoint getResumeEndpoint() {
return new ResumeEndpoint();
}
private class PauseEndpoint extends AbstractEndpoint<Boolean> {
public class PauseEndpoint extends AbstractEndpoint<Boolean> {
public PauseEndpoint() {
super("pause", true, true);
@@ -131,7 +131,7 @@ public class RestartEndpoint extends AbstractEndpoint<Boolean> implements
}
}
private class ResumeEndpoint extends AbstractEndpoint<Boolean> {
public class ResumeEndpoint extends AbstractEndpoint<Boolean> {
public ResumeEndpoint() {
super("resume", true, true);

View File

@@ -16,13 +16,10 @@
package org.springframework.cloud.context.restart;
import java.util.Collections;
import java.util.Map;
import org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter;
import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.cloud.endpoint.GenericPostableMvcEndpoint;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@@ -45,7 +42,7 @@ public class RestartMvcEndpoint extends EndpointMvcAdapter {
@Override
public Object invoke() {
if (!getDelegate().isEnabled()) {
return new ResponseEntity<Map<String, String>>(Collections.singletonMap(
return new ResponseEntity<>(Collections.singletonMap(
"message", "This endpoint is disabled"), HttpStatus.NOT_FOUND);
}
Thread thread = new Thread(new Runnable() {
@@ -59,14 +56,4 @@ public class RestartMvcEndpoint extends EndpointMvcAdapter {
return Collections.singletonMap("message", "Restarting");
}
public MvcEndpoint getPauseEndpoint() {
return new GenericPostableMvcEndpoint(
((RestartEndpoint) getDelegate()).getPauseEndpoint());
}
public MvcEndpoint getResumeEndpoint() {
return new GenericPostableMvcEndpoint(
((RestartEndpoint) getDelegate()).getResumeEndpoint());
}
}

View File

@@ -16,7 +16,6 @@
package org.springframework.cloud.endpoint;
import java.util.Collections;
import java.util.Map;
import org.springframework.boot.actuate.endpoint.Endpoint;
import org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter;
@@ -44,7 +43,7 @@ public class GenericPostableMvcEndpoint extends EndpointMvcAdapter {
@Override
public Object invoke() {
if (!getDelegate().isEnabled()) {
return new ResponseEntity<Map<String, String>>(Collections.singletonMap(
return new ResponseEntity<>(Collections.singletonMap(
"message", "This endpoint is disabled"), HttpStatus.NOT_FOUND);
}
return super.invoke();

View File

@@ -0,0 +1,56 @@
package org.springframework.cloud.autoconfigure;
import org.junit.Test;
import org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
/**
* @author Spencer Gibb
*/
public class LifecycleMvcAutoConfigurationTests {
@Test
public void pauseMvcEndpointDisabled() {
endpointDisabled("endpoints.pause.enabled", "pauseMvcEndpoint");
}
@Test
public void resumeMvcEndpointDisabled() {
endpointDisabled("endpoints.resume.enabled", "resumeMvcEndpoint");
}
@Test
public void restartMvcEndpointDisabled() {
endpointDisabled("endpoints.restart.enabled", "restartMvcEndpoint");
}
private void endpointDisabled(String enabledProp, String beanName) {
try (ConfigurableApplicationContext context = getApplicationContext(Config.class, "server.port=0", enabledProp +"=false")) {
EndpointMvcAdapter endpoint = context.getBean(beanName, EndpointMvcAdapter.class);
Object result = endpoint.invoke();
assertThat("result is wrong type", result, is(instanceOf(ResponseEntity.class)));
ResponseEntity response = (ResponseEntity) result;
assertThat("response code was wrong", response.getStatusCode(), equalTo(HttpStatus.NOT_FOUND));
}
}
private static ConfigurableApplicationContext getApplicationContext(Class<?> configuration, String... properties) {
return new SpringApplicationBuilder(configuration).properties(properties).run();
}
@Configuration
@EnableAutoConfiguration
static class Config {
}
}