Commit e6bf664c authored by msvensson@shellback.(none)'s avatar msvensson@shellback.(none)

Merge shellback.(none):/home/msvensson/mysql/mysqltestrun_pl/my50-mysqltestrun_pl

into  shellback.(none):/home/msvensson/mysql/mysql-5.0
parents 3c365461 2b38c41b
...@@ -615,6 +615,8 @@ static void die(const char *fmt, ...) ...@@ -615,6 +615,8 @@ static void die(const char *fmt, ...)
{ {
va_list args; va_list args;
DBUG_ENTER("die"); DBUG_ENTER("die");
/* Print the error message */
va_start(args, fmt); va_start(args, fmt);
if (fmt) if (fmt)
{ {
...@@ -629,6 +631,15 @@ static void die(const char *fmt, ...) ...@@ -629,6 +631,15 @@ static void die(const char *fmt, ...)
fflush(stderr); fflush(stderr);
} }
va_end(args); va_end(args);
/* Dump the result that has been accumulated so far to reject file */
if (result_file && ds_res.length)
{
reject_dump(result_file, ds_res.str, ds_res.length);
}
/* Clean up and exit */
free_used_memory(); free_used_memory();
my_end(MY_CHECK_ERROR); my_end(MY_CHECK_ERROR);
......
...@@ -134,6 +134,7 @@ our $glob_win32= 0; # OS and native Win32 executables ...@@ -134,6 +134,7 @@ our $glob_win32= 0; # OS and native Win32 executables
our $glob_win32_perl= 0; # ActiveState Win32 Perl our $glob_win32_perl= 0; # ActiveState Win32 Perl
our $glob_cygwin_perl= 0; # Cygwin Perl our $glob_cygwin_perl= 0; # Cygwin Perl
our $glob_cygwin_shell= undef; our $glob_cygwin_shell= undef;
our $glob_use_libtool= 1;
our $glob_mysql_test_dir= undef; our $glob_mysql_test_dir= undef;
our $glob_mysql_bench_dir= undef; our $glob_mysql_bench_dir= undef;
our $glob_hostname= undef; our $glob_hostname= undef;
...@@ -205,7 +206,6 @@ our $opt_cursor_protocol; ...@@ -205,7 +206,6 @@ our $opt_cursor_protocol;
our $opt_view_protocol; our $opt_view_protocol;
our $opt_current_test; our $opt_current_test;
our $opt_ddd;
our $opt_debug; our $opt_debug;
our $opt_do_test; our $opt_do_test;
our @opt_cases; # The test cases names in argv our @opt_cases; # The test cases names in argv
...@@ -219,9 +219,14 @@ our $opt_gcov; ...@@ -219,9 +219,14 @@ our $opt_gcov;
our $opt_gcov_err; our $opt_gcov_err;
our $opt_gcov_msg; our $opt_gcov_msg;
our $glob_debugger= 0;
our $opt_gdb; our $opt_gdb;
our $opt_client_gdb; our $opt_client_gdb;
our $opt_ddd;
our $opt_client_ddd;
our $opt_manual_gdb; our $opt_manual_gdb;
our $opt_manual_ddd;
our $opt_manual_debug;
our $opt_gprof; our $opt_gprof;
our $opt_gprof_dir; our $opt_gprof_dir;
...@@ -278,11 +283,12 @@ our $opt_timer; ...@@ -278,11 +283,12 @@ our $opt_timer;
our $opt_user; our $opt_user;
our $opt_user_test; our $opt_user_test;
our $opt_valgrind; our $opt_valgrind= 0;
our $opt_valgrind_mysqld; our $opt_valgrind_mysqld= 0;
our $opt_valgrind_mysqltest; our $opt_valgrind_mysqltest= 0;
our $opt_valgrind_all; our $opt_valgrind_all= 0;
our $opt_valgrind_options; our $opt_valgrind_options;
our $opt_valgrind_path;
our $opt_stress= ""; our $opt_stress= "";
our $opt_stress_suite= "main"; our $opt_stress_suite= "main";
...@@ -446,6 +452,12 @@ sub initial_setup () { ...@@ -446,6 +452,12 @@ sub initial_setup () {
$glob_cygwin_perl= ($^O eq "cygwin"); $glob_cygwin_perl= ($^O eq "cygwin");
$glob_win32= ($glob_win32_perl or $glob_cygwin_perl); $glob_win32= ($glob_win32_perl or $glob_cygwin_perl);
# Use libtool on all platforms except windows
if ( $glob_win32 )
{
$glob_use_libtool= 0;
}
# We require that we are in the "mysql-test" directory # We require that we are in the "mysql-test" directory
# to run mysql-test-run # to run mysql-test-run
...@@ -577,9 +589,11 @@ sub command_line_setup () { ...@@ -577,9 +589,11 @@ sub command_line_setup () {
# Debugging # Debugging
'gdb' => \$opt_gdb, 'gdb' => \$opt_gdb,
'manual-gdb' => \$opt_manual_gdb,
'client-gdb' => \$opt_client_gdb, 'client-gdb' => \$opt_client_gdb,
'manual-gdb' => \$opt_manual_gdb,
'manual-debug' => \$opt_manual_debug,
'ddd' => \$opt_ddd, 'ddd' => \$opt_ddd,
'client-ddd' => \$opt_client_ddd,
'strace-client' => \$opt_strace_client, 'strace-client' => \$opt_strace_client,
'master-binary=s' => \$exe_master_mysqld, 'master-binary=s' => \$exe_master_mysqld,
'slave-binary=s' => \$exe_slave_mysqld, 'slave-binary=s' => \$exe_slave_mysqld,
...@@ -587,10 +601,12 @@ sub command_line_setup () { ...@@ -587,10 +601,12 @@ sub command_line_setup () {
# Coverage, profiling etc # Coverage, profiling etc
'gcov' => \$opt_gcov, 'gcov' => \$opt_gcov,
'gprof' => \$opt_gprof, 'gprof' => \$opt_gprof,
'valgrind:s' => \$opt_valgrind, 'valgrind' => \$opt_valgrind,
'valgrind-mysqltest:s' => \$opt_valgrind_mysqltest, 'valgrind-mysqltest' => \$opt_valgrind_mysqltest,
'valgrind-all:s' => \$opt_valgrind_all, 'valgrind-mysqld' => \$opt_valgrind_mysqld,
'valgrind-all' => \$opt_valgrind_all,
'valgrind-options=s' => \$opt_valgrind_options, 'valgrind-options=s' => \$opt_valgrind_options,
'valgrind-path=s' => \$opt_valgrind_path,
# Stress testing # Stress testing
'stress' => \$opt_stress, 'stress' => \$opt_stress,
...@@ -757,29 +773,17 @@ sub command_line_setup () { ...@@ -757,29 +773,17 @@ sub command_line_setup () {
mtr_error("Coverage test needs the source - please use source dist"); mtr_error("Coverage test needs the source - please use source dist");
} }
if ( $opt_gdb ) # Check debug related options
if ( $opt_gdb || $opt_client_gdb || $opt_ddd || opt_client_ddd ||
$opt_manual_gdb || $opt_manual_ddd || opt_manual_debug)
{ {
# Indicate that we are using debugger
$glob_debugger= 1;
# Increase timeouts
$opt_wait_timeout= 300; $opt_wait_timeout= 300;
if ( $opt_extern ) if ( $opt_extern )
{ {
mtr_error("Can't use --extern with --gdb"); mtr_error("Can't use --extern when using debugger");
}
}
if ( $opt_manual_gdb )
{
$opt_gdb= 1;
if ( $opt_extern )
{
mtr_error("Can't use --extern with --manual-gdb");
}
}
if ( $opt_ddd )
{
if ( $opt_extern )
{
mtr_error("Can't use --extern with --ddd");
} }
} }
...@@ -798,22 +802,20 @@ sub command_line_setup () { ...@@ -798,22 +802,20 @@ sub command_line_setup () {
$opt_with_ndbcluster= 0; $opt_with_ndbcluster= 0;
} }
# The ":s" in the argument spec, means we have three different cases # Turn on valgrinding of all executables if "valgrind" or "valgrind-all"
# if ( $opt_valgrind or $opt_valgrind_all )
# undefined option not set
# "" option set with no argument
# "somestring" option is name/path of valgrind executable
# Take executable path from any of them, if any
$opt_valgrind_mysqld= $opt_valgrind;
$opt_valgrind= $opt_valgrind_mysqltest if $opt_valgrind_mysqltest;
$opt_valgrind= $opt_valgrind_all if $opt_valgrind_all;
# If valgrind flag not defined, define if other valgrind flags are
unless ( defined $opt_valgrind )
{ {
$opt_valgrind= "" mtr_report("Turning on valgrind for all executables");
if defined $opt_valgrind_mysqltest or defined $opt_valgrind_all; $opt_valgrind= 1;
$opt_valgrind_mysqld= 1;
$opt_valgrind_mysqltest= 1;
}
elsif ( $opt_valgrind_mysqld or $opt_valgrind_mysqltest )
{
# If test's are run for a specific executable, turn on
# verbose and show-reachable
$opt_valgrind= 1;
$opt_valgrind_all= 1;
} }
if ( ! $opt_testcase_timeout ) if ( ! $opt_testcase_timeout )
...@@ -828,12 +830,11 @@ sub command_line_setup () { ...@@ -828,12 +830,11 @@ sub command_line_setup () {
$opt_suite_timeout*= 4 if defined $opt_valgrind; $opt_suite_timeout*= 4 if defined $opt_valgrind;
} }
if ( defined $opt_valgrind ) # Increase times to wait for executables to start if using valgrind
if ( $opt_valgrind )
{ {
$opt_sleep_time_after_restart= 10; $opt_sleep_time_after_restart= 10;
$opt_sleep_time_for_delete= 60; $opt_sleep_time_for_delete= 60;
# >=2.1.2 requires the --tool option, some versions write to stdout, some to stderr
# valgrind --help 2>&1 | grep "\-\-tool" > /dev/null && VALGRIND="$VALGRIND --tool=memcheck"
} }
if ( ! $opt_user ) if ( ! $opt_user )
...@@ -1022,20 +1023,8 @@ sub executable_setup () { ...@@ -1022,20 +1023,8 @@ sub executable_setup () {
"/usr/bin/false"); "/usr/bin/false");
} }
else else
{
if ( $opt_valgrind_mysqltest )
{
# client/mysqltest might be a libtool .sh script, so look for real exe
# to avoid valgrinding bash ;)
$exe_mysqltest=
mtr_exe_exists("$path_client_bindir/.libs/lt-mysqltest",
"$path_client_bindir/.libs/mysqltest",
"$path_client_bindir/mysqltest");
}
else
{ {
$exe_mysqltest= mtr_exe_exists("$path_client_bindir/mysqltest"); $exe_mysqltest= mtr_exe_exists("$path_client_bindir/mysqltest");
}
$exe_mysql_client_test= $exe_mysql_client_test=
mtr_exe_exists("$glob_basedir/tests/mysql_client_test", mtr_exe_exists("$glob_basedir/tests/mysql_client_test",
"$path_client_bindir/mysql_client_test", "$path_client_bindir/mysql_client_test",
...@@ -1568,8 +1557,9 @@ sub run_suite () { ...@@ -1568,8 +1557,9 @@ sub run_suite () {
mtr_print_line(); mtr_print_line();
if ( ! $opt_gdb and ! $glob_use_running_server and if ( ! $opt_debugger and
! $opt_ddd and ! $glob_use_embedded_server ) ! $glob_use_running_server and
! $glob_use_embedded_server )
{ {
stop_masters_slaves(); stop_masters_slaves();
} }
...@@ -2160,8 +2150,9 @@ sub report_failure_and_restart ($) { ...@@ -2160,8 +2150,9 @@ sub report_failure_and_restart ($) {
my $test_mode= join(" ", @::glob_test_mode) || "default"; my $test_mode= join(" ", @::glob_test_mode) || "default";
print "Aborting: $tinfo->{'name'} failed in $test_mode mode. "; print "Aborting: $tinfo->{'name'} failed in $test_mode mode. ";
print "To continue, re-run with '--force'.\n"; print "To continue, re-run with '--force'.\n";
if ( ! $opt_gdb and ! $glob_use_running_server and if ( ! $glob_debugger and
! $opt_ddd and ! $glob_use_embedded_server ) ! $glob_use_running_server and
! $glob_use_embedded_server )
{ {
stop_masters_slaves(); stop_masters_slaves();
} }
...@@ -2288,7 +2279,7 @@ sub mysqld_arguments ($$$$$$) { ...@@ -2288,7 +2279,7 @@ sub mysqld_arguments ($$$$$$) {
mtr_add_arg($args, "%s--language=%s", $prefix, $path_language); mtr_add_arg($args, "%s--language=%s", $prefix, $path_language);
mtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix); mtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
if ( defined $opt_valgrind_mysqld ) if ( $opt_valgrind_mysqld )
{ {
mtr_add_arg($args, "%s--skip-safemalloc", $prefix); mtr_add_arg($args, "%s--skip-safemalloc", $prefix);
mtr_add_arg($args, "%s--skip-bdb", $prefix); mtr_add_arg($args, "%s--skip-bdb", $prefix);
...@@ -2426,7 +2417,8 @@ sub mysqld_arguments ($$$$$$) { ...@@ -2426,7 +2417,8 @@ sub mysqld_arguments ($$$$$$) {
mtr_add_arg($args, "%s--log-warnings", $prefix); mtr_add_arg($args, "%s--log-warnings", $prefix);
} }
if ( $opt_gdb or $opt_client_gdb or $opt_manual_gdb or $opt_ddd) # Indicate to "mysqld" it will be debugged in debugger
if ( $glob_debugger )
{ {
mtr_add_arg($args, "%s--gdb", $prefix); mtr_add_arg($args, "%s--gdb", $prefix);
} }
...@@ -2519,7 +2511,7 @@ sub mysqld_start ($$$$$) { ...@@ -2519,7 +2511,7 @@ sub mysqld_start ($$$$$) {
mtr_init_args(\$args); mtr_init_args(\$args);
if ( defined $opt_valgrind_mysqld ) if ( $opt_valgrind_mysqld )
{ {
valgrind_arguments($args, \$exe); valgrind_arguments($args, \$exe);
} }
...@@ -2527,6 +2519,15 @@ sub mysqld_start ($$$$$) { ...@@ -2527,6 +2519,15 @@ sub mysqld_start ($$$$$) {
mysqld_arguments($args,$type,$idx,$extra_opt,$slave_master_info, mysqld_arguments($args,$type,$idx,$extra_opt,$slave_master_info,
$using_ndbcluster); $using_ndbcluster);
if ( $opt_gdb || $opt_manual_gdb)
{
gdb_arguments(\$args, \$exe, $type);
}
elsif ( $opt_ddd || $opt_manual_ddd )
{
ddd_arguments(\$args, \$exe, $type);
}
if ( $type eq 'master' ) if ( $type eq 'master' )
{ {
if ( $pid= mtr_spawn($exe, $args, "", if ( $pid= mtr_spawn($exe, $args, "",
...@@ -2868,7 +2869,7 @@ sub run_mysqltest ($) { ...@@ -2868,7 +2869,7 @@ sub run_mysqltest ($) {
mtr_init_args(\$args); mtr_init_args(\$args);
if ( defined $opt_valgrind_mysqltest ) if ( $opt_valgrind_mysqltest )
{ {
valgrind_arguments($args, \$exe); valgrind_arguments($args, \$exe);
} }
...@@ -2988,7 +2989,10 @@ sub run_mysqltest ($) { ...@@ -2988,7 +2989,10 @@ sub run_mysqltest ($) {
# Add arguments that should not go into the MYSQL_TEST env var # Add arguments that should not go into the MYSQL_TEST env var
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
mtr_add_arg($args, "-R"); mtr_add_arg($args, "--test-file");
mtr_add_arg($args, $tinfo->{'path'});
mtr_add_arg($args, "--result-file");
mtr_add_arg($args, $tinfo->{'result_file'}); mtr_add_arg($args, $tinfo->{'result_file'});
if ( $opt_record ) if ( $opt_record )
...@@ -2996,21 +3000,143 @@ sub run_mysqltest ($) { ...@@ -2996,21 +3000,143 @@ sub run_mysqltest ($) {
mtr_add_arg($args, "--record"); mtr_add_arg($args, "--record");
} }
if ( $opt_client_gdb )
{
gdb_arguments(\$args, \$exe, "client");
}
elsif ( $opt_client_ddd )
{
ddd_arguments(\$args, \$exe, "client");
}
if ($glob_use_libtool)
{
# Add "libtool --mode-execute" before the test to execute
unshift(@$args, "--mode=execute", $path);
$exe= "libtool";
}
if ( $opt_check_testcases ) if ( $opt_check_testcases )
{ {
run_check_testcase("before"); run_check_testcase("before");
} }
my $res = mtr_run_test($exe,$args,$tinfo->{'path'},"",$path_timefile,""); my $res = mtr_run_test($exe,$args,"","",$path_timefile,"");
if ( $opt_check_testcases ) if ( $opt_check_testcases )
{ {
run_check_testcase("after"); run_check_testcase("after");
} }
return $res; return $res;
} }
#
# Modify the exe and args so that program is run in gdb in xterm
#
sub gdb_arguments {
my $args= shift;
my $exe= shift;
my $type= shift;
# Write $args to gdb init file
my $str= join(" ", @$$args);
my $gdb_init_file= "$opt_tmpdir/gdbinit.$type";
if ( $type eq "client" )
{
# write init file for client
mtr_tofile($gdb_init_file,
"set args $str\n"
);
}
else
{
# write init file for mysqld
mtr_tofile($gdb_init_file,
"file $$exe\n" .
"set args $str\n" .
"break mysql_parse\n" .
"commands 1\n" .
"disable 1\n" .
"end\n" .
"run"
);
}
$$args= [];
mtr_add_arg($$args, "-title");
mtr_add_arg($$args, "$type");
mtr_add_arg($$args, "-e");
if ( $glob_use_libtool )
{
mtr_add_arg($$args, "libtool");
mtr_add_arg($$args, "--mode=execute");
}
mtr_add_arg($$args, "gdb");
mtr_add_arg($$args, "-x");
mtr_add_arg($$args, "$gdb_init_file");
mtr_add_arg($$args, "$$exe");
$$exe= "xterm";
}
#
# Modify the exe and args so that program is run in ddd
#
sub ddd_arguments {
my $args= shift;
my $exe= shift;
my $type= shift;
# Write $args to ddd init file
my $str= join(" ", @$$args);
my $gdb_init_file= "$opt_tmpdir/gdbinit.$type";
if ( $type eq "client" )
{
# write init file for client
mtr_tofile($gdb_init_file,
"set args $str\n" .
"break main\n"
);
}
else
{
# write init file for mysqld
mtr_tofile($gdb_init_file,
"file $$exe\n" .
"set args $str\n" .
"break mysql_parse\n" .
"commands 1\n" .
"disable 1\n" .
"end\n" .
"run"
);
}
my $save_exe= $$exe;
$$args= [];
if ( $glob_use_libtool )
{
$$exe= "libtool";
mtr_add_arg($$args, "--mode=execute");
mtr_add_arg($$args, "ddd");
}
else
{
$$exe= "ddd";
}
mtr_add_arg($$args, "--command=$gdb_init_file");
mtr_add_arg($$args, "$save_exe");
}
#
# Modify the exe and args so that program is run in valgrind
#
sub valgrind_arguments { sub valgrind_arguments {
my $args= shift; my $args= shift;
my $exe= shift; my $exe= shift;
...@@ -3022,7 +3148,7 @@ sub valgrind_arguments { ...@@ -3022,7 +3148,7 @@ sub valgrind_arguments {
mtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_mysql_test_dir) mtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_mysql_test_dir)
if -f "$glob_mysql_test_dir/valgrind.supp"; if -f "$glob_mysql_test_dir/valgrind.supp";
if ( defined $opt_valgrind_all ) if ( $opt_valgrind_all )
{ {
mtr_add_arg($args, "-v"); mtr_add_arg($args, "-v");
mtr_add_arg($args, "--show-reachable=yes"); mtr_add_arg($args, "--show-reachable=yes");
...@@ -3030,14 +3156,13 @@ sub valgrind_arguments { ...@@ -3030,14 +3156,13 @@ sub valgrind_arguments {
if ( $opt_valgrind_options ) if ( $opt_valgrind_options )
{ {
# FIXME split earlier and put into @glob_valgrind_*
mtr_add_arg($args, split(' ', $opt_valgrind_options)); mtr_add_arg($args, split(' ', $opt_valgrind_options));
} }
mtr_add_arg($args, $$exe); mtr_add_arg($args, $$exe);
$$exe= $opt_valgrind || "valgrind"; $$exe= $opt_valgrind_path || "valgrind";
} }
...@@ -3103,10 +3228,12 @@ Options to run test on running server ...@@ -3103,10 +3228,12 @@ Options to run test on running server
Options for debugging the product Options for debugging the product
gdb FIXME gdb Start the mysqld(s) in gdb
manual-gdb FIXME manual-gdb Let user manually start mysqld in gdb, before running test(s)
client-gdb FIXME manual-debug Let user manually start mysqld in debugger, before running test(s)
ddd FIXME client-gdb Start mysqltest client in gdb
ddd Start mysqld in ddd
client-ddd Start mysqltest client in ddd
strace-client FIXME strace-client FIXME
master-binary=PATH Specify the master "mysqld" to use master-binary=PATH Specify the master "mysqld" to use
slave-binary=PATH Specify the slave "mysqld" to use slave-binary=PATH Specify the slave "mysqld" to use
...@@ -3115,11 +3242,13 @@ Options for coverage, profiling etc ...@@ -3115,11 +3242,13 @@ Options for coverage, profiling etc
gcov FIXME gcov FIXME
gprof FIXME gprof FIXME
valgrind[=EXE] Run the "mysqld" server using valgrind, optionally valgrind Run the "mysqltest" and "mysqld" executables using valgrind
specifying the executable path/name valgrind-all Same as "valgrind" but will also add "verbose" and "--show-reachable"
valgrind-mysqltest[=EXE] In addition, run the "mysqltest" executable with valgrind flags to valgrind
valgrind-all[=EXE] Adds verbose flag, and --show-reachable to valgrind valgrind-mysqltest Run the "mysqltest" executable with valgrind
valgrind-mysqld Run the "mysqld" executable with valgrind
valgrind-options=ARGS Extra options to give valgrind valgrind-options=ARGS Extra options to give valgrind
valgrind-path=[EXE] Path to the valgrind executable
Misc options Misc options
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment