mirror of
https://github.com/MariaDB/server.git
synced 2025-01-15 19:42:28 +01:00
e39ed5d76f
- Updated capabilities for PostgreSQL in server.cfg - Updated test-ATIS & test-table-elimination to work with PostgreSQL - Updated test-transaction test to also work with non transactional tables Other things: - Added test of tables with many keys in test-insert - Added 2 new GROUP BY .. ORDER BY test
314 lines
7.1 KiB
Bash
314 lines
7.1 KiB
Bash
#!/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 ==> mariadb (default) / mysql / Pg (postgres) / Oracle
|
|
# --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);
|
|
}
|