WineHQ: winetest refinements

Ferenc Wagner wferi at afavant.elte.hu
Sat Mar 13 18:32:48 CST 2004


ChangeLog:
  * dissect, winetest.conf: Make maximum number of
    coinciding reports configurable.
  * dissect: Open the report files in :raw mode to avoid
    UTF-8 interpretation.
  * dissect: Skip blank lines between the subtest reports.
  * dissect: Add more error checking.
  * winetest.cgi: Do a rough check on the submitted file
    before moving it into the queue.
  * winetest.cgi: Create queue directory with mode 0777.
  * winetest.cgi: Consistent name: winetest, in singular.
    Similar modification is needed in the program, too.

Feri.

Index: dissect
===================================================================
RCS file: /home/wine/tools/winetest/dissect,v
retrieving revision 1.2
diff -u -r1.2 dissect
--- dissect	20 Feb 2004 17:15:23 -0000	1.2
+++ dissect	14 Mar 2004 00:28:57 -0000
@@ -29,7 +29,7 @@
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 use strict;
-use vars qw/$builds $queuedir $datadir/;
+use vars qw/$builds $queuedir $datadir $maxmult/;
 require "winetest.conf";
 my $fileversion = 2;
 
@@ -55,8 +55,8 @@
 ($tmpdir = $report) =~ s|^(.+)/report$|$1|;
 my $tmpfile = "$tmpdir/dissect.tmp";
 
-open IN, "<$report";
-open SUM, ">$tmpdir/summary.txt";
+open IN, "<:raw", $report or mydie "can't read $report: $!";
+open SUM, ">$tmpdir/summary.txt" or mydie "can't write $tmpdir/summary.txt: $!";
 
 $_ = <IN>;
 /^Version (\d+)\r?$/ or mydie "no version header: $_";
@@ -132,9 +132,10 @@
 $unit = undef;                  # state machine starts
 while (<IN>) {
     if (!defined $unit) {       # new test
-        /([_.a-z0-9]+):([_a-z]+) start\r?$/ or mydie "no start line: $_";
+        next if /^\s*$/;
+        /([_.a-z0-9]+):([_a-z]+) start\r?$/ or mydie "no start line:$.: $_";
         ($unit,$test) = ($1,$2);
-        open OUT, ">$tmpfile" or mydie "can't open $tmpfile: $!\n";
+        open OUT, ">:raw", $tmpfile or mydie "can't open $tmpfile: $!\n";
     } elsif (s/$unit:$test done \(.*\)\r?$//) {
         chomp;                  # current test failed
         $result = "failed";
@@ -175,7 +176,7 @@
 $try = 0;
 while (!rename $tmpdir, $dir) {
     $!{ENOTEMPTY} or mydie "can't rename $tmpdir to $dir: $!\n";
-    ++$try < 10 or mydie "too many submissions for $dirbase\n";
+    ++$try < $maxmult or mydie "more than $maxmult submissions for $dirbase\n";
     $dir = "${dirbase}_$try";
 }
 if (!-e "$builddir/outdated") {
Index: winetest.cgi
===================================================================
RCS file: /home/wine/tools/winetest/winetest.cgi,v
retrieving revision 1.3
diff -u -r1.3 winetest.cgi
--- winetest.cgi	26 Feb 2004 20:19:47 -0000	1.3
+++ winetest.cgi	14 Mar 2004 00:28:57 -0000
@@ -31,10 +31,17 @@
 my $name = param ("reportfile");
 my $error = cgi_error ();
 
+sub test_reportfile {
+    my $buffer;
+    my $fh = upload "reportfile";
+    read $fh, $buffer, 64;
+    $buffer =~ /^Version \d+\r?\nTests from build /s;
+}
+
 sub move_file {
     my $orig = tmpFileName (shift);
     my $tmpdir = tempdir ("repXXXXX", DIR=>$ENV{TMPDIR});
-    chmod 0777&~umask, $tmpdir;
+    chmod 0777, $tmpdir;
     chmod 0666&~umask, $orig;
     my $size = -s $orig;
     (rename $orig, "$tmpdir/report")?
@@ -44,12 +51,16 @@
 
 # Invoked by winetest
 
-if (user_agent ("Winetests Shell")) {
+if (user_agent ("Winetest Shell")) {
     print header ("text/plain");
     if ($error) {
         print "Error: $error\n";
     } elsif ($name) {
-        print move_file $name;
+        if (test_reportfile $name) {
+            print move_file $name;
+        } else {
+            print "Error: submission corrupted";
+        }
     }
     exit;
 }
@@ -57,8 +68,8 @@
 # Invoked by a browser
 
 print header,
-  start_html ("Winetests report upload"),
-  h1 ("Winetests report upload"),
+  start_html ("Winetest report upload"),
+  h1 ("Winetest report upload"),
   start_multipart_form (),
   "The name of the report file:",
   filefield ("reportfile","c:\\temp\\res",45),
@@ -71,6 +82,10 @@
     print h2 ("Error during file upload ($name)"),
       strong ($error);
 } elsif ($name) {
-    print h2 move_file $name;
+    if (test_reportfile $name) {
+        print h2 move_file $name;
+    } else {
+        print h2 "Error: submission corrupted";
+    }
 }
 print end_html;
Index: winetest.conf
===================================================================
RCS file: /home/wine/tools/winetest/winetest.conf,v
retrieving revision 1.1
diff -u -r1.1 winetest.conf
--- winetest.conf	19 Feb 2004 22:00:34 -0000	1.1
+++ winetest.conf	14 Mar 2004 00:28:57 -0000
@@ -6,4 +6,7 @@
 $queuedir = "$root/queue";
 $datadir  = "$root/data";
 
+# Maximum number of reports for one version and tag
+$maxmult = 10;
+
 1;                              # keep require happy



More information about the wine-patches mailing list