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 2013/06/04 10:40:13 UTC
git commit: CAMEL-6384: Added BacklogDebugger MBean for live
debugging of Camel routes.
Updated Branches:
refs/heads/master 8aa6aa6c3 -> fdd1f5bdf
CAMEL-6384: Added BacklogDebugger MBean for live debugging of Camel routes.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/fdd1f5bd
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/fdd1f5bd
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/fdd1f5bd
Branch: refs/heads/master
Commit: fdd1f5bdfae6f1227690195995b8ca04c657cd7a
Parents: 8aa6aa6
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Jun 4 10:39:59 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jun 4 10:39:59 2013 +0200
----------------------------------------------------------------------
.../processor/interceptor/BacklogDebugger.java | 6 +
.../camel/management/BacklogDebuggerTest.java | 96 +++++++++++++++
2 files changed, 102 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/fdd1f5bd/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogDebugger.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogDebugger.java b/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogDebugger.java
index 1e331e7..b243968 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogDebugger.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogDebugger.java
@@ -299,6 +299,12 @@ public class BacklogDebugger extends ServiceSupport implements InterceptStrategy
}
public void stepBreakpoint(String nodeId) {
+ // if we are already in single step mode, then infer stepping
+ if (isSingleStepMode()) {
+ logger.log("stepBreakpoint " + nodeId + " is already in single step mode, so stepping instead.");
+ step();
+ }
+
logger.log("Step breakpoint " + nodeId);
// we want to step current exchange to next
BacklogTracerEventMessage msg = suspendedBreakpointMessages.get(nodeId);
http://git-wip-us.apache.org/repos/asf/camel/blob/fdd1f5bd/camel-core/src/test/java/org/apache/camel/management/BacklogDebuggerTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/BacklogDebuggerTest.java b/camel-core/src/test/java/org/apache/camel/management/BacklogDebuggerTest.java
index 5583ea9..05f77ef 100644
--- a/camel-core/src/test/java/org/apache/camel/management/BacklogDebuggerTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/BacklogDebuggerTest.java
@@ -371,6 +371,102 @@ public class BacklogDebuggerTest extends ManagementTestSupport {
assertEquals("Should not be in step mode", Boolean.FALSE, stepMode);
}
+ @SuppressWarnings("unchecked")
+ public void testBacklogDebuggerStepCurrentNode() throws Exception {
+ MBeanServer mbeanServer = getMBeanServer();
+ ObjectName on = new ObjectName("org.apache.camel:context=localhost/camel-1,type=tracer,name=BacklogDebugger");
+ assertNotNull(on);
+ mbeanServer.isRegistered(on);
+
+ Boolean enabled = (Boolean) mbeanServer.getAttribute(on, "Enabled");
+ assertEquals("Should not be enabled", Boolean.FALSE, enabled);
+
+ // enable debugger
+ mbeanServer.invoke(on, "enableDebugger", null, null);
+
+ enabled = (Boolean) mbeanServer.getAttribute(on, "Enabled");
+ assertEquals("Should be enabled", Boolean.TRUE, enabled);
+
+ // add breakpoint at bar
+ mbeanServer.invoke(on, "addBreakpoint", new Object[]{"foo"}, new String[]{"java.lang.String"});
+
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(0);
+ mock.setSleepForEmptyTest(1000);
+
+ template.sendBody("seda:start", "Hello World");
+
+ assertMockEndpointsSatisfied();
+
+ // add breakpoint at bar
+ Set<String> nodes = (Set<String>) mbeanServer.invoke(on, "getSuspendedBreakpointNodeIds", null, null);
+ assertNotNull(nodes);
+ assertEquals(1, nodes.size());
+ assertEquals("foo", nodes.iterator().next());
+
+ Boolean stepMode = (Boolean) mbeanServer.getAttribute(on, "SingleStepMode");
+ assertEquals("Should not be in step mode", Boolean.FALSE, stepMode);
+
+ // step breakpoint
+ mbeanServer.invoke(on, "stepBreakpoint", new Object[]{"foo"}, new String[]{"java.lang.String"});
+
+ // then at bar now
+ Thread.sleep(1000);
+ nodes = (Set<String>) mbeanServer.invoke(on, "getSuspendedBreakpointNodeIds", null, null);
+ assertNotNull(nodes);
+ assertEquals(1, nodes.size());
+ assertEquals("bar", nodes.iterator().next());
+ stepMode = (Boolean) mbeanServer.getAttribute(on, "SingleStepMode");
+ assertEquals("Should be in step mode", Boolean.TRUE, stepMode);
+
+ // step
+ mbeanServer.invoke(on, "stepBreakpoint", new Object[]{"bar"}, new String[]{"java.lang.String"});
+
+ // then at transform now
+ Thread.sleep(1000);
+ nodes = (Set<String>) mbeanServer.invoke(on, "getSuspendedBreakpointNodeIds", null, null);
+ assertNotNull(nodes);
+ assertEquals(1, nodes.size());
+ assertEquals("transform", nodes.iterator().next());
+ stepMode = (Boolean) mbeanServer.getAttribute(on, "SingleStepMode");
+ assertEquals("Should be in step mode", Boolean.TRUE, stepMode);
+
+ // step
+ mbeanServer.invoke(on, "stepBreakpoint", new Object[]{"transform"}, new String[]{"java.lang.String"});
+
+ // then at cheese now
+ Thread.sleep(1000);
+ nodes = (Set<String>) mbeanServer.invoke(on, "getSuspendedBreakpointNodeIds", null, null);
+ assertNotNull(nodes);
+ assertEquals(1, nodes.size());
+ assertEquals("cheese", nodes.iterator().next());
+ stepMode = (Boolean) mbeanServer.getAttribute(on, "SingleStepMode");
+ assertEquals("Should be in step mode", Boolean.TRUE, stepMode);
+
+ // step
+ mbeanServer.invoke(on, "stepBreakpoint", new Object[]{"cheese"}, new String[]{"java.lang.String"});
+
+ // then at result now
+ Thread.sleep(1000);
+ nodes = (Set<String>) mbeanServer.invoke(on, "getSuspendedBreakpointNodeIds", null, null);
+ assertNotNull(nodes);
+ assertEquals(1, nodes.size());
+ assertEquals("result", nodes.iterator().next());
+ stepMode = (Boolean) mbeanServer.getAttribute(on, "SingleStepMode");
+ assertEquals("Should be in step mode", Boolean.TRUE, stepMode);
+
+ // step
+ mbeanServer.invoke(on, "stepBreakpoint", new Object[]{"result"}, new String[]{"java.lang.String"});
+
+ // then the exchange is completed
+ Thread.sleep(1000);
+ nodes = (Set<String>) mbeanServer.invoke(on, "getSuspendedBreakpointNodeIds", null, null);
+ assertNotNull(nodes);
+ assertEquals(0, nodes.size());
+ stepMode = (Boolean) mbeanServer.getAttribute(on, "SingleStepMode");
+ assertEquals("Should not be in step mode", Boolean.FALSE, stepMode);
+ }
+
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {