run-all-tests
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:7k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #!/usr/bin/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. use Cwd;
  37. $opt_silent=1; # Don't write header
  38. @ORG_ARGV=@ARGV;
  39. $pwd = cwd(); $pwd = "." if ($pwd eq '');
  40. require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!n";
  41. $opt_silent=0;
  42. $perl=$^X;
  43. $machine=machine();
  44. $redirect= !($machine =~ /windows/i || $machine =~ "^NTs") ? "2>&1" : "";
  45. $dir= ($pwd =~ /\/) ? '\' : '/'; # directory symbol for shell
  46. $prog_args="";
  47. foreach $arg (@ORG_ARGV)
  48. {
  49.   if ($redirect)
  50.   {
  51.     $prog_args.="'" . $arg . "' ";
  52.   }
  53.   else
  54.   {
  55.     # Windows/NT can't handle ' around arguments
  56.     $prog_args.=$arg . " ";    
  57.   }
  58. }
  59. $prog_count=$errors=0;
  60. if ($opt_cmp) {
  61. $filename = "$opt_server$opt_suffix-" . machine_part() . "-cmp-$opt_cmp";
  62. } else {
  63. $filename = "$opt_server$opt_suffix-" . machine_part();
  64. }
  65. if (! -d $opt_dir)
  66. {
  67.   if (-e $opt_dir)
  68.   {
  69.     die "$opt_dir isn't a directoryn";
  70.   }
  71.   mkdir $opt_dir,0777 || die "Can't create directory: $opt_dirn";
  72. }
  73. if ($opt_skip_test) {
  74.   (@skip_tests) = split(/,s*/, $opt_skip_test);
  75. }
  76. if ($opt_old_headers)
  77. {
  78.   read_headers("$opt_dir/RUN-$filename");
  79. }
  80. else
  81. {
  82.   $server_version=$server->version();
  83. }
  84. if (!$opt_log)
  85. {
  86.   open(LOG,">&STDOUT");
  87. }
  88. else
  89. {
  90.   open(LOG, "> $opt_dir/RUN-$filename") ||
  91.     die "Can't write to $opt_dir/RUN-$filename: $!n";
  92. }
  93. select(LOG);
  94. $|=1;
  95. print "Benchmark DBD suite: $benchmark_versionn";
  96. print "Date of test:        $daten";
  97. print "Running tests on:    $machinen";
  98. print "Arguments:           $log_prog_argsn";
  99. print "Comments:            $opt_commentsn";
  100. print "Limits from:         $opt_cmpn";
  101. print "Server version:      $server_versionn";
  102. print "Optimization:        $opt_optimizationn";
  103. print "Hardware:            $opt_hwnn";
  104. $estimated=$warning=$got_warning=0;
  105. while (<test-*>)
  106. {
  107.   next if (/.sh$/); # configure script
  108.   next if (/-fork$/); # test script
  109.   $prog_count++;
  110.   /test-(.*)$/; # Remove test from name
  111.   $prog=$1;
  112.   $skip_prog = 0;
  113.   foreach $skip_this (@skip_tests) {
  114.     if ($prog =~ /$skip_this/i) {
  115.       $skip_prog = 1;
  116.       last;
  117.     }
  118.   }
  119.   print "$prog: ";
  120.   if ((!$opt_use_old_results) && (!$skip_prog))
  121.   {
  122.     if (system("$perl ./test-$prog $prog_args > "$opt_dir$dir$prog-$filename" $redirect"))
  123.     {
  124.       printf STDERR "Warning: Can't execute $prog.  Check the file '$opt_dir$dir$prog-$filename'n";
  125.       die "aborted" if ($opt_die_on_errors);
  126.     }
  127.   }
  128.   open(TEST,"$opt_dir/$prog-$filename");
  129.   $last_line="";
  130.   while(<TEST>)
  131.   {
  132.     chomp;
  133.     $last_line=$_ if (!(/^s*$/)); # Search after last line
  134.   }
  135.   if ($last_line =~ /Total time:/i)
  136.   {
  137.     print $last_line . "n";
  138.     open(TEST,"$opt_dir/$prog-$filename");
  139.     while (<TEST>)
  140.     {
  141.       if (/^(estimated |)time (to|for) ([^s:]*)s*((d*)(:d*)*)[^:]*:s*([d.]+) .*secs (s*([^s]*) usrs*+*s*([^s]*) sys.*=s+([d.]*)s+cpu/i)
  142.       {
  143. $arg=$summa{$3};
  144. if (!defined($arg))
  145. {
  146.   $summa{$3}= [ $4,$6,$7,$8,$9,""];
  147. }
  148. else
  149. {
  150.   $arg->[0]+=$4;
  151.   $arg->[1]+=$6;
  152.   $arg->[2]+=$7;
  153.   $arg->[3]+=$8;
  154.   $arg->[4]+=$9;
  155. }
  156. $prog_sum[0]+=$4;
  157. $prog_sum[1]+=$6;
  158. $prog_sum[2]+=$7;
  159. $prog_sum[3]+=$8;
  160. $prog_sum[4]+=$9;
  161. if (length($1))
  162. {
  163.   $summa{$3}->[5].="+";
  164.   $estimated=1;
  165. }
  166. if ($got_warning)
  167. {
  168.   $summa{$3}->[5].="?";
  169.   $warning=1;
  170.   $got_warning=0;
  171. }
  172.       }
  173.       elsif (/^warning/i)
  174.       {
  175. $got_warning=1;
  176.       }
  177.       else
  178.       {
  179. $got_warning=0;
  180.       }
  181.     }
  182.     if ($opt_debug)
  183.     {
  184.       print "Summary for $prog: ", join(" ",@prog_sum), "n";
  185.     }
  186.   }
  187.   elsif ($last_line =~ /^Test skipped/i)
  188.   {
  189.     print "$last_linen";
  190.   }
  191.   else
  192.   {
  193.     $errors++;
  194.     print "Failed ($opt_dir/$prog-$filename)n";
  195.   }
  196. }
  197. print "n";
  198. if (!$errors)
  199. {
  200.   print "All $prog_count test executed successfullyn";
  201. }
  202. else
  203. {
  204.   print "Of $prog_count tests, $errors tests didn't workn";
  205. }
  206. if ($estimated)
  207. {
  208.   print "Tests with estimated time have a + at end of linen"
  209. }
  210. if ($warning)
  211. {
  212.   print "Tests with didn't return the correct result have a ? at end of linen";
  213. }
  214. if (%summa)
  215. {
  216.   @total=(0,0,0,0,0,"");
  217.   print "nTotals per operation:n";
  218.   print "Operation             seconds     usr     sys     cpu   testsn";
  219.   foreach $key (sort(keys %summa))
  220.   {
  221.     $arg=$summa{$key};
  222.     printf("%-35.35s %7.2f %7.2f %7.2f %7.2f %7d %sn",
  223.    $key,$arg->[1],$arg->[2],$arg->[3],$arg->[4],$arg->[0],
  224.    $arg->[5]);
  225.     for ($i=0 ; $i < 5 ; $i++)
  226.     {
  227.       $total[$i]+=$arg->[$i];
  228.     }
  229.     $total[5].=$arg->[$i];
  230.   }
  231.   printf("%-35.35s %7.2f %7.2f %7.2f %7.2f %7d %sn",
  232.  "TOTALS",$total[1],$total[2],$total[3],$total[4],$total[0],
  233.  $total[5]);
  234. }
  235. select(STDOUT);
  236. if ($opt_log)
  237. {
  238.   print "Test finished. You can find the result in:n$opt_dir/RUN-$filenamen";
  239. }
  240. #
  241. # Read headers from an old benchmark run
  242. #
  243. sub read_headers
  244. {
  245.   my ($filename)=@_;
  246.   # Clear current values
  247.   $benchmark_version=$date=$machine=$server_version="";
  248.   open(TMP, "<$filename") || die "Can't open $filenamen";
  249.   while (<TMP>)
  250.   {
  251.     chop;
  252.     if (/^Benchmark DBD.*:s+(.*)$/)
  253.     {
  254.       $benchmark_version=$1;
  255.     }
  256.     elsif (/^Date of.*:s+(.*)/)
  257.     {
  258.       $date=$1;
  259.     }
  260.     elsif (/^Running.*:s+(.*)$/)
  261.     {
  262.       $machine=$1;
  263.     }
  264.     elsif (/^Arguments.*:s+(.*)$/)
  265.     {
  266.       $log_prog_args=$1;
  267.     }
  268.     elsif (/^Limits.*:s+(.*)$/)
  269.     {
  270.       $opt_cmp=$1;
  271.     }
  272.     elsif (/^Server ver.*:s+(.*)$/)
  273.     {
  274.       $server_version=$1;
  275.     }
  276.     elsif (/^Optimiz.*:s+(.*)$/)
  277.     {
  278.       $opt_optimization=$1;
  279.     }
  280.     elsif (/^Hardwar.*:s+(.*)$/)
  281.     {
  282.       $opt_hw=$1;
  283.     }
  284.   }
  285.   close(TMP);
  286. }