From 7ec4252e8a8ec055b9310c3db0233e217b7e43c0 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Wed, 21 Nov 2007 08:08:45 +0000 Subject: [PATCH] Improve error logging and reporting git-svn-id: https://svn.argeo.org/slc/trunk@728 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../AsynchronousTreeTestResultListener.java | 39 +++++++++++++++---- .../core/test/tree/TreeTestResultLogger.java | 22 ++++++++++- .../core/test/tree/htmlreport/ResultPage.java | 19 ++++++++- .../slc/core/test/tree/htmlreport/style.css | 2 +- .../hibernate/test/SimpleResultPart.hbm.xml | 1 + .../argeo/slc/example/junit/TestAntBuild.java | 3 ++ org.argeo.slc/src/test/slc/conf/testDatas.xml | 10 +++++ .../slc/root/Category1/SubCategory2/build.xml | 9 ++++- 8 files changed, 93 insertions(+), 12 deletions(-) diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/AsynchronousTreeTestResultListener.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/AsynchronousTreeTestResultListener.java index 0773e409f..c22c11029 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/AsynchronousTreeTestResultListener.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/AsynchronousTreeTestResultListener.java @@ -19,10 +19,22 @@ public abstract class AsynchronousTreeTestResultListener implements private Vector partStructs = new Vector(); private Thread thread; + private Boolean synchronous = false; + + protected AsynchronousTreeTestResultListener(){ + this(false); + } + + protected AsynchronousTreeTestResultListener(Boolean synchronousByDefault){ + synchronous = synchronousByDefault; + } + /** Starts the underlying thread. */ public void init() { - thread = new Thread(this); - thread.start(); + if (!synchronous) { + thread = new Thread(this); + thread.start(); + } } /** Finish the remaining and destroy */ @@ -47,11 +59,16 @@ public abstract class AsynchronousTreeTestResultListener implements public final void resultPartAdded(TestResult testResult, TestResultPart testResultPart) { TreeTestResult result = (TreeTestResult) testResult; - synchronized (partStructs) { - partStructs.add(new PartStruct(result.getCurrentPath(), - (NumericTRId) result.getTestResultId(), testResultPart, - result)); - partStructs.notifyAll(); + PartStruct partStruct = new PartStruct(result.getCurrentPath(), + (NumericTRId) result.getTestResultId(), testResultPart, result); + + if (!synchronous) { + synchronized (partStructs) { + partStructs.add(partStruct); + partStructs.notifyAll(); + } + } else { + resultPartAdded(partStruct); } } @@ -109,4 +126,12 @@ public abstract class AsynchronousTreeTestResultListener implements } + public Boolean getSynchronous() { + return synchronous; + } + + public void setSynchronous(Boolean synchronous) { + this.synchronous = synchronous; + } + } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultLogger.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultLogger.java index 0e2d28825..c09c18ac3 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultLogger.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResultLogger.java @@ -3,6 +3,10 @@ package org.argeo.slc.core.test.tree; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.argeo.slc.core.test.SimpleResultPart; +import org.argeo.slc.core.test.TestResultPart; +import org.argeo.slc.core.test.TestStatus; + /** * Listener logging tree-based test results to the underlying logging system. * @@ -12,11 +16,25 @@ import org.apache.commons.logging.LogFactory; public class TreeTestResultLogger extends AsynchronousTreeTestResultListener { private static Log log = LogFactory.getLog(TreeTestResultLogger.class); + + public TreeTestResultLogger() { + super(true); + } @Override protected void resultPartAdded(PartStruct partStruct) { - log.info(partStruct.part + " - " + partStruct.resultId + ":" - + partStruct.path); + TestResultPart part = partStruct.part; + String msg = partStruct.part + " - " + partStruct.resultId + ":" + + partStruct.path; + if (part.getStatus().equals(TestStatus.PASSED)) { + log.info(msg); + } else if (part.getStatus().equals(TestStatus.FAILED)) { + log.warn(msg); + } else if (part.getStatus().equals(TestStatus.ERROR)) { + log.error(msg, ((SimpleResultPart) part).getException()); + } else { + log.error("Unknow test status: " + msg); + } } } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/ResultPage.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/ResultPage.java index dbf047568..22fa7a39c 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/ResultPage.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/ResultPage.java @@ -1,11 +1,14 @@ package org.argeo.slc.core.test.tree.htmlreport; import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; import java.util.Date; import java.util.SortedMap; import java.util.TreeMap; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -140,7 +143,7 @@ class ResultPage { for (TestResultPart part : subList.getParts()) { SimpleResultPart sPart = (SimpleResultPart) part; String clss = ""; - if (sPart.getStatus().equals(SimpleResultPart.PASSED)) { + if (sPart.getStatus().equals(TestStatus.PASSED)) { clss = "passed"; } else { clss = "failed"; @@ -151,6 +154,20 @@ class ResultPage { buf.append(""); buf.append(sPart.getMessage()); + if (sPart.getStatus().equals(TestStatus.ERROR)) { + buf + .append("

An unexpected error prevented the test to run properly."); + Throwable exception = sPart.getException(); + if (exception != null) { + StringWriter writer = new StringWriter(); + exception.printStackTrace(new PrintWriter(writer)); + buf.append("

");
+						buf.append(writer.toString());
+						buf.append("
"); + IOUtils.closeQuietly(writer); + } + buf.append("

"); + } buf.append(""); buf.append("\n"); diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/style.css b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/style.css index f2c3a7176..134c6b55d 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/style.css +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/htmlreport/style.css @@ -38,7 +38,7 @@ th { td { font-size: 12px; padding: 1px; - vertical-align: middle; + vertical-align: top; text-align: left; } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/test/SimpleResultPart.hbm.xml b/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/test/SimpleResultPart.hbm.xml index f1fc40794..7b9fd7952 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/test/SimpleResultPart.hbm.xml +++ b/org.argeo.slc/src/main/java/org/argeo/slc/hibernate/test/SimpleResultPart.hbm.xml @@ -9,5 +9,6 @@ + \ No newline at end of file diff --git a/org.argeo.slc/src/test/java/org/argeo/slc/example/junit/TestAntBuild.java b/org.argeo.slc/src/test/java/org/argeo/slc/example/junit/TestAntBuild.java index 10c215979..8fa1219e8 100644 --- a/org.argeo.slc/src/test/java/org/argeo/slc/example/junit/TestAntBuild.java +++ b/org.argeo.slc/src/test/java/org/argeo/slc/example/junit/TestAntBuild.java @@ -55,6 +55,9 @@ public class TestAntBuild extends TestCase { "/root/Category1/SubCategory2/testSimple/slc.test0", 1, TestStatus.FAILED, "Compare nato-expected.txt with nato-reached.txt"); + assertPart(testResult1, + "/root/Category1/SubCategory2/testError/slc.test0", 0, + TestStatus.ERROR, "Execute example appli"); numericTRId.setValue(2l); TreeTestResult testResult2 = (TreeTestResult) testResultDao diff --git a/org.argeo.slc/src/test/slc/conf/testDatas.xml b/org.argeo.slc/src/test/slc/conf/testDatas.xml index 13963f30b..b0e7eeeed 100644 --- a/org.argeo.slc/src/test/slc/conf/testDatas.xml +++ b/org.argeo.slc/src/test/slc/conf/testDatas.xml @@ -23,6 +23,16 @@ value="${slc.workDir}/data/expected/un-expected.txt" /> + + + + + + A Test project - + @@ -49,4 +49,11 @@ + + + + + + + \ No newline at end of file -- 2.39.5