diff --git a/lib/test-driver/log2html.xsl b/lib/test-driver/log2html.xsl
new file mode 100644
index 00000000000..cf7f8f8c057
--- /dev/null
+++ b/lib/test-driver/log2html.xsl
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Log File
+
+
+ [Expand all]
+ [Collapse all]
+
+
+
+
+
+
+
+
+
+
+
+ display: none;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ linelastline
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ errorLine
+
+
+ warningLine
+
+
+ prio3
+
+
+
+ serial
+
+
+
+
+
+ #
+
+
+ :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /...
+
+
+
+
\ No newline at end of file
diff --git a/lib/test-driver/logfile.css b/lib/test-driver/logfile.css
new file mode 100644
index 00000000000..a7f83b4c925
--- /dev/null
+++ b/lib/test-driver/logfile.css
@@ -0,0 +1,110 @@
+body {
+ font-family: sans-serif;
+ background: white;
+}
+
+
+ul.nesting, ul.toplevel {
+ padding: 0;
+ margin: 0;
+}
+
+ul.toplevel {
+ list-style-type: none;
+}
+
+.line, .head {
+ padding-top: 0em;
+}
+
+ul.nesting li.line, ul.nesting li.lastline {
+ position: relative;
+ list-style-type: none;
+}
+
+ul.nesting li.line {
+ padding-left: 2.0em;
+}
+
+ul.nesting li.lastline {
+ padding-left: 2.1em; /* for the 0.1em border-left in .lastline > .lineconn */
+}
+
+li.line {
+ border-left: 0.1em solid #6185a0;
+}
+
+li.line > span.lineconn, li.lastline > span.lineconn {
+ position: absolute;
+ height: 0.65em;
+ left: 0em;
+ width: 1.5em;
+ border-bottom: 0.1em solid #6185a0;
+}
+
+li.lastline > span.lineconn {
+ border-left: 0.1em solid #6185a0;
+}
+
+
+em.storeref {
+ color: #500000;
+ position: relative;
+ width: 100%;
+}
+
+em.storeref:hover {
+ background-color: #eeeeee;
+}
+
+*.popup {
+ display: none;
+/* background: url('http://losser.st-lab.cs.uu.nl/~mbravenb/menuback.png') repeat; */
+ background: #ffffcd;
+ border: solid #555555 1px;
+ position: absolute;
+ top: 0em;
+ left: 0em;
+ margin: 0;
+ padding: 0;
+ z-index: 100;
+}
+
+em.storeref:hover span.popup {
+ display: inline;
+ width: 40em;
+}
+
+
+.logTreeToggle {
+ text-decoration: none;
+ font-family: monospace;
+ font-size: larger;
+}
+
+.errorLine {
+ color: #ff0000;
+ font-weight: bold;
+}
+
+.warningLine {
+ color: darkorange;
+ font-weight: bold;
+}
+
+.prio3 {
+ font-style: italic;
+}
+
+code {
+ white-space: pre-wrap;
+}
+
+.serial {
+ color: #56115c;
+}
+
+.machine {
+ color: #002399;
+ font-style: italic;
+}
diff --git a/lib/test-driver/test-driver.pl b/lib/test-driver/test-driver.pl
index db92a951b16..0ccde63fc3e 100644
--- a/lib/test-driver/test-driver.pl
+++ b/lib/test-driver/test-driver.pl
@@ -60,8 +60,10 @@ sub subtest {
sub runTests {
if (defined $ENV{tests}) {
- eval "$context $ENV{tests}";
- die $@ if $@;
+ $log->nest("running the VM test script", sub {
+ eval "$context $ENV{tests}";
+ die $@ if $@;
+ }, { expanded => 1 });
} else {
my $term = Term::ReadLine->new('nixos-vm-test');
$term->ReadHistory;
diff --git a/lib/test-driver/treebits.js b/lib/test-driver/treebits.js
new file mode 100644
index 00000000000..d88ac075fd9
--- /dev/null
+++ b/lib/test-driver/treebits.js
@@ -0,0 +1,40 @@
+$(document).ready(function() {
+
+ /* Set the appearance of the toggle depending on whether the
+ corresponding subtree is initially shown or hidden. */
+ $(".logTreeToggle").map(function() {
+ if ($(this).siblings("ul:hidden").length == 0) {
+ $(this).text("-");
+ } else {
+ $(this).text("+");
+ }
+ });
+
+ /* When a toggle is clicked, show or hide the subtree. */
+ $(".logTreeToggle").click(function() {
+ if ($(this).siblings("ul:hidden").length != 0) {
+ $(this).siblings("ul").show();
+ $(this).text("-");
+ } else {
+ $(this).siblings("ul").hide();
+ $(this).text("+");
+ }
+ });
+
+ /* Implementation of the expand all link. */
+ $(".logTreeExpandAll").click(function() {
+ $(".logTreeToggle", $(this).siblings(".toplevel")).map(function() {
+ $(this).siblings("ul").show();
+ $(this).text("-");
+ });
+ });
+
+ /* Implementation of the collapse all link. */
+ $(".logTreeCollapseAll").click(function() {
+ $(".logTreeToggle", $(this).siblings(".toplevel")).map(function() {
+ $(this).siblings("ul").hide();
+ $(this).text("+");
+ });
+ });
+
+});
diff --git a/lib/testing.nix b/lib/testing.nix
index f02d4de251c..7a0e9ea4347 100644
--- a/lib/testing.nix
+++ b/lib/testing.nix
@@ -45,7 +45,7 @@ rec {
inherit tests;
- buildInputs = [ pkgs.qemu_kvm ];
+ buildInputs = [ pkgs.qemu_kvm pkgs.libxslt ];
buildCommand =
''
@@ -58,7 +58,14 @@ rec {
mv $i $out/coverage-data/$(dirname $i)
done
+ xsltproc --output $out/log.html ${./test-driver/log2html.xsl} $out/log.xml
+ ln -s ${./test-driver/logfile.css} $out/logfile.css
+ ln -s ${./test-driver/treebits.js} $out/treebits.js
+ ln -s ${pkgs.jquery_ui}/js/jquery.min.js $out/
+ ln -s ${pkgs.jquery_ui}/js/jquery-ui.min.js $out/
+
touch $out/nix-support/hydra-build-products
+ echo "report testlog $i" >> $out/nix-support/hydra-build-products
for i in $out/*.png; do
echo "report screenshot $i" >> $out/nix-support/hydra-build-products