Repository: camel Updated Branches: refs/heads/10345 [created] 202c1b2a4
CAMEL-10345: camel-test has route coverage summary. Work in progress. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/202c1b2a Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/202c1b2a Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/202c1b2a Branch: refs/heads/10345 Commit: 202c1b2a4c442dfb6a6f3f8a784ad3b037fdd4d0 Parents: bb57091 Author: Claus Ibsen <davscl...@apache.org> Authored: Wed Oct 5 22:35:36 2016 -0400 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed Oct 5 22:35:36 2016 -0400 ---------------------------------------------------------------------- .../camel/test/junit4/CamelTestSupport.java | 44 ++++++++++++++++++++ .../camel/test/patterns/SimpleMockTest.java | 5 +++ .../src/test/resources/log4j2.properties | 1 + 3 files changed, 50 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/202c1b2a/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java ---------------------------------------------------------------------- diff --git a/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java b/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java index 1ac6918..15b6164 100644 --- a/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java +++ b/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java @@ -25,7 +25,10 @@ import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import java.util.Properties; +import java.util.Set; import java.util.concurrent.TimeUnit; +import javax.management.MBeanServer; +import javax.management.ObjectName; import javax.naming.Context; import javax.naming.InitialContext; @@ -40,10 +43,13 @@ import org.apache.camel.NoSuchEndpointException; import org.apache.camel.Predicate; import org.apache.camel.Processor; import org.apache.camel.ProducerTemplate; +import org.apache.camel.Route; import org.apache.camel.RoutesBuilder; import org.apache.camel.Service; import org.apache.camel.ServiceStatus; import org.apache.camel.api.management.mbean.ManagedCamelContextMBean; +import org.apache.camel.api.management.mbean.ManagedProcessMBean; +import org.apache.camel.api.management.mbean.ManagedRouteMBean; import org.apache.camel.builder.AdviceWithRouteBuilder; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; @@ -387,11 +393,49 @@ public abstract class CamelTestSupport extends TestSupport { String xml = managedCamelContext.dumpRoutesCoverageAsXml(); String combined = "<camelRouteCoverage>\n" + gatherTestDetailsAsXml() + xml + "\n</camelRouteCoverage>"; + + File file = new File(dir); // ensure dir exists file.mkdirs(); file = new File(dir, name); + // gather summary of number of routes and whether any routes was missing + long total = managedCamelContext.getExchangesTotal(); + + StringBuffer sb = new StringBuffer(); + sb.append("Coverage Summary\n"); + sb.append("\tCamelContext: ").append(managedCamelContext.getCamelId()).append(" Total: ").append(total).append("\n"); + + // loop routes and get their total counter + for (Route route : context.getRoutes()) { + String id = route.getId(); + ManagedRouteMBean managedRoute = context.getManagedRoute(id, ManagedRouteMBean.class); + Long routeTotal = managedRoute.getExchangesTotal(); + int routePercentage = Math.round(total / routeTotal * 100); + sb.append("\tRoute: ").append(id).append(" Total: ").append(routeTotal).append(" Percentage: ").append(routePercentage).append("%\n"); + // find all the processors + + MBeanServer server = context.getManagementStrategy().getManagementAgent().getMBeanServer(); + if (server != null) { + String domain = context.getManagementStrategy().getManagementAgent().getMBeanServerDefaultDomain(); + ObjectName on = new ObjectName(domain + ":context=" + context.getManagementName() + ",type=processors,name=*"); + Set<ObjectName> names = server.queryNames(on, null); + for (ObjectName o : names) { + String pName = o.getKeyProperty("name"); + pName = ObjectName.unquote(pName); + ManagedProcessMBean managedProcessor = context.getManagedProcessor(pName, ManagedProcessMBean.class); + if (managedProcessor != null) { + String pid = managedProcessor.getProcessorId(); + Long pTotal = managedProcessor.getExchangesTotal(); + int pPercentage = Math.round(total / pTotal * 100); + sb.append("\tProcessor: ").append(pid).append(" Total: ").append(pTotal).append(" Percentage: ").append(pPercentage).append("%\n"); + } + } + } + } + log.info(sb.toString()); + log.info("Dumping route coverage to file: " + file); InputStream is = new ByteArrayInputStream(combined.getBytes()); OutputStream os = new FileOutputStream(file, false); http://git-wip-us.apache.org/repos/asf/camel/blob/202c1b2a/components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleMockTest.java ---------------------------------------------------------------------- diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleMockTest.java b/components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleMockTest.java index 1c3e00b..a1582a6 100644 --- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleMockTest.java +++ b/components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleMockTest.java @@ -23,6 +23,11 @@ import org.junit.Test; public class SimpleMockTest extends CamelTestSupport { + @Override + public boolean isDumpRouteCoverage() { + return true; + } + @Test public void testMock() throws Exception { getMockEndpoint("mock:result").expectedBodiesReceived("Hello World"); http://git-wip-us.apache.org/repos/asf/camel/blob/202c1b2a/components/camel-test/src/test/resources/log4j2.properties ---------------------------------------------------------------------- diff --git a/components/camel-test/src/test/resources/log4j2.properties b/components/camel-test/src/test/resources/log4j2.properties index 3cd5cc7..50d9866 100644 --- a/components/camel-test/src/test/resources/log4j2.properties +++ b/components/camel-test/src/test/resources/log4j2.properties @@ -28,3 +28,4 @@ logger.springframework.name = org.springframework logger.springframework.level = WARN rootLogger.level = INFO rootLogger.appenderRef.file.ref = file +rootLogger.appenderRef.out.ref = out