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.