aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Bachmeyer <jcb62281+dev@gmail.com>2020-06-09 21:38:10 -0500
committerJacob Bachmeyer <jcb62281+dev@gmail.com>2020-06-10 23:45:56 -0500
commit457888fc50922a6b505a315a1d92be15559a9024 (patch)
tree262beb4c34d9eafa442475d479146b8bd0beb3fe
parent648796241f9041c49c8965d562f3129c0bc880d2 (diff)
downloaddejagnu-457888fc50922a6b505a315a1d92be15559a9024.zip
dejagnu-457888fc50922a6b505a315a1d92be15559a9024.tar.gz
dejagnu-457888fc50922a6b505a315a1d92be15559a9024.tar.bz2
Rewrite XML DTD
*ChangeLog: * lib/framework.exp (insertdtd): Rewrite XML DTD. (open_logs): Adjust XML output to conform to new DTD. (record_test): Likewise. (log_summary): Likewise. (close_logs): Likewise. (xml_log_start): Factor out from open_logs procedure. * runtest.exp: Call new xml_log_start procedure.
-rw-r--r--lib/framework.exp168
-rw-r--r--runtest.exp3
2 files changed, 127 insertions, 44 deletions
diff --git a/lib/framework.exp b/lib/framework.exp
index d425d10..a267f51 100644
--- a/lib/framework.exp
+++ b/lib/framework.exp
@@ -33,34 +33,113 @@ proc mail_file { file to subject } {
# Insert DTD for xml format checking.
#
proc insertdtd { } {
- xml_output "<!DOCTYPE testsuite \[
-<!-- testsuite.dtd -->
-<!ELEMENT testsuite (test | summary)+>
-<!ELEMENT test (input, output, result, name, prms_id )>
- <!ELEMENT input (#PCDATA)>
- <!ELEMENT output (#PCDATA)>
- <!ELEMENT result (#PCDATA)>
- <!ELEMENT name (#PCDATA)>
- <!ELEMENT prms_id (#PCDATA)>
- <!ELEMENT summary (result, description, total)>
- <!ELEMENT description (#PCDATA)>
- <!ELEMENT total (#PCDATA)>
+ set BoardRole "build|host|target"
+ set TestResult \
+ "PASS|FAIL|KPASS|KFAIL|XPASS|XFAIL|UNRESOLVED|UNSUPPORTED|UNTESTED"
+ xml_output "<!DOCTYPE dg:run \[
+<!-- runtest-log.dtd -->
+ <!ELEMENT dg:run (dg:platform, (dg:group)+)>
+ <!ATTLIST dg:run
+ xmlns:dg CDATA #FIXED\
+ \"http://www.gnu.org/software/dejagnu/xmlns/runtest-log-1\"
+ dg:start CDATA #REQUIRED
+ dg:user CDATA #IMPLIED>
+ <!ELEMENT dg:platform (dg:board|dg:tool)+>
+ <!-- node involved in test run -->
+ <!ELEMENT dg:board (dg:role)*>
+ <!ATTLIST dg:board
+ dg:id ID #REQUIRED
+ dg:arch CDATA #REQUIRED
+ dg:name CDATA #REQUIRED>
+ <!ELEMENT dg:role EMPTY>
+ <!ATTLIST dg:role
+ dg:as ($BoardRole) #REQUIRED
+ dg:for IDREF #IMPLIED>
+ <!-- external tool used but not under test -->
+ <!ELEMENT dg:tool EMPTY>
+ <!ATTLIST dg:tool
+ dg:id ID #REQUIRED
+ dg:name CDATA #REQUIRED
+ dg:version CDATA #REQUIRED>
+ <!ELEMENT dg:group ((dg:group|dg:test)*, dg:summary?)>
+ <!ATTLIST dg:group
+ dg:name CDATA #REQUIRED>
+ <!ELEMENT dg:test (dg:name, dg:input?, dg:output?)>
+ <!ATTLIST dg:test
+ dg:result ($TestResult) #REQUIRED
+ dg:prms_id CDATA #IMPLIED
+ dg:bug_id CDATA #IMPLIED>
+ <!ELEMENT dg:name (#PCDATA)>
+ <!ATTLIST dg:name
+ xml:space (preserve) #FIXED 'preserve'>
+ <!ELEMENT dg:input (#PCDATA)>
+ <!ATTLIST dg:input
+ xml:space (preserve) #FIXED 'preserve'>
+ <!ELEMENT dg:output (#PCDATA)>
+ <!ATTLIST dg:output
+ xml:space (preserve) #FIXED 'preserve'>
+ <!-- summary per-group -->
+ <!ELEMENT dg:summary (dg:total)*>
+ <!ATTLIST dg:summary
+ dg:finish CDATA #REQUIRED>
+ <!ELEMENT dg:total EMPTY>
+ <!ATTLIST dg:total
+ dg:result ($TestResult) #REQUIRED
+ dg:count CDATA #REQUIRED>
\]>"
}
+# Write the XML log header.
+#
+proc xml_log_start { } {
+ global build_triplet
+ global host_board
+ global host_triplet
+ global logname
+ global outdir
+ global target_triplet
+ global target_list
+ global tool
+ global xml
+ global xml_file
+
+ set host_name "unix"
+ if { [info exists host_board] } {
+ set host_name $host_board
+ }
+
+ xml_output "<dg:run\
+ dg:start=\"[timestamp -format {%Y-%m-%d %H:%M:%S %Z}]\"\
+ dg:user=\"$logname\">"
+ xml_output " <dg:platform>"
+ xml_output " <dg:board dg:id=\"host\"\
+ dg:arch=\"$host_triplet\"\
+ dg:name=\"$host_name\">"
+ xml_output " <dg:role dg:as=\"host\" /></dg:board>"
+ xml_output " <dg:board dg:id=\"build\"\
+ dg:arch=\"$build_triplet\"\
+ dg:name=\"unix\">"
+ xml_output " <dg:role dg:as=\"build\" /></dg:board>"
+ set i 0
+ foreach target $target_list {
+ xml_output " <dg:board dg:id=\"target$i\"\
+ dg:arch=\"$target_triplet\"\
+ dg:name=\"$target\">"
+ incr i
+ }
+ xml_output " <dg:role dg:as=\"target\" /></dg:board>"
+ xml_output " </dg:platform>"
+ xml_output " <dg:group dg:name=\"$tool\">"
+}
+
# Open the output logs.
#
proc open_logs { } {
global outdir
- global tool
global sum_file
- global xml_file
- global xml
- global build_triplet
- global host_triplet
- global target_triplet
- global logname
global tool
+ global xml
+ global xml_file
if { $tool eq "" } {
set tool testrun
@@ -70,17 +149,8 @@ proc open_logs { } {
if { $xml } {
catch "file delete -force -- $outdir/$tool.xml"
set xml_file [open [file join $outdir $tool.xml] w]
- xml_output "<?xml version=\"1.1\"?>"
+ xml_output "<?xml version=\"1.0\"?>"
insertdtd
- xml_output "<testsuite>"
- xml_output " <testrun>"
- xml_output " <timestamp>[timestamp -format %c]</timestamp>"
- xml_output " <host>$host_triplet </host>"
- xml_output " <build>$build_triplet</build>"
- xml_output " <target>$target_triplet</target>"
- xml_output " <tool>$tool</tool>"
- xml_output " <user>$logname</user>"
- xml_output " </testrun>"
}
catch "file delete -force -- $outdir/$tool.log"
log_file -a $outdir/$tool.log
@@ -107,7 +177,8 @@ proc close_logs { } {
}
if { $xml } {
- xml_output "</testsuite>"
+ xml_output " </dg:group>"
+ xml_output "</dg:run>"
catch "close $xml_file"
}
@@ -441,16 +512,17 @@ proc log_summary { args } {
clone_output "\n\t\t=== $tool Summary ===\n"
}
+ if { $xml } {
+ xml_output " <dg:summary\
+ dg:finish=\"[timestamp -format {%Y-%m-%d %H:%M:%S %Z}]\">"
+ }
foreach x { PASS FAIL XPASS XFAIL KPASS KFAIL UNRESOLVED UNTESTED UNSUPPORTED } {
set val $test_counts($x,$which)
if { $val > 0 } {
set mess "# of $test_counts($x,name)"
if { $xml } {
- xml_output " <summary>"
- xml_output " [xml_tag result $x]"
- xml_output " [xml_tag description $mess]"
- xml_output " [xml_tag total $val]"
- xml_output " </summary>"
+ xml_output " <dg:total dg:result=\"$x\"\
+ dg:count=\"$val\" />"
}
if { [string length $mess] < 24 } {
append mess "\t"
@@ -458,6 +530,9 @@ proc log_summary { args } {
clone_output "$mess\t$val"
}
}
+ if { $xml } {
+ xml_output " </dg:summary>"
+ }
}
# Setup a flag to control whether a failure is expected or not
@@ -704,15 +779,20 @@ proc record_test { type message args } {
#do nothing - leave as { "" "" }
}
- set output ""
- set output "expect_out(buffer)"
- xml_output " <test>"
- xml_output " [xml_tag name $message]"
- xml_output " [xml_tag output [string trimright [lindex $rio 1]]]"
- xml_output " [xml_tag result $type]"
- xml_output " [xml_tag prms_id $prms_id]"
- xml_output " [xml_tag input [string trimright [lindex $rio 0]]]"
- xml_output " </test>"
+ set prms_id_attr ""
+ if { $prms_id } { set prms_id_attr " dg:prms_id=\"$prms_id\"" }
+
+ set istring [string trimright [lindex $rio 0]]
+ set ostring [string trimright [lindex $rio 1]]
+ xml_output " <dg:test dg:result=\"$type\"$prms_id_attr>"
+ xml_output " [xml_tag dg:name $message]"
+ if { [string length $istring] } {
+ xml_output " [xml_tag dg:input $istring]"
+ }
+ if { [string length $ostring] } {
+ xml_output " [xml_tag dg:output $ostring]"
+ }
+ xml_output " </dg:test>"
}
switch -- $type {
diff --git a/runtest.exp b/runtest.exp
index 6a53a56..a3919a2 100644
--- a/runtest.exp
+++ b/runtest.exp
@@ -1664,6 +1664,9 @@ set target_list [process_target_variants $target_list]
set target_count [llength $target_list]
+# Now we have the final target list for the XML log file.
+if { $xml } { xml_log_start }
+
clone_output "Schedule of variations:"
foreach current_target $target_list {
clone_output " $current_target"