diff options
Diffstat (limited to '')
-rw-r--r-- | sql-bench/run-all-tests.sh | 314 |
1 files changed, 314 insertions, 0 deletions
diff --git a/sql-bench/run-all-tests.sh b/sql-bench/run-all-tests.sh new file mode 100644 index 00000000..ecab48e8 --- /dev/null +++ b/sql-bench/run-all-tests.sh @@ -0,0 +1,314 @@ +#!/usr/bin/env perl +# Copyright (c) 2000, 2001, 2003, 2006, 2007 MySQL AB, 2009 Sun Microsystems, Inc. +# Use is subject to license terms. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; version 2 +# of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1335 USA +# +# This program runs all test that starts with 'test-' and sums +# the results that the program prints. +# Each time result should be of the form: +# Time for|to KEYWORD (number_of_runs) 'other info': timestr() +# +# All options to this script is passed to all test program. +# useful options: +# --fast --force --lock-tables +# --server ==> mysql (default) / mSQL / Pg (postgres) / Solid +# --user ==> the user with permission to create / drop / select +# --pass ==> password for the user +# --cmp ==> Compare --server with one of the others (mysql/mSQL/Pg/Solid) +# --comments ==> everything you want to say such as the extra options you +# gave to the db server. (use --comments="xxx xxx xxx" +# --machine ==> Give a OS/machine id for your logfiles. +# --log ==> puts output in output/RUN-server-machine-cmp-$opt_cmp + +use DBI; +use Cwd; + +$opt_silent=1; # Don't write header + +@ORG_ARGV=@ARGV; +$pwd = cwd(); $pwd = "." if ($pwd eq ''); +require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; +$opt_silent=0; +$perl=$^X; +$machine=machine(); +$redirect= !($machine =~ /windows/i || $machine =~ "^NT\s") ? "2>&1" : ""; +$dir= ($pwd =~ /\\/) ? '\\' : '/'; # directory symbol for shell + +$prog_args=""; +foreach $arg (@ORG_ARGV) +{ + if ($redirect) + { + $prog_args.="'" . $arg . "' "; + } + else + { + # Windows/NT can't handle ' around arguments + $prog_args.=$arg . " "; + } +} + +$prog_count=$errors=0; + +if ($opt_cmp) { + $filename = "$opt_server$opt_suffix-" . machine_part() . "-cmp-$opt_cmp"; +} else { + $filename = "$opt_server$opt_suffix-" . machine_part(); +} + +if (! -d $opt_dir) +{ + if (-e $opt_dir) + { + die "$opt_dir isn't a directory\n"; + } + mkdir $opt_dir,0777 || die "Can't create directory: $opt_dir\n"; +} + +if ($opt_skip_test) { + (@skip_tests) = split(/,\s*/, $opt_skip_test); +} + +if ($opt_old_headers) +{ + read_headers("$opt_dir/RUN-$filename"); +} +else +{ + $server_version=$server->version(); +} + +if (!$opt_log) +{ + open(LOG,">&STDOUT"); +} +else +{ + open(LOG, "> $opt_dir/RUN-$filename") || + die "Can't write to $opt_dir/RUN-$filename: $!\n"; +} + +select(LOG); +$|=1; + +print "Benchmark DBD suite: $benchmark_version\n"; +print "Date of test: $date\n"; +print "Running tests on: $machine\n"; +print "Arguments: $log_prog_args\n"; +print "Comments: $opt_comments\n"; +print "Limits from: $opt_cmp\n"; +print "Server version: $server_version\n"; +print "Optimization: $opt_optimization\n"; +print "Hardware: $opt_hw\n\n"; + +$estimated=$warning=$got_warning=0; +while (<test-*>) +{ + next if (/\.sh$/); # configure script + next if (/\-fork$/); # test script + $prog_count++; + /test-(.*)$/; # Remove test from name + $prog=$1; + $skip_prog = 0; + foreach $skip_this (@skip_tests) { + if ($prog =~ /$skip_this/i) { + $skip_prog = 1; + last; + } + } + if ($opt_only_missing_tests && -f "$opt_dir$dir$prog-$filename") + { + # Test already run, skip it + $skip_prog= 1; + } + print "$prog: "; + if ((!$opt_use_old_results) && (!$skip_prog)) + { + if (system("$perl ./test-$prog $prog_args > \"$opt_dir$dir$prog-$filename\" $redirect")) + { + printf STDERR "Warning: Can't execute $prog. Check the file '$opt_dir$dir$prog-$filename'\n"; + die "aborted" if ($opt_die_on_errors); + } + } + open(TEST,"$opt_dir/$prog-$filename"); + $last_line=""; + while(<TEST>) + { + chomp; + $last_line=$_ if (!(/^\s*$/)); # Search after last line + } + if ($last_line =~ /Total time:/i) + { + print $last_line . "\n"; + open(TEST,"$opt_dir/$prog-$filename"); + while (<TEST>) + { + if (/^(estimated |)time (to|for) ([^\s:]*)\s*\((\d*)(:\d*)*\)[^:]*:\s*([\d.]+) .*secs \(\s*([^\s]*) usr\s*\+*\s*([^\s]*) sys.*=\s+([\d.]*)\s+cpu/i) + { + $arg=$summa{$3}; + if (!defined($arg)) + { + $summa{$3}= [ $4,$6,$7,$8,$9,""]; + } + else + { + $arg->[0]+=$4; + $arg->[1]+=$6; + $arg->[2]+=$7; + $arg->[3]+=$8; + $arg->[4]+=$9; + } + $prog_sum[0]+=$4; + $prog_sum[1]+=$6; + $prog_sum[2]+=$7; + $prog_sum[3]+=$8; + $prog_sum[4]+=$9; + if (length($1)) + { + $summa{$3}->[5].="+"; + $estimated=1; + } + if ($got_warning) + { + $summa{$3}->[5].="?"; + $warning=1; + $got_warning=0; + } + } + elsif (/^warning/i) + { + $got_warning=1; + } + else + { + $got_warning=0; + } + } + if ($opt_debug) + { + print "Summary for $prog: ", join(" ",@prog_sum), "\n"; + } + } + elsif ($last_line =~ /^Test skipped/i) + { + print "$last_line\n"; + } + else + { + $errors++; + print "Failed ($opt_dir/$prog-$filename)\n"; + } +} + +print "\n"; +if (!$errors) +{ + print "All $prog_count test executed successfully\n"; +} +else +{ + print "Of $prog_count tests, $errors tests didn't work\n"; +} +if ($estimated) +{ + print "Tests with estimated time have a + at end of line\n" +} +if ($warning) +{ + print "Tests with didn't return the correct result have a ? at end of line\n"; +} + +if (%summa) +{ + @total=(0,0,0,0,0,""); + print "\nTotals per operation:\n"; + print "Operation seconds usr sys cpu tests\n"; + foreach $key (sort(keys %summa)) + { + $arg=$summa{$key}; + printf("%-35.35s %7.2f %7.2f %7.2f %7.2f %7d %s\n", + $key,$arg->[1],$arg->[2],$arg->[3],$arg->[4],$arg->[0], + $arg->[5]); + + for ($i=0 ; $i < 5 ; $i++) + { + $total[$i]+=$arg->[$i]; + } + $total[5].=$arg->[$i]; + } + printf("%-35.35s %7.2f %7.2f %7.2f %7.2f %7d %s\n", + "TOTALS",$total[1],$total[2],$total[3],$total[4],$total[0], + $total[5]); +} + +select(STDOUT); +if ($opt_log) +{ + print "Test finished. You can find the result in:\n$opt_dir/RUN-$filename\n"; +} + + +# +# Read headers from an old benchmark run +# + +sub read_headers +{ + my ($filename)=@_; + + # Clear current values + $benchmark_version=$date=$machine=$server_version=""; + + open(TMP, "<$filename") || die "Can't open $filename\n"; + while (<TMP>) + { + chop; + if (/^Benchmark DBD.*:\s+(.*)$/) + { + $benchmark_version=$1; + } + elsif (/^Date of.*:\s+(.*)/) + { + $date=$1; + } + elsif (/^Running.*:\s+(.*)$/) + { + $machine=$1; + } + elsif (/^Arguments.*:\s+(.*)$/) + { + $log_prog_args=$1; + } + elsif (/^Limits.*:\s+(.*)$/) + { + $opt_cmp=$1; + } + elsif (/^Server ver.*:\s+(.*)$/) + { + $server_version=$1; + } + elsif (/^Optimiz.*:\s+(.*)$/) + { + $opt_optimization=$1; + } + elsif (/^Hardwar.*:\s+(.*)$/) + { + $opt_hw=$1; + } + } + close(TMP); +} |