|
From: <mwl...@us...> - 2007-08-20 17:23:38
|
Revision: 490
http://cishell.svn.sourceforge.net/cishell/?rev=490&view=rev
Author: mwlinnem
Date: 2007-08-20 10:23:33 -0700 (Mon, 20 Aug 2007)
Log Message:
-----------
We now redirect log errors into the reports.
Modified Paths:
--------------
trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/DefaultTestRunner.java
Added Paths:
-----------
trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/fakelogger/
trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/fakelogger/FakeLogCIShellContext.java
trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/fakelogger/FakeLogService.java
trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/fakelogger/LogEntry.java
Modified: trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/DefaultTestRunner.java
===================================================================
--- trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/DefaultTestRunner.java 2007-08-20 17:13:04 UTC (rev 489)
+++ trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/DefaultTestRunner.java 2007-08-20 17:23:33 UTC (rev 490)
@@ -15,6 +15,8 @@
import org.cishell.framework.data.Data;
import org.cishell.testing.convertertester.core.converter.graph.ConverterPath;
import org.cishell.testing.convertertester.core.tester.graphcomparison.ComparisonResult;
+import org.cishell.testing.convertertester.core.tester2.fakelogger.LogEntry;
+import org.cishell.testing.convertertester.core.tester2.fakelogger.FakeLogCIShellContext;
import org.cishell.testing.convertertester.core.tester2.graphcomparison.NewGraphComparer;
import org.cishell.testing.convertertester.core.tester2.reportgen.results.FilePassResult;
import org.cishell.testing.convertertester.core.tester2.reportgen.results.converter.ConvFailureInfo;
@@ -120,35 +122,50 @@
Data[] currentData = getFilePathData(startData);
AlgorithmFactory[] converterAlgs = converters.getPathAsAlgorithms();
+ /*
+ * rig up fake CISHellContext so we can get ahold of
+ * errors sent to logger.
+ */
+ FakeLogCIShellContext fakeCContext =
+ new FakeLogCIShellContext(testData.getContext());
+
AlgorithmFactory currentConverterAlg = converterAlgs[0];
try {
for (int ii = 0; ii < converterAlgs.length; ii++) {
currentConverterAlg = converterAlgs[ii];
+
Algorithm currentAlgorithm =
currentConverterAlg.createAlgorithm(currentData,
- new Hashtable(), testData.getContext());
+ new Hashtable(), fakeCContext);
currentData = currentAlgorithm.execute();
- if (currentData == null) {
+ /*
+ * There are two ways that converters generally fail.
+ * 1) They throw an exception that propagates out into
+ * this method, where we catch it.
+ * 2) They catch their own exception, send it to the logger,
+ * and return null.
+ */
+ if (currentData == null || currentData[0].getData() == null) {
String converterName = converters.getConverterName(ii);
+
+ String explanation = "Result data is null. \n";
+
+
+ if (fakeCContext.hasLogEntries()) {
+ String logText = extractLogText(fakeCContext);
+ explanation += "Error log contains the following: \n" +
+ logText;
+ } else {
+ explanation += "No errors logged. Cause unknown. \n";
+ }
+
ConvFailureInfo failInfo = new ConvFailureInfo(
- "Result data is null. " +
- "Check NWB GUI Console for specific error.",
- converterName);
+ explanation, converterName);
+
ConvertResult result = new ConvertResult(failInfo);
return result;
}
-
- Data currentDataImpl = (Data) currentData[0];
- if (currentDataImpl.getData() == null) {
- String converterName = converters.getConverterName(ii);
- ConvFailureInfo failInfo = new ConvFailureInfo(
- "Contents of result data is null. " +
- "Check NWB GUI Console for specific error.",
- converterName);
- ConvertResult result = new ConvertResult(failInfo);
- return result;
- }
}
} catch (Throwable t) {
ConvFailureInfo failInfo = new ConvFailureInfo(getStackTrace(t),
@@ -218,4 +235,23 @@
}
}
-}
+
+ private String extractLogText(FakeLogCIShellContext fakeLogContext) {
+ LogEntry[] entries = fakeLogContext.getLogEntries();
+
+ String logText = "";
+
+ for (int ii = 0; ii < entries.length; ii++) {
+ LogEntry entry = entries[ii];
+
+ Throwable e = entry.getThrowable();
+ String message = entry.getMessage();
+
+ logText += message + "\n";
+ logText += getStackTrace(e) + "\n";
+ logText += "\n";
+ }
+
+ return logText;
+ }
+}
Added: trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/fakelogger/FakeLogCIShellContext.java
===================================================================
--- trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/fakelogger/FakeLogCIShellContext.java (rev 0)
+++ trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/fakelogger/FakeLogCIShellContext.java 2007-08-20 17:23:33 UTC (rev 490)
@@ -0,0 +1,41 @@
+package org.cishell.testing.convertertester.core.tester2.fakelogger;
+
+import org.cishell.framework.CIShellContext;
+import org.osgi.service.log.LogService;
+
+public class FakeLogCIShellContext implements CIShellContext {
+
+ private CIShellContext realCContext;
+
+ private FakeLogService fakeLogger;
+
+ public FakeLogCIShellContext(CIShellContext realCContext) {
+ this.realCContext = realCContext;
+ this.fakeLogger = new FakeLogService((LogService) realCContext
+ .getService(LogService.class.getName()));
+
+
+ }
+
+ public Object getService(String service) {
+ if (service.equals(LogService.class.getName())) {
+ return this.fakeLogger;
+ } else {
+ return this.realCContext.getService(service);
+ }
+ }
+
+
+
+ public LogEntry[] getLogEntries() {
+ return this.fakeLogger.getLogEntries();
+ }
+
+ public void clearLogEntires() {
+ this.fakeLogger.clearLogEntries();
+ }
+
+ public boolean hasLogEntries() {
+ return this.fakeLogger.hasLogEntries();
+ }
+}
Added: trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/fakelogger/FakeLogService.java
===================================================================
--- trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/fakelogger/FakeLogService.java (rev 0)
+++ trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/fakelogger/FakeLogService.java 2007-08-20 17:23:33 UTC (rev 490)
@@ -0,0 +1,69 @@
+package org.cishell.testing.convertertester.core.tester2.fakelogger;
+
+import java.util.ArrayList;
+
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.log.LogService;
+
+import java.util.List;
+
+public class FakeLogService implements LogService {
+
+
+ private List logMessages;
+ private LogService realLog;
+
+ public FakeLogService(LogService realLogService) {
+ this.realLog = realLogService;
+
+ this.logMessages = new ArrayList();
+ }
+
+ public void log(int level, String message) {
+ if (level == LOG_ERROR) {
+ this.logMessages.add(new LogEntry(message));
+ } else {
+ this.realLog.log(level, message);
+ }
+ }
+
+ public void log(int level, String message, Throwable exception) {
+ if (level == LOG_ERROR) {
+ this.logMessages.add(new LogEntry(message, exception));
+ } else {
+ this.realLog.log(level, message, exception);
+ }
+ }
+
+ public void log(ServiceReference sr, int level, String message) {
+ if (level == LOG_ERROR) {
+ this.logMessages.add(new LogEntry(message));
+ } else {
+ this.realLog.log(sr, level, message);
+ }
+ }
+
+ public void log(ServiceReference sr, int level, String message,
+ Throwable exception) {
+ if (level == LOG_ERROR) {
+ this.logMessages.add(new LogEntry(message, exception));
+ } else {
+ this.realLog.log(sr, level, message, exception);
+ }
+ }
+
+ public LogEntry[] getLogEntries() {
+ return (LogEntry[])
+ this.logMessages.toArray(new LogEntry[0]);
+ }
+
+ public void clearLogEntries() {
+ this.logMessages = new ArrayList();
+ }
+
+ public boolean hasLogEntries() {
+ return this.logMessages.size() > 0;
+ }
+
+
+}
Added: trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/fakelogger/LogEntry.java
===================================================================
--- trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/fakelogger/LogEntry.java (rev 0)
+++ trunk/testing/org.cishell.testing.convertertester.core.new/src/org/cishell/testing/convertertester/core/tester2/fakelogger/LogEntry.java 2007-08-20 17:23:33 UTC (rev 490)
@@ -0,0 +1,30 @@
+package org.cishell.testing.convertertester.core.tester2.fakelogger;
+
+/**
+ * Too much unnecessary stuff in real official OSGi LogEntry.
+ * This should do.
+ * @author mwlinnem
+ *
+ */
+public class LogEntry {
+
+ private String message;
+ private Throwable exception;
+
+ public LogEntry(String message) {
+ this(message, null);
+ }
+
+ public LogEntry(String message, Throwable exception) {
+ this.message = message;
+ this.exception = exception;
+ }
+
+ public String getMessage() {
+ return this.message;
+ }
+
+ public Throwable getThrowable() {
+ return this.exception;
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|