run-all-tests.sh
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:7k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #!@PERL@
  2. # Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
  3. #
  4. # This library is free software; you can redistribute it and/or
  5. # modify it under the terms of the GNU Library General Public
  6. # License as published by the Free Software Foundation; either
  7. # version 2 of the License, or (at your option) any later version.
  8. #
  9. # This library is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12. # Library General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU Library General Public
  15. # License along with this library; if not, write to the Free
  16. # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  17. # MA 02111-1307, USA
  18. #
  19. # This program runs all test that starts with 'test-' and sums
  20. # the results that the program prints.
  21. # Each time result should be of the form:
  22. # Time for|to KEYWORD (number_of_runs) 'other info': timestr()
  23. #
  24. # All options to this script is passed to all test program.
  25. # useful options:
  26. # --fast --force --lock-tables
  27. # --server   ==> mysql (default) / mSQL / Pg (postgres) / Solid
  28. # --user     ==> the user with permission to create / drop / select
  29. # --pass     ==> password for the user
  30. # --cmp      ==> Compare --server with one of the others (mysql/mSQL/Pg/Solid)
  31. # --comments ==> everything you want to say such as the extra options you
  32. #                gave to the db server. (use --comments="xxx xxx xxx"
  33. # --machine  ==> Give a OS/machine id for your logfiles.
  34. # --log      ==> puts output in output/RUN-server-machine-cmp-$opt_cmp
  35. use DBI;
  36. $opt_silent=1; # Don't write header
  37. @ORG_ARGV=@ARGV;
  38. chomp($pwd = `pwd`); $pwd = "." if ($pwd eq '');
  39. require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!n";
  40. $opt_silent=0;
  41. $perl=$^X;
  42. $machine=machine();
  43. $redirect= !($machine =~ /windows/i || $machine =~ "^NTs") ? "2>&1" : "";
  44. $dir= ($pwd =~ /\/) ? '\' : '/'; # directory symbol for shell
  45. $prog_args="";
  46. foreach $arg (@ORG_ARGV)
  47. {
  48.   if ($redirect)
  49.   {
  50.     $prog_args.="'" . $arg . "' ";
  51.   }
  52.   else
  53.   {
  54.     # Windows/NT can't handle ' around arguments
  55.     $prog_args.=$arg . " ";    
  56.   }
  57. }
  58. $prog_count=$errors=0;
  59. if ($opt_cmp) {
  60. $filename = "$opt_server$opt_suffix-" . machine_part() . "-cmp-$opt_cmp";
  61. } else {
  62. $filename = "$opt_server$opt_suffix-" . machine_part();
  63. }
  64. if (! -d $opt_dir)
  65. {
  66.   if (-e $opt_dir)
  67.   {
  68.     die "$opt_dir isn't a directoryn";
  69.   }
  70.   mkdir $opt_dir,0777 || die "Can't create directory: $opt_dirn";
  71. }
  72. if ($opt_skip_test) {
  73.   (@skip_tests) = split(/,s*/, $opt_skip_test);
  74. }
  75. if ($opt_old_headers)
  76. {
  77.   read_headers("$opt_dir/RUN-$filename");
  78. }
  79. else
  80. {
  81.   $server_version=$server->version();
  82. }
  83. if (!$opt_log)
  84. {
  85.   open(LOG,">&STDOUT");
  86. }
  87. else
  88. {
  89.   open(LOG, "> $opt_dir/RUN-$filename") ||
  90.     die "Can't write to $opt_dir/RUN-$filename: $!n";
  91. }
  92. select(LOG);
  93. $|=1;
  94. print "Benchmark DBD suite: $benchmark_versionn";
  95. print "Date of test:        $daten";
  96. print "Running tests on:    $machinen";
  97. print "Arguments:           $log_prog_argsn";
  98. print "Comments:            $opt_commentsn";
  99. print "Limits from:         $opt_cmpn";
  100. print "Server version:      $server_versionnn";
  101. $estimated=$warning=$got_warning=0;
  102. while (<test-*>)
  103. {
  104.   next if (/.sh$/); # configure script
  105.   next if (/-fork$/); # test script
  106.   $prog_count++;
  107.   /test-(.*)$/; # Remove test from name
  108.   $prog=$1;
  109.   $skip_prog = 0;
  110.   foreach $skip_this (@skip_tests) {
  111.     if ($prog =~ /$skip_this/i) {
  112.       $skip_prog = 1;
  113.       last;
  114.     }
  115.   }
  116.   print "$prog: ";
  117.   if ((!$opt_use_old_results) && (!$skip_prog))
  118.   {
  119.     if (system("$perl ./test-$prog $prog_args > "$opt_dir$dir$prog-$filename" $redirect"))
  120.     {
  121.       printf STDERR "Warning: Can't execute $prog.  Check the file '$opt_dir$dir$prog-$filename'n";
  122.       die "aborted" if ($opt_die_on_errors);
  123.     }
  124.   }
  125.   open(TEST,"$opt_dir/$prog-$filename");
  126.   $last_line="";
  127.   while(<TEST>)
  128.   {
  129.     chomp;
  130.     $last_line=$_ if (!(/^s*$/)); # Search after last line
  131.   }
  132.   if ($last_line =~ /Total time:/i)
  133.   {
  134.     print $last_line . "n";
  135.     open(TEST,"$opt_dir/$prog-$filename");
  136.     while (<TEST>)
  137.     {
  138.       if (/^(estimated |)time (to|for) ([^s:]*)s*((d*)(:d*)*)[^:]*:s*([d.]+) .*secs (s*([^s]*) usrs*+*s*([^s]*) sys.*=s+([d.]*)s+cpu/i)
  139.       {
  140. $arg=$summa{$3};
  141. if (!defined($arg))
  142. {
  143.   $summa{$3}= [ $4,$6,$7,$8,$9,""];
  144. }
  145. else
  146. {
  147.   $arg->[0]+=$4;
  148.   $arg->[1]+=$6;
  149.   $arg->[2]+=$7;
  150.   $arg->[3]+=$8;
  151.   $arg->[4]+=$9;
  152. }
  153. $prog_sum[0]+=$4;
  154. $prog_sum[1]+=$6;
  155. $prog_sum[2]+=$7;
  156. $prog_sum[3]+=$8;
  157. $prog_sum[4]+=$9;
  158. if (length($1))
  159. {
  160.   $summa{$3}->[5].="+";
  161.   $estimated=1;
  162. }
  163. if ($got_warning)
  164. {
  165.   $summa{$3}->[5].="?";
  166.   $warning=1;
  167.   $got_warning=0;
  168. }
  169.       }
  170.       elsif (/^warning/i)
  171.       {
  172. $got_warning=1;
  173.       }
  174.       else
  175.       {
  176. $got_warning=0;
  177.       }
  178.     }
  179.     if ($opt_debug)
  180.     {
  181.       print "Summary for $prog: ", join(" ",@prog_sum), "n";
  182.     }
  183.   }
  184.   else
  185.   {
  186.     $errors++;
  187.     print "Failed ($opt_dir/$prog-$filename)n";
  188.   }
  189. }
  190. print "n";
  191. if (!$errors)
  192. {
  193.   print "All $prog_count test executed successfullyn";
  194. }
  195. else
  196. {
  197.   print "Of $prog_count tests, $errors tests didn't workn";
  198. }
  199. if ($estimated)
  200. {
  201.   print "Tests with estimated time have a + at end of linen"
  202. }
  203. if ($warning)
  204. {
  205.   print "Tests with didn't return the correct result have a ? at end of linen";
  206. }
  207. if (%summa)
  208. {
  209.   @total=(0,0,0,0,0,"");
  210.   print "nTotals per operation:n";
  211.   print "Operation             seconds     usr     sys     cpu   testsn";
  212.   foreach $key (sort(keys %summa))
  213.   {
  214.     $arg=$summa{$key};
  215.     printf("%-35.35s %7.2f %7.2f %7.2f %7.2f %7d %sn",
  216.    $key,$arg->[1],$arg->[2],$arg->[3],$arg->[4],$arg->[0],
  217.    $arg->[5]);
  218.     for ($i=0 ; $i < 5 ; $i++)
  219.     {
  220.       $total[$i]+=$arg->[$i];
  221.     }
  222.     $total[5].=$arg->[$i];
  223.   }
  224.   printf("%-35.35s %7.2f %7.2f %7.2f %7.2f %7d %sn",
  225.  "TOTALS",$total[1],$total[2],$total[3],$total[4],$total[0],
  226.  $total[5]);
  227. }
  228. select(STDOUT);
  229. if ($opt_log)
  230. {
  231.   print "Test finished. You can find the result in:n$opt_dir/RUN-$filenamen";
  232. }
  233. #
  234. # Read headers from an old benchmark run
  235. #
  236. sub read_headers
  237. {
  238.   my ($filename)=@_;
  239.   # Clear current values
  240.   $benchmark_version=$date=$machine=$server_version="";
  241.   open(TMP, "<$filename") || die "Can't open $filenamen";
  242.   while (<TMP>)
  243.   {
  244.     chop;
  245.     if (/^Benchmark DBD.*:s+(.*)$/)
  246.     {
  247.       $benchmark_version=$1;
  248.     }
  249.     elsif (/^Date of.*:s+(.*)/)
  250.     {
  251.       $date=$1;
  252.     }
  253.     elsif (/^Running.*:s+(.*)$/)
  254.     {
  255.       $machine=$1;
  256.     }
  257.     elsif (/^Arguments.*:s+(.*)$/)
  258.     {
  259.       $log_prog_args=$1;
  260.     }
  261.     elsif (/^Comments.*:s+(.*)$/)
  262.     {
  263.       $opt_comments=$1;
  264.     }
  265.     elsif (/^Limits.*:s+(.*)$/)
  266.     {
  267.       $opt_cmp=$1;
  268.     }
  269.     elsif (/^Server ver.*:s+(.*)$/)
  270.     {
  271.       $server_version=$1;
  272.     }
  273.   }
  274.   close(TMP);
  275. }