You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ek...@apache.org on 2005/08/12 17:23:08 UTC
svn commit: r232310 [74/92] - in /beehive/trunk/controls/test: common/
infra/gtlf/ infra/gtlf/xsl/ infra/mantis/ infra/tch/ infra/tch/messages/
infra/tch/runtime/ infra/tch/schema/ perf/ perf/bin/ perf/cases/
perf/ctlsrc/org/apache/beehive/controls/per...
Modified: beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/ExtensibleGTLFLogger.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/ExtensibleGTLFLogger.java?rev=232310&r1=232309&r2=232310&view=diff
==============================================================================
--- beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/ExtensibleGTLFLogger.java (original)
+++ beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/ExtensibleGTLFLogger.java Fri Aug 12 08:12:28 2005
@@ -1,37 +1,37 @@
-package org.apache.beehive.test.tools.tch.logger;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.text.SimpleDateFormat;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-// import org.apache.beehive.test.tools.tch.util.TchUtils;
-// import org.apache.beehive.test.tools.tch.util.StringUtils;
-// import org.apache.beehive.test.tools.tch.util.TestResult;
-// import org.apache.beehive.test.tools.tch.util.gtlf.GTLFConstants;
-// import org.apache.beehive.test.tools.tch.util.gtlf.GTLFResultStripper;
-// import org.apache.beehive.test.tools.tch.util.gtlf.GTLFTestResultAdapter;
-// import org.apache.beehive.test.tools.tch.util.xml.XMLUtil;
-
-import org.apache.beehive.test.tools.tch.util.gtlf.GTLFProperties;
-
-/**
- * Logger class that writes the GTLF format
- *
- * @version 1.0, Mar 3, 2001
- */
-public class ExtensibleGTLFLogger
- extends GTLFLogger
-{
- public void init(Map m) {
- // add this in here to fetch the GTLFProperties since we don't have LoggerFactory calling it for us
- props.putAll(GTLFProperties.getTestLogAttrsMap());
- props.putAll(GTLFProperties.getHeaderAttrsMap());
- props.putAll(GTLFProperties.getEnvironmentMap());
- super.init(m);
- }
-}
+package org.apache.beehive.test.tools.tch.logger;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.text.SimpleDateFormat;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+// import org.apache.beehive.test.tools.tch.util.TchUtils;
+// import org.apache.beehive.test.tools.tch.util.StringUtils;
+// import org.apache.beehive.test.tools.tch.util.TestResult;
+// import org.apache.beehive.test.tools.tch.util.gtlf.GTLFConstants;
+// import org.apache.beehive.test.tools.tch.util.gtlf.GTLFResultStripper;
+// import org.apache.beehive.test.tools.tch.util.gtlf.GTLFTestResultAdapter;
+// import org.apache.beehive.test.tools.tch.util.xml.XMLUtil;
+
+import org.apache.beehive.test.tools.tch.util.gtlf.GTLFProperties;
+
+/**
+ * Logger class that writes the GTLF format
+ *
+ * @version 1.0, Mar 3, 2001
+ */
+public class ExtensibleGTLFLogger
+ extends GTLFLogger
+{
+ public void init(Map m) {
+ // add this in here to fetch the GTLFProperties since we don't have LoggerFactory calling it for us
+ props.putAll(GTLFProperties.getTestLogAttrsMap());
+ props.putAll(GTLFProperties.getHeaderAttrsMap());
+ props.putAll(GTLFProperties.getEnvironmentMap());
+ super.init(m);
+ }
+}
Propchange: beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/ExtensibleGTLFLogger.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/FileLogger.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/FileLogger.java?rev=232310&r1=232309&r2=232310&view=diff
==============================================================================
--- beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/FileLogger.java (original)
+++ beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/FileLogger.java Fri Aug 12 08:12:28 2005
@@ -1,129 +1,129 @@
-package org.apache.beehive.test.tools.tch.logger;
-
-import java.io.FileWriter;
-import java.io.PrintWriter;
-import java.text.SimpleDateFormat;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.beehive.test.tools.tch.util.TestResult;
-
-/**
- * FileLogger class.
- * <p>
- * It extracts a fileName from the information got within its init methods,
- * creates a printwriter on that file, and then creates a PrintWriterLogger
- * for that printWriter.
- * <p>
- * The class of the printWriter logger is also got from the information
- * available within the init methods
- *
- * @version 1.0, Mar 3, 2001
- */
-public class FileLogger implements Logger
-{
-
- public static final String PRINTWRITER_CLASSNAME_KEY =
- "printwriter-logger-classname",
- BASE_FILENAME_KEY = "file-prefix",
- FILE_EXTENSION_KEY = "file-postfix",
- FILENAME_KEY = "file-name";
-
- protected int minLogLevel;
-
- protected PrintWriter writer;
- protected String sep = System.getProperty("line.separator");
- protected Map props = new HashMap();
-
- private PrintWriterLogger lg = null;
-
- public void init(Map m)
- {
- props.putAll(m);
- }
-
- public void setMinLogLevel(int logLevel)
- {
- this.minLogLevel = logLevel;
- if (lg != null)
- lg.setMinLogLevel(logLevel);
- }
-
- public void setDateFormat(SimpleDateFormat in)
- {
- if (lg != null)
- lg.setDateFormat(in);
- }
-
- /**
- * It extracts a fileName from the information got within its init methods,
- * creates a printwriter on that file, and then creates a PrintWriterLogger
- * for that printWriter.
- * The class of the printWriter logger is also got from the information
- * available within the init methods
- */
- public void open() throws LoggerRuntimeException
- {
- //FIXME - remove this ugly try { } catch block.
- try
- {
- String pwClassName =
- (String)props.get(PARAM_PREFIX + PRINTWRITER_CLASSNAME_KEY);
- if (pwClassName == null)
- throw new LoggerRuntimeException(
- PRINTWRITER_CLASSNAME_KEY + " not defined for this logger");
- Class pwClass = Class.forName(pwClassName);
-
- String fName = (String)props.get(PARAM_PREFIX + FILENAME_KEY);
- if (fName == null)
- {
- String prefix = (String)props.get(PARAM_PREFIX + BASE_FILENAME_KEY);
- if (prefix == null)
- {
- prefix = "tch-log";
- }
- String postfix = (String)props.get(PARAM_PREFIX + FILE_EXTENSION_KEY);
- if (postfix == null)
- {
- int lastIndx = pwClassName.lastIndexOf(".");
- postfix = pwClassName.substring(lastIndx + 1) + ".log";
- }
- fName = prefix + "." + postfix;
- }
- writer = new PrintWriter(new FileWriter(fName, false), true);
-
- lg = (PrintWriterLogger)pwClass.newInstance();
- lg.init(props);
- lg.setPrintWriter(writer);
- lg.setMinLogLevel(this.minLogLevel);
- lg.open();
- }
- catch (Exception ex)
- {
- throw new LoggerRuntimeException(ex);
- }
- }
-
- public void logInit(Map m)
- {
- if (!m.containsKey(NUM_TESTS_SENT))
- {
- HashMap m2 = new HashMap(m);
- m2.put(NUM_TESTS_SENT, m.get(EXPECTED_NUM_TESTS));
- m = m2;
- }
- lg.logInit(m);
- }
-
- public synchronized void log(TestResult res) throws LoggerRuntimeException
- {
- lg.log(res);
- }
-
- public void close() throws LoggerRuntimeException
- {
- lg.close();
- writer.flush();
- writer.close();
- }
-}
+package org.apache.beehive.test.tools.tch.logger;
+
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.text.SimpleDateFormat;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.beehive.test.tools.tch.util.TestResult;
+
+/**
+ * FileLogger class.
+ * <p>
+ * It extracts a fileName from the information got within its init methods,
+ * creates a printwriter on that file, and then creates a PrintWriterLogger
+ * for that printWriter.
+ * <p>
+ * The class of the printWriter logger is also got from the information
+ * available within the init methods
+ *
+ * @version 1.0, Mar 3, 2001
+ */
+public class FileLogger implements Logger
+{
+
+ public static final String PRINTWRITER_CLASSNAME_KEY =
+ "printwriter-logger-classname",
+ BASE_FILENAME_KEY = "file-prefix",
+ FILE_EXTENSION_KEY = "file-postfix",
+ FILENAME_KEY = "file-name";
+
+ protected int minLogLevel;
+
+ protected PrintWriter writer;
+ protected String sep = System.getProperty("line.separator");
+ protected Map props = new HashMap();
+
+ private PrintWriterLogger lg = null;
+
+ public void init(Map m)
+ {
+ props.putAll(m);
+ }
+
+ public void setMinLogLevel(int logLevel)
+ {
+ this.minLogLevel = logLevel;
+ if (lg != null)
+ lg.setMinLogLevel(logLevel);
+ }
+
+ public void setDateFormat(SimpleDateFormat in)
+ {
+ if (lg != null)
+ lg.setDateFormat(in);
+ }
+
+ /**
+ * It extracts a fileName from the information got within its init methods,
+ * creates a printwriter on that file, and then creates a PrintWriterLogger
+ * for that printWriter.
+ * The class of the printWriter logger is also got from the information
+ * available within the init methods
+ */
+ public void open() throws LoggerRuntimeException
+ {
+ //FIXME - remove this ugly try { } catch block.
+ try
+ {
+ String pwClassName =
+ (String)props.get(PARAM_PREFIX + PRINTWRITER_CLASSNAME_KEY);
+ if (pwClassName == null)
+ throw new LoggerRuntimeException(
+ PRINTWRITER_CLASSNAME_KEY + " not defined for this logger");
+ Class pwClass = Class.forName(pwClassName);
+
+ String fName = (String)props.get(PARAM_PREFIX + FILENAME_KEY);
+ if (fName == null)
+ {
+ String prefix = (String)props.get(PARAM_PREFIX + BASE_FILENAME_KEY);
+ if (prefix == null)
+ {
+ prefix = "tch-log";
+ }
+ String postfix = (String)props.get(PARAM_PREFIX + FILE_EXTENSION_KEY);
+ if (postfix == null)
+ {
+ int lastIndx = pwClassName.lastIndexOf(".");
+ postfix = pwClassName.substring(lastIndx + 1) + ".log";
+ }
+ fName = prefix + "." + postfix;
+ }
+ writer = new PrintWriter(new FileWriter(fName, false), true);
+
+ lg = (PrintWriterLogger)pwClass.newInstance();
+ lg.init(props);
+ lg.setPrintWriter(writer);
+ lg.setMinLogLevel(this.minLogLevel);
+ lg.open();
+ }
+ catch (Exception ex)
+ {
+ throw new LoggerRuntimeException(ex);
+ }
+ }
+
+ public void logInit(Map m)
+ {
+ if (!m.containsKey(NUM_TESTS_SENT))
+ {
+ HashMap m2 = new HashMap(m);
+ m2.put(NUM_TESTS_SENT, m.get(EXPECTED_NUM_TESTS));
+ m = m2;
+ }
+ lg.logInit(m);
+ }
+
+ public synchronized void log(TestResult res) throws LoggerRuntimeException
+ {
+ lg.log(res);
+ }
+
+ public void close() throws LoggerRuntimeException
+ {
+ lg.close();
+ writer.flush();
+ writer.close();
+ }
+}
Propchange: beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/FileLogger.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/GTLFLogger.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/GTLFLogger.java?rev=232310&r1=232309&r2=232310&view=diff
==============================================================================
--- beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/GTLFLogger.java (original)
+++ beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/GTLFLogger.java Fri Aug 12 08:12:28 2005
@@ -1,702 +1,702 @@
-package org.apache.beehive.test.tools.tch.logger;
-
-import java.text.SimpleDateFormat;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-import org.apache.beehive.test.tools.tch.util.TchUtils;
-import org.apache.beehive.test.tools.tch.util.GeneralUtil;
-import org.apache.beehive.test.tools.tch.util.TestResult;
-import org.apache.beehive.test.tools.tch.util.gtlf.GTLFConstants;
-import org.apache.beehive.test.tools.tch.util.gtlf.GTLFResultStripper;
-import org.apache.beehive.test.tools.tch.util.gtlf.GTLFTestResultAdapter;
-import org.apache.beehive.test.tools.tch.util.xml.XMLUtil;
-
-/**
- * Logger class that writes the GTLF format
- *
- * @version 1.0, Mar 3, 2001
- */
-public class GTLFLogger
- extends PrintWriterLoggerAdapter
- implements GTLFConstants
-{
-
- public static final String DEFAULT_DTD_REF =
- "<!DOCTYPE "
- + TEST_LOG_ELEMENT
- + " PUBLIC \"-//BEA Systems, Inc.//DTD GTLF 1.0//EN\""
- + " \"http://incubator.apache.org/beehive/dtd/gtlf/gtlf-config-2.0.dtd,\">";
-
- public static final SimpleDateFormat XML_LOG_DATEFORMAT =
- new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
-
- // store the global test-log env here
- private Map globalEnv = new HashMap();
- private Map GTLFHeaderParams = new HashMap();
-
- public void open()
- {
- if (props.get(UNIQUE_RUN_ID) == null)
- {
- String runid = null;
- try
- {
- runid = TchUtils.getUniqueRunID();
- // FIXME - don't catch Exception
- }
- catch (Exception ex)
- {
- ex.printStackTrace();
- }
- props.put(PARAM_PREFIX + PARAM_RUNID, runid);
- }
- else
- {
- props.put(PARAM_PREFIX + PARAM_RUNID, props.get(UNIQUE_RUN_ID));
- }
-
- // use GTLFResultStripper to strip of the PARAM_PREFIX
- if (processor == null)
- {
- processor = new GTLFResultStripper();
- }
- else if (!(processor instanceof GTLFResultStripper))
- {
- processor = new GTLFResultStripper().appendResultProcessor(processor);
- }
-
- GTLFHeaderParams = processor.processGeneric(props);
- if (processor.errorWhileProcessing())
- {
- throw new LoggerRuntimeException(processor.getException());
- }
- globalEnv = getEnvironment(GTLFHeaderParams);
-
- writer.println(getStartXMLLog());
- writer.flush();
- }
-
- public void close()
- {
- writer.println(getEndXMLLog());
- writer.flush();
- }
-
- /**
- * the header-info is logged here
- */
- public void logInit(Map m)
- {
- // we do not want to override stuff in GTLFHeaderParams with null so
- // check that it really is in 'm'
- if (m.get(EXPECTED_NUM_TESTS) != null)
- {
- GTLFHeaderParams.put(PARAM_HEAD_RESULTCOUNT, m.get(EXPECTED_NUM_TESTS));
- }
- if (m.get(NUM_TESTS_SENT) != null)
- {
- GTLFHeaderParams.put(PARAM_HEAD_CHKSUM, m.get(NUM_TESTS_SENT));
- }
-
- StringBuffer buf = new StringBuffer();
- buf.append(" <").append(HEADER_INFO_ELEMENT).append(" ").append(sep);
-
- String[] keys =
- new String[] {
- PARAM_HEAD_EXECACCOUNT,
- PARAM_HEAD_EXECDATE,
- PARAM_HEAD_CHKSUM,
- PARAM_HEAD_RESULTCOUNT,
- PARAM_HEAD_HARNESSTYPE,
- PARAM_HEAD_IMPORTINFO,
- PARAM_HEAD_TESTRUNTYPE };
- for (int i = 0; i < keys.length; i++)
- {
- Object val = GTLFHeaderParams.get(keys[i]);
- val = (val == null ? "" : val.toString().trim());
- buf
- .append(" ")
- .append(keys[i])
- .append("=\"")
- .append(val)
- .append("\"")
- .append(sep);
- }
- buf.append(" />").append(sep);
- buf.append(sep);
- writer.println(buf.toString());
- writer.flush();
- }
-
- protected void logIndividualRes(TestResult res)
- {
- if (!res.isOutcome())
- return;
-
- // HACK, should not be outcome, dammit
- // Looks like Scratch is no longer an outcome,
- // 99% we can remove this
- if (res.getType() == SCRATCH_LEVEL_INT)
- {
- return;
- }
-
- // don't want these for now in GTLF
- if (res.getType() == VALIDATION_SKIP_LEVEL_INT)
- {
- // return;
- }
-
- GTLFTestResultAdapter GTLFres =
- (GTLFTestResultAdapter)processor.processResult(res);
-
- if (processor.errorWhileProcessing())
- {
- Exception e = processor.getException();
- processor.resetError();
- throw new LoggerRuntimeException(e);
- }
-
- writer.println(getResultAsXML(GTLFres));
- writer.flush();
- }
-
- protected String getStartXMLLog() throws LoggerRuntimeException
- {
- StringBuffer buf = new StringBuffer();
-
- // Allow for override of dtd url
- String use_remote = System.getProperty("gtlf.dtd.use.remote");
- String dtd_ref;
- // If gtlf.dtd.use.remote is not set or is true, then use the remote dtd
- if ( use_remote == null || use_remote.toLowerCase().equals("true") )
- {
- String remote_dtd = System.getProperty("gtlf.dtd.remote");
- dtd_ref = ( ( remote_dtd == null ) ?
- DEFAULT_DTD_REF : "<!DOCTYPE " + TEST_LOG_ELEMENT
- + " PUBLIC \"-//BEA Systems, Inc.//DTD GTLF 1.0//EN\""
- + " \"" + remote_dtd + "\">");
- }else{
- String local_dtd = System.getProperty("gtlf.dtd.local");
- if (local_dtd == null)
- {
- System.out.println("WARNING: gtlf.dtd.local is not set, so using default: ./gtlf-config-2.0.dtd");
- System.out.println(" If this file does not exist, you may experience unexpected errors.");
- System.out.println(" To prevent any such errors, please set gtlf.dtd.local to a relative");
- System.out.println(" path to the GTLF DTD file.");
- dtd_ref= "<!DOCTYPE " + TEST_LOG_ELEMENT
- + " PUBLIC \"-//BEA Systems, Inc.//DTD GTLF 1.0//EN\""
- + " \"gtlf-config-2.0.dtd\">";
- }else{
- dtd_ref= "<!DOCTYPE " + TEST_LOG_ELEMENT
- + " PUBLIC \"-//BEA Systems, Inc.//DTD GTLF 1.0//EN\""
- + " \"" + local_dtd + "\">";
- }
- }
-
- buf
- .append("<?xml version=\"1.0\"?>")
- .append(sep)
- .append(dtd_ref)
- .append(sep)
- .append(sep)
- .append("<" + TEST_LOG_ELEMENT + " ")
- .append(sep);
- String testType =
- (GTLFHeaderParams.get(PARAM_TESTTYPE) == null
- ? "AUTOMATED"
- : ((String)GTLFHeaderParams.get(PARAM_TESTTYPE)).trim());
- buf
- .append(" ")
- .append(PARAM_TESTTYPE)
- .append("=\"")
- .append(testType)
- .append("\"")
- .append(sep);
- String[] keys =
- new String[] {
- PARAM_RELEASE,
- PARAM_LOAD,
- PARAM_BRANCH,
- PARAM_PHASE,
- PARAM_CHANGE_NO,
- PARAM_ANALYZER,
- PARAM_HOSTNAME,
- PARAM_TOPTESTFILE,
- PARAM_RUNMODIFIER,
- PARAM_RUNID };
- for (int i = 0; i < keys.length; i++)
- {
- String val = (String)GTLFHeaderParams.get(keys[i]);
- val = (val == null ? "" : val.trim());
- buf.append(" ").append(keys[i]).append("=\"").append(val).append(
- "\"").append(
- sep);
- }
- buf.append(">").append(sep);
- buf.append(sep);
-
- // see if we have environment values to log
- if (!globalEnv.isEmpty())
- {
- buf.append(" <").append(ENVIRONMENT_ELEMENT).append(">").append(sep);
- Iterator i = globalEnv.keySet().iterator();
- while (i.hasNext())
- {
- String key = (String)i.next();
- String trimkey = key.trim();
- if (trimkey.startsWith(PARAM_PREFIX))
- {
- trimkey = trimkey.substring(PARAM_PREFIX.length());
- }
- buf
- .append(" <")
- .append(ENV_ATT_ELEMENT)
- .append(" ")
- .append(PARAM_NAME)
- .append("=\"")
- .append(trimkey)
- .append("\" ")
- .append(PARAM_VALUE)
- .append("=\"")
- .append(((String)globalEnv.get(key)).trim())
- .append("\"/>")
- .append(sep);
- }
- buf.append(" </").append(ENVIRONMENT_ELEMENT).append(">").append(
- sep).append(
- sep);
- }
-
- return buf.toString();
- }
-
- protected String getEndXMLLog()
- {
- return "</" + TEST_LOG_ELEMENT + ">";
- }
-
- protected String getResultAsXML(GTLFTestResultAdapter res)
- {
- StringBuffer outputMsg =
- new StringBuffer(
- GeneralUtil.StringOrNullToEmptyString(res.getOutputMessage()));
- if (res.getDetails() != null && res.getDetails().trim().length() > 0)
- {
- outputMsg.append(sep).append(sep).append(res.getDetails().trim()).append(
- sep);
- }
-
- String status = LoggerUtils.asLogLevelString(res.getType()).trim();
- Long duration = res.getDuration();
-
- String reviewState =
- (res.getReviewState() == null ? null : res.getReviewState().trim());
- String comments =
- (res.getComments() == null ? null : res.getComments().trim());
- String bugID = (res.getBugID() == null ? null : res.getBugID().trim());
- String outcomeRes = "FALSE";
-
- String logicalName = (res.getName() == null ? null : res.getName().trim());
-
- // hack because we don't want the testunit to be part of the logical name in GTLF
- // should fix our code so we don't prepend the testunit to the logical name until
- // we get to the logger code. this can be fixed pretty easily by adding two more things
- // to the result object: logical-test-name and subtest name. name, in result object,
- // should be renamed to "fullName" or something.
- if (logicalName != null && res.getTestUnitName() != null)
- {
- String testUnitName = res.getTestUnitName();
- int logicalNameLength = logicalName.length() - testUnitName.length();
- if (logicalNameLength > 0)
- logicalName = logicalName.substring(testUnitName.length() + 1);
- }
-
- if (res.isOutcome())
- {
- outcomeRes = "TRUE";
- }
-
- StringBuffer buf = new StringBuffer();
- buf
- .append(" <")
- .append(TEST_RESULT_ELEMENT)
- .append(sep)
- .append(" ")
- .append(PARAM_RESULT_EXECTIME)
- .append("=\"")
- .append(new java.sql.Timestamp(res.getTimeStamp().getTime()).toString())
- .append("\"")
- .append(sep)
- .append(" ")
- .append(PARAM_RESULT_RESULT)
- .append("=\"")
- .append(status)
- .append("\"")
- .append(sep);
-
- String resultinfo = res.getResultInfo();
- if (resultinfo != null) {
- buf
- .append(" ")
- .append(PARAM_RESULT_RESULTINFO)
- .append("=\"")
- .append(resultinfo)
- .append("\"")
- .append(sep);
- }
- buf
- .append(" ")
- .append(PARAM_RESULT_ISDONE)
- .append("=\"")
- .append(outcomeRes)
- .append("\"")
- .append(sep);
-
- if (logicalName != null)
- {
- buf
- .append(" ")
- .append(PARAM_RESULT_LOGICAL_NAME)
- .append("=\"")
- .append(logicalName)
- .append("\"")
- .append(sep);
- }
-
- if (duration != null)
- {
- buf
- .append(" ")
- .append(PARAM_RESULT_DURATION)
- .append("=\"")
- .append(String.valueOf(duration))
- .append("\"")
- .append(sep);
- }
- if (reviewState != null && reviewState.length() > 0)
- {
- buf
- .append(" ")
- .append(PARAM_RESULT_REVIEWSTATE)
- .append("=\"")
- .append(reviewState)
- .append("\"")
- .append(sep);
- }
- if (bugID != null && bugID.length() > 0)
- {
- buf
- .append(" ")
- .append(PARAM_RESULT_CRLIST)
- .append("=\"")
- .append(bugID)
- .append("\"")
- .append(sep);
- }
- buf.append(" >").append(sep);
- buf.append(" <").append(TEST_CASE_ELEMENT).append(sep);
- // hack - see if test-case is set. if it is, use it, else use
- // the regular (logical) name (which is actually the test-point name)
- String testCaseName = res.getTestCaseName();
- if (testCaseName != null)
- {
- String subtestName = res.getSubtestName();
- if (subtestName != null)
- {
- testCaseName += "." + subtestName;
- }
- }
- else
- {
- testCaseName = res.getName();
- }
-
- buf
- .append(" ")
- .append(PARAM_TEST_CASE_NAME)
- .append("=\"")
- .append(testCaseName)
- .append("\"")
- .append(sep)
- .append(" ")
- .append(PARAM_TEST_UNIT)
- .append("=\"")
- .append(res.getTestUnitName())
- .append("\"")
- .append(sep)
- .append(" ")
- .append(PARAM_TEST_PATH)
- .append("=\"")
- .append(res.getSourcePath())
- .append("\"")
- .append(sep)
- .append(" />")
- .append(sep);
-
- // <environment>
- Map testEnv = getUpdatedValues(globalEnv, res.getEnvironment());
- if (!testEnv.isEmpty())
- {
- buf.append(" <").append(ENVIRONMENT_ELEMENT).append(">").append(sep);
- Iterator i = testEnv.keySet().iterator();
- while (i.hasNext())
- {
- String key = (String)i.next();
- String trimkey = key.trim();
- if (trimkey.startsWith(PARAM_PREFIX))
- {
- trimkey = trimkey.substring(PARAM_PREFIX.length());
- }
- buf
- .append(" <")
- .append(ENV_ATT_ELEMENT)
- .append(" ")
- .append(PARAM_NAME)
- .append("=\"")
- .append(trimkey)
- .append("\" ")
- .append(PARAM_VALUE)
- .append("=\"")
- .append(((String)testEnv.get(key)).trim())
- .append("\"/>")
- .append(sep);
- }
- buf.append(" </").append(ENVIRONMENT_ELEMENT).append(">").append(
- sep).append(
- sep);
- }
-
- // <test-parameters>
- Map params = res.getParameters();
- if (params != null && params.size() > 0)
- {
- // we want test parameters to be sorted
- TreeMap sortedParams = new TreeMap(params);
- StringBuffer buf2 = new StringBuffer();
- for (Iterator itr = sortedParams.keySet().iterator(); itr.hasNext();)
- {
- Object key1 = itr.next();
- Object value1 = sortedParams.get(key1);
- if (value1 == null)
- continue;
- buf2.append(key1.toString()).append("=").append(
- value1.toString()).append(
- sep);
- }
- buf.append(" <").append(TEST_PARAMETERS_ELEMENT).append(">").append(
- sep);
- buf.append(XMLUtil.escape(buf2.toString()));
- buf.append("</").append(TEST_PARAMETERS_ELEMENT).append(">").append(sep);
- }
-
- buf.append(" <").append(EXECUTION_OUTPUT_ELEMENT).append(" ");
-
- boolean setErrorName = false;
- if (res.getErrorName() != null)
- {
- buf
- .append(" ")
- .append(PARAM_OUTPUT_ERRORNAME)
- .append("=\"")
- .append(XMLUtil.escape(res.getErrorName()))
- .append("\">")
- .append(sep);
- setErrorName = true;
- }
-
- if (res.hasThrowable())
- {
- Throwable thr = res.getThrowable();
- if (!setErrorName)
- {
- // if no error name passed explicitly, use exception class name, if we have one
- buf
- .append(" ")
- .append(PARAM_OUTPUT_ERRORNAME)
- .append("=\"")
- .append(thr.getClass().getName())
- .append("\">")
- .append(sep);
- }
- buf
- .append(" <")
- .append(OUTPUT_DETAILS_ELEMENT)
- .append(">")
- .append(XMLUtil.escape(outputMsg.toString()))
- .append(sep);
- buf.append(XMLUtil.escape(res.getStackTrace()));
- }
- else
- {
- if (!setErrorName)
- {
- buf.append(">"); // close execution-output
- }
-
- buf
- .append(" <")
- .append(OUTPUT_DETAILS_ELEMENT)
- .append(">")
- .append(XMLUtil.escape(outputMsg.toString()))
- .append(sep);
- }
- buf
- .append(" </")
- .append(OUTPUT_DETAILS_ELEMENT)
- .append(">")
- .append(sep)
- .append(" </")
- .append(EXECUTION_OUTPUT_ELEMENT)
- .append(">")
- .append(sep);
-
- if (comments != null && comments.length() > 0)
- {
- buf
- .append(" <")
- .append(REVIEWER_COMMENTS_ELEMENT)
- .append(">")
- .append(sep)
- .append(XMLUtil.escape(comments))
- .append("</")
- .append(REVIEWER_COMMENTS_ELEMENT)
- .append(">")
- .append(sep);
- }
-
- String replicationInfo =
- GeneralUtil.emptyStringOrNullToNull(res.getReplicationInfo());
- String cmdline = GeneralUtil.emptyStringOrNullToNull(res.getCommandLine());
- String winCmdline =
- GeneralUtil.emptyStringOrNullToNull(res.getWinCommandLine());
- if (cmdline != null)
- {
- buf.append(" <").append(TEST_REPLICATION_ELEMENT).append(">").append(
- sep);
-
- if (replicationInfo != null)
- {
- buf
- .append(" <")
- .append(INFO_ELEMENT)
- .append(">")
- .append(XMLUtil.escape(replicationInfo))
- .append("</")
- .append(INFO_ELEMENT)
- .append(">")
- .append(sep);
- }
-
- // print unix command line, checked above that it is not null
- buf
- .append(" <")
- .append(COMMAND_LINE_ELEMENT)
- .append(">")
- .append(sep)
- .append(" <")
- .append(UNIX_ELEMENT)
- .append(">")
- .append(XMLUtil.escape(cmdline))
- .append("</")
- .append(UNIX_ELEMENT)
- .append(">")
- .append(sep);
-
- // print windows specific command line, if we have one
- if (winCmdline != null)
- {
- buf
- .append(" <")
- .append(WIN_ELEMENT)
- .append(">")
- .append(XMLUtil.escape(winCmdline))
- .append("</")
- .append(WIN_ELEMENT)
- .append(">")
- .append(sep);
- }
-
- buf
- .append(" </")
- .append(COMMAND_LINE_ELEMENT)
- .append(">")
- .append(sep);
-
- buf
- .append(" </")
- .append(TEST_REPLICATION_ELEMENT)
- .append(">")
- .append(sep);
- }
-
- buf.append(" </").append(TEST_RESULT_ELEMENT).append(">").append(sep);
- return buf.toString();
- }
-
- // anything the logger does not explicitly know about is an env
- private Map getEnvironment(Map inMap)
- {
- Map envMap = new HashMap();
- if (inMap != null)
- {
- String[] params =
- new String[] {
- PARAM_RUNID,
- PARAM_TESTTYPE,
- PARAM_CHANGE_NO,
- PARAM_RELEASE,
- PARAM_LOAD,
- PARAM_BRANCH,
- PARAM_PHASE,
- PARAM_ANALYZER,
- PARAM_HOSTNAME,
- PARAM_TOPTESTFILE,
- PARAM_RUNMODIFIER,
- PARAM_HEAD_TESTRUNTYPE,
- PARAM_HEAD_CHKSUM,
- PARAM_HEAD_RESULTCOUNT,
- PARAM_HEAD_EXECACCOUNT,
- PARAM_HEAD_EXECDATE,
- PARAM_HEAD_IMPORTERNAME,
- PARAM_HEAD_HARNESSTYPE,
- PARAM_HEAD_IMPORTINFO };
- Set knownParamsSet = new HashSet();
- for (int i = 0; i < params.length; i++)
- {
- knownParamsSet.add(params[i]);
- }
- Iterator i = inMap.keySet().iterator();
- while (i.hasNext())
- {
- String key = (String)i.next();
- if (!knownParamsSet.contains(key))
- {
- envMap.put(key, inMap.get(key));
- }
- }
- }
- return envMap;
- }
-
- private Map getUpdatedValues(Map oldMap, Map newMap)
- {
- Map resultMap = new TreeMap();
- Iterator iter = newMap.keySet().iterator();
- while (iter.hasNext())
- {
- String key = (String)iter.next();
- // take it if it does not exist in old map, or if
- // value in newMap is different from the one in oldMap
- if (oldMap.get(key) == null || !oldMap.get(key).equals(newMap.get(key)))
- resultMap.put(key, newMap.get(key));
-
- }
- return resultMap;
- }
-}
+package org.apache.beehive.test.tools.tch.logger;
+
+import java.text.SimpleDateFormat;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+import org.apache.beehive.test.tools.tch.util.TchUtils;
+import org.apache.beehive.test.tools.tch.util.GeneralUtil;
+import org.apache.beehive.test.tools.tch.util.TestResult;
+import org.apache.beehive.test.tools.tch.util.gtlf.GTLFConstants;
+import org.apache.beehive.test.tools.tch.util.gtlf.GTLFResultStripper;
+import org.apache.beehive.test.tools.tch.util.gtlf.GTLFTestResultAdapter;
+import org.apache.beehive.test.tools.tch.util.xml.XMLUtil;
+
+/**
+ * Logger class that writes the GTLF format
+ *
+ * @version 1.0, Mar 3, 2001
+ */
+public class GTLFLogger
+ extends PrintWriterLoggerAdapter
+ implements GTLFConstants
+{
+
+ public static final String DEFAULT_DTD_REF =
+ "<!DOCTYPE "
+ + TEST_LOG_ELEMENT
+ + " PUBLIC \"-//BEA Systems, Inc.//DTD GTLF 1.0//EN\""
+ + " \"http://incubator.apache.org/beehive/dtd/gtlf/gtlf-config-2.0.dtd,\">";
+
+ public static final SimpleDateFormat XML_LOG_DATEFORMAT =
+ new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
+
+ // store the global test-log env here
+ private Map globalEnv = new HashMap();
+ private Map GTLFHeaderParams = new HashMap();
+
+ public void open()
+ {
+ if (props.get(UNIQUE_RUN_ID) == null)
+ {
+ String runid = null;
+ try
+ {
+ runid = TchUtils.getUniqueRunID();
+ // FIXME - don't catch Exception
+ }
+ catch (Exception ex)
+ {
+ ex.printStackTrace();
+ }
+ props.put(PARAM_PREFIX + PARAM_RUNID, runid);
+ }
+ else
+ {
+ props.put(PARAM_PREFIX + PARAM_RUNID, props.get(UNIQUE_RUN_ID));
+ }
+
+ // use GTLFResultStripper to strip of the PARAM_PREFIX
+ if (processor == null)
+ {
+ processor = new GTLFResultStripper();
+ }
+ else if (!(processor instanceof GTLFResultStripper))
+ {
+ processor = new GTLFResultStripper().appendResultProcessor(processor);
+ }
+
+ GTLFHeaderParams = processor.processGeneric(props);
+ if (processor.errorWhileProcessing())
+ {
+ throw new LoggerRuntimeException(processor.getException());
+ }
+ globalEnv = getEnvironment(GTLFHeaderParams);
+
+ writer.println(getStartXMLLog());
+ writer.flush();
+ }
+
+ public void close()
+ {
+ writer.println(getEndXMLLog());
+ writer.flush();
+ }
+
+ /**
+ * the header-info is logged here
+ */
+ public void logInit(Map m)
+ {
+ // we do not want to override stuff in GTLFHeaderParams with null so
+ // check that it really is in 'm'
+ if (m.get(EXPECTED_NUM_TESTS) != null)
+ {
+ GTLFHeaderParams.put(PARAM_HEAD_RESULTCOUNT, m.get(EXPECTED_NUM_TESTS));
+ }
+ if (m.get(NUM_TESTS_SENT) != null)
+ {
+ GTLFHeaderParams.put(PARAM_HEAD_CHKSUM, m.get(NUM_TESTS_SENT));
+ }
+
+ StringBuffer buf = new StringBuffer();
+ buf.append(" <").append(HEADER_INFO_ELEMENT).append(" ").append(sep);
+
+ String[] keys =
+ new String[] {
+ PARAM_HEAD_EXECACCOUNT,
+ PARAM_HEAD_EXECDATE,
+ PARAM_HEAD_CHKSUM,
+ PARAM_HEAD_RESULTCOUNT,
+ PARAM_HEAD_HARNESSTYPE,
+ PARAM_HEAD_IMPORTINFO,
+ PARAM_HEAD_TESTRUNTYPE };
+ for (int i = 0; i < keys.length; i++)
+ {
+ Object val = GTLFHeaderParams.get(keys[i]);
+ val = (val == null ? "" : val.toString().trim());
+ buf
+ .append(" ")
+ .append(keys[i])
+ .append("=\"")
+ .append(val)
+ .append("\"")
+ .append(sep);
+ }
+ buf.append(" />").append(sep);
+ buf.append(sep);
+ writer.println(buf.toString());
+ writer.flush();
+ }
+
+ protected void logIndividualRes(TestResult res)
+ {
+ if (!res.isOutcome())
+ return;
+
+ // HACK, should not be outcome, dammit
+ // Looks like Scratch is no longer an outcome,
+ // 99% we can remove this
+ if (res.getType() == SCRATCH_LEVEL_INT)
+ {
+ return;
+ }
+
+ // don't want these for now in GTLF
+ if (res.getType() == VALIDATION_SKIP_LEVEL_INT)
+ {
+ // return;
+ }
+
+ GTLFTestResultAdapter GTLFres =
+ (GTLFTestResultAdapter)processor.processResult(res);
+
+ if (processor.errorWhileProcessing())
+ {
+ Exception e = processor.getException();
+ processor.resetError();
+ throw new LoggerRuntimeException(e);
+ }
+
+ writer.println(getResultAsXML(GTLFres));
+ writer.flush();
+ }
+
+ protected String getStartXMLLog() throws LoggerRuntimeException
+ {
+ StringBuffer buf = new StringBuffer();
+
+ // Allow for override of dtd url
+ String use_remote = System.getProperty("gtlf.dtd.use.remote");
+ String dtd_ref;
+ // If gtlf.dtd.use.remote is not set or is true, then use the remote dtd
+ if ( use_remote == null || use_remote.toLowerCase().equals("true") )
+ {
+ String remote_dtd = System.getProperty("gtlf.dtd.remote");
+ dtd_ref = ( ( remote_dtd == null ) ?
+ DEFAULT_DTD_REF : "<!DOCTYPE " + TEST_LOG_ELEMENT
+ + " PUBLIC \"-//BEA Systems, Inc.//DTD GTLF 1.0//EN\""
+ + " \"" + remote_dtd + "\">");
+ }else{
+ String local_dtd = System.getProperty("gtlf.dtd.local");
+ if (local_dtd == null)
+ {
+ System.out.println("WARNING: gtlf.dtd.local is not set, so using default: ./gtlf-config-2.0.dtd");
+ System.out.println(" If this file does not exist, you may experience unexpected errors.");
+ System.out.println(" To prevent any such errors, please set gtlf.dtd.local to a relative");
+ System.out.println(" path to the GTLF DTD file.");
+ dtd_ref= "<!DOCTYPE " + TEST_LOG_ELEMENT
+ + " PUBLIC \"-//BEA Systems, Inc.//DTD GTLF 1.0//EN\""
+ + " \"gtlf-config-2.0.dtd\">";
+ }else{
+ dtd_ref= "<!DOCTYPE " + TEST_LOG_ELEMENT
+ + " PUBLIC \"-//BEA Systems, Inc.//DTD GTLF 1.0//EN\""
+ + " \"" + local_dtd + "\">";
+ }
+ }
+
+ buf
+ .append("<?xml version=\"1.0\"?>")
+ .append(sep)
+ .append(dtd_ref)
+ .append(sep)
+ .append(sep)
+ .append("<" + TEST_LOG_ELEMENT + " ")
+ .append(sep);
+ String testType =
+ (GTLFHeaderParams.get(PARAM_TESTTYPE) == null
+ ? "AUTOMATED"
+ : ((String)GTLFHeaderParams.get(PARAM_TESTTYPE)).trim());
+ buf
+ .append(" ")
+ .append(PARAM_TESTTYPE)
+ .append("=\"")
+ .append(testType)
+ .append("\"")
+ .append(sep);
+ String[] keys =
+ new String[] {
+ PARAM_RELEASE,
+ PARAM_LOAD,
+ PARAM_BRANCH,
+ PARAM_PHASE,
+ PARAM_CHANGE_NO,
+ PARAM_ANALYZER,
+ PARAM_HOSTNAME,
+ PARAM_TOPTESTFILE,
+ PARAM_RUNMODIFIER,
+ PARAM_RUNID };
+ for (int i = 0; i < keys.length; i++)
+ {
+ String val = (String)GTLFHeaderParams.get(keys[i]);
+ val = (val == null ? "" : val.trim());
+ buf.append(" ").append(keys[i]).append("=\"").append(val).append(
+ "\"").append(
+ sep);
+ }
+ buf.append(">").append(sep);
+ buf.append(sep);
+
+ // see if we have environment values to log
+ if (!globalEnv.isEmpty())
+ {
+ buf.append(" <").append(ENVIRONMENT_ELEMENT).append(">").append(sep);
+ Iterator i = globalEnv.keySet().iterator();
+ while (i.hasNext())
+ {
+ String key = (String)i.next();
+ String trimkey = key.trim();
+ if (trimkey.startsWith(PARAM_PREFIX))
+ {
+ trimkey = trimkey.substring(PARAM_PREFIX.length());
+ }
+ buf
+ .append(" <")
+ .append(ENV_ATT_ELEMENT)
+ .append(" ")
+ .append(PARAM_NAME)
+ .append("=\"")
+ .append(trimkey)
+ .append("\" ")
+ .append(PARAM_VALUE)
+ .append("=\"")
+ .append(((String)globalEnv.get(key)).trim())
+ .append("\"/>")
+ .append(sep);
+ }
+ buf.append(" </").append(ENVIRONMENT_ELEMENT).append(">").append(
+ sep).append(
+ sep);
+ }
+
+ return buf.toString();
+ }
+
+ protected String getEndXMLLog()
+ {
+ return "</" + TEST_LOG_ELEMENT + ">";
+ }
+
+ protected String getResultAsXML(GTLFTestResultAdapter res)
+ {
+ StringBuffer outputMsg =
+ new StringBuffer(
+ GeneralUtil.StringOrNullToEmptyString(res.getOutputMessage()));
+ if (res.getDetails() != null && res.getDetails().trim().length() > 0)
+ {
+ outputMsg.append(sep).append(sep).append(res.getDetails().trim()).append(
+ sep);
+ }
+
+ String status = LoggerUtils.asLogLevelString(res.getType()).trim();
+ Long duration = res.getDuration();
+
+ String reviewState =
+ (res.getReviewState() == null ? null : res.getReviewState().trim());
+ String comments =
+ (res.getComments() == null ? null : res.getComments().trim());
+ String bugID = (res.getBugID() == null ? null : res.getBugID().trim());
+ String outcomeRes = "FALSE";
+
+ String logicalName = (res.getName() == null ? null : res.getName().trim());
+
+ // hack because we don't want the testunit to be part of the logical name in GTLF
+ // should fix our code so we don't prepend the testunit to the logical name until
+ // we get to the logger code. this can be fixed pretty easily by adding two more things
+ // to the result object: logical-test-name and subtest name. name, in result object,
+ // should be renamed to "fullName" or something.
+ if (logicalName != null && res.getTestUnitName() != null)
+ {
+ String testUnitName = res.getTestUnitName();
+ int logicalNameLength = logicalName.length() - testUnitName.length();
+ if (logicalNameLength > 0)
+ logicalName = logicalName.substring(testUnitName.length() + 1);
+ }
+
+ if (res.isOutcome())
+ {
+ outcomeRes = "TRUE";
+ }
+
+ StringBuffer buf = new StringBuffer();
+ buf
+ .append(" <")
+ .append(TEST_RESULT_ELEMENT)
+ .append(sep)
+ .append(" ")
+ .append(PARAM_RESULT_EXECTIME)
+ .append("=\"")
+ .append(new java.sql.Timestamp(res.getTimeStamp().getTime()).toString())
+ .append("\"")
+ .append(sep)
+ .append(" ")
+ .append(PARAM_RESULT_RESULT)
+ .append("=\"")
+ .append(status)
+ .append("\"")
+ .append(sep);
+
+ String resultinfo = res.getResultInfo();
+ if (resultinfo != null) {
+ buf
+ .append(" ")
+ .append(PARAM_RESULT_RESULTINFO)
+ .append("=\"")
+ .append(resultinfo)
+ .append("\"")
+ .append(sep);
+ }
+ buf
+ .append(" ")
+ .append(PARAM_RESULT_ISDONE)
+ .append("=\"")
+ .append(outcomeRes)
+ .append("\"")
+ .append(sep);
+
+ if (logicalName != null)
+ {
+ buf
+ .append(" ")
+ .append(PARAM_RESULT_LOGICAL_NAME)
+ .append("=\"")
+ .append(logicalName)
+ .append("\"")
+ .append(sep);
+ }
+
+ if (duration != null)
+ {
+ buf
+ .append(" ")
+ .append(PARAM_RESULT_DURATION)
+ .append("=\"")
+ .append(String.valueOf(duration))
+ .append("\"")
+ .append(sep);
+ }
+ if (reviewState != null && reviewState.length() > 0)
+ {
+ buf
+ .append(" ")
+ .append(PARAM_RESULT_REVIEWSTATE)
+ .append("=\"")
+ .append(reviewState)
+ .append("\"")
+ .append(sep);
+ }
+ if (bugID != null && bugID.length() > 0)
+ {
+ buf
+ .append(" ")
+ .append(PARAM_RESULT_CRLIST)
+ .append("=\"")
+ .append(bugID)
+ .append("\"")
+ .append(sep);
+ }
+ buf.append(" >").append(sep);
+ buf.append(" <").append(TEST_CASE_ELEMENT).append(sep);
+ // hack - see if test-case is set. if it is, use it, else use
+ // the regular (logical) name (which is actually the test-point name)
+ String testCaseName = res.getTestCaseName();
+ if (testCaseName != null)
+ {
+ String subtestName = res.getSubtestName();
+ if (subtestName != null)
+ {
+ testCaseName += "." + subtestName;
+ }
+ }
+ else
+ {
+ testCaseName = res.getName();
+ }
+
+ buf
+ .append(" ")
+ .append(PARAM_TEST_CASE_NAME)
+ .append("=\"")
+ .append(testCaseName)
+ .append("\"")
+ .append(sep)
+ .append(" ")
+ .append(PARAM_TEST_UNIT)
+ .append("=\"")
+ .append(res.getTestUnitName())
+ .append("\"")
+ .append(sep)
+ .append(" ")
+ .append(PARAM_TEST_PATH)
+ .append("=\"")
+ .append(res.getSourcePath())
+ .append("\"")
+ .append(sep)
+ .append(" />")
+ .append(sep);
+
+ // <environment>
+ Map testEnv = getUpdatedValues(globalEnv, res.getEnvironment());
+ if (!testEnv.isEmpty())
+ {
+ buf.append(" <").append(ENVIRONMENT_ELEMENT).append(">").append(sep);
+ Iterator i = testEnv.keySet().iterator();
+ while (i.hasNext())
+ {
+ String key = (String)i.next();
+ String trimkey = key.trim();
+ if (trimkey.startsWith(PARAM_PREFIX))
+ {
+ trimkey = trimkey.substring(PARAM_PREFIX.length());
+ }
+ buf
+ .append(" <")
+ .append(ENV_ATT_ELEMENT)
+ .append(" ")
+ .append(PARAM_NAME)
+ .append("=\"")
+ .append(trimkey)
+ .append("\" ")
+ .append(PARAM_VALUE)
+ .append("=\"")
+ .append(((String)testEnv.get(key)).trim())
+ .append("\"/>")
+ .append(sep);
+ }
+ buf.append(" </").append(ENVIRONMENT_ELEMENT).append(">").append(
+ sep).append(
+ sep);
+ }
+
+ // <test-parameters>
+ Map params = res.getParameters();
+ if (params != null && params.size() > 0)
+ {
+ // we want test parameters to be sorted
+ TreeMap sortedParams = new TreeMap(params);
+ StringBuffer buf2 = new StringBuffer();
+ for (Iterator itr = sortedParams.keySet().iterator(); itr.hasNext();)
+ {
+ Object key1 = itr.next();
+ Object value1 = sortedParams.get(key1);
+ if (value1 == null)
+ continue;
+ buf2.append(key1.toString()).append("=").append(
+ value1.toString()).append(
+ sep);
+ }
+ buf.append(" <").append(TEST_PARAMETERS_ELEMENT).append(">").append(
+ sep);
+ buf.append(XMLUtil.escape(buf2.toString()));
+ buf.append("</").append(TEST_PARAMETERS_ELEMENT).append(">").append(sep);
+ }
+
+ buf.append(" <").append(EXECUTION_OUTPUT_ELEMENT).append(" ");
+
+ boolean setErrorName = false;
+ if (res.getErrorName() != null)
+ {
+ buf
+ .append(" ")
+ .append(PARAM_OUTPUT_ERRORNAME)
+ .append("=\"")
+ .append(XMLUtil.escape(res.getErrorName()))
+ .append("\">")
+ .append(sep);
+ setErrorName = true;
+ }
+
+ if (res.hasThrowable())
+ {
+ Throwable thr = res.getThrowable();
+ if (!setErrorName)
+ {
+ // if no error name passed explicitly, use exception class name, if we have one
+ buf
+ .append(" ")
+ .append(PARAM_OUTPUT_ERRORNAME)
+ .append("=\"")
+ .append(thr.getClass().getName())
+ .append("\">")
+ .append(sep);
+ }
+ buf
+ .append(" <")
+ .append(OUTPUT_DETAILS_ELEMENT)
+ .append(">")
+ .append(XMLUtil.escape(outputMsg.toString()))
+ .append(sep);
+ buf.append(XMLUtil.escape(res.getStackTrace()));
+ }
+ else
+ {
+ if (!setErrorName)
+ {
+ buf.append(">"); // close execution-output
+ }
+
+ buf
+ .append(" <")
+ .append(OUTPUT_DETAILS_ELEMENT)
+ .append(">")
+ .append(XMLUtil.escape(outputMsg.toString()))
+ .append(sep);
+ }
+ buf
+ .append(" </")
+ .append(OUTPUT_DETAILS_ELEMENT)
+ .append(">")
+ .append(sep)
+ .append(" </")
+ .append(EXECUTION_OUTPUT_ELEMENT)
+ .append(">")
+ .append(sep);
+
+ if (comments != null && comments.length() > 0)
+ {
+ buf
+ .append(" <")
+ .append(REVIEWER_COMMENTS_ELEMENT)
+ .append(">")
+ .append(sep)
+ .append(XMLUtil.escape(comments))
+ .append("</")
+ .append(REVIEWER_COMMENTS_ELEMENT)
+ .append(">")
+ .append(sep);
+ }
+
+ String replicationInfo =
+ GeneralUtil.emptyStringOrNullToNull(res.getReplicationInfo());
+ String cmdline = GeneralUtil.emptyStringOrNullToNull(res.getCommandLine());
+ String winCmdline =
+ GeneralUtil.emptyStringOrNullToNull(res.getWinCommandLine());
+ if (cmdline != null)
+ {
+ buf.append(" <").append(TEST_REPLICATION_ELEMENT).append(">").append(
+ sep);
+
+ if (replicationInfo != null)
+ {
+ buf
+ .append(" <")
+ .append(INFO_ELEMENT)
+ .append(">")
+ .append(XMLUtil.escape(replicationInfo))
+ .append("</")
+ .append(INFO_ELEMENT)
+ .append(">")
+ .append(sep);
+ }
+
+ // print unix command line, checked above that it is not null
+ buf
+ .append(" <")
+ .append(COMMAND_LINE_ELEMENT)
+ .append(">")
+ .append(sep)
+ .append(" <")
+ .append(UNIX_ELEMENT)
+ .append(">")
+ .append(XMLUtil.escape(cmdline))
+ .append("</")
+ .append(UNIX_ELEMENT)
+ .append(">")
+ .append(sep);
+
+ // print windows specific command line, if we have one
+ if (winCmdline != null)
+ {
+ buf
+ .append(" <")
+ .append(WIN_ELEMENT)
+ .append(">")
+ .append(XMLUtil.escape(winCmdline))
+ .append("</")
+ .append(WIN_ELEMENT)
+ .append(">")
+ .append(sep);
+ }
+
+ buf
+ .append(" </")
+ .append(COMMAND_LINE_ELEMENT)
+ .append(">")
+ .append(sep);
+
+ buf
+ .append(" </")
+ .append(TEST_REPLICATION_ELEMENT)
+ .append(">")
+ .append(sep);
+ }
+
+ buf.append(" </").append(TEST_RESULT_ELEMENT).append(">").append(sep);
+ return buf.toString();
+ }
+
+ // anything the logger does not explicitly know about is an env
+ private Map getEnvironment(Map inMap)
+ {
+ Map envMap = new HashMap();
+ if (inMap != null)
+ {
+ String[] params =
+ new String[] {
+ PARAM_RUNID,
+ PARAM_TESTTYPE,
+ PARAM_CHANGE_NO,
+ PARAM_RELEASE,
+ PARAM_LOAD,
+ PARAM_BRANCH,
+ PARAM_PHASE,
+ PARAM_ANALYZER,
+ PARAM_HOSTNAME,
+ PARAM_TOPTESTFILE,
+ PARAM_RUNMODIFIER,
+ PARAM_HEAD_TESTRUNTYPE,
+ PARAM_HEAD_CHKSUM,
+ PARAM_HEAD_RESULTCOUNT,
+ PARAM_HEAD_EXECACCOUNT,
+ PARAM_HEAD_EXECDATE,
+ PARAM_HEAD_IMPORTERNAME,
+ PARAM_HEAD_HARNESSTYPE,
+ PARAM_HEAD_IMPORTINFO };
+ Set knownParamsSet = new HashSet();
+ for (int i = 0; i < params.length; i++)
+ {
+ knownParamsSet.add(params[i]);
+ }
+ Iterator i = inMap.keySet().iterator();
+ while (i.hasNext())
+ {
+ String key = (String)i.next();
+ if (!knownParamsSet.contains(key))
+ {
+ envMap.put(key, inMap.get(key));
+ }
+ }
+ }
+ return envMap;
+ }
+
+ private Map getUpdatedValues(Map oldMap, Map newMap)
+ {
+ Map resultMap = new TreeMap();
+ Iterator iter = newMap.keySet().iterator();
+ while (iter.hasNext())
+ {
+ String key = (String)iter.next();
+ // take it if it does not exist in old map, or if
+ // value in newMap is different from the one in oldMap
+ if (oldMap.get(key) == null || !oldMap.get(key).equals(newMap.get(key)))
+ resultMap.put(key, newMap.get(key));
+
+ }
+ return resultMap;
+ }
+}
Propchange: beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/GTLFLogger.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LogDestination.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LogDestination.java?rev=232310&r1=232309&r2=232310&view=diff
==============================================================================
--- beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LogDestination.java (original)
+++ beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LogDestination.java Fri Aug 12 08:12:28 2005
@@ -1,20 +1,20 @@
-package org.apache.beehive.test.tools.tch.logger;
-
-/**
- */
-public class LogDestination
-{
- public static final LogDestination CONSOLE = new LogDestination();
- public static final LogDestination FILE = new LogDestination();
- public static final LogDestination JAR = new LogDestination();
-
- private LogDestination(){}
-
- public String toString()
- {
- if (this == CONSOLE) return "console";
- else if (this == FILE) return "file";
- else if (this == JAR) return "jar";
- else return "you will never see this";
- }
-}
+package org.apache.beehive.test.tools.tch.logger;
+
+/**
+ */
+public class LogDestination
+{
+ public static final LogDestination CONSOLE = new LogDestination();
+ public static final LogDestination FILE = new LogDestination();
+ public static final LogDestination JAR = new LogDestination();
+
+ private LogDestination(){}
+
+ public String toString()
+ {
+ if (this == CONSOLE) return "console";
+ else if (this == FILE) return "file";
+ else if (this == JAR) return "jar";
+ else return "you will never see this";
+ }
+}
Propchange: beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LogDestination.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LogType.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LogType.java?rev=232310&r1=232309&r2=232310&view=diff
==============================================================================
--- beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LogType.java (original)
+++ beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LogType.java Fri Aug 12 08:12:28 2005
@@ -1,26 +1,26 @@
-package org.apache.beehive.test.tools.tch.logger;
-
-/**
- */
-public class LogType
-{
- public static final LogType STANDARD = new LogType();
- public static final LogType DEBUG = new LogType();
- public static final LogType VERBOSE_DEBUG = new LogType();
- public static final LogType GTLF = new LogType();
- public static final LogType COMPARISON = new LogType();
- public static final LogType COMPOSITE_OUTPUT = new LogType();
-
- private LogType(){}
-
- public String toString()
- {
- if (this == STANDARD) return "standard log";
- else if (this == DEBUG) return "debug log";
- else if (this == VERBOSE_DEBUG) return "verbose debug log";
- else if (this == GTLF) return "gtlf log";
- else if (this == COMPARISON) return "comparison log";
- else if (this == COMPOSITE_OUTPUT) return "composite-output log";
- else return "you will never see this";
- }
-}
+package org.apache.beehive.test.tools.tch.logger;
+
+/**
+ */
+public class LogType
+{
+ public static final LogType STANDARD = new LogType();
+ public static final LogType DEBUG = new LogType();
+ public static final LogType VERBOSE_DEBUG = new LogType();
+ public static final LogType GTLF = new LogType();
+ public static final LogType COMPARISON = new LogType();
+ public static final LogType COMPOSITE_OUTPUT = new LogType();
+
+ private LogType(){}
+
+ public String toString()
+ {
+ if (this == STANDARD) return "standard log";
+ else if (this == DEBUG) return "debug log";
+ else if (this == VERBOSE_DEBUG) return "verbose debug log";
+ else if (this == GTLF) return "gtlf log";
+ else if (this == COMPARISON) return "comparison log";
+ else if (this == COMPOSITE_OUTPUT) return "composite-output log";
+ else return "you will never see this";
+ }
+}
Propchange: beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LogType.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/Logger.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/Logger.java?rev=232310&r1=232309&r2=232310&view=diff
==============================================================================
--- beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/Logger.java (original)
+++ beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/Logger.java Fri Aug 12 08:12:28 2005
@@ -1,52 +1,52 @@
-package org.apache.beehive.test.tools.tch.logger;
-
-import java.text.SimpleDateFormat;
-import java.util.Map;
-
-import org.apache.beehive.test.tools.tch.util.TchConstants;
-import org.apache.beehive.test.tools.tch.util.TestResult;
-
-/**
- * Logger interface.
- * <p>
- * <blockquote><pre>
- * The lifecycle is as below:
- newInstance()
- init (Map)
- init (Map)
- ...
- open ()
- logInit (Map)
- log (TestResult)
- log (TestResult)
- ...
- close ()
- * </pre></blockquote>
- *
- * @version 1.0, Mar 3, 2001
- */
-public interface Logger
- extends TchConstants
-{
-
- public void setDateFormat(SimpleDateFormat d);
-
- /** sets the minimum logLevel of this logger. */
- public void setMinLogLevel (int logLevel);
-
- /** can be called multiple times */
- public void init (Map m);
-
- /** open the logger */
- public void open ();
-
- /** The map here can contain an entry for EXPECTED_NUM_TESTS, among other information */
- public void logInit (Map m);
-
- /** log a testresult */
- public void log (TestResult res);
-
- /** close the logger */
- public void close () ;
-}
-
+package org.apache.beehive.test.tools.tch.logger;
+
+import java.text.SimpleDateFormat;
+import java.util.Map;
+
+import org.apache.beehive.test.tools.tch.util.TchConstants;
+import org.apache.beehive.test.tools.tch.util.TestResult;
+
+/**
+ * Logger interface.
+ * <p>
+ * <blockquote><pre>
+ * The lifecycle is as below:
+ newInstance()
+ init (Map)
+ init (Map)
+ ...
+ open ()
+ logInit (Map)
+ log (TestResult)
+ log (TestResult)
+ ...
+ close ()
+ * </pre></blockquote>
+ *
+ * @version 1.0, Mar 3, 2001
+ */
+public interface Logger
+ extends TchConstants
+{
+
+ public void setDateFormat(SimpleDateFormat d);
+
+ /** sets the minimum logLevel of this logger. */
+ public void setMinLogLevel (int logLevel);
+
+ /** can be called multiple times */
+ public void init (Map m);
+
+ /** open the logger */
+ public void open ();
+
+ /** The map here can contain an entry for EXPECTED_NUM_TESTS, among other information */
+ public void logInit (Map m);
+
+ /** log a testresult */
+ public void log (TestResult res);
+
+ /** close the logger */
+ public void close () ;
+}
+
Propchange: beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/Logger.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LoggerConfiguration.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LoggerConfiguration.java?rev=232310&r1=232309&r2=232310&view=diff
==============================================================================
--- beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LoggerConfiguration.java (original)
+++ beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LoggerConfiguration.java Fri Aug 12 08:12:28 2005
@@ -1,218 +1,218 @@
-package org.apache.beehive.test.tools.tch.logger;
-
-import java.io.File;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-import org.apache.beehive.test.tools.tch.core.AntProperties;
-import org.apache.beehive.test.tools.tch.util.xml.DomUtils;
-import org.apache.beehive.test.tools.tch.util.xml.NestedXMLProcessingException;
-import org.apache.beehive.test.tools.tch.util.xml.NestedXMLProcessingRuntimeException;
-
-/**
- * In memory representation of xml configuration file
- *
- */
-public class LoggerConfiguration
-{
- public static final String LOGGER_ROOT_ELEMENT = "loggers",
- LOGGER_ELEMENT_NAME = "logger",
- CLASSNAME_ATTR = "classname",
- STANDARD_LOG_VAL = "standard",
- VERBOSE_LOG_VAL = "verbose-debug",
- COMPOSITE_LOG_VAL = "composite-output",
- GTLF_LOG_VAL = "gtlf",
- JAR_LOG_VAL = "jar",
- COMPARISON_LOG_VAL = "clf",
- CONSOLE_VAL = "console",
- FILE_VAL = "file",
- PROPERTY_ELEMENT = "property",
- NAME_ATTR = "name",
- VALUE_ATTR = "value",
- LOG_TYPE_ATTR = "type",
- LOG_DEST_ATTR = "dest",
- LOG_TYPE_DEFAULT = STANDARD_LOG_VAL,
- LOG_DEST_DEFAULT = FILE_VAL;
-
- private static LoggerConfiguration conf = null;
-
- private Collection loggers = new HashSet();
- private File confFile = null;
-
- public static synchronized LoggerConfiguration getLoggerConfiguration(File f) throws ConfigurationFileNotFoundException
- {
- if (conf == null)
- {
- conf = new LoggerConfiguration();
- conf.init(f);
- }
- return conf;
- }
-
- public Collection getLoggerEntries()
- {
- return Collections.unmodifiableCollection(loggers);
- }
-
- public String toString()
- {
- return loggers.toString();
- }
-
- private LoggerConfiguration(){}
-
- private void init(File f) throws ConfigurationFileNotFoundException
- {
- Document root = loadRoot(f);
- parseLoggers(root);
- }
-
- private void parseLoggers(Document doc)
- {
- Element root =
- (Element)doc.getElementsByTagName(LOGGER_ROOT_ELEMENT).item(0);
- NodeList loggers =
- root.getElementsByTagName(LOGGER_ELEMENT_NAME);
- for (int i = 0; i < loggers.getLength(); i++)
- {
- Element loggerNode = (Element)loggers.item(i);
- String classname = loggerNode.getAttribute(CLASSNAME_ATTR);
- String logType = loggerNode.getAttribute(LOG_TYPE_ATTR);
- if (logType == null || logType.trim().length() == 0)
- logType = LOG_TYPE_DEFAULT;
- String logDest = loggerNode.getAttribute(LOG_DEST_ATTR);
- if (logDest == null || logDest.trim().length() == 0)
- logDest = LOG_DEST_DEFAULT;
- LoggerEntry entry = new LoggerEntry(classname, getLogType(logType), getLogDestination(logDest));
- // get nested properties
- NodeList properyNodes = loggerNode.getElementsByTagName(PROPERTY_ELEMENT);
- for (int j = 0; j < properyNodes.getLength(); j++)
- {
- Element propertyNode = (Element)properyNodes.item(j);
- String name = propertyNode.getAttribute(NAME_ATTR);
- String value = propertyNode.getAttribute(VALUE_ATTR);
- entry.addProperty(name, value);
- }
- registerLogger(entry);
- }
- }
-
- private void registerLogger(LoggerEntry entry)
- {
- loggers.add(entry);
- }
-
- private Document loadRoot(File f) throws ConfigurationFileNotFoundException
- {
- if (!f.exists())
- throw new ConfigurationFileNotFoundException(f.getAbsolutePath());
- try
- {
- return DomUtils.instantiateDom(f);
- }
- catch (NestedXMLProcessingException ex)
- {
- // parsing error
- throw new NestedXMLProcessingRuntimeException(ex);
- }
- }
-
- private LogDestination getLogDestination(String destAttr)
- {
- if (destAttr.equals(FILE_VAL))
- return LogDestination.FILE;
- else if (destAttr.equals(CONSOLE_VAL))
- return LogDestination.CONSOLE;
- else if (destAttr.equals(JAR_LOG_VAL))
- return LogDestination.JAR;
- throw new RuntimeException("Unknown log-dest: " + destAttr);
- }
-
- private LogType getLogType(String typeAttr)
- {
- if (typeAttr.equals(STANDARD_LOG_VAL))
- return LogType.STANDARD;
- else if (typeAttr.equals(GTLF_LOG_VAL))
- return LogType.GTLF;
- else if (typeAttr.equals(VERBOSE_LOG_VAL))
- return LogType.VERBOSE_DEBUG;
- else if (typeAttr.equals(COMPARISON_LOG_VAL))
- return LogType.COMPARISON;
- else if (typeAttr.equals(COMPOSITE_LOG_VAL))
- return LogType.COMPOSITE_OUTPUT;
- else throw new RuntimeException("Unknown log-type: " + typeAttr);
- }
-
- public static class ConfigurationFileNotFoundException extends Exception
- {
- public ConfigurationFileNotFoundException(String filename)
- {
- super("Could not find logger configuration file: " + filename);
- }
- }
-
- public static class LoggerEntry
- {
- private String className = null;
- private Map params = null;
- private LogType type = null;
- private LogDestination dest = LogDestination.FILE;
-
- public LoggerEntry(String classname, LogType inType, LogDestination inDest)
- {
- this(classname, inType, inDest, new HashMap());
- }
-
- public LoggerEntry(String inClassname, LogType inType, LogDestination inDest, Map inParams)
- {
- className = inClassname;
- params = inParams;
- type = inType;
- dest = inDest;
- }
-
- public void addProperty(String name, String value)
- {
- params.put(name, value);
- }
-
- public Map getProperties()
- {
- return params;
- }
-
- public String getClassname()
- {
- return className;
- }
-
- public LogType getType()
- {
- return type;
- }
-
- public LogDestination getDestination()
- {
- return dest;
- }
-
- public String toString()
- {
- return "classname: " + className + "\n" +
- "type: " + type + "\n" +
- "dest: " + dest + "\n" +
- "params: " + params;
- }
- }
-
-}
-
-
-
+package org.apache.beehive.test.tools.tch.logger;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import org.apache.beehive.test.tools.tch.core.AntProperties;
+import org.apache.beehive.test.tools.tch.util.xml.DomUtils;
+import org.apache.beehive.test.tools.tch.util.xml.NestedXMLProcessingException;
+import org.apache.beehive.test.tools.tch.util.xml.NestedXMLProcessingRuntimeException;
+
+/**
+ * In memory representation of xml configuration file
+ *
+ */
+public class LoggerConfiguration
+{
+ public static final String LOGGER_ROOT_ELEMENT = "loggers",
+ LOGGER_ELEMENT_NAME = "logger",
+ CLASSNAME_ATTR = "classname",
+ STANDARD_LOG_VAL = "standard",
+ VERBOSE_LOG_VAL = "verbose-debug",
+ COMPOSITE_LOG_VAL = "composite-output",
+ GTLF_LOG_VAL = "gtlf",
+ JAR_LOG_VAL = "jar",
+ COMPARISON_LOG_VAL = "clf",
+ CONSOLE_VAL = "console",
+ FILE_VAL = "file",
+ PROPERTY_ELEMENT = "property",
+ NAME_ATTR = "name",
+ VALUE_ATTR = "value",
+ LOG_TYPE_ATTR = "type",
+ LOG_DEST_ATTR = "dest",
+ LOG_TYPE_DEFAULT = STANDARD_LOG_VAL,
+ LOG_DEST_DEFAULT = FILE_VAL;
+
+ private static LoggerConfiguration conf = null;
+
+ private Collection loggers = new HashSet();
+ private File confFile = null;
+
+ public static synchronized LoggerConfiguration getLoggerConfiguration(File f) throws ConfigurationFileNotFoundException
+ {
+ if (conf == null)
+ {
+ conf = new LoggerConfiguration();
+ conf.init(f);
+ }
+ return conf;
+ }
+
+ public Collection getLoggerEntries()
+ {
+ return Collections.unmodifiableCollection(loggers);
+ }
+
+ public String toString()
+ {
+ return loggers.toString();
+ }
+
+ private LoggerConfiguration(){}
+
+ private void init(File f) throws ConfigurationFileNotFoundException
+ {
+ Document root = loadRoot(f);
+ parseLoggers(root);
+ }
+
+ private void parseLoggers(Document doc)
+ {
+ Element root =
+ (Element)doc.getElementsByTagName(LOGGER_ROOT_ELEMENT).item(0);
+ NodeList loggers =
+ root.getElementsByTagName(LOGGER_ELEMENT_NAME);
+ for (int i = 0; i < loggers.getLength(); i++)
+ {
+ Element loggerNode = (Element)loggers.item(i);
+ String classname = loggerNode.getAttribute(CLASSNAME_ATTR);
+ String logType = loggerNode.getAttribute(LOG_TYPE_ATTR);
+ if (logType == null || logType.trim().length() == 0)
+ logType = LOG_TYPE_DEFAULT;
+ String logDest = loggerNode.getAttribute(LOG_DEST_ATTR);
+ if (logDest == null || logDest.trim().length() == 0)
+ logDest = LOG_DEST_DEFAULT;
+ LoggerEntry entry = new LoggerEntry(classname, getLogType(logType), getLogDestination(logDest));
+ // get nested properties
+ NodeList properyNodes = loggerNode.getElementsByTagName(PROPERTY_ELEMENT);
+ for (int j = 0; j < properyNodes.getLength(); j++)
+ {
+ Element propertyNode = (Element)properyNodes.item(j);
+ String name = propertyNode.getAttribute(NAME_ATTR);
+ String value = propertyNode.getAttribute(VALUE_ATTR);
+ entry.addProperty(name, value);
+ }
+ registerLogger(entry);
+ }
+ }
+
+ private void registerLogger(LoggerEntry entry)
+ {
+ loggers.add(entry);
+ }
+
+ private Document loadRoot(File f) throws ConfigurationFileNotFoundException
+ {
+ if (!f.exists())
+ throw new ConfigurationFileNotFoundException(f.getAbsolutePath());
+ try
+ {
+ return DomUtils.instantiateDom(f);
+ }
+ catch (NestedXMLProcessingException ex)
+ {
+ // parsing error
+ throw new NestedXMLProcessingRuntimeException(ex);
+ }
+ }
+
+ private LogDestination getLogDestination(String destAttr)
+ {
+ if (destAttr.equals(FILE_VAL))
+ return LogDestination.FILE;
+ else if (destAttr.equals(CONSOLE_VAL))
+ return LogDestination.CONSOLE;
+ else if (destAttr.equals(JAR_LOG_VAL))
+ return LogDestination.JAR;
+ throw new RuntimeException("Unknown log-dest: " + destAttr);
+ }
+
+ private LogType getLogType(String typeAttr)
+ {
+ if (typeAttr.equals(STANDARD_LOG_VAL))
+ return LogType.STANDARD;
+ else if (typeAttr.equals(GTLF_LOG_VAL))
+ return LogType.GTLF;
+ else if (typeAttr.equals(VERBOSE_LOG_VAL))
+ return LogType.VERBOSE_DEBUG;
+ else if (typeAttr.equals(COMPARISON_LOG_VAL))
+ return LogType.COMPARISON;
+ else if (typeAttr.equals(COMPOSITE_LOG_VAL))
+ return LogType.COMPOSITE_OUTPUT;
+ else throw new RuntimeException("Unknown log-type: " + typeAttr);
+ }
+
+ public static class ConfigurationFileNotFoundException extends Exception
+ {
+ public ConfigurationFileNotFoundException(String filename)
+ {
+ super("Could not find logger configuration file: " + filename);
+ }
+ }
+
+ public static class LoggerEntry
+ {
+ private String className = null;
+ private Map params = null;
+ private LogType type = null;
+ private LogDestination dest = LogDestination.FILE;
+
+ public LoggerEntry(String classname, LogType inType, LogDestination inDest)
+ {
+ this(classname, inType, inDest, new HashMap());
+ }
+
+ public LoggerEntry(String inClassname, LogType inType, LogDestination inDest, Map inParams)
+ {
+ className = inClassname;
+ params = inParams;
+ type = inType;
+ dest = inDest;
+ }
+
+ public void addProperty(String name, String value)
+ {
+ params.put(name, value);
+ }
+
+ public Map getProperties()
+ {
+ return params;
+ }
+
+ public String getClassname()
+ {
+ return className;
+ }
+
+ public LogType getType()
+ {
+ return type;
+ }
+
+ public LogDestination getDestination()
+ {
+ return dest;
+ }
+
+ public String toString()
+ {
+ return "classname: " + className + "\n" +
+ "type: " + type + "\n" +
+ "dest: " + dest + "\n" +
+ "params: " + params;
+ }
+ }
+
+}
+
+
+
Propchange: beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LoggerConfiguration.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LoggerFactory.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LoggerFactory.java?rev=232310&r1=232309&r2=232310&view=diff
==============================================================================
--- beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LoggerFactory.java (original)
+++ beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LoggerFactory.java Fri Aug 12 08:12:28 2005
@@ -1,216 +1,216 @@
-package org.apache.beehive.test.tools.tch.logger;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.beehive.test.tools.tch.util.TchConstants;
-import org.apache.beehive.test.tools.tch.util.gtlf.GTLFProperties;
-
-public class LoggerFactory
-{
- private static String STANDARD_LOGGER_CLASSNAME =
- "org.apache.beehive.test.tools.tch.logger.StandardLogger",
- DEBUG_LOGGER_CLASSNAME = "org.apache.beehive.test.tools.tch.logger.DebugLogger",
- VERBOSE_DEBUG_LOGGER_CLASSNAME =
- "org.apache.beehive.test.tools.tch.logger.VerboseDebugLogger",
- COMPARISON_LOGGER_CLASSNAME = "org.apache.beehive.test.tools.tch.logger.ComparisonLogger",
- COMPOSITE_LOGGER_CLASSNAME =
- "org.apache.beehive.test.tools.tch.logger.ExecutionOutputLogger",
- GTLF_LOGGER_CLASSNAME = "org.apache.beehive.test.tools.tch.logger.GTLFLogger",
- THREADDUMP_LOGGER_CLASSNAME = "org.apache.beehive.test.tools.tch.logger.ThreadDumpLogger",
- STATS_LOGGER_CLASSNAME = "org.apache.beehive.test.tools.tch.logger.StatsLogger",
- JAR_LOGGER_CLASSNAME = "org.apache.beehive.test.tools.tch.logger.JARLogger";
-
- private String baseFileName = "tch";
-
- private String gtlfFileExtension = "xml";
-
- private CompositeLogger compositeLogger = new CompositeLogger();
-
- public LoggerFactory(String inBaseFilename)
- {
- this(new File("."), inBaseFilename);
- }
-
- public LoggerFactory(File inBaseDir, String inBaseFileName)
- {
- inBaseDir.mkdirs();
- baseFileName = new File(inBaseDir, inBaseFileName).getAbsolutePath();
- }
-
- public Logger getLogger()
- {
- return compositeLogger;
- }
-
- public void addCustomLogger(String classname, String logFileExtension)
- {
- Map props = new HashMap(1);
- props.put(
- TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
- logFileExtension);
- addLogger(classname, props, LogDestination.FILE);
- }
-
- public void addLogger(
- String classname,
- Map props,
- LogDestination logDestination)
- {
- addLogger(classname, props, null, logDestination);
- }
-
- public void addLogger(
- String classname,
- Map props,
- LogType logType,
- LogDestination logDestination)
- {
- Map defaults = new HashMap();
- defaults.put(
- TchConstants.PARAM_PREFIX + FileLogger.BASE_FILENAME_KEY,
- baseFileName);
-
- // special props for the GTLF logger
- if (logType != null && logType == LogType.GTLF)
- {
- props.putAll(GTLFProperties.getTestLogAttrsMap());
- props.putAll(GTLFProperties.getHeaderAttrsMap());
- props.putAll(GTLFProperties.getEnvironmentMap());
- }
-
- if (props != null)
- defaults.putAll(props);
-
- Logger logger = null;
- if (logDestination == LogDestination.FILE)
- {
- logger = new FileLogger();
- defaults.put(
- TchConstants.PARAM_PREFIX + FileLogger.PRINTWRITER_CLASSNAME_KEY,
- classname);
- }
- else if (logDestination == LogDestination.CONSOLE)
- {
- logger = new StdoutLogger();
- defaults.put(
- TchConstants.PARAM_PREFIX + StdoutLogger.PRINTWRITER_CLASSNAME_KEY,
- classname);
- }
- else if (logDestination == LogDestination.JAR)
- {
- // this logger is very specific,
- // so it does not take a class name
- // (replication ant build file logger)
- try
- {
- logger =
- (Logger)Class
- .forName(
- classname,
- true,
- Thread.currentThread().getContextClassLoader())
- .newInstance();
- }
- catch (Exception ex)
- {
- throw new LoggerRuntimeException(ex);
- }
- }
- logger.init(defaults);
- compositeLogger.add(logger);
- }
-
- public void addStandardLogger()
- {
- Map props = new HashMap(1);
- props.put(
- TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
- "log");
- addLogger(STANDARD_LOGGER_CLASSNAME, props, LogDestination.FILE);
- }
-
- public void addDebugLogger()
- {
- Map props = new HashMap(1);
- props.put(
- TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
- "debug");
- addLogger(DEBUG_LOGGER_CLASSNAME, props, LogDestination.FILE);
- }
-
- public void addVerboseDebugLogger()
- {
- Map props = new HashMap(1);
- props.put(
- TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
- "debug-all");
- addLogger(VERBOSE_DEBUG_LOGGER_CLASSNAME, props, LogDestination.FILE);
- }
-
- public void addComparisonLogger()
- {
- Map props = new HashMap(1);
- props.put(
- TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
- "clf");
- addLogger(COMPARISON_LOGGER_CLASSNAME, props, LogDestination.FILE);
- }
-
- public void addCompositeLogger()
- {
- Map props = new HashMap(1);
- props.put(
- TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
- "cout");
- addLogger(COMPARISON_LOGGER_CLASSNAME, props, LogDestination.FILE);
- }
-
- public void addThreadDumpLogger()
- {
- Map props = new HashMap(1);
- props.put(
- TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
- "td");
- addLogger(THREADDUMP_LOGGER_CLASSNAME, props, LogDestination.FILE);
- }
-
- public void addGTLFLogger()
- {
- Map props = new HashMap();
- props.put(
- TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
- gtlfFileExtension);
- addLogger(GTLF_LOGGER_CLASSNAME, props, LogType.GTLF, LogDestination.FILE);
- }
-
- public void addJARLogger()
- {
- Map props = new HashMap(1);
- props.put(
- TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
- "zip");
- addLogger(JAR_LOGGER_CLASSNAME, props, LogDestination.JAR);
- }
-
- public void addStdoutLogger()
- {
- addLogger(STANDARD_LOGGER_CLASSNAME, null, LogDestination.CONSOLE);
- }
-
- public void addStdoutStatsLogger()
- {
- addLogger(STATS_LOGGER_CLASSNAME, null, LogDestination.CONSOLE);
- }
-
- /**
- * @param string. The extension that will be used for the GTLF file,
- * default is ".xml".
- */
- public void setGtlfFileExtension(String string)
- {
- gtlfFileExtension = string;
- }
-
-}
+package org.apache.beehive.test.tools.tch.logger;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.beehive.test.tools.tch.util.TchConstants;
+import org.apache.beehive.test.tools.tch.util.gtlf.GTLFProperties;
+
+public class LoggerFactory
+{
+ private static String STANDARD_LOGGER_CLASSNAME =
+ "org.apache.beehive.test.tools.tch.logger.StandardLogger",
+ DEBUG_LOGGER_CLASSNAME = "org.apache.beehive.test.tools.tch.logger.DebugLogger",
+ VERBOSE_DEBUG_LOGGER_CLASSNAME =
+ "org.apache.beehive.test.tools.tch.logger.VerboseDebugLogger",
+ COMPARISON_LOGGER_CLASSNAME = "org.apache.beehive.test.tools.tch.logger.ComparisonLogger",
+ COMPOSITE_LOGGER_CLASSNAME =
+ "org.apache.beehive.test.tools.tch.logger.ExecutionOutputLogger",
+ GTLF_LOGGER_CLASSNAME = "org.apache.beehive.test.tools.tch.logger.GTLFLogger",
+ THREADDUMP_LOGGER_CLASSNAME = "org.apache.beehive.test.tools.tch.logger.ThreadDumpLogger",
+ STATS_LOGGER_CLASSNAME = "org.apache.beehive.test.tools.tch.logger.StatsLogger",
+ JAR_LOGGER_CLASSNAME = "org.apache.beehive.test.tools.tch.logger.JARLogger";
+
+ private String baseFileName = "tch";
+
+ private String gtlfFileExtension = "xml";
+
+ private CompositeLogger compositeLogger = new CompositeLogger();
+
+ public LoggerFactory(String inBaseFilename)
+ {
+ this(new File("."), inBaseFilename);
+ }
+
+ public LoggerFactory(File inBaseDir, String inBaseFileName)
+ {
+ inBaseDir.mkdirs();
+ baseFileName = new File(inBaseDir, inBaseFileName).getAbsolutePath();
+ }
+
+ public Logger getLogger()
+ {
+ return compositeLogger;
+ }
+
+ public void addCustomLogger(String classname, String logFileExtension)
+ {
+ Map props = new HashMap(1);
+ props.put(
+ TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
+ logFileExtension);
+ addLogger(classname, props, LogDestination.FILE);
+ }
+
+ public void addLogger(
+ String classname,
+ Map props,
+ LogDestination logDestination)
+ {
+ addLogger(classname, props, null, logDestination);
+ }
+
+ public void addLogger(
+ String classname,
+ Map props,
+ LogType logType,
+ LogDestination logDestination)
+ {
+ Map defaults = new HashMap();
+ defaults.put(
+ TchConstants.PARAM_PREFIX + FileLogger.BASE_FILENAME_KEY,
+ baseFileName);
+
+ // special props for the GTLF logger
+ if (logType != null && logType == LogType.GTLF)
+ {
+ props.putAll(GTLFProperties.getTestLogAttrsMap());
+ props.putAll(GTLFProperties.getHeaderAttrsMap());
+ props.putAll(GTLFProperties.getEnvironmentMap());
+ }
+
+ if (props != null)
+ defaults.putAll(props);
+
+ Logger logger = null;
+ if (logDestination == LogDestination.FILE)
+ {
+ logger = new FileLogger();
+ defaults.put(
+ TchConstants.PARAM_PREFIX + FileLogger.PRINTWRITER_CLASSNAME_KEY,
+ classname);
+ }
+ else if (logDestination == LogDestination.CONSOLE)
+ {
+ logger = new StdoutLogger();
+ defaults.put(
+ TchConstants.PARAM_PREFIX + StdoutLogger.PRINTWRITER_CLASSNAME_KEY,
+ classname);
+ }
+ else if (logDestination == LogDestination.JAR)
+ {
+ // this logger is very specific,
+ // so it does not take a class name
+ // (replication ant build file logger)
+ try
+ {
+ logger =
+ (Logger)Class
+ .forName(
+ classname,
+ true,
+ Thread.currentThread().getContextClassLoader())
+ .newInstance();
+ }
+ catch (Exception ex)
+ {
+ throw new LoggerRuntimeException(ex);
+ }
+ }
+ logger.init(defaults);
+ compositeLogger.add(logger);
+ }
+
+ public void addStandardLogger()
+ {
+ Map props = new HashMap(1);
+ props.put(
+ TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
+ "log");
+ addLogger(STANDARD_LOGGER_CLASSNAME, props, LogDestination.FILE);
+ }
+
+ public void addDebugLogger()
+ {
+ Map props = new HashMap(1);
+ props.put(
+ TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
+ "debug");
+ addLogger(DEBUG_LOGGER_CLASSNAME, props, LogDestination.FILE);
+ }
+
+ public void addVerboseDebugLogger()
+ {
+ Map props = new HashMap(1);
+ props.put(
+ TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
+ "debug-all");
+ addLogger(VERBOSE_DEBUG_LOGGER_CLASSNAME, props, LogDestination.FILE);
+ }
+
+ public void addComparisonLogger()
+ {
+ Map props = new HashMap(1);
+ props.put(
+ TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
+ "clf");
+ addLogger(COMPARISON_LOGGER_CLASSNAME, props, LogDestination.FILE);
+ }
+
+ public void addCompositeLogger()
+ {
+ Map props = new HashMap(1);
+ props.put(
+ TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
+ "cout");
+ addLogger(COMPARISON_LOGGER_CLASSNAME, props, LogDestination.FILE);
+ }
+
+ public void addThreadDumpLogger()
+ {
+ Map props = new HashMap(1);
+ props.put(
+ TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
+ "td");
+ addLogger(THREADDUMP_LOGGER_CLASSNAME, props, LogDestination.FILE);
+ }
+
+ public void addGTLFLogger()
+ {
+ Map props = new HashMap();
+ props.put(
+ TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
+ gtlfFileExtension);
+ addLogger(GTLF_LOGGER_CLASSNAME, props, LogType.GTLF, LogDestination.FILE);
+ }
+
+ public void addJARLogger()
+ {
+ Map props = new HashMap(1);
+ props.put(
+ TchConstants.PARAM_PREFIX + FileLogger.FILE_EXTENSION_KEY,
+ "zip");
+ addLogger(JAR_LOGGER_CLASSNAME, props, LogDestination.JAR);
+ }
+
+ public void addStdoutLogger()
+ {
+ addLogger(STANDARD_LOGGER_CLASSNAME, null, LogDestination.CONSOLE);
+ }
+
+ public void addStdoutStatsLogger()
+ {
+ addLogger(STATS_LOGGER_CLASSNAME, null, LogDestination.CONSOLE);
+ }
+
+ /**
+ * @param string. The extension that will be used for the GTLF file,
+ * default is ".xml".
+ */
+ public void setGtlfFileExtension(String string)
+ {
+ gtlfFileExtension = string;
+ }
+
+}
Propchange: beehive/trunk/controls/test/tools/tch/src/java/org/apache/beehive/test/tools/tch/logger/LoggerFactory.java
------------------------------------------------------------------------------
svn:eol-style = native