You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2018/04/11 08:14:32 UTC

[camel] 20/41: CAMEL-12373: Spring Boot 2 - Ported route-dump, read-only mode and some unit tests for camel actuator endpoints

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit eeb8357654f59b368dab40862bbe66f0d68e0234
Author: Tomohisa Igarashi <tm...@gmail.com>
AuthorDate: Wed Mar 21 22:21:00 2018 -0400

    CAMEL-12373: Spring Boot 2 - Ported route-dump, read-only mode and some unit tests for camel actuator endpoints
---
 ...elRouteControllerEndpointAutoConfiguration.java |  2 ++
 .../boot/actuate/endpoint/CamelRoutesEndpoint.java | 33 ++++++++++++++++-
 .../CamelRoutesEndpointAutoConfiguration.java      |  3 ++
 .../additional-spring-configuration-metadata.json  | 12 +++++--
 ...ava => CamelEndpointsGloballyDisabledTest.java} | 41 ++++++++--------------
 ... CamelRouteControllerEndpointDisabledTest.java} | 24 ++++++-------
 ...rEndpointGloballyDisabledAndReenabledTest.java} | 26 +++++++-------
 ....java => CamelRouteControllerEndpointTest.java} | 25 +++++++------
 ...t.java => CamelRoutesEndpointDisabledTest.java} | 22 ++++++------
 ...sEndpointGloballyDisabledAndReenabledTest.java} | 26 +++++++-------
 .../actuate/endpoint/CamelRoutesEndpointTest.java  | 35 ++++++++++++++++++
 ... => CamelRoutesEndpointWriteOperationTest.java} | 30 +++++++++++-----
 12 files changed, 182 insertions(+), 97 deletions(-)

diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointAutoConfiguration.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointAutoConfiguration.java
index bf7918f..3f77ed9 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointAutoConfiguration.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointAutoConfiguration.java
@@ -18,6 +18,7 @@ package org.apache.camel.spring.boot.actuate.endpoint;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -36,6 +37,7 @@ public class CamelRouteControllerEndpointAutoConfiguration {
     @Bean
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean
+    @ConditionalOnEnabledEndpoint
     public CamelRouteControllerEndpoint routeControllerEndpoint(CamelContext camelContext) {
         return new CamelRouteControllerEndpoint(camelContext);
     }
diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
index f8c8ff7..9a061f1 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
@@ -30,19 +30,25 @@ import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.StatefulService;
 import org.apache.camel.api.management.mbean.ManagedRouteMBean;
+import org.apache.camel.model.ModelHelper;
+import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.spi.RouteError;
+import org.apache.camel.util.ObjectHelper;
 import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
 import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
 import org.springframework.boot.actuate.endpoint.annotation.Selector;
 import org.springframework.boot.actuate.endpoint.annotation.WriteOperation;
+import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
  * {@link Endpoint} to expose {@link org.apache.camel.Route} information.
  */
 @Endpoint(id = "camelroutes", enableByDefault = true)
+@ConfigurationProperties("management.endpoint.camelroutes")
 public class CamelRoutesEndpoint {
 
     private CamelContext camelContext;
+    private boolean readOnly = true;
 
     public CamelRoutesEndpoint(CamelContext camelContext) {
         this.camelContext = camelContext;
@@ -67,6 +73,10 @@ public class CamelRoutesEndpoint {
 
     @WriteOperation
     public void doWriteAction(@Selector String id, @Selector WriteAction action, TimeInfo timeInfo) {
+        if (this.isReadOnly()) {
+            throw new IllegalArgumentException(String.format("Read only: write action %s is not allowed", action));
+        }
+
         switch (action) {
         case STOP:
             stopRoute(
@@ -94,6 +104,27 @@ public class CamelRoutesEndpoint {
         }
     }
 
+    @ReadOperation
+    public String getRouteDump(@Selector String id) {
+        RouteDefinition route = camelContext.getRouteDefinition(id);
+        if (route != null) {
+            try {
+                return ModelHelper.dumpModelAsXml(camelContext, route);
+            } catch (Exception e) {
+                throw ObjectHelper.wrapRuntimeCamelException(e);
+            }
+        }
+        return null;
+    }
+
+    public boolean isReadOnly() {
+        return readOnly;
+    }
+
+    public void setReadOnly(boolean readOnly) {
+        this.readOnly = readOnly;
+    }
+
     private RouteEndpointInfo getRouteInfo(String id) {
         Route route = camelContext.getRoute(id);
         if (route != null) {
@@ -103,7 +134,7 @@ public class CamelRoutesEndpoint {
         return null;
     }
 
-    public List<RouteEndpointInfo> getRoutesInfo() {
+    private List<RouteEndpointInfo> getRoutesInfo() {
         return camelContext.getRoutes().stream()
                 .map(RouteEndpointInfo::new)
                 .collect(Collectors.toList());
diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointAutoConfiguration.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointAutoConfiguration.java
index 26199cf..5b44269 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointAutoConfiguration.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointAutoConfiguration.java
@@ -18,6 +18,7 @@ package org.apache.camel.spring.boot.actuate.endpoint;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -33,9 +34,11 @@ import org.springframework.context.annotation.Configuration;
 @ConditionalOnBean(CamelAutoConfiguration.class)
 @AutoConfigureAfter(CamelAutoConfiguration.class)
 public class CamelRoutesEndpointAutoConfiguration {
+
     @Bean
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean
+    @ConditionalOnEnabledEndpoint
     public CamelRoutesEndpoint camelEndpoint(CamelContext camelContext) {
         return new CamelRoutesEndpoint(camelContext);
     }
diff --git a/components/camel-spring-boot/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/components/camel-spring-boot/src/main/resources/META-INF/additional-spring-configuration-metadata.json
index d9610aa..e756628 100644
--- a/components/camel-spring-boot/src/main/resources/META-INF/additional-spring-configuration-metadata.json
+++ b/components/camel-spring-boot/src/main/resources/META-INF/additional-spring-configuration-metadata.json
@@ -1,24 +1,30 @@
 {
   "properties": [
     {
-      "name": "endpoints.camelroutes.path",
+      "name": "management.endpoint.camelroutes.path",
       "type": "java.lang.String",
       "description": "The URL path to use for Camel Routes actuator endpoint.",
       "defaultValue": "/camel/routes"
     },
     {
-      "name": "endpoints.camelroutes.read-only",
+      "name": "management.endpoint.camelroutes.read-only",
       "type": "java.lang.Boolean",
       "description": "Whether Camel Routes actuator is in read-only mode. If not in read-only mode then operations to start/stop routes would be enabled.",
       "defaultValue": "true"
     },
     {
-      "name": "endpoints.camelroutes.enabled",
+      "name": "management.endpoint.camelroutes.enabled",
       "type": "java.lang.Boolean",
       "description": "To turn on or off information about Camel Routes via actuator endpoint.",
       "defaultValue": true
     },
     {
+      "name": "management.endpoint.camelroutecontroller.enabled",
+      "type": "java.lang.Boolean",
+      "description": "To turn on or off information about Camel Route Controller via actuator endpoint.",
+      "defaultValue": true
+    },
+    {
       "name": "management.info.camel.enabled",
       "type": "java.lang.Boolean",
       "description": "Whether to enable Camel info.",
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelEndpointsGloballyDisabledTest.java
similarity index 56%
copy from components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
copy to components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelEndpointsGloballyDisabledTest.java
index 20118be..7f11fff 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelEndpointsGloballyDisabledTest.java
@@ -14,46 +14,35 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.spring.boot.actuate.endpoint;
 
-import java.util.List;
+package org.apache.camel.spring.boot.actuate.endpoint;
 
-import org.apache.camel.CamelContext;
 import org.apache.camel.spring.boot.CamelAutoConfiguration;
-import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.RouteEndpointInfo;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit4.SpringRunner;
 
-/**
- * Test for the {@link CamelRoutesEndpoint} actuator endpoint.
- */
 @DirtiesContext
 @RunWith(SpringRunner.class)
-@EnableAutoConfiguration
-@SpringBootApplication
-@SpringBootTest(classes = {CamelAutoConfiguration.class, CamelRoutesEndpointAutoConfiguration.class, ActuatorTestRoute.class})
-public class CamelRoutesEndpointTest extends Assert {
-
-    @Autowired
-    CamelRoutesEndpoint endpoint;
-
-    @Autowired
-    CamelContext camelContext;
+@SpringBootTest(
+    classes = {CamelAutoConfiguration.class, CamelRouteControllerEndpointAutoConfiguration.class,
+               CamelRoutesEndpointAutoConfiguration.class},
+    properties = {"management.endpoints.enabled-by-default = false"}
+)
+public class CamelEndpointsGloballyDisabledTest {
+    @Autowired(required = false)
+    private CamelRouteControllerEndpoint routeControllerEndpoint;
+
+    @Autowired(required = false)
+    private CamelRoutesEndpoint routesEndpoint;
 
     @Test
-    public void testRoutesEndpoint() throws Exception {
-        List<RouteEndpointInfo> routes = endpoint.readRoutes();
-
-        assertFalse(routes.isEmpty());
-        assertEquals(routes.size(), camelContext.getRoutes().size());
-        assertTrue(routes.stream().anyMatch(r -> "foo-route".equals(r.getId())));
+    public void testHealthCheckEndpointNotPresent() throws Exception {
+        Assert.assertNull(routeControllerEndpoint);
+        Assert.assertNull(routesEndpoint);
     }
-
 }
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointDisabledTest.java
similarity index 71%
copy from components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
copy to components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointDisabledTest.java
index 20118be..78cafca 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointDisabledTest.java
@@ -16,19 +16,18 @@
  */
 package org.apache.camel.spring.boot.actuate.endpoint;
 
-import java.util.List;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.spring.boot.CamelAutoConfiguration;
-import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.RouteEndpointInfo;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.actuate.context.ShutdownEndpoint;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.context.junit4.SpringRunner;
 
 /**
@@ -38,22 +37,21 @@ import org.springframework.test.context.junit4.SpringRunner;
 @RunWith(SpringRunner.class)
 @EnableAutoConfiguration
 @SpringBootApplication
-@SpringBootTest(classes = {CamelAutoConfiguration.class, CamelRoutesEndpointAutoConfiguration.class, ActuatorTestRoute.class})
-public class CamelRoutesEndpointTest extends Assert {
+@SpringBootTest(
+    classes = {CamelAutoConfiguration.class, CamelRouteControllerEndpointAutoConfiguration.class, ActuatorTestRoute.class},
+    properties = {"management.endpoint.camelroutecontroller.enabled=false"}
+)
+public class CamelRouteControllerEndpointDisabledTest extends Assert {
 
-    @Autowired
-    CamelRoutesEndpoint endpoint;
+    @Autowired(required = false)
+    CamelRouteControllerEndpoint routeControllerEndpoint;
 
     @Autowired
     CamelContext camelContext;
 
     @Test
-    public void testRoutesEndpoint() throws Exception {
-        List<RouteEndpointInfo> routes = endpoint.readRoutes();
-
-        assertFalse(routes.isEmpty());
-        assertEquals(routes.size(), camelContext.getRoutes().size());
-        assertTrue(routes.stream().anyMatch(r -> "foo-route".equals(r.getId())));
+    public void testRoutesEndpointNotPresent() throws Exception {
+        Assert.assertNull(routeControllerEndpoint);
     }
 
 }
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointGloballyDisabledAndReenabledTest.java
similarity index 69%
copy from components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
copy to components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointGloballyDisabledAndReenabledTest.java
index 20118be..93e316c 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointGloballyDisabledAndReenabledTest.java
@@ -16,11 +16,8 @@
  */
 package org.apache.camel.spring.boot.actuate.endpoint;
 
-import java.util.List;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.spring.boot.CamelAutoConfiguration;
-import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.RouteEndpointInfo;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -38,22 +35,27 @@ import org.springframework.test.context.junit4.SpringRunner;
 @RunWith(SpringRunner.class)
 @EnableAutoConfiguration
 @SpringBootApplication
-@SpringBootTest(classes = {CamelAutoConfiguration.class, CamelRoutesEndpointAutoConfiguration.class, ActuatorTestRoute.class})
-public class CamelRoutesEndpointTest extends Assert {
+@SpringBootTest(
+    classes = {CamelAutoConfiguration.class, CamelRoutesEndpointAutoConfiguration.class,
+               CamelRouteControllerEndpointAutoConfiguration.class, ActuatorTestRoute.class},
+    properties = {"management.endpoints.enabled-by-default = false",
+                  "management.endpoint.camelroutecontroller.enabled = true"}
+)
+public class CamelRouteControllerEndpointGloballyDisabledAndReenabledTest extends Assert {
 
     @Autowired
-    CamelRoutesEndpoint endpoint;
+    CamelRouteControllerEndpoint routeControllerEndpoint;
+
+    @Autowired(required = false)
+    CamelRoutesEndpoint routesEndpoint;
 
     @Autowired
     CamelContext camelContext;
 
     @Test
-    public void testRoutesEndpoint() throws Exception {
-        List<RouteEndpointInfo> routes = endpoint.readRoutes();
-
-        assertFalse(routes.isEmpty());
-        assertEquals(routes.size(), camelContext.getRoutes().size());
-        assertTrue(routes.stream().anyMatch(r -> "foo-route".equals(r.getId())));
+    public void testRoutesEndpointPresent() throws Exception {
+        Assert.assertNull(routesEndpoint);
+        Assert.assertNotNull(routeControllerEndpoint);
     }
 
 }
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointTest.java
similarity index 70%
copy from components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
copy to components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointTest.java
index 20118be..77826e7 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointTest.java
@@ -20,7 +20,6 @@ import java.util.List;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.spring.boot.CamelAutoConfiguration;
-import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.RouteEndpointInfo;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -31,29 +30,33 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit4.SpringRunner;
 
+
 /**
- * Test for the {@link CamelRoutesEndpoint} actuator endpoint.
+ * Test for the {@link CamelRouteControllerEndpoint} actuator endpoint.
  */
 @DirtiesContext
 @RunWith(SpringRunner.class)
 @EnableAutoConfiguration
 @SpringBootApplication
-@SpringBootTest(classes = {CamelAutoConfiguration.class, CamelRoutesEndpointAutoConfiguration.class, ActuatorTestRoute.class})
-public class CamelRoutesEndpointTest extends Assert {
+@SpringBootTest(classes = {CamelAutoConfiguration.class, CamelRouteControllerEndpointAutoConfiguration.class, ActuatorTestRoute.class})
+public class CamelRouteControllerEndpointTest extends Assert {
 
     @Autowired
-    CamelRoutesEndpoint endpoint;
+    CamelRouteControllerEndpoint endpoint;
 
     @Autowired
     CamelContext camelContext;
 
     @Test
-    public void testRoutesEndpoint() throws Exception {
-        List<RouteEndpointInfo> routes = endpoint.readRoutes();
-
-        assertFalse(routes.isEmpty());
-        assertEquals(routes.size(), camelContext.getRoutes().size());
-        assertTrue(routes.stream().anyMatch(r -> "foo-route".equals(r.getId())));
+    public void testRouteControllerEndpoint() throws Exception {
+        List<String> routesId = endpoint.getControlledRoutes();
+
+        assertNotNull(routesId);
+        /* FIXME DefaultRouteController returns empty list while it does control any route...
+        assertFalse(routesId.isEmpty());
+        assertEquals(routesId.size(), camelContext.getRoutes().size());
+        assertTrue(routesId.stream().anyMatch(r -> "foo-route".equals(r)));
+        */
     }
 
 }
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointDisabledTest.java
similarity index 72%
copy from components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
copy to components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointDisabledTest.java
index 20118be..ece2cd0 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointDisabledTest.java
@@ -20,7 +20,7 @@ import java.util.List;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.spring.boot.CamelAutoConfiguration;
-import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.RouteEndpointInfo;
+import org.apache.camel.spring.boot.model.RouteInfo;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -31,6 +31,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit4.SpringRunner;
 
+
 /**
  * Test for the {@link CamelRoutesEndpoint} actuator endpoint.
  */
@@ -38,22 +39,21 @@ import org.springframework.test.context.junit4.SpringRunner;
 @RunWith(SpringRunner.class)
 @EnableAutoConfiguration
 @SpringBootApplication
-@SpringBootTest(classes = {CamelAutoConfiguration.class, CamelRoutesEndpointAutoConfiguration.class, ActuatorTestRoute.class})
-public class CamelRoutesEndpointTest extends Assert {
+@SpringBootTest(
+    classes = {CamelAutoConfiguration.class, CamelRoutesEndpointAutoConfiguration.class, ActuatorTestRoute.class},
+    properties = {"management.endpoint.camelroutes.enabled = false"}
+)
+public class CamelRoutesEndpointDisabledTest extends Assert {
 
-    @Autowired
-    CamelRoutesEndpoint endpoint;
+    @Autowired(required = false)
+    CamelRoutesEndpoint routesEndpoint;
 
     @Autowired
     CamelContext camelContext;
 
     @Test
-    public void testRoutesEndpoint() throws Exception {
-        List<RouteEndpointInfo> routes = endpoint.readRoutes();
-
-        assertFalse(routes.isEmpty());
-        assertEquals(routes.size(), camelContext.getRoutes().size());
-        assertTrue(routes.stream().anyMatch(r -> "foo-route".equals(r.getId())));
+    public void testRoutesEndpointNotPresent() throws Exception {
+        Assert.assertNull(routesEndpoint);
     }
 
 }
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointGloballyDisabledAndReenabledTest.java
similarity index 70%
copy from components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
copy to components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointGloballyDisabledAndReenabledTest.java
index 20118be..59b7f2b7 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointGloballyDisabledAndReenabledTest.java
@@ -16,11 +16,8 @@
  */
 package org.apache.camel.spring.boot.actuate.endpoint;
 
-import java.util.List;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.spring.boot.CamelAutoConfiguration;
-import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.RouteEndpointInfo;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -38,22 +35,27 @@ import org.springframework.test.context.junit4.SpringRunner;
 @RunWith(SpringRunner.class)
 @EnableAutoConfiguration
 @SpringBootApplication
-@SpringBootTest(classes = {CamelAutoConfiguration.class, CamelRoutesEndpointAutoConfiguration.class, ActuatorTestRoute.class})
-public class CamelRoutesEndpointTest extends Assert {
+@SpringBootTest(
+    classes = {CamelAutoConfiguration.class, CamelRoutesEndpointAutoConfiguration.class,
+               CamelRouteControllerEndpointAutoConfiguration.class, ActuatorTestRoute.class},
+    properties = {"management.endpoints.enabled-by-default = false",
+                  "management.endpoint.camelroutes.enabled = true"}
+)
+public class CamelRoutesEndpointGloballyDisabledAndReenabledTest extends Assert {
 
     @Autowired
-    CamelRoutesEndpoint endpoint;
+    CamelRoutesEndpoint routesEndpoint;
+
+    @Autowired(required = false)
+    CamelRouteControllerEndpoint routeControllerEndpoint;
 
     @Autowired
     CamelContext camelContext;
 
     @Test
-    public void testRoutesEndpoint() throws Exception {
-        List<RouteEndpointInfo> routes = endpoint.readRoutes();
-
-        assertFalse(routes.isEmpty());
-        assertEquals(routes.size(), camelContext.getRoutes().size());
-        assertTrue(routes.stream().anyMatch(r -> "foo-route".equals(r.getId())));
+    public void testRoutesEndpointPresent() throws Exception {
+        Assert.assertNull(routeControllerEndpoint);
+        Assert.assertNotNull(routesEndpoint);
     }
 
 }
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
index 20118be..1878336 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
@@ -19,8 +19,14 @@ package org.apache.camel.spring.boot.actuate.endpoint;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.Route;
+import org.apache.camel.ServiceStatus;
 import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.ReadAction;
+import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.RouteDetailsEndpointInfo;
 import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.RouteEndpointInfo;
+import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.TimeInfo;
+import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.WriteAction;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -56,4 +62,33 @@ public class CamelRoutesEndpointTest extends Assert {
         assertTrue(routes.stream().anyMatch(r -> "foo-route".equals(r.getId())));
     }
 
+    @Test
+    public void testRouteDump() throws Exception {
+        String dump = endpoint.getRouteDump("foo-route");
+        assertNotNull(dump);
+        assertTrue(dump, dump.contains("<route "));
+        assertTrue(dump, dump.contains("<from "));
+        assertTrue(dump, dump.contains("uri=\"timer:foo\""));
+        assertTrue(dump, dump.contains("<to "));
+        assertTrue(dump, dump.contains("uri=\"log:foo\""));
+        assertTrue(dump, dump.contains("</route>"));
+    }
+
+    @Test
+    public void testReadOperation() throws Exception {
+        Object answer = endpoint.doReadAction("foo-route", ReadAction.INFO);
+        Assert.assertEquals(RouteEndpointInfo.class, answer.getClass());
+        Assert.assertEquals("foo-route", RouteEndpointInfo.class.cast(answer).getId());
+        answer = endpoint.doReadAction("foo-route", ReadAction.DETAIL);
+        Assert.assertEquals(RouteDetailsEndpointInfo.class, answer.getClass());
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testWriteOperationReadOnly() throws Exception {
+        TimeInfo timeInfo = new TimeInfo();
+        timeInfo.setAbortAfterTimeout(true);
+        timeInfo.setTimeout(5L);
+        endpoint.doWriteAction("foo-route", WriteAction.STOP, timeInfo);
+    }
+
 }
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointWriteOperationTest.java
similarity index 57%
copy from components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
copy to components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointWriteOperationTest.java
index 20118be..779de02 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointWriteOperationTest.java
@@ -19,8 +19,14 @@ package org.apache.camel.spring.boot.actuate.endpoint;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.Route;
+import org.apache.camel.ServiceStatus;
 import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.ReadAction;
+import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.RouteDetailsEndpointInfo;
 import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.RouteEndpointInfo;
+import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.TimeInfo;
+import org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpoint.WriteAction;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -38,8 +44,10 @@ import org.springframework.test.context.junit4.SpringRunner;
 @RunWith(SpringRunner.class)
 @EnableAutoConfiguration
 @SpringBootApplication
-@SpringBootTest(classes = {CamelAutoConfiguration.class, CamelRoutesEndpointAutoConfiguration.class, ActuatorTestRoute.class})
-public class CamelRoutesEndpointTest extends Assert {
+@SpringBootTest(
+    classes = {CamelAutoConfiguration.class, CamelRoutesEndpointAutoConfiguration.class, ActuatorTestRoute.class},
+    properties = {"management.endpoint.camelroutes.read-only = false"})
+public class CamelRoutesEndpointWriteOperationTest extends Assert {
 
     @Autowired
     CamelRoutesEndpoint endpoint;
@@ -48,12 +56,18 @@ public class CamelRoutesEndpointTest extends Assert {
     CamelContext camelContext;
 
     @Test
-    public void testRoutesEndpoint() throws Exception {
-        List<RouteEndpointInfo> routes = endpoint.readRoutes();
-
-        assertFalse(routes.isEmpty());
-        assertEquals(routes.size(), camelContext.getRoutes().size());
-        assertTrue(routes.stream().anyMatch(r -> "foo-route".equals(r.getId())));
+    public void testWriteOperation() throws Exception {
+        ServiceStatus status = camelContext.getRouteStatus("foo-route");
+        Assert.assertTrue(status.isStarted());
+        TimeInfo timeInfo = new TimeInfo();
+        timeInfo.setAbortAfterTimeout(true);
+        timeInfo.setTimeout(5L);
+        endpoint.doWriteAction("foo-route", WriteAction.STOP, timeInfo);
+        status = camelContext.getRouteStatus("foo-route");
+        Assert.assertTrue(status.isStopped());
+        endpoint.doWriteAction("foo-route", WriteAction.START, timeInfo);
+        status = camelContext.getRouteStatus("foo-route");
+        Assert.assertTrue(status.isStarted());
     }
 
 }

-- 
To stop receiving notification emails like this one, please contact
davsclaus@apache.org.