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. |