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

MySQL数据库

开发平台:

Visual C++

  1. # -*- cperl -*-
  2. # This is a library file used by the Perl version of mysql-test-run,
  3. # and is part of the translation of the Bourne shell script with the
  4. # same name.
  5. use strict;
  6. sub mtr_report_test_name($);
  7. sub mtr_report_test_passed($);
  8. sub mtr_report_test_failed($);
  9. sub mtr_report_test_skipped($);
  10. sub mtr_show_failed_diff ($);
  11. sub mtr_report_stats ($);
  12. sub mtr_print_line ();
  13. sub mtr_print_thick_line ();
  14. sub mtr_print_header ();
  15. sub mtr_report (@);
  16. sub mtr_warning (@);
  17. sub mtr_error (@);
  18. sub mtr_child_error (@);
  19. sub mtr_debug (@);
  20. ##############################################################################
  21. #
  22. #  
  23. #
  24. ##############################################################################
  25. # We can't use diff -u or diff -a as these are not portable
  26. sub mtr_show_failed_diff ($) {
  27.   my $tname=  shift;
  28.   my $reject_file=  "r/$tname.reject";
  29.   my $result_file=  "r/$tname.result";
  30.   my $eval_file=    "r/$tname.eval";
  31.   if ( $::opt_suite ne "main" )
  32.   {
  33.     $reject_file= "$::glob_mysql_test_dir/suite/$::opt_suite/$reject_file";
  34.     $result_file= "$::glob_mysql_test_dir/suite/$::opt_suite/$result_file";
  35.     $eval_file=   "$::glob_mysql_test_dir/suite/$::opt_suite/$eval_file";
  36.   }
  37.   if ( -f $eval_file )
  38.   { 
  39.     $result_file=  $eval_file;
  40.   }
  41.   elsif ( $::opt_result_ext and
  42.           ( $::opt_record or -f "$result_file$::opt_result_ext" ))
  43.   {
  44.     # If we have an special externsion for result files we use it if we are
  45.     # recording or a result file with that extension exists.
  46.     $result_file=  "$result_file$::opt_result_ext";
  47.   }
  48.   my $diffopts= $::opt_udiff ? "-u" : "-c";
  49.   if ( -f $reject_file )
  50.   {
  51.     print "Below are the diffs between actual and expected results:n";
  52.     print "-------------------------------------------------------n";
  53.     # FIXME check result code?!
  54.     mtr_run("diff",[$diffopts,$result_file,$reject_file], "", "", "", "");
  55.     print "-------------------------------------------------------n";
  56.     print "Please follow the instructions outlined atn";
  57.     print "http://www.mysql.com/doc/en/Reporting_mysqltest_bugs.htmln";
  58.     print "to find the reason to this problem and how to report this.nn";
  59.   }
  60. }
  61. sub mtr_report_test_name ($) {
  62.   my $tinfo= shift;
  63.   printf "%-30s ", $tinfo->{'name'};
  64. }
  65. sub mtr_report_test_skipped ($) {
  66.   my $tinfo= shift;
  67.   $tinfo->{'result'}= 'MTR_RES_SKIPPED';
  68.   if ( $tinfo->{'disable'} )
  69.   {
  70.     print "[ disabled ]  $tinfo->{'comment'}n";
  71.   }
  72.   else
  73.   {
  74.     print "[ skipped ]n";
  75.   }
  76. }
  77. sub mtr_report_test_passed ($) {
  78.   my $tinfo= shift;
  79.   my $timer=  "";
  80.   if ( $::opt_timer and -f "$::opt_vardir/log/timer" )
  81.   {
  82.     $timer= mtr_fromfile("$::opt_vardir/log/timer");
  83.     $::glob_tot_real_time += $timer;
  84.     $timer= sprintf "%12s", $timer;
  85.   }
  86.   $tinfo->{'result'}= 'MTR_RES_PASSED';
  87.   print "[ pass ]   $timern";
  88. }
  89. sub mtr_report_test_failed ($) {
  90.   my $tinfo= shift;
  91.   $tinfo->{'result'}= 'MTR_RES_FAILED';
  92.   if ( $tinfo->{'timeout'} )
  93.   {
  94.     print "[ fail ]  timeoutn";
  95.   }
  96.   else
  97.   {
  98.     print "[ fail ]n";
  99.   }
  100.   # FIXME Instead of this test, and meaningless error message in 'else'
  101.   # we should write out into $::path_timefile when the error occurs.
  102.   if ( -f $::path_timefile )
  103.   {
  104.     print "nErrors are (from $::path_timefile) :n";
  105.     print mtr_fromfile($::path_timefile); # FIXME print_file() instead
  106.     print "n(the last lines may be the most important ones)n";
  107.   }
  108.   else
  109.   {
  110.     print "nUnexpected termination, probably when starting mysqldn";
  111.   }
  112. }
  113. sub mtr_report_stats ($) {
  114.   my $tests= shift;
  115.   # ----------------------------------------------------------------------
  116.   # Find out how we where doing
  117.   # ----------------------------------------------------------------------
  118.   my $tot_skiped= 0;
  119.   my $tot_passed= 0;
  120.   my $tot_failed= 0;
  121.   my $tot_tests=  0;
  122.   foreach my $tinfo (@$tests)
  123.   {
  124.     if ( $tinfo->{'result'} eq 'MTR_RES_SKIPPED' )
  125.     {
  126.       $tot_skiped++;
  127.     }
  128.     elsif ( $tinfo->{'result'} eq 'MTR_RES_PASSED' )
  129.     {
  130.       $tot_tests++;
  131.       $tot_passed++;
  132.     }
  133.     elsif ( $tinfo->{'result'} eq 'MTR_RES_FAILED' )
  134.     {
  135.       $tot_tests++;
  136.       $tot_failed++;
  137.     }
  138.   }
  139.   # ----------------------------------------------------------------------
  140.   # Print out a summary report to screen
  141.   # ----------------------------------------------------------------------
  142.   if ( ! $tot_failed )
  143.   {
  144.     print "All $tot_tests tests were successful.n";
  145.   }
  146.   else
  147.   {
  148.     my $ratio=  $tot_passed * 100 / $tot_tests;
  149.     printf "Failed $tot_failed/$tot_tests tests, " .
  150.       "%.2f% were successful.nn", $ratio;
  151.     print
  152.       "The log files in var/log may give you some hintn",
  153.       "of what went wrong.n",
  154.       "If you want to report this error, please read first ",
  155.       "the documentation atn",
  156.       "http://www.mysql.com/doc/en/MySQL_test_suite.htmln";
  157.   }
  158.   # ----------------------------------------------------------------------
  159.   # ----------------------------------------------------------------------
  160.   if ( ! $::glob_use_running_server )
  161.   {
  162.     # Report if there was any fatal warnings/errors in the log files
  163.     #
  164.     unlink("$::opt_vardir/log/warnings");
  165.     unlink("$::opt_vardir/log/warnings.tmp");
  166.     # Remove some non fatal warnings from the log files
  167. # FIXME what is going on ????? ;-)
  168. #    sed -e 's!Warning:  Table:.* on delete!!g' -e 's!Warning: Setting lower_case_table_names=2!!g' -e 's!Warning: One can only use the --user.*root!!g' 
  169. #        var/log/*.err 
  170. #        | sed -e 's!Warning:  Table:.* on rename!!g' 
  171. #        > var/log/warnings.tmp;
  172. #
  173. #    found_error=0;
  174. #    # Find errors
  175. #    for i in "^Warning:" "^Error:" "^==.* at 0x"
  176. #    do
  177. #      if ( $GREP "$i" var/log/warnings.tmp >> var/log/warnings )
  178. #    {
  179. #        found_error=1
  180. #      }
  181. #    done
  182. #    unlink("$::opt_vardir/log/warnings.tmp");
  183. #    if ( $found_error=  "1" )
  184. #      {
  185. #      print "WARNING: Got errors/warnings while running tests. Please examinen"
  186. #      print "$::opt_vardir/log/warnings for details.n"
  187. #    }
  188. #  }
  189.   }
  190.   print "n";
  191.   if ( $tot_failed != 0 )
  192.   {
  193.     my $test_mode= join(" ", @::glob_test_mode) || "default";
  194.     print "mysql-test-run in $test_mode mode: *** Failing the test(s):";
  195.     foreach my $tinfo (@$tests)
  196.     {
  197.       if ( $tinfo->{'result'} eq 'MTR_RES_FAILED' )
  198.       {
  199.         print " $tinfo->{'name'}";
  200.       }
  201.     }
  202.     print "n";
  203.     mtr_error("there where failing test cases");
  204.   }
  205. }
  206. ##############################################################################
  207. #
  208. #  Text formatting
  209. #
  210. ##############################################################################
  211. sub mtr_print_line () {
  212.   print '-' x 55, "n";
  213. }
  214. sub mtr_print_thick_line () {
  215.   print '=' x 55, "n";
  216. }
  217. sub mtr_print_header () {
  218.   print "n";
  219.   if ( $::opt_timer )
  220.   {
  221.     print "TEST                           RESULT         TIME (ms)n";
  222.   }
  223.   else
  224.   {
  225.     print "TEST                           RESULTn";
  226.   }
  227.   mtr_print_line();
  228.   print "n";
  229. }
  230. ##############################################################################
  231. #
  232. #  Misc
  233. #
  234. ##############################################################################
  235. sub mtr_report (@) {
  236.   print join(" ", @_),"n";
  237. }
  238. sub mtr_warning (@) {
  239.   print STDERR "mysql-test-run: WARNING: ",join(" ", @_),"n";
  240. }
  241. sub mtr_error (@) {
  242.   print STDERR "mysql-test-run: *** ERROR: ",join(" ", @_),"n";
  243.   mtr_exit(1);
  244. }
  245. sub mtr_child_error (@) {
  246.   print STDERR "mysql-test-run: *** ERROR(child): ",join(" ", @_),"n";
  247.   exit(1);
  248. }
  249. sub mtr_debug (@) {
  250.   if ( $::opt_script_debug )
  251.   {
  252.     print STDERR "####: ",join(" ", @_),"n";
  253.   }
  254. }
  255. 1;