2004-12-30 16:34:01 +01:00
|
|
|
#!/usr/bin/perl
|
|
|
|
# -*- cperl -*-
|
|
|
|
|
|
|
|
#
|
2006-10-05 22:05:42 +02:00
|
|
|
##############################################################################
|
|
|
|
#
|
|
|
|
# mysql-test-run.pl
|
2004-12-30 16:34:01 +01:00
|
|
|
#
|
2007-12-12 18:19:24 +01:00
|
|
|
# Tool used for executing a suite of .test files
|
2004-12-30 16:34:01 +01:00
|
|
|
#
|
2006-10-05 22:05:42 +02:00
|
|
|
# See the "MySQL Test framework manual" for more information
|
|
|
|
# http://dev.mysql.com/doc/mysqltest/en/index.html
|
2004-12-30 16:34:01 +01:00
|
|
|
#
|
|
|
|
#
|
2006-10-05 22:05:42 +02:00
|
|
|
##############################################################################
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
|
|
|
|
BEGIN {
|
|
|
|
# Check that mysql-test-run.pl is started from mysql-test/
|
|
|
|
unless ( -f "mysql-test-run.pl" )
|
|
|
|
{
|
|
|
|
print "**** ERROR **** ",
|
|
|
|
"You must start mysql-test-run from the mysql-test/ directory\n";
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
# Check that lib exist
|
|
|
|
unless ( -d "lib/" )
|
|
|
|
{
|
|
|
|
print "**** ERROR **** ",
|
|
|
|
"Could not find the lib/ directory \n";
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
}
|
2007-11-23 15:02:50 +01:00
|
|
|
|
2008-11-14 09:45:32 +01:00
|
|
|
BEGIN {
|
|
|
|
# Check backward compatibility support
|
|
|
|
# By setting the environment variable MTR_VERSION
|
|
|
|
# it's possible to use a previous version of
|
|
|
|
# mysql-test-run.pl
|
|
|
|
my $version= $ENV{MTR_VERSION} || 2;
|
|
|
|
if ( $version == 1 )
|
|
|
|
{
|
|
|
|
print "=======================================================\n";
|
|
|
|
print " WARNING: Using mysql-test-run.pl version 1! \n";
|
|
|
|
print "=======================================================\n";
|
2009-02-10 11:00:16 +01:00
|
|
|
# Should use exec() here on *nix but this appears not to work on Windows
|
|
|
|
exit(system($^X, "lib/v1/mysql-test-run.pl", @ARGV) >> 8);
|
2008-11-14 09:45:32 +01:00
|
|
|
}
|
|
|
|
elsif ( $version == 2 )
|
|
|
|
{
|
|
|
|
# This is the current version, just continue
|
|
|
|
;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
print "ERROR: Version $version of mysql-test-run does not exist!\n";
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
}
|
2007-11-23 15:02:50 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
use lib "lib";
|
2004-12-30 16:34:01 +01:00
|
|
|
|
|
|
|
use Cwd;
|
|
|
|
use Getopt::Long;
|
2007-12-12 18:19:24 +01:00
|
|
|
use My::File::Path; # Patched version of File::Path
|
|
|
|
use File::Basename;
|
|
|
|
use File::Copy;
|
2008-04-27 23:35:38 +02:00
|
|
|
use File::Find;
|
2010-01-07 13:17:54 +01:00
|
|
|
use File::Temp qw/tempdir/;
|
2010-06-10 11:11:52 +02:00
|
|
|
use File::Spec::Functions qw/splitdir rel2abs/;
|
2008-02-20 14:55:30 +01:00
|
|
|
use My::Platform;
|
2007-12-12 18:19:24 +01:00
|
|
|
use My::SafeProcess;
|
|
|
|
use My::ConfigFactory;
|
2008-01-07 19:44:48 +01:00
|
|
|
use My::Options;
|
2008-03-13 17:16:42 +01:00
|
|
|
use My::Find;
|
2008-05-04 13:31:40 +02:00
|
|
|
use My::SysInfo;
|
2008-09-06 08:57:05 +02:00
|
|
|
use My::CoreDump;
|
2007-12-12 18:19:24 +01:00
|
|
|
use mtr_cases;
|
2008-02-04 11:16:25 +01:00
|
|
|
use mtr_report;
|
2008-04-08 16:51:26 +02:00
|
|
|
use mtr_match;
|
2008-08-10 19:46:43 +02:00
|
|
|
use mtr_unique;
|
2004-12-30 16:34:01 +01:00
|
|
|
use IO::Socket::INET;
|
2008-04-24 13:02:53 +02:00
|
|
|
use IO::Select;
|
2006-11-02 21:05:20 +01:00
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
require "lib/mtr_process.pl";
|
|
|
|
require "lib/mtr_io.pl";
|
|
|
|
require "lib/mtr_gcov.pl";
|
2010-01-05 21:35:50 +01:00
|
|
|
require "lib/mtr_gprof.pl";
|
2004-12-30 16:34:01 +01:00
|
|
|
require "lib/mtr_misc.pl";
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
$SIG{INT}= sub { mtr_error("Got ^C signal"); };
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2006-10-04 12:47:32 +02:00
|
|
|
our $mysql_version_id;
|
2007-12-12 18:19:24 +01:00
|
|
|
our $glob_mysql_test_dir;
|
|
|
|
our $basedir;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
|
|
|
our $path_charsetsdir;
|
|
|
|
our $path_client_bindir;
|
2008-03-03 12:47:05 +01:00
|
|
|
our $path_client_libdir;
|
2004-12-30 16:34:01 +01:00
|
|
|
our $path_language;
|
2006-10-04 12:47:32 +02:00
|
|
|
|
2008-02-25 16:41:59 +01:00
|
|
|
our $path_current_testlog;
|
|
|
|
our $path_testlog;
|
2006-10-04 12:47:32 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
our $default_vardir;
|
|
|
|
our $opt_vardir; # Path to use for var/ dir
|
2010-06-10 11:11:52 +02:00
|
|
|
our $plugindir;
|
2007-12-12 18:19:24 +01:00
|
|
|
my $path_vardir_trace; # unix formatted opt_vardir for trace files
|
|
|
|
my $opt_tmpdir; # Path to use for tmp/ dir
|
2009-03-04 16:41:45 +01:00
|
|
|
my $opt_tmpdir_pid;
|
|
|
|
|
|
|
|
END {
|
2009-02-13 10:38:53 +01:00
|
|
|
if ( defined $opt_tmpdir_pid and $opt_tmpdir_pid == $$ )
|
|
|
|
{
|
2009-03-04 16:41:45 +01:00
|
|
|
# Remove the tempdir this process has created
|
|
|
|
mtr_verbose("Removing tmpdir '$opt_tmpdir");
|
|
|
|
rmtree($opt_tmpdir);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-01-07 13:17:54 +01:00
|
|
|
sub env_or_val($$) { defined $ENV{$_[0]} ? $ENV{$_[0]} : $_[1] }
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $path_config_file; # The generated config file, var/my.cnf
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2006-11-02 21:05:20 +01:00
|
|
|
# Visual Studio produces executables in different sub-directories based on the
|
|
|
|
# configuration used to build them. To make life easier, an environment
|
|
|
|
# variable or command-line option may be specified to control which set of
|
|
|
|
# executables will be used by the test suite.
|
|
|
|
our $opt_vs_config = $ENV{'MTR_VS_CONFIG'};
|
|
|
|
|
2010-09-12 14:33:04 +02:00
|
|
|
my $DEFAULT_SUITES= "main,binlog,federated,rpl,maria,parts,innodb,innodb_plugin,percona,ndb,vcol,oqgraph,sphinx";
|
2009-11-23 15:04:17 +01:00
|
|
|
my $opt_suites;
|
2006-10-06 16:26:17 +02:00
|
|
|
|
2006-07-07 16:47:51 +02:00
|
|
|
our $opt_verbose= 0; # Verbose output, enable with --verbose
|
2004-12-30 16:34:01 +01:00
|
|
|
our $exe_mysql;
|
|
|
|
our $exe_mysqladmin;
|
|
|
|
our $exe_mysqltest;
|
2006-05-02 14:46:18 +02:00
|
|
|
our $exe_libtool;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2006-11-17 11:01:09 +01:00
|
|
|
our $opt_big_test= 0;
|
Added option --staging-run to mysql-test-run to mark slow, not important tests, to not be run in staging trees
Use MY_MUTEX_INIT_FAST for pool mutex
mysql-test/mysql-test-run.pl:
Added option --staging-run
Added information about --parallell=# to help message
mysql-test/suite/federated/federated_server.test:
Slow test, don't run with --staging-run
mysql-test/suite/maria/t/maria-preload.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_optimize.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_relayrotate.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_001.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_sp003.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_start_stop_slave.test:
Slow test, don't run with --staging-run
mysql-test/t/compress.test:
Slow test, don't run with --staging-run
mysql-test/t/count_distinct3.test:
Slow test, don't run with --staging-run
mysql-test/t/index_merge_innodb.test:
Slow test, don't run with --staging-run
mysql-test/t/information_schema_all_engines.test:
Slow test, don't run with --staging-run
mysql-test/t/innodb_mysql.test:
Slow test, don't run with --staging-run
mysql-test/t/pool_of_threads.test:
Slow test, don't run with --staging-run
mysql-test/t/preload.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl_compress.test:
Slow test, don't run with --staging-run
mysql-test/valgrind.supp:
Suppress warnings from SuSE 11.1 on x86
sql/scheduler.cc:
Use MY_MUTEX_INIT_FAST for pool mutex
2009-06-05 17:35:22 +02:00
|
|
|
our $opt_staging_run= 0;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-11-23 13:29:31 +01:00
|
|
|
our @opt_combinations;
|
2007-11-02 22:32:17 +01:00
|
|
|
|
2005-06-10 21:29:37 +02:00
|
|
|
our @opt_extra_mysqld_opt;
|
2007-08-09 15:00:32 +02:00
|
|
|
our @opt_extra_mysqltest_opt;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2009-01-27 14:21:18 +01:00
|
|
|
my $opt_compress;
|
|
|
|
my $opt_ssl;
|
2009-02-06 15:09:15 +01:00
|
|
|
my $opt_skip_ssl;
|
2009-10-19 15:51:47 +02:00
|
|
|
our $opt_ssl_supported;
|
2009-01-27 14:21:18 +01:00
|
|
|
my $opt_ps_protocol;
|
|
|
|
my $opt_sp_protocol;
|
|
|
|
my $opt_cursor_protocol;
|
|
|
|
my $opt_view_protocol;
|
2005-10-04 15:43:55 +02:00
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
our $opt_debug;
|
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
|
|
|
our @opt_cases; # The test cases names in argv
|
2004-12-30 16:34:01 +01:00
|
|
|
our $opt_embedded_server;
|
2006-11-17 13:30:42 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Options used when connecting to an already running server
|
|
|
|
my %opts_extern;
|
|
|
|
sub using_extern { return (keys %opts_extern > 0);};
|
2006-11-17 13:30:42 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
our $opt_fast= 0;
|
2004-12-30 16:34:01 +01:00
|
|
|
our $opt_force;
|
2006-11-07 11:07:27 +01:00
|
|
|
our $opt_mem= $ENV{'MTR_MEM'};
|
2004-12-30 16:34:01 +01:00
|
|
|
|
|
|
|
our $opt_gcov;
|
2009-08-25 17:02:55 +02:00
|
|
|
our $opt_gcov_src_dir;
|
2009-02-27 12:20:53 +01:00
|
|
|
our $opt_gcov_exe= "gcov";
|
|
|
|
our $opt_gcov_err= "mysql-test-gcov.msg";
|
|
|
|
our $opt_gcov_msg= "mysql-test-gcov.err";
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2010-01-05 21:35:50 +01:00
|
|
|
our $opt_gprof;
|
|
|
|
our %gprof_dirs;
|
|
|
|
|
2006-03-23 15:07:39 +01:00
|
|
|
our $glob_debugger= 0;
|
2004-12-30 16:34:01 +01:00
|
|
|
our $opt_gdb;
|
|
|
|
our $opt_client_gdb;
|
2006-03-23 15:07:39 +01:00
|
|
|
our $opt_ddd;
|
|
|
|
our $opt_client_ddd;
|
2004-12-30 16:34:01 +01:00
|
|
|
our $opt_manual_gdb;
|
2006-03-23 15:07:39 +01:00
|
|
|
our $opt_manual_ddd;
|
|
|
|
our $opt_manual_debug;
|
2006-04-04 09:49:32 +02:00
|
|
|
our $opt_debugger;
|
|
|
|
our $opt_client_debugger;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $config; # The currently running config
|
|
|
|
my $current_config_name; # The currently running config file template
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2009-02-24 12:53:34 +01:00
|
|
|
our $opt_experimental;
|
2009-02-25 15:00:17 +01:00
|
|
|
our $experimental_test_cases;
|
2005-08-29 20:28:42 +02:00
|
|
|
|
2008-08-10 19:46:43 +02:00
|
|
|
my $baseport;
|
2010-01-25 11:20:52 +01:00
|
|
|
# $opt_build_thread may later be set from $opt_port_base
|
2008-04-24 13:02:53 +02:00
|
|
|
my $opt_build_thread= $ENV{'MTR_BUILD_THREAD'} || "auto";
|
2010-01-25 11:20:52 +01:00
|
|
|
my $opt_port_base= $ENV{'MTR_PORT_BASE'} || "auto";
|
2009-03-04 11:34:47 +01:00
|
|
|
my $build_thread= 0;
|
2005-08-29 20:28:42 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $opt_record;
|
2006-11-23 17:26:06 +01:00
|
|
|
my $opt_report_features;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2009-03-09 14:31:39 +01:00
|
|
|
my $opt_skip_core;
|
|
|
|
|
2008-04-09 12:27:39 +02:00
|
|
|
our $opt_check_testcases= 1;
|
2007-12-12 18:19:24 +01:00
|
|
|
my $opt_mark_progress;
|
2010-02-17 16:28:02 +01:00
|
|
|
my $opt_max_connections;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $opt_sleep;
|
2005-01-01 19:27:41 +01:00
|
|
|
|
2010-01-27 16:32:59 +01:00
|
|
|
my $opt_testcase_timeout= $ENV{MTR_TESTCASE_TIMEOUT} || 15; # minutes
|
2010-03-04 09:03:07 +01:00
|
|
|
my $opt_suite_timeout = $ENV{MTR_SUITE_TIMEOUT} || 360; # minutes
|
2010-01-27 16:32:59 +01:00
|
|
|
my $opt_shutdown_timeout= $ENV{MTR_SHUTDOWN_TIMEOUT} || 10; # seconds
|
|
|
|
my $opt_start_timeout = $ENV{MTR_START_TIMEOUT} || 180; # seconds
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-11-21 13:45:28 +01:00
|
|
|
sub testcase_timeout { return $opt_testcase_timeout * 60; };
|
|
|
|
sub suite_timeout { return $opt_suite_timeout * 60; };
|
|
|
|
sub check_timeout { return $opt_testcase_timeout * 6; };
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $opt_start;
|
|
|
|
my $opt_start_dirty;
|
2009-08-18 09:38:18 +02:00
|
|
|
my $start_only;
|
2009-04-29 16:13:38 +02:00
|
|
|
my $opt_wait_all;
|
2008-01-10 10:44:18 +01:00
|
|
|
my $opt_repeat= 1;
|
2009-12-03 12:19:05 +01:00
|
|
|
my $opt_retry= 1;
|
2010-01-07 13:17:54 +01:00
|
|
|
my $opt_retry_failure= env_or_val(MTR_RETRY_FAILURE => 2);
|
2010-02-17 12:37:37 +01:00
|
|
|
my $opt_reorder= 1;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $opt_strace_client;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-09-05 18:28:20 +02:00
|
|
|
our $opt_user = "root";
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-10-23 11:52:55 +02:00
|
|
|
my $opt_valgrind= 0;
|
|
|
|
my @default_valgrind_args= ("--show-reachable=yes");
|
|
|
|
my @valgrind_args;
|
2010-08-04 12:19:18 +02:00
|
|
|
our $opt_valgrind_mysqld= 0;
|
|
|
|
my $opt_valgrind_mysqltest= 0;
|
|
|
|
my $opt_strace= 0;
|
|
|
|
my @strace_args;
|
2007-10-23 11:52:55 +02:00
|
|
|
my $opt_valgrind_path;
|
|
|
|
my $opt_callgrind;
|
2009-11-12 11:04:01 +01:00
|
|
|
my %mysqld_logs;
|
2009-02-12 15:08:56 +01:00
|
|
|
my $opt_debug_sync_timeout= 300; # Default timeout for WAIT_FOR actions.
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
our $opt_warnings= 1;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2006-02-06 15:42:26 +01:00
|
|
|
our $opt_skip_ndbcluster= 0;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-03-13 17:16:42 +01:00
|
|
|
my $exe_ndbd;
|
|
|
|
my $exe_ndb_mgmd;
|
|
|
|
my $exe_ndb_waiter;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2006-06-11 23:13:32 +02:00
|
|
|
our $debug_compiled_binaries;
|
2006-06-11 15:49:34 +02:00
|
|
|
|
2006-10-08 15:50:16 +02:00
|
|
|
our %mysqld_variables;
|
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
our %suites;
|
|
|
|
|
2006-11-23 17:30:32 +01:00
|
|
|
my $source_dist= 0;
|
|
|
|
|
2010-01-07 13:17:54 +01:00
|
|
|
my $opt_max_save_core= env_or_val(MTR_MAX_SAVE_CORE => 5);
|
|
|
|
my $opt_max_save_datadir= env_or_val(MTR_MAX_SAVE_DATADIR => 20);
|
|
|
|
my $opt_max_test_fail= env_or_val(MTR_MAX_TEST_FAIL => 10);
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-11-14 10:22:44 +01:00
|
|
|
my $opt_parallel= $ENV{MTR_PARALLEL} || 1;
|
2008-11-10 16:10:49 +01:00
|
|
|
|
2009-09-24 14:19:15 +02:00
|
|
|
# lock file to stop tests
|
|
|
|
my $opt_stop_file= $ENV{MTR_STOP_FILE};
|
|
|
|
# print messages when test suite is stopped (for buildbot)
|
|
|
|
my $opt_stop_keep_alive= $ENV{MTR_STOP_KEEP_ALIVE};
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
select(STDOUT);
|
|
|
|
$| = 1; # Automatically flush STDOUT
|
2004-12-30 16:34:01 +01:00
|
|
|
|
|
|
|
main();
|
|
|
|
|
2008-05-04 13:31:40 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub main {
|
2008-09-05 14:09:39 +02:00
|
|
|
# Default, verbosity on
|
2008-05-04 13:31:40 +02:00
|
|
|
report_option('verbose', 0);
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
# This is needed for test log evaluation in "gen-build-status-page"
|
|
|
|
# in all cases where the calling tool does not log the commands
|
|
|
|
# directly before it executes them, like "make test-force-pl" in RPM builds.
|
|
|
|
mtr_report("Logging: $0 ", join(" ", @ARGV));
|
2004-12-30 16:34:01 +01:00
|
|
|
|
|
|
|
command_line_setup();
|
2005-10-04 15:43:55 +02:00
|
|
|
|
2009-11-17 12:13:22 +01:00
|
|
|
# --help will not reach here, so now it's safe to assume we have binaries
|
|
|
|
My::SafeProcess::find_bin();
|
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
if ( $opt_gcov ) {
|
2009-08-25 17:02:55 +02:00
|
|
|
gcov_prepare($basedir . "/" . $opt_gcov_src_dir);
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
if (!$opt_suites) {
|
2008-03-25 16:29:32 +01:00
|
|
|
$opt_suites= $DEFAULT_SUITES;
|
|
|
|
|
|
|
|
# Check for any extra suites to enable based on the path name
|
|
|
|
my %extra_suites=
|
|
|
|
(
|
|
|
|
"mysql-5.1-new-ndb" => "ndb_team",
|
|
|
|
"mysql-5.1-new-ndb-merge" => "ndb_team",
|
|
|
|
"mysql-5.1-telco-6.2" => "ndb_team",
|
|
|
|
"mysql-5.1-telco-6.2-merge" => "ndb_team",
|
|
|
|
"mysql-5.1-telco-6.3" => "ndb_team",
|
|
|
|
"mysql-6.0-ndb" => "ndb_team",
|
|
|
|
);
|
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
foreach my $dir ( reverse splitdir($basedir) ) {
|
2008-03-25 16:29:32 +01:00
|
|
|
my $extra_suite= $extra_suites{$dir};
|
2008-04-24 13:02:53 +02:00
|
|
|
if (defined $extra_suite) {
|
2008-03-25 16:29:32 +01:00
|
|
|
mtr_report("Found extra suite: $extra_suite");
|
|
|
|
$opt_suites= "$extra_suite,$opt_suites";
|
|
|
|
last;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2006-10-08 15:50:16 +02:00
|
|
|
|
2010-06-10 11:11:52 +02:00
|
|
|
print "vardir: $opt_vardir\n";
|
|
|
|
initialize_servers();
|
|
|
|
|
|
|
|
mtr_report("Checking supported features...");
|
|
|
|
if (using_extern())
|
|
|
|
{
|
|
|
|
# Connect to the running mysqld and find out what it supports
|
|
|
|
collect_mysqld_features_from_running_server();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
# Run the mysqld to find out what features are available
|
|
|
|
collect_mysqld_features();
|
|
|
|
}
|
|
|
|
check_ndbcluster_support(\%mysqld_variables);
|
|
|
|
check_ssl_support(\%mysqld_variables);
|
|
|
|
check_debug_support(\%mysqld_variables);
|
|
|
|
|
|
|
|
executable_setup();
|
2010-01-04 12:33:07 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_report("Collecting tests...");
|
2010-02-17 12:37:37 +01:00
|
|
|
my $tests= collect_test_cases($opt_reorder, $opt_suites, \@opt_cases);
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( $opt_report_features ) {
|
|
|
|
# Put "report features" as the first test to run
|
2008-04-24 13:02:53 +02:00
|
|
|
my $tinfo = My::Test->new
|
|
|
|
(
|
|
|
|
name => 'report_features',
|
2008-08-04 21:54:44 +02:00
|
|
|
# No result_file => Prints result
|
2008-09-20 16:00:05 +02:00
|
|
|
path => 'include/report-features.test',
|
2008-08-04 21:54:44 +02:00
|
|
|
template_path => "include/default_my.cnf",
|
2008-04-24 13:02:53 +02:00
|
|
|
master_opt => [],
|
|
|
|
slave_opt => [],
|
|
|
|
);
|
2007-12-12 18:19:24 +01:00
|
|
|
unshift(@$tests, $tinfo);
|
2005-01-03 16:54:08 +01:00
|
|
|
}
|
2005-08-18 00:16:44 +02:00
|
|
|
|
2008-09-05 14:09:39 +02:00
|
|
|
#######################################################################
|
|
|
|
my $num_tests= @$tests;
|
2009-06-03 12:46:04 +02:00
|
|
|
if ( $opt_parallel eq "auto" ) {
|
2008-09-05 14:09:39 +02:00
|
|
|
# Try to find a suitable value for number of workers
|
|
|
|
my $sys_info= My::SysInfo->new();
|
|
|
|
|
|
|
|
$opt_parallel= $sys_info->num_cpus();
|
|
|
|
for my $limit (2000, 1500, 1000, 500){
|
|
|
|
$opt_parallel-- if ($sys_info->min_bogomips() < $limit);
|
|
|
|
}
|
2009-10-05 13:08:10 +02:00
|
|
|
my $max_par= $ENV{MTR_MAX_PARALLEL} || 8;
|
|
|
|
$opt_parallel= $max_par if ($opt_parallel > $max_par);
|
2008-09-05 14:09:39 +02:00
|
|
|
$opt_parallel= $num_tests if ($opt_parallel > $num_tests);
|
2008-10-11 17:30:26 +02:00
|
|
|
$opt_parallel= 1 if (IS_WINDOWS and $sys_info->isvm());
|
2008-09-05 14:09:39 +02:00
|
|
|
$opt_parallel= 1 if ($opt_parallel < 1);
|
|
|
|
mtr_report("Using parallel: $opt_parallel");
|
|
|
|
}
|
|
|
|
|
|
|
|
# Create server socket on any free port
|
|
|
|
my $server = new IO::Socket::INET
|
|
|
|
(
|
|
|
|
LocalAddr => 'localhost',
|
|
|
|
Proto => 'tcp',
|
|
|
|
Listen => $opt_parallel,
|
|
|
|
);
|
|
|
|
mtr_error("Could not create testcase server port: $!") unless $server;
|
|
|
|
my $server_port = $server->sockport();
|
|
|
|
mtr_report("Using server port $server_port");
|
|
|
|
|
|
|
|
# Create child processes
|
|
|
|
my %children;
|
|
|
|
for my $child_num (1..$opt_parallel){
|
|
|
|
my $child_pid= My::SafeProcess::Base::_safe_fork();
|
|
|
|
if ($child_pid == 0){
|
|
|
|
$server= undef; # Close the server port in child
|
|
|
|
$tests= {}; # Don't need the tests list in child
|
|
|
|
|
|
|
|
# Use subdir of var and tmp unless only one worker
|
|
|
|
if ($opt_parallel > 1) {
|
|
|
|
set_vardir("$opt_vardir/$child_num");
|
|
|
|
$opt_tmpdir= "$opt_tmpdir/$child_num";
|
|
|
|
}
|
2005-07-13 13:07:09 +02:00
|
|
|
|
2008-09-05 14:09:39 +02:00
|
|
|
run_worker($server_port, $child_num);
|
|
|
|
exit(1);
|
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-09-05 14:09:39 +02:00
|
|
|
$children{$child_pid}= 1;
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2008-09-05 14:09:39 +02:00
|
|
|
#######################################################################
|
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
mtr_report();
|
|
|
|
mtr_print_thick_line();
|
|
|
|
mtr_print_header();
|
|
|
|
|
2010-04-28 14:52:24 +02:00
|
|
|
my ($prefix, $fail, $completed, $extra_warnings)=
|
2009-04-08 18:55:26 +02:00
|
|
|
run_test_server($server, $tests, $opt_parallel);
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
# Send Ctrl-C to any children still running
|
|
|
|
kill("INT", keys(%children));
|
|
|
|
|
|
|
|
# Wait for childs to exit
|
|
|
|
foreach my $pid (keys %children)
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2008-04-24 13:02:53 +02:00
|
|
|
my $ret_pid= waitpid($pid, 0);
|
|
|
|
if ($ret_pid != $pid){
|
|
|
|
mtr_report("Unknown process $ret_pid exited");
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
delete $children{$ret_pid};
|
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2008-04-28 08:38:07 +02:00
|
|
|
if ( not defined @$completed ) {
|
|
|
|
mtr_error("Test suite aborted");
|
2005-08-17 03:35:50 +02:00
|
|
|
}
|
2008-04-28 08:38:07 +02:00
|
|
|
|
2008-04-25 10:31:13 +02:00
|
|
|
if ( @$completed != $num_tests){
|
2008-04-28 08:26:04 +02:00
|
|
|
|
2008-09-22 17:52:19 +02:00
|
|
|
if ($opt_force){
|
|
|
|
# All test should have been run, print any that are still in $tests
|
2009-01-24 11:07:54 +01:00
|
|
|
#foreach my $test ( @$tests ){
|
|
|
|
# $test->print_test();
|
|
|
|
#}
|
2008-09-22 17:52:19 +02:00
|
|
|
}
|
2008-04-28 08:26:04 +02:00
|
|
|
|
2008-04-25 10:31:13 +02:00
|
|
|
# Not all tests completed, failure
|
2008-04-28 08:23:00 +02:00
|
|
|
mtr_report();
|
2008-05-04 20:59:51 +02:00
|
|
|
mtr_report("Only ", int(@$completed), " of $num_tests completed.");
|
2005-11-22 22:46:54 +01:00
|
|
|
}
|
2008-03-25 16:27:23 +01:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
mtr_print_line();
|
|
|
|
|
2008-09-05 11:32:33 +02:00
|
|
|
if ( $opt_gcov ) {
|
2009-08-25 17:02:55 +02:00
|
|
|
gcov_collect($basedir . "/" . $opt_gcov_src_dir, $opt_gcov_exe,
|
2008-09-05 11:32:33 +02:00
|
|
|
$opt_gcov_msg, $opt_gcov_err);
|
|
|
|
}
|
|
|
|
|
2010-04-28 14:52:24 +02:00
|
|
|
mtr_report_stats($prefix, $fail, $completed, $extra_warnings);
|
2008-04-24 13:02:53 +02:00
|
|
|
|
2010-01-29 11:42:31 +01:00
|
|
|
if ( @$completed != $num_tests)
|
|
|
|
{
|
|
|
|
mtr_error("Not all tests completed");
|
|
|
|
}
|
2008-04-24 13:02:53 +02:00
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-09-05 14:09:39 +02:00
|
|
|
sub run_test_server ($$$) {
|
2008-04-24 13:02:53 +02:00
|
|
|
my ($server, $tests, $childs) = @_;
|
|
|
|
|
2008-04-27 23:35:38 +02:00
|
|
|
my $num_saved_cores= 0; # Number of core files saved in vardir/log/ so far.
|
|
|
|
my $num_saved_datadir= 0; # Number of datadirs saved in vardir/log/ so far.
|
2008-04-28 09:24:30 +02:00
|
|
|
my $num_failed_test= 0; # Number of tests failed so far
|
2009-04-08 18:55:26 +02:00
|
|
|
my $test_failure= 0; # Set true if test suite failed
|
|
|
|
my $extra_warnings= []; # Warnings found during server shutdowns
|
2008-04-27 23:35:38 +02:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
# Scheduler variables
|
2008-09-05 14:09:39 +02:00
|
|
|
my $max_ndb= $childs / 2;
|
2008-04-24 13:02:53 +02:00
|
|
|
$max_ndb = 4 if $max_ndb > 4;
|
|
|
|
$max_ndb = 1 if $max_ndb < 1;
|
|
|
|
my $num_ndb_tests= 0;
|
|
|
|
|
|
|
|
my $completed= [];
|
|
|
|
my %running;
|
|
|
|
my $result;
|
2009-03-20 16:39:06 +01:00
|
|
|
my $exe_mysqld= find_mysqld($basedir) || ""; # Used as hint to CoreDump
|
2008-04-24 13:02:53 +02:00
|
|
|
|
2009-11-24 09:12:48 +01:00
|
|
|
my $suite_timeout= start_timer(suite_timeout());
|
2008-04-28 08:38:07 +02:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
my $s= IO::Select->new();
|
|
|
|
$s->add($server);
|
|
|
|
while (1) {
|
2009-09-24 14:19:15 +02:00
|
|
|
if ($opt_stop_file)
|
|
|
|
{
|
|
|
|
if (mtr_wait_lock_file($opt_stop_file, $opt_stop_keep_alive))
|
|
|
|
{
|
|
|
|
# We were waiting so restart timer process
|
2010-04-28 14:52:24 +02:00
|
|
|
my $suite_timeout= start_timer(suite_timeout());
|
2009-09-24 14:19:15 +02:00
|
|
|
}
|
|
|
|
}
|
2008-04-24 13:02:53 +02:00
|
|
|
my @ready = $s->can_read(1); # Wake up once every second
|
|
|
|
foreach my $sock (@ready) {
|
|
|
|
if ($sock == $server) {
|
|
|
|
# New client connected
|
|
|
|
my $child= $sock->accept();
|
|
|
|
mtr_verbose("Client connected");
|
|
|
|
$s->add($child);
|
|
|
|
print $child "HELLO\n";
|
2007-12-11 19:52:35 +01:00
|
|
|
}
|
2008-04-24 13:02:53 +02:00
|
|
|
else {
|
|
|
|
my $line= <$sock>;
|
|
|
|
if (!defined $line) {
|
|
|
|
# Client disconnected
|
|
|
|
mtr_verbose("Child closed socket");
|
|
|
|
$s->remove($sock);
|
|
|
|
if (--$childs == 0){
|
2010-04-28 14:52:24 +02:00
|
|
|
return ("Completed", $test_failure, $completed, $extra_warnings);
|
2008-04-24 13:02:53 +02:00
|
|
|
}
|
|
|
|
next;
|
|
|
|
}
|
|
|
|
chomp($line);
|
|
|
|
|
|
|
|
if ($line eq 'TESTRESULT'){
|
|
|
|
$result= My::Test::read_test($sock);
|
|
|
|
# $result->print_test();
|
|
|
|
|
|
|
|
# Report test status
|
|
|
|
mtr_report_test($result);
|
|
|
|
|
2008-04-27 23:35:38 +02:00
|
|
|
if ( $result->is_failed() ) {
|
|
|
|
|
|
|
|
# Save the workers "savedir" in var/log
|
|
|
|
my $worker_savedir= $result->{savedir};
|
|
|
|
my $worker_savename= basename($worker_savedir);
|
|
|
|
my $savedir= "$opt_vardir/log/$worker_savename";
|
|
|
|
|
|
|
|
if ($opt_max_save_datadir > 0 &&
|
|
|
|
$num_saved_datadir >= $opt_max_save_datadir)
|
|
|
|
{
|
|
|
|
mtr_report(" - skipping '$worker_savedir/'");
|
|
|
|
rmtree($worker_savedir);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
mtr_report(" - saving '$worker_savedir/' to '$savedir/'");
|
|
|
|
rename($worker_savedir, $savedir);
|
2009-01-21 10:34:01 +01:00
|
|
|
# Move any core files from e.g. mysqltest
|
2009-01-27 18:56:24 +01:00
|
|
|
foreach my $coref (glob("core*"), glob("*.dmp"))
|
2009-01-21 10:34:01 +01:00
|
|
|
{
|
2009-01-27 18:56:24 +01:00
|
|
|
mtr_report(" - found '$coref', moving it to '$savedir'");
|
2009-01-21 10:34:01 +01:00
|
|
|
move($coref, $savedir);
|
|
|
|
}
|
2008-04-28 08:28:06 +02:00
|
|
|
if ($opt_max_save_core > 0) {
|
|
|
|
# Limit number of core files saved
|
|
|
|
find({ no_chdir => 1,
|
|
|
|
wanted => sub {
|
|
|
|
my $core_file= $File::Find::name;
|
|
|
|
my $core_name= basename($core_file);
|
2008-04-27 23:35:38 +02:00
|
|
|
|
2009-01-27 18:56:24 +01:00
|
|
|
if ($core_name =~ /^core/ or # Starting with core
|
|
|
|
(IS_WINDOWS and $core_name =~ /\.dmp$/)){
|
|
|
|
# Ending with .dmp
|
2008-09-06 08:57:05 +02:00
|
|
|
mtr_report(" - found '$core_name'",
|
2008-04-27 23:35:38 +02:00
|
|
|
"($num_saved_cores/$opt_max_save_core)");
|
2008-09-06 08:57:05 +02:00
|
|
|
|
2009-03-20 16:39:06 +01:00
|
|
|
My::CoreDump->show($core_file, $exe_mysqld);
|
2008-09-06 08:57:05 +02:00
|
|
|
|
|
|
|
if ($num_saved_cores >= $opt_max_save_core) {
|
|
|
|
mtr_report(" - deleting it, already saved",
|
|
|
|
"$opt_max_save_core");
|
2008-04-28 08:28:06 +02:00
|
|
|
unlink("$core_file");
|
|
|
|
}
|
|
|
|
++$num_saved_cores;
|
2008-04-27 23:35:38 +02:00
|
|
|
}
|
|
|
|
}
|
2008-04-28 08:28:06 +02:00
|
|
|
},
|
|
|
|
$savedir);
|
|
|
|
}
|
2008-04-27 23:35:38 +02:00
|
|
|
}
|
2008-04-28 08:28:06 +02:00
|
|
|
$num_saved_datadir++;
|
2009-10-17 18:34:56 +02:00
|
|
|
$num_failed_test++ unless ($result->{retries} ||
|
|
|
|
$result->{exp_fail});
|
2008-04-27 23:35:38 +02:00
|
|
|
|
2009-03-20 15:18:22 +01:00
|
|
|
$test_failure= 1;
|
2008-04-27 23:35:38 +02:00
|
|
|
if ( !$opt_force ) {
|
|
|
|
# Test has failed, force is off
|
|
|
|
push(@$completed, $result);
|
2010-04-28 14:52:24 +02:00
|
|
|
return ("Failure", 1, $completed, $extra_warnings);
|
2008-04-27 23:35:38 +02:00
|
|
|
}
|
2008-07-22 20:55:20 +02:00
|
|
|
elsif ($opt_max_test_fail > 0 and
|
2008-04-28 09:24:30 +02:00
|
|
|
$num_failed_test >= $opt_max_test_fail) {
|
2009-06-02 10:00:45 +02:00
|
|
|
push(@$completed, $result);
|
2008-04-28 09:24:30 +02:00
|
|
|
mtr_report("Too many tests($num_failed_test) failed!",
|
|
|
|
"Terminating...");
|
2010-04-28 14:52:24 +02:00
|
|
|
return ("Too many failed", 1, $completed, $extra_warnings);
|
2008-04-28 09:24:30 +02:00
|
|
|
}
|
2008-04-24 13:02:53 +02:00
|
|
|
}
|
2007-12-11 19:52:35 +01:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
# Retry test run after test failure
|
2008-05-04 21:20:25 +02:00
|
|
|
my $retries= $result->{retries} || 2;
|
2008-04-24 13:02:53 +02:00
|
|
|
my $test_has_failed= $result->{failures} || 0;
|
2008-05-04 21:20:25 +02:00
|
|
|
if ($test_has_failed and $retries <= $opt_retry){
|
2008-04-24 13:02:53 +02:00
|
|
|
# Test should be run one more time unless it has failed
|
|
|
|
# too many times already
|
|
|
|
my $failures= $result->{failures};
|
|
|
|
if ($opt_retry > 1 and $failures >= $opt_retry_failure){
|
2008-05-04 21:20:25 +02:00
|
|
|
mtr_report("\nTest has failed $failures times,",
|
2008-04-24 13:02:53 +02:00
|
|
|
"no more retries!\n");
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
mtr_report("\nRetrying test, attempt($retries/$opt_retry)...\n");
|
2008-05-02 12:11:04 +02:00
|
|
|
delete($result->{result});
|
2008-04-24 13:02:53 +02:00
|
|
|
$result->{retries}= $retries+1;
|
|
|
|
$result->write_test($sock, 'TESTCASE');
|
|
|
|
next;
|
|
|
|
}
|
|
|
|
}
|
2006-04-21 18:48:49 +02:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
# Repeat test $opt_repeat number of times
|
|
|
|
my $repeat= $result->{repeat} || 1;
|
2009-04-01 13:58:30 +02:00
|
|
|
# Don't repeat if test was skipped
|
|
|
|
if ($repeat < $opt_repeat && $result->{'result'} ne 'MTR_RES_SKIPPED')
|
2008-04-24 13:02:53 +02:00
|
|
|
{
|
|
|
|
$result->{retries}= 0;
|
2009-04-01 13:58:30 +02:00
|
|
|
$result->{rep_failures}++ if $result->{failures};
|
2008-04-24 13:02:53 +02:00
|
|
|
$result->{failures}= 0;
|
2008-05-02 12:11:04 +02:00
|
|
|
delete($result->{result});
|
2008-04-24 13:02:53 +02:00
|
|
|
$result->{repeat}= $repeat+1;
|
|
|
|
$result->write_test($sock, 'TESTCASE');
|
|
|
|
next;
|
|
|
|
}
|
2006-10-17 08:10:51 +02:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
# Remove from list of running
|
|
|
|
mtr_error("'", $result->{name},"' is not known to be running")
|
|
|
|
unless delete $running{$result->key()};
|
|
|
|
|
|
|
|
# Update scheduler variables
|
|
|
|
$num_ndb_tests-- if ($result->{ndb_test});
|
|
|
|
|
|
|
|
# Save result in completed list
|
|
|
|
push(@$completed, $result);
|
|
|
|
|
|
|
|
}
|
|
|
|
elsif ($line eq 'START'){
|
|
|
|
; # Send first test
|
|
|
|
}
|
2009-03-20 15:18:22 +01:00
|
|
|
elsif ($line eq 'WARNINGS'){
|
|
|
|
my $fake_test= My::Test::read_test($sock);
|
|
|
|
my $test_list= join (" ", @{$fake_test->{testnames}});
|
2009-04-08 18:55:26 +02:00
|
|
|
push @$extra_warnings, $test_list;
|
2009-12-03 12:19:05 +01:00
|
|
|
my $report= $fake_test->{'warnings'};
|
2009-03-20 15:18:22 +01:00
|
|
|
mtr_report("***Warnings generated in error logs during shutdown ".
|
2009-12-03 12:19:05 +01:00
|
|
|
"after running tests: $test_list\n\n$report");
|
2009-03-20 15:18:22 +01:00
|
|
|
$test_failure= 1;
|
|
|
|
if ( !$opt_force ) {
|
|
|
|
# Test failure due to warnings, force is off
|
2010-04-28 14:52:24 +02:00
|
|
|
return ("Warnings in log", 1, $completed, $extra_warnings);
|
2009-03-20 15:18:22 +01:00
|
|
|
}
|
|
|
|
} else {
|
2008-04-24 13:02:53 +02:00
|
|
|
mtr_error("Unknown response: '$line' from client");
|
|
|
|
}
|
|
|
|
|
|
|
|
# Find next test to schedule
|
|
|
|
# - Try to use same configuration as worker used last time
|
|
|
|
# - Limit number of parallel ndb tests
|
|
|
|
|
|
|
|
my $next;
|
|
|
|
my $second_best;
|
2008-09-22 09:02:45 +02:00
|
|
|
for(my $i= 0; $i <= @$tests; $i++)
|
2008-04-24 13:02:53 +02:00
|
|
|
{
|
|
|
|
my $t= $tests->[$i];
|
|
|
|
|
2008-09-22 09:02:45 +02:00
|
|
|
last unless defined $t;
|
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
if (run_testcase_check_skip_test($t)){
|
|
|
|
# Move the test to completed list
|
|
|
|
#mtr_report("skip - Moving test $i to completed");
|
|
|
|
push(@$completed, splice(@$tests, $i, 1));
|
2008-09-22 09:02:45 +02:00
|
|
|
|
|
|
|
# Since the test at pos $i was taken away, next
|
|
|
|
# test will also be at $i -> redo
|
|
|
|
redo;
|
2008-04-24 13:02:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
# Limit number of parallell NDB tests
|
|
|
|
if ($t->{ndb_test} and $num_ndb_tests >= $max_ndb){
|
|
|
|
#mtr_report("Skipping, num ndb is already at max, $num_ndb_tests");
|
|
|
|
next;
|
|
|
|
}
|
|
|
|
|
2010-02-17 12:37:37 +01:00
|
|
|
# Prefer same configuration, or just use next if --noreorder
|
|
|
|
if (!$opt_reorder or (defined $result and
|
|
|
|
$result->{template_path} eq $t->{template_path}))
|
2008-04-24 13:02:53 +02:00
|
|
|
{
|
|
|
|
#mtr_report("Test uses same config => good match");
|
|
|
|
# Test uses same config => good match
|
|
|
|
$next= splice(@$tests, $i, 1);
|
|
|
|
last;
|
|
|
|
}
|
|
|
|
|
|
|
|
# Second best choice is the first that does not fulfill
|
|
|
|
# any of the above conditions
|
|
|
|
if (!defined $second_best){
|
|
|
|
#mtr_report("Setting second_best to $i");
|
|
|
|
$second_best= $i;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# Use second best choice if no other test has been found
|
|
|
|
if (!$next and defined $second_best){
|
|
|
|
#mtr_report("Take second best choice $second_best");
|
2008-09-22 09:02:45 +02:00
|
|
|
mtr_error("Internal error, second best too large($second_best)")
|
2008-04-24 13:02:53 +02:00
|
|
|
if $second_best > $#$tests;
|
|
|
|
$next= splice(@$tests, $second_best, 1);
|
2007-02-27 18:31:49 +01:00
|
|
|
}
|
2006-12-20 23:44:53 +01:00
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
xterm_stat(scalar(@$tests));
|
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
if ($next) {
|
|
|
|
#$next->print_test();
|
|
|
|
$next->write_test($sock, 'TESTCASE');
|
|
|
|
$running{$next->key()}= $next;
|
|
|
|
$num_ndb_tests++ if ($next->{ndb_test});
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
# No more test, tell child to exit
|
|
|
|
#mtr_report("Saying BYE to child");
|
|
|
|
print $sock "BYE\n";
|
2007-02-27 18:31:49 +01:00
|
|
|
}
|
2006-09-26 13:49:42 +02:00
|
|
|
}
|
2006-04-21 18:48:49 +02:00
|
|
|
}
|
|
|
|
|
2008-04-28 08:38:07 +02:00
|
|
|
# ----------------------------------------------------
|
|
|
|
# Check if test suite timer expired
|
|
|
|
# ----------------------------------------------------
|
2009-11-24 09:12:48 +01:00
|
|
|
if ( has_expired($suite_timeout) )
|
2006-10-25 12:40:33 +02:00
|
|
|
{
|
2008-04-28 08:38:07 +02:00
|
|
|
mtr_report("Test suite timeout! Terminating...");
|
2010-04-28 14:52:24 +02:00
|
|
|
return ("Timeout", 1, $completed, $extra_warnings);
|
2006-10-25 12:40:33 +02:00
|
|
|
}
|
2008-04-24 13:02:53 +02:00
|
|
|
}
|
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-02-06 17:55:04 +01:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
sub run_worker ($) {
|
|
|
|
my ($server_port, $thread_num)= @_;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
$SIG{INT}= sub { exit(1); };
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-09-15 12:15:08 +02:00
|
|
|
# Connect to server
|
|
|
|
my $server = new IO::Socket::INET
|
|
|
|
(
|
|
|
|
PeerAddr => 'localhost',
|
|
|
|
PeerPort => $server_port,
|
|
|
|
Proto => 'tcp'
|
|
|
|
);
|
|
|
|
mtr_error("Could not connect to server at port $server_port: $!")
|
|
|
|
unless $server;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-09-05 14:09:39 +02:00
|
|
|
# --------------------------------------------------------------------------
|
|
|
|
# Set worker name
|
|
|
|
# --------------------------------------------------------------------------
|
2008-04-24 13:02:53 +02:00
|
|
|
report_option('name',"worker[$thread_num]");
|
2006-11-10 13:12:08 +01:00
|
|
|
|
2008-09-05 14:09:39 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2009-03-04 11:34:47 +01:00
|
|
|
# Set different ports per thread
|
2008-09-05 14:09:39 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2009-03-04 11:34:47 +01:00
|
|
|
set_build_thread_ports($thread_num);
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-09-05 14:09:39 +02:00
|
|
|
# --------------------------------------------------------------------------
|
|
|
|
# Turn off verbosity in workers, unless explicitly specified
|
|
|
|
# --------------------------------------------------------------------------
|
|
|
|
report_option('verbose', undef) if ($opt_verbose == 0);
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-09-05 14:09:39 +02:00
|
|
|
environment_setup();
|
2007-12-07 22:43:31 +01:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
# Read hello from server which it will send when shared
|
|
|
|
# resources have been setup
|
|
|
|
my $hello= <$server>;
|
2007-12-07 22:43:31 +01:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
setup_vardir();
|
2008-08-04 21:54:44 +02:00
|
|
|
check_running_as_root();
|
2007-12-07 22:43:31 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( using_extern() ) {
|
|
|
|
create_config_file_for_extern(%opts_extern);
|
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
# Ask server for first test
|
|
|
|
print $server "START\n";
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
while(my $line= <$server>){
|
|
|
|
chomp($line);
|
|
|
|
if ($line eq 'TESTCASE'){
|
|
|
|
my $test= My::Test::read_test($server);
|
|
|
|
#$test->print_test();
|
2006-02-17 16:20:53 +01:00
|
|
|
|
2009-01-24 13:02:27 +01:00
|
|
|
# Clear comment and logfile, to avoid
|
|
|
|
# reusing them from previous test
|
|
|
|
delete($test->{'comment'});
|
|
|
|
delete($test->{'logfile'});
|
2007-12-14 10:47:01 +01:00
|
|
|
|
2009-05-28 13:02:03 +02:00
|
|
|
$test->{worker} = $thread_num if $opt_parallel > 1;
|
|
|
|
|
2009-03-20 15:18:22 +01:00
|
|
|
run_testcase($test, $server);
|
2008-04-24 13:02:53 +02:00
|
|
|
#$test->{result}= 'MTR_RES_PASSED';
|
|
|
|
# Send it back, now with results set
|
|
|
|
#$test->print_test();
|
|
|
|
$test->write_test($server, 'TESTRESULT');
|
|
|
|
}
|
|
|
|
elsif ($line eq 'BYE'){
|
|
|
|
mtr_report("Server said BYE");
|
2009-03-20 15:18:22 +01:00
|
|
|
# We need to gracefully shut down the servers to see any
|
|
|
|
# Valgrind memory leak errors etc. since last server restart.
|
|
|
|
if ($opt_warnings) {
|
2010-08-17 09:14:46 +02:00
|
|
|
stop_servers(reverse all_servers());
|
2009-03-20 15:18:22 +01:00
|
|
|
if(check_warnings_post_shutdown($server)) {
|
|
|
|
# Warnings appeared in log file(s) during final server shutdown.
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
}
|
2010-04-28 14:52:24 +02:00
|
|
|
else {
|
|
|
|
stop_all_servers($opt_shutdown_timeout);
|
2009-11-12 11:04:01 +01:00
|
|
|
}
|
2010-01-05 21:35:50 +01:00
|
|
|
if ( $opt_gprof ) {
|
|
|
|
gprof_collect (find_mysqld($basedir), keys %gprof_dirs);
|
|
|
|
}
|
2008-04-24 13:02:53 +02:00
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
mtr_error("Could not understand server, '$line'");
|
2006-11-28 21:11:05 +01:00
|
|
|
}
|
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2009-04-08 18:55:26 +02:00
|
|
|
stop_all_servers();
|
|
|
|
|
|
|
|
exit(1);
|
2007-12-12 18:19:24 +01:00
|
|
|
}
|
2006-07-05 20:17:04 +02:00
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-21 13:06:56 +01:00
|
|
|
sub ignore_option {
|
|
|
|
my ($opt, $value)= @_;
|
2008-07-24 22:58:18 +02:00
|
|
|
mtr_report("Ignoring option '$opt'");
|
2007-12-21 13:06:56 +01:00
|
|
|
}
|
2007-12-07 22:43:31 +01:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
|
2008-09-05 14:09:39 +02:00
|
|
|
|
|
|
|
# Setup any paths that are $opt_vardir related
|
|
|
|
sub set_vardir {
|
|
|
|
my ($vardir)= @_;
|
|
|
|
|
|
|
|
$opt_vardir= $vardir;
|
|
|
|
|
|
|
|
$path_vardir_trace= $opt_vardir;
|
|
|
|
# Chop off any "c:", DBUG likes a unix path ex: c:/src/... => /src/...
|
|
|
|
$path_vardir_trace=~ s/^\w://;
|
|
|
|
|
|
|
|
# Location of my.cnf that all clients use
|
|
|
|
$path_config_file= "$opt_vardir/my.cnf";
|
|
|
|
|
|
|
|
$path_testlog= "$opt_vardir/log/mysqltest.log";
|
|
|
|
$path_current_testlog= "$opt_vardir/log/current_test";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2008-11-10 16:10:49 +01:00
|
|
|
|
2008-09-05 14:09:39 +02:00
|
|
|
sub command_line_setup {
|
2006-02-17 16:20:53 +01:00
|
|
|
my $opt_comment;
|
2007-12-12 18:19:24 +01:00
|
|
|
my $opt_usage;
|
2009-02-15 11:58:34 +01:00
|
|
|
my $opt_list_options;
|
2006-03-30 00:48:46 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Read the command line options
|
2005-01-02 16:57:21 +01:00
|
|
|
# Note: Keep list, and the order, in sync with usage at end of this file
|
2005-09-28 23:24:44 +02:00
|
|
|
Getopt::Long::Configure("pass_through");
|
2009-01-16 20:27:45 +01:00
|
|
|
my %options=(
|
2005-01-02 16:57:21 +01:00
|
|
|
# Control what engine/variation to run
|
2004-12-30 16:34:01 +01:00
|
|
|
'embedded-server' => \$opt_embedded_server,
|
2005-01-01 19:27:41 +01:00
|
|
|
'ps-protocol' => \$opt_ps_protocol,
|
2005-11-03 19:00:37 +01:00
|
|
|
'sp-protocol' => \$opt_sp_protocol,
|
|
|
|
'view-protocol' => \$opt_view_protocol,
|
|
|
|
'cursor-protocol' => \$opt_cursor_protocol,
|
2005-10-12 13:56:07 +02:00
|
|
|
'ssl|with-openssl' => \$opt_ssl,
|
2005-10-04 15:43:55 +02:00
|
|
|
'skip-ssl' => \$opt_skip_ssl,
|
|
|
|
'compress' => \$opt_compress,
|
2009-10-06 08:46:45 +02:00
|
|
|
'vs-config=s' => \$opt_vs_config,
|
2007-12-12 18:19:24 +01:00
|
|
|
|
2008-11-10 16:10:49 +01:00
|
|
|
# Max number of parallel threads to use
|
2009-06-03 12:46:04 +02:00
|
|
|
'parallel=s' => \$opt_parallel,
|
2008-11-10 16:10:49 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Config file to use as template for all tests
|
|
|
|
'defaults-file=s' => \&collect_option,
|
|
|
|
# Extra config file to append to all generated configs
|
|
|
|
'defaults-extra-file=s' => \&collect_option,
|
2005-01-02 16:57:21 +01:00
|
|
|
|
|
|
|
# Control what test suites or cases to run
|
2004-12-30 16:34:01 +01:00
|
|
|
'force' => \$opt_force,
|
2007-12-12 18:19:24 +01:00
|
|
|
'with-ndbcluster-only' => \&collect_option,
|
2005-06-20 21:37:39 +02:00
|
|
|
'skip-ndbcluster|skip-ndb' => \$opt_skip_ndbcluster,
|
2007-06-27 14:28:02 +02:00
|
|
|
'suite|suites=s' => \$opt_suites,
|
2007-12-12 18:19:24 +01:00
|
|
|
'skip-rpl' => \&collect_option,
|
|
|
|
'skip-test=s' => \&collect_option,
|
|
|
|
'do-test=s' => \&collect_option,
|
|
|
|
'start-from=s' => \&collect_option,
|
2006-03-29 08:55:29 +02:00
|
|
|
'big-test' => \$opt_big_test,
|
2007-12-12 18:19:24 +01:00
|
|
|
'combination=s' => \@opt_combinations,
|
2008-02-28 18:55:46 +01:00
|
|
|
'skip-combinations' => \&collect_option,
|
2009-02-24 12:53:34 +01:00
|
|
|
'experimental=s' => \$opt_experimental,
|
2007-12-21 13:06:56 +01:00
|
|
|
'skip-im' => \&ignore_option,
|
Added option --staging-run to mysql-test-run to mark slow, not important tests, to not be run in staging trees
Use MY_MUTEX_INIT_FAST for pool mutex
mysql-test/mysql-test-run.pl:
Added option --staging-run
Added information about --parallell=# to help message
mysql-test/suite/federated/federated_server.test:
Slow test, don't run with --staging-run
mysql-test/suite/maria/t/maria-preload.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_optimize.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_relayrotate.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_001.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_sp003.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_start_stop_slave.test:
Slow test, don't run with --staging-run
mysql-test/t/compress.test:
Slow test, don't run with --staging-run
mysql-test/t/count_distinct3.test:
Slow test, don't run with --staging-run
mysql-test/t/index_merge_innodb.test:
Slow test, don't run with --staging-run
mysql-test/t/information_schema_all_engines.test:
Slow test, don't run with --staging-run
mysql-test/t/innodb_mysql.test:
Slow test, don't run with --staging-run
mysql-test/t/pool_of_threads.test:
Slow test, don't run with --staging-run
mysql-test/t/preload.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl_compress.test:
Slow test, don't run with --staging-run
mysql-test/valgrind.supp:
Suppress warnings from SuSE 11.1 on x86
sql/scheduler.cc:
Use MY_MUTEX_INIT_FAST for pool mutex
2009-06-05 17:35:22 +02:00
|
|
|
'staging-run' => \$opt_staging_run,
|
2005-01-02 16:57:21 +01:00
|
|
|
|
|
|
|
# Specify ports
|
2008-04-24 13:02:53 +02:00
|
|
|
'build-thread|mtr-build-thread=i' => \$opt_build_thread,
|
2010-01-25 11:20:52 +01:00
|
|
|
'port-base|mtr-port-base=i' => \$opt_port_base,
|
2005-01-02 16:57:21 +01:00
|
|
|
|
|
|
|
# Test case authoring
|
|
|
|
'record' => \$opt_record,
|
2008-04-08 16:51:26 +02:00
|
|
|
'check-testcases!' => \$opt_check_testcases,
|
2006-12-20 16:53:06 +01:00
|
|
|
'mark-progress' => \$opt_mark_progress,
|
2005-01-02 16:57:21 +01:00
|
|
|
|
2006-03-29 08:55:29 +02:00
|
|
|
# Extra options used when starting mysqld
|
2005-06-10 21:29:37 +02:00
|
|
|
'mysqld=s' => \@opt_extra_mysqld_opt,
|
2005-01-02 16:57:21 +01:00
|
|
|
|
2009-02-12 15:08:56 +01:00
|
|
|
# Extra options used when starting mysqltest
|
|
|
|
'mysqltest=s' => \@opt_extra_mysqltest_opt,
|
2007-08-09 15:00:32 +02:00
|
|
|
|
2005-01-02 16:57:21 +01:00
|
|
|
# Run test on running server
|
2007-12-12 18:19:24 +01:00
|
|
|
'extern=s' => \%opts_extern, # Append to hash
|
2005-01-02 16:57:21 +01:00
|
|
|
|
|
|
|
# Debugging
|
2007-12-12 18:19:24 +01:00
|
|
|
'debug' => \$opt_debug,
|
2004-12-30 16:34:01 +01:00
|
|
|
'gdb' => \$opt_gdb,
|
2005-01-02 16:57:21 +01:00
|
|
|
'client-gdb' => \$opt_client_gdb,
|
2006-03-23 15:07:39 +01:00
|
|
|
'manual-gdb' => \$opt_manual_gdb,
|
|
|
|
'manual-debug' => \$opt_manual_debug,
|
2005-01-02 16:57:21 +01:00
|
|
|
'ddd' => \$opt_ddd,
|
2006-03-23 15:07:39 +01:00
|
|
|
'client-ddd' => \$opt_client_ddd,
|
2007-04-13 15:06:05 +02:00
|
|
|
'manual-ddd' => \$opt_manual_ddd,
|
2006-04-04 09:49:32 +02:00
|
|
|
'debugger=s' => \$opt_debugger,
|
|
|
|
'client-debugger=s' => \$opt_client_debugger,
|
2010-08-04 12:19:18 +02:00
|
|
|
'strace' => \$opt_strace,
|
2007-12-12 18:19:24 +01:00
|
|
|
'strace-client:s' => \$opt_strace_client,
|
2010-08-04 12:19:18 +02:00
|
|
|
'strace-option=s' => \@strace_args,
|
2007-01-19 09:41:08 +01:00
|
|
|
'max-save-core=i' => \$opt_max_save_core,
|
2008-04-27 15:32:12 +02:00
|
|
|
'max-save-datadir=i' => \$opt_max_save_datadir,
|
2008-04-28 09:24:30 +02:00
|
|
|
'max-test-fail=i' => \$opt_max_test_fail,
|
2005-01-02 16:57:21 +01:00
|
|
|
|
|
|
|
# Coverage, profiling etc
|
|
|
|
'gcov' => \$opt_gcov,
|
2009-08-25 17:02:55 +02:00
|
|
|
'gcov-src-dir=s' => \$opt_gcov_src_dir,
|
2010-01-05 21:35:50 +01:00
|
|
|
'gprof' => \$opt_gprof,
|
2006-06-16 15:56:08 +02:00
|
|
|
'valgrind|valgrind-all' => \$opt_valgrind,
|
2006-03-23 15:07:39 +01:00
|
|
|
'valgrind-mysqltest' => \$opt_valgrind_mysqltest,
|
|
|
|
'valgrind-mysqld' => \$opt_valgrind_mysqld,
|
2007-10-23 11:52:55 +02:00
|
|
|
'valgrind-options=s' => sub {
|
|
|
|
my ($opt, $value)= @_;
|
|
|
|
# Deprecated option unless it's what we know pushbuild uses
|
|
|
|
if ($value eq "--gen-suppressions=all --show-reachable=yes") {
|
|
|
|
push(@valgrind_args, $_) for (split(' ', $value));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
die("--valgrind-options=s is deprecated. Use ",
|
|
|
|
"--valgrind-option=s, to be specified several",
|
|
|
|
" times if necessary");
|
|
|
|
},
|
|
|
|
'valgrind-option=s' => \@valgrind_args,
|
2006-03-23 15:07:39 +01:00
|
|
|
'valgrind-path=s' => \$opt_valgrind_path,
|
2006-07-26 14:44:59 +02:00
|
|
|
'callgrind' => \$opt_callgrind,
|
2009-02-12 15:08:56 +01:00
|
|
|
'debug-sync-timeout=i' => \$opt_debug_sync_timeout,
|
2005-01-02 16:57:21 +01:00
|
|
|
|
2006-03-23 16:39:51 +01:00
|
|
|
# Directories
|
|
|
|
'tmpdir=s' => \$opt_tmpdir,
|
|
|
|
'vardir=s' => \$opt_vardir,
|
2006-11-13 12:44:12 +01:00
|
|
|
'mem' => \$opt_mem,
|
2008-03-03 12:47:05 +01:00
|
|
|
'client-bindir=s' => \$path_client_bindir,
|
|
|
|
'client-libdir=s' => \$path_client_libdir,
|
2006-03-23 16:39:51 +01:00
|
|
|
|
2005-01-02 16:57:21 +01:00
|
|
|
# Misc
|
2006-11-10 13:12:08 +01:00
|
|
|
'report-features' => \$opt_report_features,
|
2006-02-20 00:32:07 +01:00
|
|
|
'comment=s' => \$opt_comment,
|
2005-01-02 16:57:21 +01:00
|
|
|
'fast' => \$opt_fast,
|
2010-02-17 12:37:37 +01:00
|
|
|
'reorder!' => \$opt_reorder,
|
2007-12-12 18:19:24 +01:00
|
|
|
'enable-disabled' => \&collect_option,
|
|
|
|
'verbose+' => \$opt_verbose,
|
2008-04-24 13:02:53 +02:00
|
|
|
'verbose-restart' => \&report_option,
|
2004-12-30 16:34:01 +01:00
|
|
|
'sleep=i' => \$opt_sleep,
|
2005-04-13 11:47:28 +02:00
|
|
|
'start-dirty' => \$opt_start_dirty,
|
2007-12-12 18:19:24 +01:00
|
|
|
'start' => \$opt_start,
|
2009-04-29 16:13:38 +02:00
|
|
|
'wait-all' => \$opt_wait_all,
|
2007-12-12 18:19:24 +01:00
|
|
|
'print-testcases' => \&collect_option,
|
2008-01-10 10:44:18 +01:00
|
|
|
'repeat=i' => \$opt_repeat,
|
|
|
|
'retry=i' => \$opt_retry,
|
|
|
|
'retry-failure=i' => \$opt_retry_failure,
|
2008-05-04 21:40:40 +02:00
|
|
|
'timer!' => \&report_option,
|
2004-12-30 16:34:01 +01:00
|
|
|
'user=s' => \$opt_user,
|
2005-08-18 00:16:44 +02:00
|
|
|
'testcase-timeout=i' => \$opt_testcase_timeout,
|
|
|
|
'suite-timeout=i' => \$opt_suite_timeout,
|
2007-12-12 18:19:24 +01:00
|
|
|
'shutdown-timeout=i' => \$opt_shutdown_timeout,
|
|
|
|
'warnings!' => \$opt_warnings,
|
2008-02-04 11:16:25 +01:00
|
|
|
'timestamp' => \&report_option,
|
2008-05-04 21:45:38 +02:00
|
|
|
'timediff' => \&report_option,
|
2009-09-24 14:19:15 +02:00
|
|
|
'stop-file=s' => \$opt_stop_file,
|
|
|
|
'stop-keep-alive=i' => \$opt_stop_keep_alive,
|
2010-02-17 16:28:02 +01:00
|
|
|
'max-connections=i' => \$opt_max_connections,
|
2007-12-07 22:43:31 +01:00
|
|
|
|
2005-01-02 16:57:21 +01:00
|
|
|
'help|h' => \$opt_usage,
|
2009-01-16 20:27:45 +01:00
|
|
|
'list-options' => \$opt_list_options,
|
|
|
|
);
|
|
|
|
|
|
|
|
GetOptions(%options) or usage("Can't read options");
|
2006-02-17 16:20:53 +01:00
|
|
|
usage("") if $opt_usage;
|
2009-01-16 20:27:45 +01:00
|
|
|
list_options(\%options) if $opt_list_options;
|
2006-02-17 16:20:53 +01:00
|
|
|
|
2008-01-07 15:39:32 +01:00
|
|
|
# --------------------------------------------------------------------------
|
2008-04-24 13:02:53 +02:00
|
|
|
# Setup verbosity
|
2008-01-07 15:39:32 +01:00
|
|
|
# --------------------------------------------------------------------------
|
2008-07-24 22:58:18 +02:00
|
|
|
if ($opt_verbose != 0){
|
|
|
|
report_option('verbose', $opt_verbose);
|
2006-11-02 21:05:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( -d "../sql" )
|
|
|
|
{
|
2006-11-23 17:30:32 +01:00
|
|
|
$source_dist= 1;
|
2006-11-02 21:05:20 +01:00
|
|
|
}
|
|
|
|
|
2006-11-11 14:32:10 +01:00
|
|
|
# Find the absolute path to the test directory
|
2008-02-20 14:55:30 +01:00
|
|
|
$glob_mysql_test_dir= cwd();
|
2010-02-03 15:11:52 +01:00
|
|
|
if ($glob_mysql_test_dir =~ / /)
|
|
|
|
{
|
|
|
|
die("Working directory \"$glob_mysql_test_dir\" contains space\n".
|
|
|
|
"Bailing out, cannot function properly with space in path");
|
|
|
|
}
|
2008-02-20 14:55:30 +01:00
|
|
|
if (IS_CYGWIN)
|
2005-01-02 16:57:21 +01:00
|
|
|
{
|
2008-02-20 14:55:30 +01:00
|
|
|
# Use mixed path format i.e c:/path/to/
|
|
|
|
$glob_mysql_test_dir= mixed_path($glob_mysql_test_dir);
|
2005-01-02 16:57:21 +01:00
|
|
|
}
|
2006-11-11 14:32:10 +01:00
|
|
|
|
|
|
|
# In most cases, the base directory we find everything relative to,
|
|
|
|
# is the parent directory of the "mysql-test" directory. For source
|
|
|
|
# distributions, TAR binary distributions and some other packages.
|
2007-12-12 18:19:24 +01:00
|
|
|
$basedir= dirname($glob_mysql_test_dir);
|
2006-11-11 14:32:10 +01:00
|
|
|
|
|
|
|
# In the RPM case, binaries and libraries are installed in the
|
|
|
|
# default system locations, instead of having our own private base
|
|
|
|
# directory. And we install "/usr/share/mysql-test". Moving up one
|
|
|
|
# more directory relative to "mysql-test" gives us a usable base
|
|
|
|
# directory for RPM installs.
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( ! $source_dist and ! -d "$basedir/bin" )
|
2007-08-03 20:43:12 +02:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
$basedir= dirname($basedir);
|
2007-08-03 20:43:12 +02:00
|
|
|
}
|
2009-11-05 14:40:01 +01:00
|
|
|
# For .deb, it's like RPM, but installed in /usr/share/mysql/mysql-test.
|
|
|
|
# So move up one more directory level yet.
|
|
|
|
if ( ! $source_dist and ! -d "$basedir/bin" )
|
|
|
|
{
|
|
|
|
$basedir= dirname($basedir);
|
|
|
|
}
|
2007-08-03 20:43:12 +02:00
|
|
|
|
2010-06-10 11:11:52 +02:00
|
|
|
fix_vs_config_dir();
|
|
|
|
|
2006-11-28 20:00:27 +01:00
|
|
|
# Look for the client binaries directory
|
2008-03-03 12:47:05 +01:00
|
|
|
if ($path_client_bindir)
|
|
|
|
{
|
|
|
|
# --client-bindir=path set on command line, check that the path exists
|
|
|
|
$path_client_bindir= mtr_path_exists($path_client_bindir);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2008-03-03 12:53:57 +01:00
|
|
|
$path_client_bindir= mtr_path_exists("$basedir/client_release",
|
|
|
|
"$basedir/client_debug",
|
2010-06-10 11:11:52 +02:00
|
|
|
"$basedir/client$opt_vs_config",
|
2008-03-03 12:53:57 +01:00
|
|
|
"$basedir/client",
|
|
|
|
"$basedir/bin");
|
2008-03-03 12:47:05 +01:00
|
|
|
}
|
2006-11-02 21:05:20 +01:00
|
|
|
|
2007-04-18 14:24:09 +02:00
|
|
|
# Look for language files and charsetsdir, use same share
|
2009-10-08 00:57:43 +02:00
|
|
|
$path_language= mtr_path_exists("$basedir/share/mariadb/english",
|
|
|
|
"$basedir/share/mysql/english",
|
2009-02-27 13:07:01 +01:00
|
|
|
"$basedir/sql/share/english",
|
|
|
|
"$basedir/share/english");
|
2007-04-18 14:24:09 +02:00
|
|
|
|
2009-02-27 13:07:01 +01:00
|
|
|
my $path_share= dirname($path_language);
|
2007-04-18 14:24:09 +02:00
|
|
|
$path_charsetsdir= mtr_path_exists("$path_share/charsets");
|
|
|
|
|
2006-02-17 16:20:53 +01:00
|
|
|
if ( $opt_comment )
|
2005-01-02 16:57:21 +01:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_report();
|
|
|
|
mtr_print_thick_line('#');
|
|
|
|
mtr_report("# $opt_comment");
|
|
|
|
mtr_print_thick_line('#');
|
2005-01-02 16:57:21 +01:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2009-02-24 12:53:34 +01:00
|
|
|
if ( $opt_experimental )
|
|
|
|
{
|
2009-08-13 15:29:19 +02:00
|
|
|
# $^O on Windows considered not generic enough
|
|
|
|
my $plat= (IS_WINDOWS) ? 'windows' : $^O;
|
|
|
|
|
2009-02-25 15:00:17 +01:00
|
|
|
# read the list of experimental test cases from the file specified on
|
|
|
|
# the command line
|
|
|
|
open(FILE, "<", $opt_experimental) or mtr_error("Can't read experimental file: $opt_experimental");
|
|
|
|
mtr_report("Using experimental file: $opt_experimental");
|
|
|
|
$experimental_test_cases = [];
|
|
|
|
while(<FILE>) {
|
|
|
|
chomp;
|
|
|
|
# remove comments (# foo) at the beginning of the line, or after a
|
|
|
|
# blank at the end of the line
|
|
|
|
s/( +|^)#.*$//;
|
2009-08-13 15:29:19 +02:00
|
|
|
# If @ platform specifier given, use this entry only if it contains
|
|
|
|
# @<platform> or @!<xxx> where xxx != platform
|
|
|
|
if (/\@.*/)
|
|
|
|
{
|
|
|
|
next if (/\@!$plat/);
|
|
|
|
next unless (/\@$plat/ or /\@!/);
|
|
|
|
# Then remove @ and everything after it
|
|
|
|
s/\@.*$//;
|
|
|
|
}
|
2009-02-25 15:00:17 +01:00
|
|
|
# remove whitespace
|
|
|
|
s/^ +//;
|
|
|
|
s/ +$//;
|
|
|
|
# if nothing left, don't need to remember this line
|
|
|
|
if ( $_ eq "" ) {
|
|
|
|
next;
|
2009-02-24 12:53:34 +01:00
|
|
|
}
|
2009-02-25 15:00:17 +01:00
|
|
|
# remember what is left as the name of another test case that should be
|
|
|
|
# treated as experimental
|
|
|
|
print " - $_\n";
|
|
|
|
push @$experimental_test_cases, $_;
|
2009-02-24 12:53:34 +01:00
|
|
|
}
|
2009-02-25 15:00:17 +01:00
|
|
|
close FILE;
|
2006-03-01 13:15:37 +01:00
|
|
|
}
|
|
|
|
|
2005-09-28 23:24:44 +02:00
|
|
|
foreach my $arg ( @ARGV )
|
|
|
|
{
|
|
|
|
if ( $arg =~ /^--skip-/ )
|
|
|
|
{
|
|
|
|
push(@opt_extra_mysqld_opt, $arg);
|
|
|
|
}
|
2006-06-08 14:52:33 +02:00
|
|
|
elsif ( $arg =~ /^--$/ )
|
|
|
|
{
|
|
|
|
# It is an effect of setting 'pass_through' in option processing
|
|
|
|
# that the lone '--' separating options from arguments survives,
|
|
|
|
# simply ignore it.
|
|
|
|
}
|
2005-09-28 23:24:44 +02:00
|
|
|
elsif ( $arg =~ /^-/ )
|
|
|
|
{
|
|
|
|
usage("Invalid option \"$arg\"");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
push(@opt_cases, $arg);
|
|
|
|
}
|
|
|
|
}
|
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
|
|
|
|
2009-02-15 11:58:34 +01:00
|
|
|
if ( @opt_cases )
|
|
|
|
{
|
|
|
|
# Run big tests if explicitely specified on command line
|
|
|
|
$opt_big_test= 1;
|
|
|
|
}
|
|
|
|
|
2006-06-11 15:49:34 +02:00
|
|
|
# --------------------------------------------------------------------------
|
|
|
|
# Find out type of logging that are being used
|
|
|
|
# --------------------------------------------------------------------------
|
2007-12-12 18:19:24 +01:00
|
|
|
foreach my $arg ( @opt_extra_mysqld_opt )
|
2006-06-11 15:49:34 +02:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( $arg =~ /binlog[-_]format=(\S+)/ )
|
2007-11-20 17:55:51 +01:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
# Save this for collect phase
|
|
|
|
collect_option('binlog-format', $1);
|
|
|
|
mtr_report("Using binlog format '$1'");
|
2007-11-20 17:55:51 +01:00
|
|
|
}
|
2006-06-11 15:49:34 +02:00
|
|
|
}
|
|
|
|
|
2007-03-29 11:31:50 +02:00
|
|
|
|
|
|
|
# --------------------------------------------------------------------------
|
|
|
|
# Find out default storage engine being used(if any)
|
|
|
|
# --------------------------------------------------------------------------
|
|
|
|
foreach my $arg ( @opt_extra_mysqld_opt )
|
|
|
|
{
|
|
|
|
if ( $arg =~ /default-storage-engine=(\S+)/ )
|
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
# Save this for collect phase
|
|
|
|
collect_option('default-storage-engine', $1);
|
|
|
|
mtr_report("Using default engine '$1'")
|
2007-03-29 11:31:50 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-11-26 11:23:30 +01:00
|
|
|
if (IS_WINDOWS and defined $opt_mem) {
|
|
|
|
mtr_report("--mem not supported on Windows, ignored");
|
|
|
|
$opt_mem= undef;
|
|
|
|
}
|
|
|
|
|
2010-01-25 11:20:52 +01:00
|
|
|
if ($opt_port_base ne "auto")
|
|
|
|
{
|
|
|
|
if (my $rem= $opt_port_base % 10)
|
|
|
|
{
|
|
|
|
mtr_warning ("Port base $opt_port_base rounded down to multiple of 10");
|
|
|
|
$opt_port_base-= $rem;
|
|
|
|
}
|
|
|
|
$opt_build_thread= $opt_port_base / 10 - 1000;
|
|
|
|
}
|
|
|
|
|
2005-05-15 17:22:54 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2006-10-05 14:37:46 +02:00
|
|
|
# Check if we should speed up tests by trying to run on tmpfs
|
2005-05-15 17:22:54 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2008-09-05 14:09:39 +02:00
|
|
|
if ( defined $opt_mem)
|
2006-10-05 14:37:46 +02:00
|
|
|
{
|
|
|
|
mtr_error("Can't use --mem and --vardir at the same time ")
|
|
|
|
if $opt_vardir;
|
|
|
|
mtr_error("Can't use --mem and --tmpdir at the same time ")
|
|
|
|
if $opt_tmpdir;
|
|
|
|
|
2006-11-08 23:16:44 +01:00
|
|
|
# Search through list of locations that are known
|
2008-01-08 10:50:07 +01:00
|
|
|
# to be "fast disks" to find a suitable location
|
2006-11-08 23:16:44 +01:00
|
|
|
# Use --mem=<dir> as first location to look.
|
|
|
|
my @tmpfs_locations= ($opt_mem, "/dev/shm", "/tmp");
|
|
|
|
|
2006-10-05 14:37:46 +02:00
|
|
|
foreach my $fs (@tmpfs_locations)
|
|
|
|
{
|
|
|
|
if ( -d $fs )
|
|
|
|
{
|
2008-04-24 13:02:53 +02:00
|
|
|
my $template= "var_${opt_build_thread}_XXXX";
|
2008-01-08 10:50:07 +01:00
|
|
|
$opt_mem= tempdir( $template, DIR => $fs, CLEANUP => 0);
|
2006-10-05 14:37:46 +02:00
|
|
|
last;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2005-02-08 06:11:05 +01:00
|
|
|
|
2005-05-15 17:22:54 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2008-09-05 14:09:39 +02:00
|
|
|
# Set the "var/" directory, the base for everything else
|
2005-05-15 17:22:54 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2007-12-12 18:19:24 +01:00
|
|
|
$default_vardir= "$glob_mysql_test_dir/var";
|
2005-05-15 17:22:54 +02:00
|
|
|
if ( ! $opt_vardir )
|
|
|
|
{
|
2006-10-06 16:26:17 +02:00
|
|
|
$opt_vardir= $default_vardir;
|
2005-05-15 17:22:54 +02:00
|
|
|
}
|
2006-03-03 14:55:05 +01:00
|
|
|
|
2005-06-05 20:10:47 +02:00
|
|
|
# We make the path absolute, as the server will do a chdir() before usage
|
|
|
|
unless ( $opt_vardir =~ m,^/, or
|
2008-02-20 14:55:30 +01:00
|
|
|
(IS_WINDOWS and $opt_vardir =~ m,^[a-z]:/,i) )
|
2005-05-15 17:22:54 +02:00
|
|
|
{
|
|
|
|
# Make absolute path, relative test dir
|
|
|
|
$opt_vardir= "$glob_mysql_test_dir/$opt_vardir";
|
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-09-05 14:09:39 +02:00
|
|
|
set_vardir($opt_vardir);
|
2007-12-12 18:19:24 +01:00
|
|
|
|
2005-05-15 17:22:54 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2008-09-05 14:09:39 +02:00
|
|
|
# Set the "tmp" directory
|
2005-05-15 17:22:54 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2008-09-15 17:05:14 +02:00
|
|
|
if ( ! $opt_tmpdir )
|
|
|
|
{
|
|
|
|
$opt_tmpdir= "$opt_vardir/tmp" unless $opt_tmpdir;
|
|
|
|
|
2009-02-02 11:18:38 +01:00
|
|
|
if (check_socket_path_length("$opt_tmpdir/mysql_testsocket.sock"))
|
2008-09-15 17:05:14 +02:00
|
|
|
{
|
|
|
|
mtr_report("Too long tmpdir path '$opt_tmpdir'",
|
|
|
|
" creating a shorter one...");
|
|
|
|
|
|
|
|
# Create temporary directory in standard location for temporary files
|
2009-03-04 16:41:45 +01:00
|
|
|
$opt_tmpdir= tempdir( TMPDIR => 1, CLEANUP => 0 );
|
2008-09-15 17:05:14 +02:00
|
|
|
mtr_report(" - using tmpdir: '$opt_tmpdir'\n");
|
2009-03-04 16:41:45 +01:00
|
|
|
|
|
|
|
# Remember pid that created dir so it's removed by correct process
|
|
|
|
$opt_tmpdir_pid= $$;
|
2008-09-15 17:05:14 +02:00
|
|
|
}
|
|
|
|
}
|
2006-02-12 04:13:24 +01:00
|
|
|
$opt_tmpdir =~ s,/+$,,; # Remove ending slash if any
|
2004-12-30 16:34:01 +01:00
|
|
|
|
|
|
|
# --------------------------------------------------------------------------
|
2007-12-12 18:19:24 +01:00
|
|
|
# fast option
|
2004-12-30 16:34:01 +01:00
|
|
|
# --------------------------------------------------------------------------
|
2007-12-12 18:19:24 +01:00
|
|
|
if ($opt_fast){
|
|
|
|
$opt_shutdown_timeout= 0; # Kill processes instead of nice shutdown
|
2007-03-28 11:16:50 +02:00
|
|
|
}
|
|
|
|
|
2009-03-04 12:12:57 +01:00
|
|
|
# --------------------------------------------------------------------------
|
|
|
|
# Check parallel value
|
|
|
|
# --------------------------------------------------------------------------
|
2009-06-03 12:46:04 +02:00
|
|
|
if ($opt_parallel ne "auto" && $opt_parallel < 1)
|
2009-03-04 12:12:57 +01:00
|
|
|
{
|
2009-06-03 12:46:04 +02:00
|
|
|
mtr_error("0 or negative parallel value makes no sense, use 'auto' or positive number");
|
2009-03-04 12:12:57 +01:00
|
|
|
}
|
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
# --------------------------------------------------------------------------
|
2006-10-08 15:50:16 +02:00
|
|
|
# Record flag
|
2004-12-30 16:34:01 +01:00
|
|
|
# --------------------------------------------------------------------------
|
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
|
|
|
if ( $opt_record and ! @opt_cases )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
|
|
|
mtr_error("Will not run in record mode without a specific test case");
|
|
|
|
}
|
|
|
|
|
2008-11-10 16:10:49 +01:00
|
|
|
if ( $opt_record ) {
|
|
|
|
# Use only one worker with --record
|
|
|
|
$opt_parallel= 1;
|
2007-11-23 13:29:31 +01:00
|
|
|
}
|
2006-10-08 15:50:16 +02:00
|
|
|
|
|
|
|
# --------------------------------------------------------------------------
|
2007-12-12 18:19:24 +01:00
|
|
|
# Embedded server flag
|
2006-10-08 15:50:16 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( $opt_embedded_server )
|
2005-08-25 16:25:54 +02:00
|
|
|
{
|
2008-02-20 14:55:30 +01:00
|
|
|
if ( IS_WINDOWS )
|
2007-12-12 18:19:24 +01:00
|
|
|
{
|
|
|
|
# Add the location for libmysqld.dll to the path.
|
|
|
|
my $separator= ";";
|
|
|
|
my $lib_mysqld=
|
2010-06-10 11:11:52 +02:00
|
|
|
mtr_path_exists("$basedir/libmysqld$opt_vs_config");
|
2008-02-20 14:55:30 +01:00
|
|
|
if ( IS_CYGWIN )
|
2007-12-12 18:19:24 +01:00
|
|
|
{
|
2008-02-20 14:55:30 +01:00
|
|
|
$lib_mysqld= posix_path($lib_mysqld);
|
2007-12-12 18:19:24 +01:00
|
|
|
$separator= ":";
|
|
|
|
}
|
|
|
|
$ENV{'PATH'}= "$ENV{'PATH'}".$separator.$lib_mysqld;
|
|
|
|
}
|
|
|
|
$opt_skip_ndbcluster= 1; # Turn off use of NDB cluster
|
|
|
|
$opt_skip_ssl= 1; # Turn off use of SSL
|
2005-08-25 16:25:54 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Turn off use of bin log
|
|
|
|
push(@opt_extra_mysqld_opt, "--skip-log-bin");
|
|
|
|
|
|
|
|
if ( using_extern() )
|
|
|
|
{
|
|
|
|
mtr_error("Can't use --extern with --embedded-server");
|
|
|
|
}
|
2008-08-01 16:13:35 +02:00
|
|
|
|
2008-08-29 12:33:02 +02:00
|
|
|
|
|
|
|
if ($opt_gdb)
|
|
|
|
{
|
|
|
|
$opt_client_gdb= $opt_gdb;
|
|
|
|
$opt_gdb= undef;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($opt_ddd)
|
|
|
|
{
|
|
|
|
$opt_client_ddd= $opt_ddd;
|
|
|
|
$opt_ddd= undef;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($opt_debugger)
|
|
|
|
{
|
|
|
|
$opt_client_debugger= $opt_debugger;
|
|
|
|
$opt_debugger= undef;
|
|
|
|
}
|
|
|
|
|
2008-08-01 16:13:35 +02:00
|
|
|
if ( $opt_gdb || $opt_ddd || $opt_manual_gdb || $opt_manual_ddd ||
|
|
|
|
$opt_manual_debug || $opt_debugger )
|
|
|
|
{
|
|
|
|
mtr_error("You need to use the client debug options for the",
|
|
|
|
"embedded server. Ex: --client-gdb");
|
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2006-10-08 15:50:16 +02:00
|
|
|
# --------------------------------------------------------------------------
|
Added option --staging-run to mysql-test-run to mark slow, not important tests, to not be run in staging trees
Use MY_MUTEX_INIT_FAST for pool mutex
mysql-test/mysql-test-run.pl:
Added option --staging-run
Added information about --parallell=# to help message
mysql-test/suite/federated/federated_server.test:
Slow test, don't run with --staging-run
mysql-test/suite/maria/t/maria-preload.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_optimize.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_relayrotate.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_001.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_sp003.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_start_stop_slave.test:
Slow test, don't run with --staging-run
mysql-test/t/compress.test:
Slow test, don't run with --staging-run
mysql-test/t/count_distinct3.test:
Slow test, don't run with --staging-run
mysql-test/t/index_merge_innodb.test:
Slow test, don't run with --staging-run
mysql-test/t/information_schema_all_engines.test:
Slow test, don't run with --staging-run
mysql-test/t/innodb_mysql.test:
Slow test, don't run with --staging-run
mysql-test/t/pool_of_threads.test:
Slow test, don't run with --staging-run
mysql-test/t/preload.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl_compress.test:
Slow test, don't run with --staging-run
mysql-test/valgrind.supp:
Suppress warnings from SuSE 11.1 on x86
sql/scheduler.cc:
Use MY_MUTEX_INIT_FAST for pool mutex
2009-06-05 17:35:22 +02:00
|
|
|
# Big test and staging_run flags
|
2006-10-08 15:50:16 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2006-11-17 13:14:07 +01:00
|
|
|
if ( $opt_big_test )
|
|
|
|
{
|
|
|
|
$ENV{'BIG_TEST'}= 1;
|
|
|
|
}
|
Added option --staging-run to mysql-test-run to mark slow, not important tests, to not be run in staging trees
Use MY_MUTEX_INIT_FAST for pool mutex
mysql-test/mysql-test-run.pl:
Added option --staging-run
Added information about --parallell=# to help message
mysql-test/suite/federated/federated_server.test:
Slow test, don't run with --staging-run
mysql-test/suite/maria/t/maria-preload.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_optimize.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_relayrotate.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_001.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_sp003.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_start_stop_slave.test:
Slow test, don't run with --staging-run
mysql-test/t/compress.test:
Slow test, don't run with --staging-run
mysql-test/t/count_distinct3.test:
Slow test, don't run with --staging-run
mysql-test/t/index_merge_innodb.test:
Slow test, don't run with --staging-run
mysql-test/t/information_schema_all_engines.test:
Slow test, don't run with --staging-run
mysql-test/t/innodb_mysql.test:
Slow test, don't run with --staging-run
mysql-test/t/pool_of_threads.test:
Slow test, don't run with --staging-run
mysql-test/t/preload.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl_compress.test:
Slow test, don't run with --staging-run
mysql-test/valgrind.supp:
Suppress warnings from SuSE 11.1 on x86
sql/scheduler.cc:
Use MY_MUTEX_INIT_FAST for pool mutex
2009-06-05 17:35:22 +02:00
|
|
|
$ENV{'STAGING_RUN'}= $opt_staging_run;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2006-10-08 15:50:16 +02:00
|
|
|
# --------------------------------------------------------------------------
|
|
|
|
# Gcov flag
|
|
|
|
# --------------------------------------------------------------------------
|
2010-01-05 21:35:50 +01:00
|
|
|
if ( ($opt_gcov or $opt_gprof) and ! $source_dist )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2005-01-01 19:27:41 +01:00
|
|
|
mtr_error("Coverage test needs the source - please use source dist");
|
|
|
|
}
|
|
|
|
|
2006-10-08 15:50:16 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2006-03-23 15:07:39 +01:00
|
|
|
# Check debug related options
|
2006-10-08 15:50:16 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2006-03-23 16:22:56 +01:00
|
|
|
if ( $opt_gdb || $opt_client_gdb || $opt_ddd || $opt_client_ddd ||
|
2006-04-04 09:49:32 +02:00
|
|
|
$opt_manual_gdb || $opt_manual_ddd || $opt_manual_debug ||
|
|
|
|
$opt_debugger || $opt_client_debugger )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2006-04-04 09:49:32 +02:00
|
|
|
# Indicate that we are using debugger
|
2006-03-23 15:07:39 +01:00
|
|
|
$glob_debugger= 1;
|
2009-03-12 23:27:35 +01:00
|
|
|
$opt_testcase_timeout= 60*60*24; # Don't abort debugging with timeout
|
|
|
|
$opt_suite_timeout= $opt_testcase_timeout;
|
|
|
|
$opt_retry= 1;
|
|
|
|
$opt_retry_failure= 1;
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( using_extern() )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2006-03-23 15:07:39 +01:00
|
|
|
mtr_error("Can't use --extern when using debugger");
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2009-08-11 15:59:05 +02:00
|
|
|
# Set one week timeout (check-testcase timeout will be 1/10th)
|
|
|
|
$opt_testcase_timeout= 7 * 24 * 60;
|
|
|
|
$opt_suite_timeout= 7 * 24 * 60;
|
|
|
|
# One day to shutdown
|
|
|
|
$opt_shutdown_timeout= 24 * 60;
|
|
|
|
# One day for PID file creation (this is given in seconds not minutes)
|
|
|
|
$opt_start_timeout= 24 * 60 * 60;
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2009-08-18 09:38:18 +02:00
|
|
|
# --------------------------------------------------------------------------
|
|
|
|
# Modified behavior with --start options
|
|
|
|
# --------------------------------------------------------------------------
|
|
|
|
if ($opt_start or $opt_start_dirty) {
|
|
|
|
collect_option ('quick-collect', 1);
|
|
|
|
$start_only= 1;
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2009-03-12 23:27:35 +01:00
|
|
|
if ($opt_debug)
|
|
|
|
{
|
|
|
|
$opt_testcase_timeout= 60*60*24; # Don't abort debugging with timeout
|
|
|
|
$opt_suite_timeout= $opt_testcase_timeout;
|
|
|
|
$opt_retry= 1;
|
|
|
|
$opt_retry_failure= 1;
|
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2009-04-29 16:13:38 +02:00
|
|
|
# --------------------------------------------------------------------------
|
|
|
|
# Check use of wait-all
|
|
|
|
# --------------------------------------------------------------------------
|
|
|
|
|
2009-08-18 09:38:18 +02:00
|
|
|
if ($opt_wait_all && ! $start_only)
|
2009-04-29 16:13:38 +02:00
|
|
|
{
|
|
|
|
mtr_error("--wait-all can only be used with --start or --start-dirty");
|
|
|
|
}
|
|
|
|
|
2006-10-08 17:08:24 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2008-11-21 13:45:28 +01:00
|
|
|
# Check timeout arguments
|
2006-10-08 17:08:24 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2008-11-21 13:45:28 +01:00
|
|
|
|
|
|
|
mtr_error("Invalid value '$opt_testcase_timeout' supplied ".
|
|
|
|
"for option --testcase-timeout")
|
|
|
|
if ($opt_testcase_timeout <= 0);
|
|
|
|
mtr_error("Invalid value '$opt_suite_timeout' supplied ".
|
|
|
|
"for option --testsuite-timeout")
|
|
|
|
if ($opt_suite_timeout <= 0);
|
2006-08-01 11:35:37 +02:00
|
|
|
|
2006-10-08 15:50:16 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2006-06-16 15:56:08 +02:00
|
|
|
# Check valgrind arguments
|
2006-10-08 15:50:16 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2007-10-23 11:52:55 +02:00
|
|
|
if ( $opt_valgrind or $opt_valgrind_path or @valgrind_args)
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2006-03-23 15:07:39 +01:00
|
|
|
mtr_report("Turning on valgrind for all executables");
|
|
|
|
$opt_valgrind= 1;
|
|
|
|
$opt_valgrind_mysqld= 1;
|
|
|
|
$opt_valgrind_mysqltest= 1;
|
2007-12-12 18:19:24 +01:00
|
|
|
|
|
|
|
# Increase the timeouts when running with valgrind
|
|
|
|
$opt_testcase_timeout*= 10;
|
|
|
|
$opt_suite_timeout*= 6;
|
|
|
|
$opt_start_timeout*= 10;
|
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2006-06-16 15:56:08 +02:00
|
|
|
elsif ( $opt_valgrind_mysqld )
|
2005-09-17 01:09:32 +02:00
|
|
|
{
|
2006-06-16 15:56:08 +02:00
|
|
|
mtr_report("Turning on valgrind for mysqld(s) only");
|
2006-03-23 15:07:39 +01:00
|
|
|
$opt_valgrind= 1;
|
2006-06-16 15:56:08 +02:00
|
|
|
}
|
|
|
|
elsif ( $opt_valgrind_mysqltest )
|
|
|
|
{
|
2006-10-25 14:34:18 +02:00
|
|
|
mtr_report("Turning on valgrind for mysqltest and mysql_client_test only");
|
2006-03-23 15:07:39 +01:00
|
|
|
$opt_valgrind= 1;
|
2006-06-16 15:56:08 +02:00
|
|
|
}
|
|
|
|
|
2006-07-26 14:44:59 +02:00
|
|
|
if ( $opt_callgrind )
|
|
|
|
{
|
|
|
|
mtr_report("Turning on valgrind with callgrind for mysqld(s)");
|
|
|
|
$opt_valgrind= 1;
|
|
|
|
$opt_valgrind_mysqld= 1;
|
|
|
|
|
|
|
|
# Set special valgrind options unless options passed on command line
|
2007-10-23 11:52:55 +02:00
|
|
|
push(@valgrind_args, "--trace-children=yes")
|
|
|
|
unless @valgrind_args;
|
2006-07-26 14:44:59 +02:00
|
|
|
}
|
|
|
|
|
2006-06-16 15:56:08 +02:00
|
|
|
if ( $opt_valgrind )
|
|
|
|
{
|
|
|
|
# Set valgrind_options to default unless already defined
|
2007-10-23 11:52:55 +02:00
|
|
|
push(@valgrind_args, @default_valgrind_args)
|
|
|
|
unless @valgrind_args;
|
2006-06-16 15:56:08 +02:00
|
|
|
|
2009-09-24 16:09:11 +02:00
|
|
|
# Make valgrind run in quiet mode so it only print errors
|
|
|
|
push(@valgrind_args, "--quiet" );
|
|
|
|
|
2007-10-23 11:52:55 +02:00
|
|
|
mtr_report("Running valgrind with options \"",
|
|
|
|
join(" ", @valgrind_args), "\"");
|
2005-09-17 01:09:32 +02:00
|
|
|
}
|
|
|
|
|
2010-08-04 12:19:18 +02:00
|
|
|
if (@strace_args)
|
|
|
|
{
|
|
|
|
$opt_strace=1;
|
|
|
|
}
|
|
|
|
|
2009-06-18 14:39:21 +02:00
|
|
|
# InnoDB does not bother to do individual de-allocations at exit. Instead it
|
|
|
|
# relies on a custom allocator to track every allocation, and frees all at
|
|
|
|
# once during exit.
|
|
|
|
# In XtraDB, an option use-sys-malloc is introduced (and on by default) to
|
|
|
|
# disable this (for performance). But this exposes Valgrind to all the
|
|
|
|
# missing de-allocations, so we need to disable it to at least get
|
|
|
|
# meaningful leak checking for the rest of the server.
|
|
|
|
if ($opt_valgrind_mysqld)
|
|
|
|
{
|
|
|
|
push(@opt_extra_mysqld_opt, "--loose-skip-innodb-use-sys-malloc");
|
|
|
|
}
|
2006-04-21 18:48:49 +02:00
|
|
|
}
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
|
2006-11-23 17:39:10 +01:00
|
|
|
#
|
|
|
|
# To make it easier for different devs to work on the same host,
|
|
|
|
# an environment variable can be used to control all ports. A small
|
|
|
|
# number is to be used, 0 - 16 or similar.
|
|
|
|
#
|
|
|
|
# Note the MASTER_MYPORT has to be set the same in all 4.x and 5.x
|
|
|
|
# versions of this script, else a 4.0 test run might conflict with a
|
|
|
|
# 5.1 test run, even if different MTR_BUILD_THREAD is used. This means
|
|
|
|
# all port numbers might not be used in this version of the script.
|
|
|
|
#
|
|
|
|
# Also note the limitation of ports we are allowed to hand out. This
|
|
|
|
# differs between operating systems and configuration, see
|
|
|
|
# http://www.ncftp.com/ncftpd/doc/misc/ephemeral_ports.html
|
|
|
|
# But a fairly safe range seems to be 5001 - 32767
|
|
|
|
#
|
2008-04-24 13:02:53 +02:00
|
|
|
sub set_build_thread_ports($) {
|
2009-03-04 11:34:47 +01:00
|
|
|
my $thread= shift || 0;
|
2006-11-23 17:39:10 +01:00
|
|
|
|
2009-03-04 11:34:47 +01:00
|
|
|
if ( lc($opt_build_thread) eq 'auto' ) {
|
|
|
|
my $found_free = 0;
|
Bug #42804 --parallel option does not work for MTR under ActiveState
perl
The problem here was the method how MTR gets its unique thread ids.
Prior to this patch, the method to do it was to maintain a global
table of pid,mtr_unique_id) pairs. The table was backed by a text
file. The table was cleaned up one in a while and dead processes leaking
unique_ids were determined with with kill(0) or with scripting tasklist
on Windows.
This method is flawed specifically on native Windows Perl. fork() is
implemented with starting a new thread, give it a syntetic negative PID
(threadID*(-1)), until this thread creates a new process with exec()
However, neither tasklist nor any other native Windows tool can cope with
negative perl PIDs. This lead to incorrect determination of dead process
and reusing already used mtr_unique_id.
The patch introduces alternative portable method of solving unique-id
problem. When a process needs a unique id in range [min...max], it just
starts to open files named min, min+1,...max in a loop . After file is
opened, we do non-blocking flock(). When flock() succeeds, process has
allocated the ID. When process dies, file is unlocked . Checks for zombies
are not necessary.
Since the change would create a co-existence problems with older version
of MTR, because of different way to calculate IDs, the default ID range
is changed from 250-299 to 300-349.
Another fix that was necessary enable --parallel option was to serialize
spawn() calls on Windows. specifically, IO redirects needed to be protected.
This patch also fixes hanging CRTL-C (as described in Bug #38629) for the
"new" MTR. The fix was already in 6.0 and is now downported.
2009-04-23 13:35:02 +02:00
|
|
|
$build_thread = 300; # Start attempts from here
|
2009-03-04 11:34:47 +01:00
|
|
|
while (! $found_free)
|
|
|
|
{
|
Bug #42804 --parallel option does not work for MTR under ActiveState
perl
The problem here was the method how MTR gets its unique thread ids.
Prior to this patch, the method to do it was to maintain a global
table of pid,mtr_unique_id) pairs. The table was backed by a text
file. The table was cleaned up one in a while and dead processes leaking
unique_ids were determined with with kill(0) or with scripting tasklist
on Windows.
This method is flawed specifically on native Windows Perl. fork() is
implemented with starting a new thread, give it a syntetic negative PID
(threadID*(-1)), until this thread creates a new process with exec()
However, neither tasklist nor any other native Windows tool can cope with
negative perl PIDs. This lead to incorrect determination of dead process
and reusing already used mtr_unique_id.
The patch introduces alternative portable method of solving unique-id
problem. When a process needs a unique id in range [min...max], it just
starts to open files named min, min+1,...max in a loop . After file is
opened, we do non-blocking flock(). When flock() succeeds, process has
allocated the ID. When process dies, file is unlocked . Checks for zombies
are not necessary.
Since the change would create a co-existence problems with older version
of MTR, because of different way to calculate IDs, the default ID range
is changed from 250-299 to 300-349.
Another fix that was necessary enable --parallel option was to serialize
spawn() calls on Windows. specifically, IO redirects needed to be protected.
This patch also fixes hanging CRTL-C (as described in Bug #38629) for the
"new" MTR. The fix was already in 6.0 and is now downported.
2009-04-23 13:35:02 +02:00
|
|
|
$build_thread= mtr_get_unique_id($build_thread, 349);
|
2009-03-04 11:34:47 +01:00
|
|
|
if ( !defined $build_thread ) {
|
Bug #42804 --parallel option does not work for MTR under ActiveState
perl
The problem here was the method how MTR gets its unique thread ids.
Prior to this patch, the method to do it was to maintain a global
table of pid,mtr_unique_id) pairs. The table was backed by a text
file. The table was cleaned up one in a while and dead processes leaking
unique_ids were determined with with kill(0) or with scripting tasklist
on Windows.
This method is flawed specifically on native Windows Perl. fork() is
implemented with starting a new thread, give it a syntetic negative PID
(threadID*(-1)), until this thread creates a new process with exec()
However, neither tasklist nor any other native Windows tool can cope with
negative perl PIDs. This lead to incorrect determination of dead process
and reusing already used mtr_unique_id.
The patch introduces alternative portable method of solving unique-id
problem. When a process needs a unique id in range [min...max], it just
starts to open files named min, min+1,...max in a loop . After file is
opened, we do non-blocking flock(). When flock() succeeds, process has
allocated the ID. When process dies, file is unlocked . Checks for zombies
are not necessary.
Since the change would create a co-existence problems with older version
of MTR, because of different way to calculate IDs, the default ID range
is changed from 250-299 to 300-349.
Another fix that was necessary enable --parallel option was to serialize
spawn() calls on Windows. specifically, IO redirects needed to be protected.
This patch also fixes hanging CRTL-C (as described in Bug #38629) for the
"new" MTR. The fix was already in 6.0 and is now downported.
2009-04-23 13:35:02 +02:00
|
|
|
mtr_error("Could not get a unique build thread id");
|
2009-03-04 11:34:47 +01:00
|
|
|
}
|
|
|
|
$found_free= check_ports_free($build_thread);
|
|
|
|
# If not free, release and try from next number
|
Bug #42804 --parallel option does not work for MTR under ActiveState
perl
The problem here was the method how MTR gets its unique thread ids.
Prior to this patch, the method to do it was to maintain a global
table of pid,mtr_unique_id) pairs. The table was backed by a text
file. The table was cleaned up one in a while and dead processes leaking
unique_ids were determined with with kill(0) or with scripting tasklist
on Windows.
This method is flawed specifically on native Windows Perl. fork() is
implemented with starting a new thread, give it a syntetic negative PID
(threadID*(-1)), until this thread creates a new process with exec()
However, neither tasklist nor any other native Windows tool can cope with
negative perl PIDs. This lead to incorrect determination of dead process
and reusing already used mtr_unique_id.
The patch introduces alternative portable method of solving unique-id
problem. When a process needs a unique id in range [min...max], it just
starts to open files named min, min+1,...max in a loop . After file is
opened, we do non-blocking flock(). When flock() succeeds, process has
allocated the ID. When process dies, file is unlocked . Checks for zombies
are not necessary.
Since the change would create a co-existence problems with older version
of MTR, because of different way to calculate IDs, the default ID range
is changed from 250-299 to 300-349.
Another fix that was necessary enable --parallel option was to serialize
spawn() calls on Windows. specifically, IO redirects needed to be protected.
This patch also fixes hanging CRTL-C (as described in Bug #38629) for the
"new" MTR. The fix was already in 6.0 and is now downported.
2009-04-23 13:35:02 +02:00
|
|
|
if (! $found_free) {
|
|
|
|
mtr_release_unique_id();
|
|
|
|
$build_thread++;
|
|
|
|
}
|
2008-08-10 19:46:43 +02:00
|
|
|
}
|
2009-03-04 11:34:47 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$build_thread = $opt_build_thread + $thread - 1;
|
2009-04-28 23:06:36 +02:00
|
|
|
if (! check_ports_free($build_thread)) {
|
|
|
|
# Some port was not free(which one has already been printed)
|
|
|
|
mtr_error("Some port(s) was not free")
|
|
|
|
}
|
2006-11-30 22:45:55 +01:00
|
|
|
}
|
2008-04-24 13:02:53 +02:00
|
|
|
$ENV{MTR_BUILD_THREAD}= $build_thread;
|
2009-03-04 11:34:47 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Calculate baseport
|
2008-08-10 19:46:43 +02:00
|
|
|
$baseport= $build_thread * 10 + 10000;
|
|
|
|
if ( $baseport < 5001 or $baseport + 9 >= 32767 )
|
2006-11-23 17:39:10 +01:00
|
|
|
{
|
|
|
|
mtr_error("MTR_BUILD_THREAD number results in a port",
|
|
|
|
"outside 5001 - 32767",
|
2008-08-10 19:46:43 +02:00
|
|
|
"($baseport - $baseport + 9)");
|
2006-12-20 23:44:53 +01:00
|
|
|
}
|
2006-03-13 10:30:36 +01:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
mtr_report("Using MTR_BUILD_THREAD $build_thread,",
|
2008-08-10 19:46:43 +02:00
|
|
|
"with reserved ports $baseport..".($baseport+9));
|
2006-03-13 10:30:36 +01:00
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub collect_mysqld_features {
|
2006-10-04 12:47:32 +02:00
|
|
|
my $found_variable_list_start= 0;
|
2006-05-03 20:04:57 +02:00
|
|
|
|
2006-11-28 22:16:31 +01:00
|
|
|
#
|
2007-12-12 18:19:24 +01:00
|
|
|
# Execute "mysqld --no-defaults --help --verbose" to get a
|
2007-03-28 11:16:50 +02:00
|
|
|
# list of all features and settings
|
2006-11-28 22:16:31 +01:00
|
|
|
#
|
2007-04-15 15:47:27 +02:00
|
|
|
# --no-defaults and --skip-grant-tables are to avoid loading
|
|
|
|
# system-wide configs and plugins
|
|
|
|
#
|
2007-04-30 16:45:56 +02:00
|
|
|
# --datadir must exist, mysqld will chdir into it
|
2007-04-30 02:46:18 +02:00
|
|
|
#
|
2008-02-20 14:55:30 +01:00
|
|
|
my $args;
|
|
|
|
mtr_init_args(\$args);
|
|
|
|
mtr_add_arg($args, "--no-defaults");
|
2010-06-10 11:11:52 +02:00
|
|
|
mtr_add_arg($args, "--datadir=%s/tmp", $opt_vardir);
|
|
|
|
mtr_add_arg($args, "--basedir=%s", $basedir);
|
2008-02-20 14:55:30 +01:00
|
|
|
mtr_add_arg($args, "--language=%s", $path_language);
|
|
|
|
mtr_add_arg($args, "--skip-grant-tables");
|
2010-06-14 18:57:30 +02:00
|
|
|
for (@opt_extra_mysqld_opt) {
|
|
|
|
mtr_add_arg($args, $_) unless /^--binlog-format\b/;
|
|
|
|
}
|
2009-09-26 04:25:56 +02:00
|
|
|
my $euid= $>;
|
|
|
|
if (!IS_WINDOWS and $euid == 0) {
|
|
|
|
mtr_add_arg($args, "--user=root");
|
|
|
|
}
|
2008-02-20 14:55:30 +01:00
|
|
|
mtr_add_arg($args, "--verbose");
|
|
|
|
mtr_add_arg($args, "--help");
|
|
|
|
|
2010-02-11 11:22:07 +01:00
|
|
|
# Need --user=root if running as *nix root user
|
|
|
|
if (!IS_WINDOWS and $> == 0)
|
|
|
|
{
|
|
|
|
mtr_add_arg($args, "--user=root");
|
|
|
|
}
|
|
|
|
|
2008-03-25 09:19:03 +01:00
|
|
|
my $exe_mysqld= find_mysqld($basedir);
|
2008-02-20 14:55:30 +01:00
|
|
|
my $cmd= join(" ", $exe_mysqld, @$args);
|
|
|
|
my $list= `$cmd`;
|
2005-06-21 02:21:52 +02:00
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
mtr_verbose("cmd: $cmd");
|
2010-05-26 20:55:40 +02:00
|
|
|
|
2006-11-28 22:16:31 +01:00
|
|
|
foreach my $line (split('\n', $list))
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2006-10-04 12:47:32 +02:00
|
|
|
# First look for version
|
|
|
|
if ( !$mysql_version_id )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2006-10-04 12:47:32 +02:00
|
|
|
# Look for version
|
2006-10-06 13:33:12 +02:00
|
|
|
my $exe_name= basename($exe_mysqld);
|
|
|
|
mtr_verbose("exe_name: $exe_name");
|
|
|
|
if ( $line =~ /^\S*$exe_name\s\sVer\s([0-9]*)\.([0-9]*)\.([0-9]*)/ )
|
2006-10-04 12:47:32 +02:00
|
|
|
{
|
2006-10-05 22:29:16 +02:00
|
|
|
#print "Major: $1 Minor: $2 Build: $3\n";
|
2006-10-04 12:47:32 +02:00
|
|
|
$mysql_version_id= $1*10000 + $2*100 + $3;
|
2006-10-05 22:29:16 +02:00
|
|
|
#print "mysql_version_id: $mysql_version_id\n";
|
2010-08-02 18:39:45 +02:00
|
|
|
mtr_report("MariaDB Version $1.$2.$3");
|
2006-10-04 12:47:32 +02:00
|
|
|
}
|
2005-06-19 20:06:27 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2006-10-04 12:47:32 +02:00
|
|
|
if (!$found_variable_list_start)
|
2006-03-08 19:15:56 +01:00
|
|
|
{
|
2006-10-04 12:47:32 +02:00
|
|
|
# Look for start of variables list
|
2006-10-04 16:28:23 +02:00
|
|
|
if ( $line =~ /[\-]+\s[\-]+/ )
|
2006-10-04 12:47:32 +02:00
|
|
|
{
|
|
|
|
$found_variable_list_start= 1;
|
|
|
|
}
|
2006-10-04 16:28:23 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2006-10-04 12:47:32 +02:00
|
|
|
# Put variables into hash
|
2006-10-23 20:36:44 +02:00
|
|
|
if ( $line =~ /^([\S]+)[ \t]+(.*?)\r?$/ )
|
2006-10-04 12:47:32 +02:00
|
|
|
{
|
2006-10-23 20:36:44 +02:00
|
|
|
# print "$1=\"$2\"\n";
|
2006-10-04 12:47:32 +02:00
|
|
|
$mysqld_variables{$1}= $2;
|
|
|
|
}
|
2006-10-04 16:28:23 +02:00
|
|
|
else
|
|
|
|
{
|
2006-10-05 13:38:08 +02:00
|
|
|
# The variable list is ended with a blank line
|
|
|
|
if ( $line =~ /^[\s]*$/ )
|
|
|
|
{
|
|
|
|
last;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
# Send out a warning, we should fix the variables that has no
|
|
|
|
# space between variable name and it's value
|
|
|
|
# or should it be fixed width column parsing? It does not
|
|
|
|
# look like that in function my_print_variables in my_getopt.c
|
|
|
|
mtr_warning("Could not parse variable list line : $line");
|
|
|
|
}
|
2006-10-04 16:28:23 +02:00
|
|
|
}
|
2006-03-08 19:15:56 +01:00
|
|
|
}
|
2005-06-19 20:06:27 +02:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2006-10-04 12:47:32 +02:00
|
|
|
mtr_error("Could not find version of MySQL") unless $mysql_version_id;
|
2006-10-04 16:28:23 +02:00
|
|
|
mtr_error("Could not find variabes list") unless $found_variable_list_start;
|
2006-10-04 12:47:32 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-09-05 18:28:20 +02:00
|
|
|
|
|
|
|
sub collect_mysqld_features_from_running_server ()
|
|
|
|
{
|
|
|
|
my $mysql= mtr_exe_exists("$path_client_bindir/mysql");
|
2007-03-28 11:16:50 +02:00
|
|
|
|
|
|
|
my $args;
|
|
|
|
mtr_init_args(\$args);
|
|
|
|
|
|
|
|
mtr_add_arg($args, "--no-defaults");
|
|
|
|
mtr_add_arg($args, "--user=%s", $opt_user);
|
|
|
|
|
2008-09-05 18:28:20 +02:00
|
|
|
while (my ($option, $value)= each( %opts_extern )) {
|
|
|
|
mtr_add_arg($args, "--$option=$value");
|
|
|
|
}
|
2007-03-28 11:16:50 +02:00
|
|
|
|
2008-09-05 18:28:20 +02:00
|
|
|
mtr_add_arg($args, "--silent"); # Tab separated output
|
|
|
|
mtr_add_arg($args, "-e '%s'", "use mysql; SHOW VARIABLES");
|
|
|
|
my $cmd= "$mysql " . join(' ', @$args);
|
|
|
|
mtr_verbose("cmd: $cmd");
|
2007-03-28 11:16:50 +02:00
|
|
|
|
2008-09-05 18:28:20 +02:00
|
|
|
my $list = `$cmd` or
|
|
|
|
mtr_error("Could not connect to extern server using command: '$cmd'");
|
|
|
|
foreach my $line (split('\n', $list ))
|
2007-03-28 11:16:50 +02:00
|
|
|
{
|
|
|
|
# Put variables into hash
|
|
|
|
if ( $line =~ /^([\S]+)[ \t]+(.*?)\r?$/ )
|
|
|
|
{
|
2008-09-05 18:28:20 +02:00
|
|
|
# print "$1=\"$2\"\n";
|
2007-03-28 11:16:50 +02:00
|
|
|
$mysqld_variables{$1}= $2;
|
|
|
|
}
|
|
|
|
}
|
2008-09-05 18:28:20 +02:00
|
|
|
|
2009-08-11 12:59:43 +02:00
|
|
|
# "Convert" innodb flag
|
|
|
|
$mysqld_variables{'innodb'}= "ON"
|
|
|
|
if ($mysqld_variables{'have_innodb'} eq "YES");
|
|
|
|
|
2008-09-05 18:28:20 +02:00
|
|
|
# Parse version
|
|
|
|
my $version_str= $mysqld_variables{'version'};
|
|
|
|
if ( $version_str =~ /^([0-9]*)\.([0-9]*)\.([0-9]*)/ )
|
|
|
|
{
|
|
|
|
#print "Major: $1 Minor: $2 Build: $3\n";
|
|
|
|
$mysql_version_id= $1*10000 + $2*100 + $3;
|
|
|
|
#print "mysql_version_id: $mysql_version_id\n";
|
|
|
|
mtr_report("MySQL Version $1.$2.$3");
|
|
|
|
}
|
|
|
|
mtr_error("Could not find version of MySQL") unless $mysql_version_id;
|
2007-03-28 11:16:50 +02:00
|
|
|
}
|
|
|
|
|
2008-03-25 09:19:03 +01:00
|
|
|
sub find_mysqld {
|
|
|
|
my ($mysqld_basedir)= @_;
|
2006-10-23 12:02:56 +02:00
|
|
|
|
2008-03-25 09:19:03 +01:00
|
|
|
my @mysqld_names= ("mysqld", "mysqld-max-nt", "mysqld-max",
|
|
|
|
"mysqld-nt");
|
2006-10-23 12:02:56 +02:00
|
|
|
|
2008-03-25 09:19:03 +01:00
|
|
|
if ( $opt_debug ){
|
|
|
|
# Put mysqld-debug first in the list of binaries to look for
|
|
|
|
mtr_verbose("Adding mysqld-debug first in list of binaries to look for");
|
|
|
|
unshift(@mysqld_names, "mysqld-debug");
|
|
|
|
}
|
2006-10-23 12:02:56 +02:00
|
|
|
|
2008-03-25 09:19:03 +01:00
|
|
|
return my_find_bin($mysqld_basedir,
|
2008-11-07 16:22:53 +01:00
|
|
|
["sql", "libexec", "sbin", "bin"],
|
2008-03-25 09:19:03 +01:00
|
|
|
[@mysqld_names]);
|
2006-10-23 12:02:56 +02:00
|
|
|
}
|
|
|
|
|
2008-03-25 09:19:03 +01:00
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
sub executable_setup () {
|
|
|
|
|
2006-05-03 20:04:57 +02:00
|
|
|
#
|
|
|
|
# Check if libtool is available in this distribution/clone
|
|
|
|
# we need it when valgrinding or debugging non installed binary
|
|
|
|
# Otherwise valgrind will valgrind the libtool wrapper or bash
|
|
|
|
# and gdb will not find the real executable to debug
|
|
|
|
#
|
|
|
|
if ( -x "../libtool")
|
|
|
|
{
|
|
|
|
$exe_libtool= "../libtool";
|
2010-08-04 12:19:18 +02:00
|
|
|
if ($opt_valgrind or $glob_debugger or $opt_strace)
|
2006-05-03 20:04:57 +02:00
|
|
|
{
|
2010-08-04 12:19:18 +02:00
|
|
|
mtr_report("Using \"$exe_libtool\" when running valgrind, strace or debugger");
|
2006-05-03 20:04:57 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-10-04 12:47:32 +02:00
|
|
|
# Look for the client binaries
|
|
|
|
$exe_mysqladmin= mtr_exe_exists("$path_client_bindir/mysqladmin");
|
|
|
|
$exe_mysql= mtr_exe_exists("$path_client_bindir/mysql");
|
2005-06-21 02:21:52 +02:00
|
|
|
|
2008-03-13 17:16:42 +01:00
|
|
|
if ( ! $opt_skip_ndbcluster )
|
2006-10-11 14:50:19 +02:00
|
|
|
{
|
2008-03-13 17:16:42 +01:00
|
|
|
$exe_ndbd=
|
|
|
|
my_find_bin($basedir,
|
2009-01-08 20:03:56 +01:00
|
|
|
["storage/ndb/src/kernel", "libexec", "sbin", "bin"],
|
2008-03-13 17:16:42 +01:00
|
|
|
"ndbd");
|
2006-10-23 12:02:56 +02:00
|
|
|
|
2008-03-13 17:16:42 +01:00
|
|
|
$exe_ndb_mgmd=
|
|
|
|
my_find_bin($basedir,
|
2009-01-08 20:03:56 +01:00
|
|
|
["storage/ndb/src/mgmsrv", "libexec", "sbin", "bin"],
|
2008-03-13 17:16:42 +01:00
|
|
|
"ndb_mgmd");
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-03-13 17:16:42 +01:00
|
|
|
$exe_ndb_waiter=
|
|
|
|
my_find_bin($basedir,
|
|
|
|
["storage/ndb/tools/", "bin"],
|
|
|
|
"ndb_waiter");
|
2005-02-08 06:11:05 +01:00
|
|
|
|
2007-02-23 12:13:55 +01:00
|
|
|
}
|
2006-12-15 00:09:56 +01:00
|
|
|
|
2006-10-04 12:47:32 +02:00
|
|
|
# Look for mysqltest executable
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( $opt_embedded_server )
|
2005-06-10 21:29:37 +02:00
|
|
|
{
|
2006-10-04 12:47:32 +02:00
|
|
|
$exe_mysqltest=
|
2010-06-10 11:11:52 +02:00
|
|
|
mtr_exe_exists("$basedir/libmysqld/examples$opt_vs_config/mysqltest_embedded",
|
2006-11-02 21:05:20 +01:00
|
|
|
"$path_client_bindir/mysqltest_embedded");
|
2005-06-10 21:29:37 +02:00
|
|
|
}
|
2006-10-04 12:47:32 +02:00
|
|
|
else
|
|
|
|
{
|
2006-11-13 13:39:49 +01:00
|
|
|
$exe_mysqltest= mtr_exe_exists("$path_client_bindir/mysqltest");
|
2006-10-04 12:47:32 +02:00
|
|
|
}
|
2005-02-08 06:11:05 +01:00
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub client_debug_arg($$) {
|
|
|
|
my ($args, $client_name)= @_;
|
|
|
|
|
|
|
|
if ( $opt_debug ) {
|
|
|
|
mtr_add_arg($args,
|
|
|
|
"--debug=d:t:A,%s/log/%s.trace",
|
|
|
|
$path_vardir_trace, $client_name)
|
|
|
|
}
|
2006-08-16 10:30:22 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub mysql_fix_arguments () {
|
2005-01-11 01:35:08 +01:00
|
|
|
|
2008-02-20 14:55:30 +01:00
|
|
|
return "" if ( IS_WINDOWS );
|
2006-10-25 14:34:18 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $exe=
|
|
|
|
mtr_script_exists("$basedir/scripts/mysql_fix_privilege_tables",
|
|
|
|
"$path_client_bindir/mysql_fix_privilege_tables");
|
2006-10-25 14:34:18 +02:00
|
|
|
my $args;
|
|
|
|
mtr_init_args(\$args);
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
2006-10-25 14:34:18 +02:00
|
|
|
|
2009-02-04 10:49:52 +01:00
|
|
|
mtr_add_arg($args, "--basedir=%s", $basedir);
|
|
|
|
mtr_add_arg($args, "--bindir=%s", $path_client_bindir);
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_add_arg($args, "--verbose");
|
2010-08-09 19:05:42 +02:00
|
|
|
mtr_add_arg($args, "--sync-sys=0"); # Speed up test suite
|
2007-12-12 18:19:24 +01:00
|
|
|
return mtr_args2str($exe, @$args);
|
|
|
|
}
|
2006-10-25 14:34:18 +02:00
|
|
|
|
|
|
|
|
2009-04-09 01:42:51 +02:00
|
|
|
sub client_arguments ($;$) {
|
2007-12-12 18:19:24 +01:00
|
|
|
my $client_name= shift;
|
2009-04-09 01:42:51 +02:00
|
|
|
my $group_suffix= shift;
|
2007-12-12 18:19:24 +01:00
|
|
|
my $client_exe= mtr_exe_exists("$path_client_bindir/$client_name");
|
2006-10-25 14:34:18 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $args;
|
|
|
|
mtr_init_args(\$args);
|
|
|
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
2009-04-09 01:42:51 +02:00
|
|
|
if (defined($group_suffix)) {
|
|
|
|
mtr_add_arg($args, "--defaults-group-suffix=%s", $group_suffix);
|
|
|
|
client_debug_arg($args, "$client_name-$group_suffix");
|
|
|
|
}
|
|
|
|
else
|
2006-10-25 14:34:18 +02:00
|
|
|
{
|
2009-04-09 01:42:51 +02:00
|
|
|
client_debug_arg($args, $client_name);
|
2006-10-25 14:34:18 +02:00
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
return mtr_args2str($client_exe, @$args);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2009-02-12 15:08:56 +01:00
|
|
|
sub mysqlbinlog_arguments () {
|
|
|
|
my $exe= mtr_exe_exists("$path_client_bindir/mysqlbinlog");
|
|
|
|
|
|
|
|
my $args;
|
|
|
|
mtr_init_args(\$args);
|
|
|
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
|
|
|
mtr_add_arg($args, "--local-load=%s", $opt_tmpdir);
|
|
|
|
client_debug_arg($args, "mysqlbinlog");
|
|
|
|
return mtr_args2str($exe, @$args);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub mysqlslap_arguments () {
|
|
|
|
my $exe= mtr_exe_maybe_exists("$path_client_bindir/mysqlslap");
|
|
|
|
if ( $exe eq "" ) {
|
|
|
|
# mysqlap was not found
|
|
|
|
|
|
|
|
if (defined $mysql_version_id and $mysql_version_id >= 50100 ) {
|
|
|
|
mtr_error("Could not find the mysqlslap binary");
|
|
|
|
}
|
|
|
|
return ""; # Don't care about mysqlslap
|
2006-10-25 14:34:18 +02:00
|
|
|
}
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $args;
|
|
|
|
mtr_init_args(\$args);
|
|
|
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
|
|
|
client_debug_arg($args, "mysqlslap");
|
|
|
|
return mtr_args2str($exe, @$args);
|
2006-10-25 14:34:18 +02:00
|
|
|
}
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
|
|
|
|
sub mysqldump_arguments ($) {
|
|
|
|
my($group_suffix) = @_;
|
|
|
|
my $exe= mtr_exe_exists("$path_client_bindir/mysqldump");
|
2006-11-13 13:39:49 +01:00
|
|
|
|
|
|
|
my $args;
|
|
|
|
mtr_init_args(\$args);
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
2008-04-08 11:02:06 +02:00
|
|
|
mtr_add_arg($args, "--defaults-group-suffix=%s", $group_suffix);
|
2007-12-12 18:19:24 +01:00
|
|
|
client_debug_arg($args, "mysqldump-$group_suffix");
|
|
|
|
return mtr_args2str($exe, @$args);
|
|
|
|
}
|
2006-11-13 13:39:49 +01:00
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub mysql_client_test_arguments(){
|
|
|
|
my $exe;
|
|
|
|
# mysql_client_test executable may _not_ exist
|
|
|
|
if ( $opt_embedded_server ) {
|
|
|
|
$exe= mtr_exe_maybe_exists(
|
2010-06-10 11:11:52 +02:00
|
|
|
"$basedir/libmysqld/examples$opt_vs_config/mysql_client_test_embedded",
|
2008-09-15 12:13:47 +02:00
|
|
|
"$basedir/bin/mysql_client_test_embedded");
|
2007-12-12 18:19:24 +01:00
|
|
|
} else {
|
2010-06-10 11:11:52 +02:00
|
|
|
$exe= mtr_exe_maybe_exists("$basedir/tests$opt_vs_config/mysql_client_test",
|
2007-12-12 18:19:24 +01:00
|
|
|
"$basedir/bin/mysql_client_test");
|
|
|
|
}
|
|
|
|
|
|
|
|
my $args;
|
|
|
|
mtr_init_args(\$args);
|
|
|
|
if ( $opt_valgrind_mysqltest ) {
|
|
|
|
valgrind_arguments($args, \$exe);
|
2006-11-13 13:39:49 +01:00
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
|
|
|
mtr_add_arg($args, "--testcase");
|
|
|
|
mtr_add_arg($args, "--vardir=$opt_vardir");
|
|
|
|
client_debug_arg($args,"mysql_client_test");
|
2006-11-13 13:39:49 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
return mtr_args2str($exe, @$args);
|
2006-11-13 13:39:49 +01:00
|
|
|
}
|
|
|
|
|
2009-02-12 15:08:56 +01:00
|
|
|
sub tool_arguments ($$) {
|
|
|
|
my($sedir, $tool_name) = @_;
|
|
|
|
my $exe= my_find_bin($basedir,
|
|
|
|
[$sedir, "bin"],
|
|
|
|
$tool_name);
|
2005-01-11 01:35:08 +01:00
|
|
|
|
2009-02-12 15:08:56 +01:00
|
|
|
my $args;
|
|
|
|
mtr_init_args(\$args);
|
|
|
|
client_debug_arg($args, $tool_name);
|
|
|
|
return mtr_args2str($exe, @$args);
|
|
|
|
}
|
2005-01-11 01:35:08 +01:00
|
|
|
|
2009-09-03 15:05:02 +02:00
|
|
|
# This is not used to actually start a mysqld server, just to allow test
|
|
|
|
# scripts to run the mysqld binary to test invalid server startup options.
|
|
|
|
sub mysqld_client_arguments () {
|
|
|
|
my $default_mysqld= default_mysqld();
|
|
|
|
my $exe = find_mysqld($basedir);
|
|
|
|
my $args;
|
|
|
|
mtr_init_args(\$args);
|
|
|
|
mtr_add_arg($args, "--no-defaults");
|
|
|
|
mtr_add_arg($args, "--basedir=%s", $basedir);
|
|
|
|
mtr_add_arg($args, "--character-sets-dir=%s", $default_mysqld->value("character-sets-dir"));
|
|
|
|
mtr_add_arg($args, "--language=%s", $default_mysqld->value("language"));
|
|
|
|
return mtr_args2str($exe, @$args);
|
|
|
|
}
|
|
|
|
|
handlerton cleanup:
duplicate fields removed, st_mysql_storage_engine added to support
run-time handlerton initialization (no compiler warnings), handler API
is now tied to MySQL version, handlerton->plugin mapping added
(slot-based), dummy default_hton removed, plugin-type-specific
initialization generalized, built-in plugins are now initialized too,
--default-storage-engine no longer needs a list of storage engines
in handle_options().
mysql-test-run.pl bugfixes
include/mysql/plugin.h:
added st_mysql_storage_engine
made handlerton tied to MySQL version
mysql-test/mysql-test-run.pl:
bugfixes (umask, --no-defaults)
mysql-test/r/ndb_dd_basic.result:
update error message
mysql-test/t/partition_mgm_err2.test:
fix typo
sql/ha_berkeley.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_berkeley.h:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_federated.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_heap.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_innodb.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_innodb.h:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_myisam.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_myisammrg.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_ndbcluster.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_ndbcluster.h:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_ndbcluster_binlog.cc:
no 'name' in the handlerton anymore
sql/ha_partition.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/handler.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
handlerton->plugin mapping
sql/handler.h:
handlerton cleanup: remove duplicate fields
sql/log.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/mysql_priv.h:
handler.h needs plugin.h
sql/mysqld.cc:
Convert --default-storage-engine to a handlerton* when
all storage engines are initialized and not in getopt
sql/set_var.cc:
no name in the handlerton anymore
sql/sql_parse.cc:
no default_hton anymore
sql/sql_partition.cc:
no name in the handlerton anymore
sql/sql_plugin.cc:
generalize plugin type-specific initialization.
initialize built-in plugins too
sql/sql_plugin.h:
generalize plugin type-specific initialization.
sql/sql_show.cc:
st_mysql_storage_engine structure
no name in the handlerton anymore
sql/sql_table.cc:
no name in the handlerton anymore
no default_hton anymore
sql/sql_tablespace.cc:
no name in the handlerton anymore
no default_hton anymore
sql/sql_yacc.yy:
no default_hton anymore
issue "unknown storage engine" warning where it is discovered
storage/archive/ha_archive.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
storage/archive/ha_archive.h:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
storage/blackhole/ha_blackhole.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
storage/csv/ha_tina.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
storage/example/ha_example.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
2006-05-28 14:51:01 +02:00
|
|
|
|
2009-02-12 15:08:56 +01:00
|
|
|
sub have_maria_support () {
|
|
|
|
my $maria_var= $mysqld_variables{'maria'};
|
|
|
|
return defined $maria_var and $maria_var eq 'TRUE';
|
|
|
|
}
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
#
|
|
|
|
# Set environment to be used by childs of this process for
|
|
|
|
# things that are constant during the whole lifetime of mysql-test-run
|
|
|
|
#
|
|
|
|
sub environment_setup {
|
2005-01-11 01:35:08 +01:00
|
|
|
|
handlerton cleanup:
duplicate fields removed, st_mysql_storage_engine added to support
run-time handlerton initialization (no compiler warnings), handler API
is now tied to MySQL version, handlerton->plugin mapping added
(slot-based), dummy default_hton removed, plugin-type-specific
initialization generalized, built-in plugins are now initialized too,
--default-storage-engine no longer needs a list of storage engines
in handle_options().
mysql-test-run.pl bugfixes
include/mysql/plugin.h:
added st_mysql_storage_engine
made handlerton tied to MySQL version
mysql-test/mysql-test-run.pl:
bugfixes (umask, --no-defaults)
mysql-test/r/ndb_dd_basic.result:
update error message
mysql-test/t/partition_mgm_err2.test:
fix typo
sql/ha_berkeley.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_berkeley.h:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_federated.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_heap.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_innodb.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_innodb.h:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_myisam.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_myisammrg.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_ndbcluster.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_ndbcluster.h:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_ndbcluster_binlog.cc:
no 'name' in the handlerton anymore
sql/ha_partition.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/handler.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
handlerton->plugin mapping
sql/handler.h:
handlerton cleanup: remove duplicate fields
sql/log.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/mysql_priv.h:
handler.h needs plugin.h
sql/mysqld.cc:
Convert --default-storage-engine to a handlerton* when
all storage engines are initialized and not in getopt
sql/set_var.cc:
no name in the handlerton anymore
sql/sql_parse.cc:
no default_hton anymore
sql/sql_partition.cc:
no name in the handlerton anymore
sql/sql_plugin.cc:
generalize plugin type-specific initialization.
initialize built-in plugins too
sql/sql_plugin.h:
generalize plugin type-specific initialization.
sql/sql_show.cc:
st_mysql_storage_engine structure
no name in the handlerton anymore
sql/sql_table.cc:
no name in the handlerton anymore
no default_hton anymore
sql/sql_tablespace.cc:
no name in the handlerton anymore
no default_hton anymore
sql/sql_yacc.yy:
no default_hton anymore
issue "unknown storage engine" warning where it is discovered
storage/archive/ha_archive.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
storage/archive/ha_archive.h:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
storage/blackhole/ha_blackhole.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
storage/csv/ha_tina.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
storage/example/ha_example.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
2006-05-28 14:51:01 +02:00
|
|
|
umask(022);
|
|
|
|
|
2006-09-27 13:42:16 +02:00
|
|
|
my @ld_library_paths;
|
2006-08-16 15:25:30 +02:00
|
|
|
|
2008-03-03 12:47:05 +01:00
|
|
|
if ($path_client_libdir)
|
2005-06-21 02:21:52 +02:00
|
|
|
{
|
2008-03-03 12:47:05 +01:00
|
|
|
# Use the --client-libdir passed on commandline
|
|
|
|
push(@ld_library_paths, "$path_client_libdir");
|
2006-08-16 15:25:30 +02:00
|
|
|
}
|
|
|
|
else
|
2005-06-21 02:21:52 +02:00
|
|
|
{
|
2008-03-03 12:47:05 +01:00
|
|
|
# Setup LD_LIBRARY_PATH so the libraries from this distro/clone
|
|
|
|
# are used in favor of the system installed ones
|
|
|
|
if ( $source_dist )
|
|
|
|
{
|
2008-03-03 12:53:57 +01:00
|
|
|
push(@ld_library_paths, "$basedir/libmysql/.libs/",
|
|
|
|
"$basedir/libmysql_r/.libs/",
|
2010-01-22 14:12:17 +01:00
|
|
|
"$basedir/zlib/.libs/");
|
2008-03-03 12:47:05 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2010-01-22 14:12:17 +01:00
|
|
|
push(@ld_library_paths, "$basedir/lib", "$basedir/lib/mysql");
|
2008-03-03 12:47:05 +01:00
|
|
|
}
|
2006-09-27 13:56:32 +02:00
|
|
|
}
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# --------------------------------------------------------------------------
|
2006-09-27 13:56:32 +02:00
|
|
|
# Add the path where libndbclient can be found
|
|
|
|
# --------------------------------------------------------------------------
|
2008-03-10 16:38:28 +01:00
|
|
|
if ( !$opt_skip_ndbcluster )
|
2006-09-27 13:56:32 +02:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
push(@ld_library_paths, "$basedir/storage/ndb/src/.libs");
|
2005-06-21 02:21:52 +02:00
|
|
|
}
|
2005-01-11 01:35:08 +01:00
|
|
|
|
2006-09-01 15:14:50 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2006-09-27 13:56:32 +02:00
|
|
|
# Valgrind need to be run with debug libraries otherwise it's almost
|
2006-09-27 13:42:16 +02:00
|
|
|
# impossible to add correct supressions, that means if "/usr/lib/debug"
|
|
|
|
# is available, it should be added to
|
|
|
|
# LD_LIBRARY_PATH
|
2006-11-24 12:38:39 +01:00
|
|
|
#
|
|
|
|
# But pthread is broken in libc6-dbg on Debian <= 3.1 (see Debian
|
|
|
|
# bug 399035, http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=399035),
|
|
|
|
# so don't change LD_LIBRARY_PATH on that platform.
|
2006-09-01 15:14:50 +02:00
|
|
|
# --------------------------------------------------------------------------
|
2006-09-27 13:42:16 +02:00
|
|
|
my $debug_libraries_path= "/usr/lib/debug";
|
2006-11-24 12:38:39 +01:00
|
|
|
my $deb_version;
|
|
|
|
if ( $opt_valgrind and -d $debug_libraries_path and
|
|
|
|
(! -e '/etc/debian_version' or
|
2007-12-12 18:19:24 +01:00
|
|
|
($deb_version=
|
|
|
|
mtr_grab_file('/etc/debian_version')) !~ /^[0-9]+\.[0-9]$/ or
|
2006-11-24 12:38:39 +01:00
|
|
|
$deb_version > 3.1 ) )
|
2006-09-08 15:55:11 +02:00
|
|
|
{
|
2006-09-27 13:42:16 +02:00
|
|
|
push(@ld_library_paths, $debug_libraries_path);
|
2006-09-08 15:55:11 +02:00
|
|
|
}
|
2006-09-01 15:14:50 +02:00
|
|
|
|
2006-09-27 13:42:16 +02:00
|
|
|
$ENV{'LD_LIBRARY_PATH'}= join(":", @ld_library_paths,
|
2007-02-23 12:13:55 +01:00
|
|
|
$ENV{'LD_LIBRARY_PATH'} ?
|
2006-10-11 14:50:19 +02:00
|
|
|
split(':', $ENV{'LD_LIBRARY_PATH'}) : ());
|
2006-09-27 13:42:16 +02:00
|
|
|
mtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
|
|
|
|
|
|
|
|
$ENV{'DYLD_LIBRARY_PATH'}= join(":", @ld_library_paths,
|
2006-10-11 14:50:19 +02:00
|
|
|
$ENV{'DYLD_LIBRARY_PATH'} ?
|
|
|
|
split(':', $ENV{'DYLD_LIBRARY_PATH'}) : ());
|
2006-09-27 13:42:16 +02:00
|
|
|
mtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
|
2006-03-10 10:41:04 +01:00
|
|
|
|
2007-05-31 14:22:21 +02:00
|
|
|
# The environment variable used for shared libs on AIX
|
|
|
|
$ENV{'SHLIB_PATH'}= join(":", @ld_library_paths,
|
|
|
|
$ENV{'SHLIB_PATH'} ?
|
|
|
|
split(':', $ENV{'SHLIB_PATH'}) : ());
|
|
|
|
mtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
|
|
|
|
|
|
|
|
# The environment variable used for shared libs on hp-ux
|
|
|
|
$ENV{'LIBPATH'}= join(":", @ld_library_paths,
|
|
|
|
$ENV{'LIBPATH'} ?
|
|
|
|
split(':', $ENV{'LIBPATH'}) : ());
|
|
|
|
mtr_debug("LIBPATH: $ENV{'LIBPATH'}");
|
2006-03-10 10:41:04 +01:00
|
|
|
|
2006-08-16 10:30:22 +02:00
|
|
|
$ENV{'CHARSETSDIR'}= $path_charsetsdir;
|
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
|
|
|
$ENV{'UMASK'}= "0660"; # The octal *string*
|
|
|
|
$ENV{'UMASK_DIR'}= "0770"; # The octal *string*
|
2007-12-12 18:19:24 +01:00
|
|
|
|
2007-05-23 14:32:40 +02:00
|
|
|
#
|
|
|
|
# MySQL tests can produce output in various character sets
|
|
|
|
# (especially, ctype_xxx.test). To avoid confusing Perl
|
|
|
|
# with output which is incompatible with the current locale
|
|
|
|
# settings, we reset the current values of LC_ALL and LC_CTYPE to "C".
|
|
|
|
# For details, please see
|
|
|
|
# Bug#27636 tests fails if LC_* variables set to *_*.UTF-8
|
|
|
|
#
|
|
|
|
$ENV{'LC_ALL'}= "C";
|
|
|
|
$ENV{'LC_CTYPE'}= "C";
|
2007-12-12 18:19:24 +01:00
|
|
|
|
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
|
|
|
$ENV{'LC_COLLATE'}= "C";
|
2007-12-12 18:19:24 +01:00
|
|
|
$ENV{'USE_RUNNING_SERVER'}= using_extern();
|
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
|
|
|
$ENV{'MYSQL_TEST_DIR'}= $glob_mysql_test_dir;
|
2007-12-12 18:19:24 +01:00
|
|
|
$ENV{'DEFAULT_MASTER_PORT'}= $mysqld_variables{'master-port'} || 3306;
|
2006-02-26 19:54:09 +01:00
|
|
|
$ENV{'MYSQL_TMP_DIR'}= $opt_tmpdir;
|
2008-09-05 14:09:39 +02:00
|
|
|
$ENV{'MYSQLTEST_VARDIR'}= $opt_vardir;
|
2006-10-03 16:42:59 +02:00
|
|
|
|
2009-10-05 15:22:23 +02:00
|
|
|
#
|
|
|
|
# Some stupid^H^H^H^H^H^Hignorant network providers set up "wildcard DNS"
|
|
|
|
# servers that return some given web server address for any lookup of a
|
|
|
|
# non-existent host name. This confuses test cases that want to test the
|
|
|
|
# behaviour when connecting to a non-existing host, so we need to be able
|
|
|
|
# to disable those tests when DNS is broken.
|
|
|
|
#
|
|
|
|
$ENV{HAVE_BROKEN_DNS}= defined(gethostbyname('invalid_hostname'));
|
|
|
|
|
2006-08-16 10:30:22 +02:00
|
|
|
# ----------------------------------------------------
|
|
|
|
# Setup env for NDB
|
|
|
|
# ----------------------------------------------------
|
2006-10-11 14:50:19 +02:00
|
|
|
if ( ! $opt_skip_ndbcluster )
|
|
|
|
{
|
2008-03-13 17:16:42 +01:00
|
|
|
$ENV{'NDB_MGM'}=
|
|
|
|
my_find_bin($basedir,
|
|
|
|
["storage/ndb/src/mgmclient", "bin"],
|
|
|
|
"ndb_mgm");
|
2006-01-17 10:48:47 +01:00
|
|
|
|
2008-03-13 17:16:42 +01:00
|
|
|
$ENV{'NDB_TOOLS_DIR'}=
|
|
|
|
my_find_dir($basedir,
|
|
|
|
["storage/ndb/tools", "bin"]);
|
2006-01-17 10:48:47 +01:00
|
|
|
|
2008-03-13 17:16:42 +01:00
|
|
|
$ENV{'NDB_EXAMPLES_DIR'}=
|
|
|
|
my_find_dir($basedir,
|
|
|
|
["storage/ndb/ndbapi-examples", "bin"]);
|
2006-08-16 10:30:22 +02:00
|
|
|
|
2008-03-13 17:16:42 +01:00
|
|
|
$ENV{'NDB_EXAMPLES_BINARY'}=
|
|
|
|
my_find_bin($basedir,
|
|
|
|
["storage/ndb/ndbapi-examples/ndbapi_simple", "bin"],
|
|
|
|
"ndbapi_simple", NOT_REQUIRED);
|
2006-08-16 10:30:22 +02:00
|
|
|
|
2008-03-13 17:16:42 +01:00
|
|
|
my $path_ndb_testrun_log= "$opt_vardir/log/ndb_testrun.log";
|
|
|
|
$ENV{'NDB_TOOLS_OUTPUT'}= $path_ndb_testrun_log;
|
2006-10-11 14:50:19 +02:00
|
|
|
$ENV{'NDB_EXAMPLES_OUTPUT'}= $path_ndb_testrun_log;
|
|
|
|
}
|
2006-01-17 10:48:47 +01:00
|
|
|
|
2006-08-16 10:30:22 +02:00
|
|
|
# ----------------------------------------------------
|
2007-12-12 18:19:24 +01:00
|
|
|
# mysql clients
|
2006-11-10 13:25:10 +01:00
|
|
|
# ----------------------------------------------------
|
2007-12-12 18:19:24 +01:00
|
|
|
$ENV{'MYSQL_CHECK'}= client_arguments("mysqlcheck");
|
|
|
|
$ENV{'MYSQL_DUMP'}= mysqldump_arguments(".1");
|
|
|
|
$ENV{'MYSQL_DUMP_SLAVE'}= mysqldump_arguments(".2");
|
|
|
|
$ENV{'MYSQL_SLAP'}= mysqlslap_arguments();
|
|
|
|
$ENV{'MYSQL_IMPORT'}= client_arguments("mysqlimport");
|
|
|
|
$ENV{'MYSQL_SHOW'}= client_arguments("mysqlshow");
|
2009-02-12 15:08:56 +01:00
|
|
|
$ENV{'MYSQL_BINLOG'}= mysqlbinlog_arguments();
|
2007-12-12 18:19:24 +01:00
|
|
|
$ENV{'MYSQL'}= client_arguments("mysql");
|
2009-04-09 01:42:51 +02:00
|
|
|
$ENV{'MYSQL_SLAVE'}= client_arguments("mysql", ".2");
|
2007-12-12 18:19:24 +01:00
|
|
|
$ENV{'MYSQL_UPGRADE'}= client_arguments("mysql_upgrade");
|
2008-02-20 14:55:30 +01:00
|
|
|
$ENV{'MYSQLADMIN'}= native_path($exe_mysqladmin);
|
2007-12-12 18:19:24 +01:00
|
|
|
$ENV{'MYSQL_CLIENT_TEST'}= mysql_client_test_arguments();
|
|
|
|
$ENV{'MYSQL_FIX_SYSTEM_TABLES'}= mysql_fix_arguments();
|
2009-09-03 15:05:02 +02:00
|
|
|
$ENV{'MYSQLD'}= mysqld_client_arguments();
|
2007-12-12 18:19:24 +01:00
|
|
|
$ENV{'EXE_MYSQL'}= $exe_mysql;
|
2006-08-16 10:43:08 +02:00
|
|
|
|
|
|
|
# ----------------------------------------------------
|
2007-12-12 18:19:24 +01:00
|
|
|
# bug25714 executable may _not_ exist in
|
|
|
|
# some versions, test using it should be skipped
|
2006-08-16 10:43:08 +02:00
|
|
|
# ----------------------------------------------------
|
2007-12-12 18:19:24 +01:00
|
|
|
my $exe_bug25714=
|
2010-06-10 11:11:52 +02:00
|
|
|
mtr_exe_maybe_exists("$basedir/tests$opt_vs_config/bug25714");
|
2008-02-20 14:55:30 +01:00
|
|
|
$ENV{'MYSQL_BUG25714'}= native_path($exe_bug25714);
|
2006-08-16 10:43:08 +02:00
|
|
|
|
2006-08-16 10:30:22 +02:00
|
|
|
# ----------------------------------------------------
|
2007-12-12 18:19:24 +01:00
|
|
|
# mysql_fix_privilege_tables.sql
|
2006-08-16 10:30:22 +02:00
|
|
|
# ----------------------------------------------------
|
2007-12-12 18:19:24 +01:00
|
|
|
my $file_mysql_fix_privilege_tables=
|
|
|
|
mtr_file_exists("$basedir/scripts/mysql_fix_privilege_tables.sql",
|
2008-08-04 07:04:47 +02:00
|
|
|
"$basedir/share/mysql_fix_privilege_tables.sql",
|
2009-10-08 00:57:43 +02:00
|
|
|
"$basedir/share/mariadb/mysql_fix_privilege_tables.sql",
|
2008-08-04 07:04:47 +02:00
|
|
|
"$basedir/share/mysql/mysql_fix_privilege_tables.sql");
|
2007-04-04 15:40:40 +02:00
|
|
|
$ENV{'MYSQL_FIX_PRIVILEGE_TABLES'}= $file_mysql_fix_privilege_tables;
|
2006-08-16 10:30:22 +02:00
|
|
|
|
2006-12-15 00:09:56 +01:00
|
|
|
# ----------------------------------------------------
|
2007-12-12 18:19:24 +01:00
|
|
|
# my_print_defaults
|
2006-12-15 00:09:56 +01:00
|
|
|
# ----------------------------------------------------
|
2007-12-12 18:19:24 +01:00
|
|
|
my $exe_my_print_defaults=
|
2010-06-10 11:11:52 +02:00
|
|
|
mtr_exe_exists("$basedir/extra$opt_vs_config/my_print_defaults",
|
|
|
|
"$path_client_bindir/my_print_defaults");
|
2008-02-20 14:55:30 +01:00
|
|
|
$ENV{'MYSQL_MY_PRINT_DEFAULTS'}= native_path($exe_my_print_defaults);
|
2006-08-16 10:30:22 +02:00
|
|
|
|
2007-11-07 09:55:28 +01:00
|
|
|
# ----------------------------------------------------
|
2009-02-12 15:08:56 +01:00
|
|
|
# myisam tools
|
2007-11-07 09:55:28 +01:00
|
|
|
# ----------------------------------------------------
|
2009-02-12 15:08:56 +01:00
|
|
|
$ENV{'MYISAMLOG'}= tool_arguments("storage/myisam", "myisamlog", );
|
|
|
|
$ENV{'MYISAMCHK'}= tool_arguments("storage/myisam", "myisamchk");
|
|
|
|
$ENV{'MYISAMPACK'}= tool_arguments("storage/myisam", "myisampack");
|
|
|
|
$ENV{'MYISAM_FTDUMP'}= tool_arguments("storage/myisam", "myisam_ftdump");
|
2006-10-04 12:47:32 +02:00
|
|
|
|
Fix for BUG#35441 "Cannot change PAGE_CHECKSUM table option".
A big test was written and is committed, which found 3 bugs in total:
- ALTER TABLE PAGE_CHECKSUM=0 sometimes had no effect
- ALTER TABLE ENGINE=MARIA sometimes changed page checksumming in
the table
- SHOW CREATE TABLE and 'maria_chk -dv' disagreed on the presence
of page checksumming.
They are all fixed here. Side-effect is that SHOW CREATE TABLE now
always prints a PAGE_CHECKSUM clause for Maria tables.
mysql-test/mysql-test-run.pl:
allow calling maria_chk and maria_pack in tests
mysql-test/r/maria.result:
PAGE_CHECKSUM=0 is now always printed
mysql-test/t/create.test:
PAGE_CHECKSUM= is now always present in SHOW CREATE TABLE of Maria tables
mysql-test/t/disabled.def:
better bug number
sql/sql_table.cc:
If ALTER TABLE PAGE_CHECKSUM=#, it affects the engine's data (structure
of data pages) so a full table rebuild is needed. We already did
so for ROW_FORMAT=#, following same logic. This fixes disagreements
between SHOW CREATE TABLE and 'maria_chk -dv' regarding the
presence of page checksums after certain ALTER TABLE (as seen
with the attached testcase).
storage/maria/ha_maria.cc:
In ALTER TABLE PAGE_CHECKSUM=0, ha_maria::update_create_info() started
with create_info->page_checksum=HA_CHOICE_NO and wrongly set it
to the table's original setting, which is HA_CHOICE_YES if the table
had page checksums, in which case the ALTER left page checksum
in the table.
The fix for this bug is: only if create_info->page_checksum is
undefined (no clause in the ALTER TABLE, or we are in SHOW CREATE TABLE)
we may set HA_CHOICE_YES.
The second bug in this file was that the code left HA_CHOICE_UNDEF if
the table didn't have page checksums originally, leading ALTER TABLE
ENGINE=MARIA to change the table's page checksum to the value of
maria_page_checksum.
This is fixed by setting create_info->page_checksum to HA_CHOICE_NO
if UNDEF and table does not have page checksum.
The side-effect of this last fix, because ha_maria::update_create_info()
is also called by SHOW CREATE TABLE, is that:
SET GLOBAL maria_page_checksum=0;
CREATE TABLE t(a INT) ENGINE=MARIA;
SHOW CREATE TABLE t;
which used to not show a PAGE_CHECKSUM= clause, now shows PAGE_CHECKSUM=0.
I consider this side-effect good:
- clearer for users: it eliminates the differences between the
above and this:
SET GLOBAL maria_page_checksum=0;
CREATE TABLE t(a INT) ENGINE=MARIA PAGE_CHECKSUM=0;
SHOW CREATE TABLE t;
which already showed PAGE_CHECKSUM=0; difference which is not easy
to explain.
- if using mysqldump to copy from one server to another, it eliminates
the dependency on the value of maria_page_checksum being the same on
original server and new server.
mysql-test/r/maria-page-checksum.result:
Result. If you undo the code fixes and run the test, the new result
file will show bugs at:
error lineno 56 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 73 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 110 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 164 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 181 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 218 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 253 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 307 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 361 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 415 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 488 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 505 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 542 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 577 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 631 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
(lineno is line number in the result file)
mysql-test/t/maria-page-checksum.test:
Test for the 3 bugs
2008-03-20 16:05:23 +01:00
|
|
|
# ----------------------------------------------------
|
2009-02-12 15:08:56 +01:00
|
|
|
# maria tools
|
Fix for BUG#35441 "Cannot change PAGE_CHECKSUM table option".
A big test was written and is committed, which found 3 bugs in total:
- ALTER TABLE PAGE_CHECKSUM=0 sometimes had no effect
- ALTER TABLE ENGINE=MARIA sometimes changed page checksumming in
the table
- SHOW CREATE TABLE and 'maria_chk -dv' disagreed on the presence
of page checksumming.
They are all fixed here. Side-effect is that SHOW CREATE TABLE now
always prints a PAGE_CHECKSUM clause for Maria tables.
mysql-test/mysql-test-run.pl:
allow calling maria_chk and maria_pack in tests
mysql-test/r/maria.result:
PAGE_CHECKSUM=0 is now always printed
mysql-test/t/create.test:
PAGE_CHECKSUM= is now always present in SHOW CREATE TABLE of Maria tables
mysql-test/t/disabled.def:
better bug number
sql/sql_table.cc:
If ALTER TABLE PAGE_CHECKSUM=#, it affects the engine's data (structure
of data pages) so a full table rebuild is needed. We already did
so for ROW_FORMAT=#, following same logic. This fixes disagreements
between SHOW CREATE TABLE and 'maria_chk -dv' regarding the
presence of page checksums after certain ALTER TABLE (as seen
with the attached testcase).
storage/maria/ha_maria.cc:
In ALTER TABLE PAGE_CHECKSUM=0, ha_maria::update_create_info() started
with create_info->page_checksum=HA_CHOICE_NO and wrongly set it
to the table's original setting, which is HA_CHOICE_YES if the table
had page checksums, in which case the ALTER left page checksum
in the table.
The fix for this bug is: only if create_info->page_checksum is
undefined (no clause in the ALTER TABLE, or we are in SHOW CREATE TABLE)
we may set HA_CHOICE_YES.
The second bug in this file was that the code left HA_CHOICE_UNDEF if
the table didn't have page checksums originally, leading ALTER TABLE
ENGINE=MARIA to change the table's page checksum to the value of
maria_page_checksum.
This is fixed by setting create_info->page_checksum to HA_CHOICE_NO
if UNDEF and table does not have page checksum.
The side-effect of this last fix, because ha_maria::update_create_info()
is also called by SHOW CREATE TABLE, is that:
SET GLOBAL maria_page_checksum=0;
CREATE TABLE t(a INT) ENGINE=MARIA;
SHOW CREATE TABLE t;
which used to not show a PAGE_CHECKSUM= clause, now shows PAGE_CHECKSUM=0.
I consider this side-effect good:
- clearer for users: it eliminates the differences between the
above and this:
SET GLOBAL maria_page_checksum=0;
CREATE TABLE t(a INT) ENGINE=MARIA PAGE_CHECKSUM=0;
SHOW CREATE TABLE t;
which already showed PAGE_CHECKSUM=0; difference which is not easy
to explain.
- if using mysqldump to copy from one server to another, it eliminates
the dependency on the value of maria_page_checksum being the same on
original server and new server.
mysql-test/r/maria-page-checksum.result:
Result. If you undo the code fixes and run the test, the new result
file will show bugs at:
error lineno 56 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 73 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 110 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 164 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 181 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 218 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 253 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 307 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 361 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 415 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 488 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 505 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 542 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 577 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 631 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
(lineno is line number in the result file)
mysql-test/t/maria-page-checksum.test:
Test for the 3 bugs
2008-03-20 16:05:23 +01:00
|
|
|
# ----------------------------------------------------
|
2009-02-12 15:08:56 +01:00
|
|
|
if (have_maria_support())
|
2007-08-21 19:54:11 +02:00
|
|
|
{
|
2009-02-12 15:08:56 +01:00
|
|
|
$ENV{'MARIA_CHK'}= tool_arguments("storage/maria", "maria_chk");
|
|
|
|
$ENV{'MARIA_PACK'}= tool_arguments("storage/maria", "maria_pack");
|
2007-08-21 19:54:11 +02:00
|
|
|
}
|
Fix for BUG#35441 "Cannot change PAGE_CHECKSUM table option".
A big test was written and is committed, which found 3 bugs in total:
- ALTER TABLE PAGE_CHECKSUM=0 sometimes had no effect
- ALTER TABLE ENGINE=MARIA sometimes changed page checksumming in
the table
- SHOW CREATE TABLE and 'maria_chk -dv' disagreed on the presence
of page checksumming.
They are all fixed here. Side-effect is that SHOW CREATE TABLE now
always prints a PAGE_CHECKSUM clause for Maria tables.
mysql-test/mysql-test-run.pl:
allow calling maria_chk and maria_pack in tests
mysql-test/r/maria.result:
PAGE_CHECKSUM=0 is now always printed
mysql-test/t/create.test:
PAGE_CHECKSUM= is now always present in SHOW CREATE TABLE of Maria tables
mysql-test/t/disabled.def:
better bug number
sql/sql_table.cc:
If ALTER TABLE PAGE_CHECKSUM=#, it affects the engine's data (structure
of data pages) so a full table rebuild is needed. We already did
so for ROW_FORMAT=#, following same logic. This fixes disagreements
between SHOW CREATE TABLE and 'maria_chk -dv' regarding the
presence of page checksums after certain ALTER TABLE (as seen
with the attached testcase).
storage/maria/ha_maria.cc:
In ALTER TABLE PAGE_CHECKSUM=0, ha_maria::update_create_info() started
with create_info->page_checksum=HA_CHOICE_NO and wrongly set it
to the table's original setting, which is HA_CHOICE_YES if the table
had page checksums, in which case the ALTER left page checksum
in the table.
The fix for this bug is: only if create_info->page_checksum is
undefined (no clause in the ALTER TABLE, or we are in SHOW CREATE TABLE)
we may set HA_CHOICE_YES.
The second bug in this file was that the code left HA_CHOICE_UNDEF if
the table didn't have page checksums originally, leading ALTER TABLE
ENGINE=MARIA to change the table's page checksum to the value of
maria_page_checksum.
This is fixed by setting create_info->page_checksum to HA_CHOICE_NO
if UNDEF and table does not have page checksum.
The side-effect of this last fix, because ha_maria::update_create_info()
is also called by SHOW CREATE TABLE, is that:
SET GLOBAL maria_page_checksum=0;
CREATE TABLE t(a INT) ENGINE=MARIA;
SHOW CREATE TABLE t;
which used to not show a PAGE_CHECKSUM= clause, now shows PAGE_CHECKSUM=0.
I consider this side-effect good:
- clearer for users: it eliminates the differences between the
above and this:
SET GLOBAL maria_page_checksum=0;
CREATE TABLE t(a INT) ENGINE=MARIA PAGE_CHECKSUM=0;
SHOW CREATE TABLE t;
which already showed PAGE_CHECKSUM=0; difference which is not easy
to explain.
- if using mysqldump to copy from one server to another, it eliminates
the dependency on the value of maria_page_checksum being the same on
original server and new server.
mysql-test/r/maria-page-checksum.result:
Result. If you undo the code fixes and run the test, the new result
file will show bugs at:
error lineno 56 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 73 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 110 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 164 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 181 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 218 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 253 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 307 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 361 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 415 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 488 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 505 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 542 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 577 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 631 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
(lineno is line number in the result file)
mysql-test/t/maria-page-checksum.test:
Test for the 3 bugs
2008-03-20 16:05:23 +01:00
|
|
|
|
2010-06-03 10:31:26 +02:00
|
|
|
# ----------------------------------------------------
|
|
|
|
# mysqlhotcopy
|
|
|
|
# ----------------------------------------------------
|
|
|
|
my $mysqlhotcopy=
|
|
|
|
mtr_pl_maybe_exists("$basedir/scripts/mysqlhotcopy");
|
|
|
|
# Since mysqltest interprets the real path as "false" in an if,
|
|
|
|
# use 1 ("true") to indicate "not exists" so it can be tested for
|
|
|
|
$ENV{'MYSQLHOTCOPY'}= $mysqlhotcopy || 1;
|
|
|
|
|
2006-10-04 12:47:32 +02:00
|
|
|
# ----------------------------------------------------
|
2007-12-12 18:19:24 +01:00
|
|
|
# perror
|
2006-10-04 12:47:32 +02:00
|
|
|
# ----------------------------------------------------
|
2010-06-10 11:11:52 +02:00
|
|
|
my $exe_perror= mtr_exe_exists("$basedir/extra$opt_vs_config/perror",
|
2007-12-12 18:19:24 +01:00
|
|
|
"$path_client_bindir/perror");
|
2008-02-20 14:55:30 +01:00
|
|
|
$ENV{'MY_PERROR'}= native_path($exe_perror);
|
2006-10-05 20:45:16 +02:00
|
|
|
|
|
|
|
# Create an environment variable to make it possible
|
|
|
|
# to detect that valgrind is being used from test cases
|
|
|
|
$ENV{'VALGRIND_TEST'}= $opt_valgrind;
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-04-13 11:47:28 +02:00
|
|
|
|
2006-11-28 13:57:07 +01:00
|
|
|
#
|
|
|
|
# Remove var and any directories in var/ created by previous
|
|
|
|
# tests
|
|
|
|
#
|
|
|
|
sub remove_stale_vardir () {
|
2006-10-05 14:37:46 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_report("Removing old var directory...");
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2006-11-28 13:57:07 +01:00
|
|
|
# Safety!
|
|
|
|
mtr_error("No, don't remove the vardir when running with --extern")
|
2007-12-12 18:19:24 +01:00
|
|
|
if using_extern();
|
2006-11-28 13:57:07 +01:00
|
|
|
|
|
|
|
mtr_verbose("opt_vardir: $opt_vardir");
|
2006-10-06 16:26:17 +02:00
|
|
|
if ( $opt_vardir eq $default_vardir )
|
2006-01-24 08:30:54 +01:00
|
|
|
{
|
|
|
|
#
|
|
|
|
# Running with "var" in mysql-test dir
|
|
|
|
#
|
2006-10-05 14:37:46 +02:00
|
|
|
if ( -l $opt_vardir)
|
2006-01-24 08:30:54 +01:00
|
|
|
{
|
2006-10-05 14:37:46 +02:00
|
|
|
# var is a symlink
|
2006-11-28 16:22:59 +01:00
|
|
|
|
2008-01-08 10:50:07 +01:00
|
|
|
if ( $opt_mem )
|
2006-10-05 14:37:46 +02:00
|
|
|
{
|
|
|
|
# Remove the directory which the link points at
|
2006-11-28 13:57:07 +01:00
|
|
|
mtr_verbose("Removing " . readlink($opt_vardir));
|
2007-12-12 18:19:24 +01:00
|
|
|
rmtree(readlink($opt_vardir));
|
2006-11-28 15:39:23 +01:00
|
|
|
|
2006-10-18 13:24:06 +02:00
|
|
|
# Remove the "var" symlink
|
2006-11-28 13:57:07 +01:00
|
|
|
mtr_verbose("unlink($opt_vardir)");
|
2006-10-18 13:24:06 +02:00
|
|
|
unlink($opt_vardir);
|
2006-10-05 14:37:46 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
# Some users creates a soft link in mysql-test/var to another area
|
2006-11-28 13:57:07 +01:00
|
|
|
# - allow it, but remove all files in it
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_report(" - WARNING: Using the 'mysql-test/var' symlink");
|
2006-11-28 13:57:07 +01:00
|
|
|
|
2006-11-28 16:22:59 +01:00
|
|
|
# Make sure the directory where it points exist
|
|
|
|
mtr_error("The destination for symlink $opt_vardir does not exist")
|
|
|
|
if ! -d readlink($opt_vardir);
|
|
|
|
|
2006-11-28 13:57:07 +01:00
|
|
|
foreach my $bin ( glob("$opt_vardir/*") )
|
|
|
|
{
|
|
|
|
mtr_verbose("Removing bin $bin");
|
2007-12-12 18:19:24 +01:00
|
|
|
rmtree($bin);
|
2006-11-28 13:57:07 +01:00
|
|
|
}
|
2006-10-05 14:37:46 +02:00
|
|
|
}
|
2006-01-24 08:30:54 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
# Remove the entire "var" dir
|
2006-11-28 13:57:07 +01:00
|
|
|
mtr_verbose("Removing $opt_vardir/");
|
2007-12-12 18:19:24 +01:00
|
|
|
rmtree("$opt_vardir/");
|
2006-01-24 08:30:54 +01:00
|
|
|
}
|
2007-02-28 13:47:41 +01:00
|
|
|
|
|
|
|
if ( $opt_mem )
|
|
|
|
{
|
|
|
|
# A symlink from var/ to $opt_mem will be set up
|
|
|
|
# remove the $opt_mem dir to assure the symlink
|
|
|
|
# won't point at an old directory
|
|
|
|
mtr_verbose("Removing $opt_mem");
|
2007-12-12 18:19:24 +01:00
|
|
|
rmtree($opt_mem);
|
2007-02-28 13:47:41 +01:00
|
|
|
}
|
|
|
|
|
2006-01-24 08:30:54 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
#
|
|
|
|
# Running with "var" in some other place
|
|
|
|
#
|
|
|
|
|
|
|
|
# Remove the var/ dir in mysql-test dir if any
|
|
|
|
# this could be an old symlink that shouldn't be there
|
2006-11-28 13:57:07 +01:00
|
|
|
mtr_verbose("Removing $default_vardir");
|
2007-12-12 18:19:24 +01:00
|
|
|
rmtree($default_vardir);
|
2006-01-24 08:30:54 +01:00
|
|
|
|
|
|
|
# Remove the "var" dir
|
2006-11-28 13:57:07 +01:00
|
|
|
mtr_verbose("Removing $opt_vardir/");
|
2007-12-12 18:19:24 +01:00
|
|
|
rmtree("$opt_vardir/");
|
2006-01-24 08:30:54 +01:00
|
|
|
}
|
2008-12-09 11:52:10 +01:00
|
|
|
# Remove the "tmp" dir
|
|
|
|
mtr_verbose("Removing $opt_tmpdir/");
|
2009-01-23 13:22:05 +01:00
|
|
|
rmtree("$opt_tmpdir/");
|
2006-11-28 13:57:07 +01:00
|
|
|
}
|
|
|
|
|
2010-06-10 11:11:52 +02:00
|
|
|
sub set_plugin_var($) {
|
|
|
|
local $_ = $_[0];
|
|
|
|
s/\.\w+$//;
|
|
|
|
$ENV{"\U${_}_SO"} = $_[0];
|
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
|
2006-11-28 13:57:07 +01:00
|
|
|
#
|
|
|
|
# Create var and the directories needed in var
|
|
|
|
#
|
|
|
|
sub setup_vardir() {
|
2008-04-24 13:02:53 +02:00
|
|
|
mtr_report("Creating var directory '$opt_vardir'...");
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2006-11-28 15:51:52 +01:00
|
|
|
if ( $opt_vardir eq $default_vardir )
|
2006-10-05 14:37:46 +02:00
|
|
|
{
|
2006-11-28 15:51:52 +01:00
|
|
|
#
|
|
|
|
# Running with "var" in mysql-test dir
|
|
|
|
#
|
|
|
|
if ( -l $opt_vardir )
|
|
|
|
{
|
|
|
|
# it's a symlink
|
2006-11-28 13:57:07 +01:00
|
|
|
|
2006-11-28 15:51:52 +01:00
|
|
|
# Make sure the directory where it points exist
|
|
|
|
mtr_error("The destination for symlink $opt_vardir does not exist")
|
|
|
|
if ! -d readlink($opt_vardir);
|
|
|
|
}
|
|
|
|
elsif ( $opt_mem )
|
|
|
|
{
|
|
|
|
# Runinng with "var" as a link to some "memory" location, normally tmpfs
|
|
|
|
mtr_verbose("Creating $opt_mem");
|
|
|
|
mkpath($opt_mem);
|
2006-11-28 13:57:07 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_report(" - symlinking 'var' to '$opt_mem'");
|
2006-11-28 15:51:52 +01:00
|
|
|
symlink($opt_mem, $opt_vardir);
|
|
|
|
}
|
2006-10-05 14:37:46 +02:00
|
|
|
}
|
|
|
|
|
2006-11-28 23:06:06 +01:00
|
|
|
if ( ! -d $opt_vardir )
|
|
|
|
{
|
|
|
|
mtr_verbose("Creating $opt_vardir");
|
|
|
|
mkpath($opt_vardir);
|
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2006-11-28 23:06:06 +01:00
|
|
|
# Ensure a proper error message if vardir couldn't be created
|
|
|
|
unless ( -d $opt_vardir and -w $opt_vardir )
|
2006-10-05 14:37:46 +02:00
|
|
|
{
|
2006-11-28 23:06:06 +01:00
|
|
|
mtr_error("Writable 'var' directory is needed, use the " .
|
|
|
|
"'--vardir=<path>' option");
|
2006-10-05 14:37:46 +02:00
|
|
|
}
|
|
|
|
|
2005-05-15 17:22:54 +02:00
|
|
|
mkpath("$opt_vardir/log");
|
|
|
|
mkpath("$opt_vardir/run");
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-04-23 12:59:37 +02:00
|
|
|
# Create var/tmp and tmp - they might be different
|
|
|
|
mkpath("$opt_vardir/tmp");
|
|
|
|
mkpath($opt_tmpdir) if ($opt_tmpdir ne "$opt_vardir/tmp");
|
2008-11-03 19:10:59 +01:00
|
|
|
|
2008-04-21 23:12:28 +02:00
|
|
|
# On some operating systems, there is a limit to the length of a
|
|
|
|
# UNIX domain socket's path far below PATH_MAX.
|
|
|
|
# Don't allow that to happen
|
|
|
|
if (check_socket_path_length("$opt_tmpdir/testsocket.sock")){
|
|
|
|
mtr_error("Socket path '$opt_tmpdir' too long, it would be ",
|
|
|
|
"truncated and thus not possible to use for connection to ",
|
|
|
|
"MySQL Server. Set a shorter with --tmpdir=<path> option");
|
2005-08-29 20:28:42 +02:00
|
|
|
}
|
2005-05-15 17:22:54 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# copy all files from std_data into var/std_data
|
2008-12-18 13:58:55 +01:00
|
|
|
# and make them world readable
|
|
|
|
copytree("$glob_mysql_test_dir/std_data", "$opt_vardir/std_data", "0022");
|
2006-11-20 21:42:06 +01:00
|
|
|
|
2010-06-10 11:11:52 +02:00
|
|
|
# create a plugin dir and copy plugins into it
|
|
|
|
if ($source_dist)
|
|
|
|
{
|
|
|
|
$plugindir="$opt_vardir/plugins";
|
|
|
|
unshift (@opt_extra_mysqld_opt, "--plugin-dir=$plugindir");
|
|
|
|
mkpath($plugindir);
|
|
|
|
if (IS_WINDOWS)
|
|
|
|
{
|
|
|
|
for (<../storage/*$opt_vs_config/*.dll>,
|
|
|
|
<../plugin/*$opt_vs_config/*.dll>,
|
|
|
|
<../sql$opt_vs_config/*.dll>)
|
|
|
|
{
|
|
|
|
my $pname=basename($_);
|
|
|
|
copy rel2abs($_), "$plugindir/$pname";
|
|
|
|
set_plugin_var($pname);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
for (<../storage/*/.libs/*.so>,<../plugin/*/.libs/*.so>,<../sql/.libs/*.so>)
|
|
|
|
{
|
|
|
|
my $pname=basename($_);
|
|
|
|
symlink rel2abs($_), "$plugindir/$pname";
|
|
|
|
set_plugin_var($pname);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
# hm, what paths work for debs and for rpms ?
|
|
|
|
for (<$basedir/lib/mysql/plugin/*.so>,
|
|
|
|
<$basedir/lib/plugin/*.dll>)
|
|
|
|
{
|
|
|
|
my $pname=basename($_);
|
|
|
|
set_plugin_var($pname);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-11-20 21:42:06 +01:00
|
|
|
# Remove old log files
|
2006-11-23 15:41:21 +01:00
|
|
|
foreach my $name (glob("r/*.progress r/*.log r/*.warnings"))
|
2006-11-20 21:42:06 +01:00
|
|
|
{
|
|
|
|
unlink($name);
|
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
#
|
|
|
|
# Check if running as root
|
|
|
|
# i.e a file can be read regardless what mode we set it to
|
|
|
|
#
|
2006-04-24 10:21:09 +02:00
|
|
|
sub check_running_as_root () {
|
2006-05-04 10:28:49 +02:00
|
|
|
my $test_file= "$opt_vardir/test_running_as_root.txt";
|
2006-04-24 10:21:09 +02:00
|
|
|
mtr_tofile($test_file, "MySQL");
|
|
|
|
chmod(oct("0000"), $test_file);
|
|
|
|
|
|
|
|
my $result="";
|
|
|
|
if (open(FILE,"<",$test_file))
|
|
|
|
{
|
|
|
|
$result= join('', <FILE>);
|
|
|
|
close FILE;
|
|
|
|
}
|
|
|
|
|
2007-05-23 12:13:49 +02:00
|
|
|
# Some filesystems( for example CIFS) allows reading a file
|
|
|
|
# although mode was set to 0000, but in that case a stat on
|
|
|
|
# the file will not return 0000
|
|
|
|
my $file_mode= (stat($test_file))[2] & 07777;
|
2006-04-24 10:21:09 +02:00
|
|
|
|
2007-05-23 12:13:49 +02:00
|
|
|
mtr_verbose("result: $result, file_mode: $file_mode");
|
|
|
|
if ($result eq "MySQL" && $file_mode == 0)
|
2006-04-24 10:21:09 +02:00
|
|
|
{
|
|
|
|
mtr_warning("running this script as _root_ will cause some " .
|
|
|
|
"tests to be skipped");
|
2009-09-25 16:38:02 +02:00
|
|
|
$ENV{'MYSQL_TEST_ROOT'}= "1";
|
2006-04-24 10:21:09 +02:00
|
|
|
}
|
2007-05-23 12:13:49 +02:00
|
|
|
|
|
|
|
chmod(oct("0755"), $test_file);
|
|
|
|
unlink($test_file);
|
2006-04-24 10:21:09 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2006-10-04 12:47:32 +02:00
|
|
|
sub check_ssl_support ($) {
|
|
|
|
my $mysqld_variables= shift;
|
2005-10-04 15:43:55 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
if ($opt_skip_ssl)
|
2005-10-04 15:43:55 +02:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_report(" - skipping SSL");
|
2005-10-04 15:43:55 +02:00
|
|
|
$opt_ssl_supported= 0;
|
|
|
|
$opt_ssl= 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2006-10-04 16:28:23 +02:00
|
|
|
if ( ! $mysqld_variables->{'ssl'} )
|
2005-10-04 15:43:55 +02:00
|
|
|
{
|
|
|
|
if ( $opt_ssl)
|
|
|
|
{
|
|
|
|
mtr_error("Couldn't find support for SSL");
|
|
|
|
return;
|
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_report(" - skipping SSL, mysqld not compiled with SSL");
|
2005-10-04 15:43:55 +02:00
|
|
|
$opt_ssl_supported= 0;
|
|
|
|
$opt_ssl= 0;
|
|
|
|
return;
|
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_report(" - SSL connections supported");
|
2005-10-04 15:43:55 +02:00
|
|
|
$opt_ssl_supported= 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2006-10-04 12:47:32 +02:00
|
|
|
sub check_debug_support ($) {
|
|
|
|
my $mysqld_variables= shift;
|
2006-06-11 23:13:32 +02:00
|
|
|
|
2006-10-05 00:19:24 +02:00
|
|
|
if ( ! $mysqld_variables->{'debug'} )
|
2006-06-11 23:13:32 +02:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
#mtr_report(" - binaries are not debug compiled");
|
2006-06-11 23:13:32 +02:00
|
|
|
$debug_compiled_binaries= 0;
|
2006-06-14 11:59:04 +02:00
|
|
|
|
|
|
|
if ( $opt_debug )
|
|
|
|
{
|
|
|
|
mtr_error("Can't use --debug, binaries does not support it");
|
|
|
|
}
|
2006-06-11 23:13:32 +02:00
|
|
|
return;
|
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_report(" - binaries are debug compiled");
|
2006-06-11 23:13:32 +02:00
|
|
|
$debug_compiled_binaries= 1;
|
|
|
|
}
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
|
2006-11-02 21:05:20 +01:00
|
|
|
#
|
2010-06-10 11:11:52 +02:00
|
|
|
# Helper function to find the correct value for the opt_vs_config
|
|
|
|
# if it was not set explicitly.
|
|
|
|
#
|
|
|
|
# the configuration with the most recent build dir in sql/ is selected.
|
2006-11-02 21:05:20 +01:00
|
|
|
#
|
2010-06-10 11:11:52 +02:00
|
|
|
# note: looking for all BuildLog.htm files everywhere in the tree with the
|
|
|
|
# help of File::Find would be possibly more precise, but it is also
|
|
|
|
# many times slower. Thus we are only looking at the server, client
|
|
|
|
# executables, and plugins - that is, something that can affect the test suite
|
2006-11-02 21:05:20 +01:00
|
|
|
#
|
2010-06-10 11:11:52 +02:00
|
|
|
sub fix_vs_config_dir () {
|
|
|
|
return $opt_vs_config="" unless IS_WINDOWS;
|
|
|
|
return $opt_vs_config="/$opt_vs_config" if $opt_vs_config;
|
2006-11-02 21:05:20 +01:00
|
|
|
|
2010-06-10 11:11:52 +02:00
|
|
|
my $modified = 1e30;
|
|
|
|
$opt_vs_config="";
|
2007-12-12 18:19:24 +01:00
|
|
|
|
2010-06-10 11:11:52 +02:00
|
|
|
for my $dir (qw(client/*.dir libmysql/libmysql.dir sql/mysqld.dir
|
|
|
|
sql/udf_example.dir storage/*/*.dir plugin/*/*.dir)) {
|
|
|
|
for (<$basedir/$dir/*/BuildLog.htm>) {
|
|
|
|
if (-M $_ < $modified)
|
|
|
|
{
|
|
|
|
$modified = -M _;
|
|
|
|
$opt_vs_config = basename(dirname($_));
|
|
|
|
}
|
|
|
|
}
|
2006-11-02 21:05:20 +01:00
|
|
|
}
|
|
|
|
|
2010-06-10 11:11:52 +02:00
|
|
|
mtr_report("VS config: $opt_vs_config");
|
|
|
|
$opt_vs_config="/$opt_vs_config" if $opt_vs_config;
|
2006-11-02 21:05:20 +01:00
|
|
|
}
|
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2006-10-04 12:47:32 +02:00
|
|
|
sub check_ndbcluster_support ($) {
|
|
|
|
my $mysqld_variables= shift;
|
2005-10-04 15:43:55 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
if ($opt_skip_ndbcluster)
|
2005-10-04 15:43:55 +02:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_report(" - skipping ndbcluster");
|
2005-10-04 15:43:55 +02:00
|
|
|
return;
|
|
|
|
}
|
2005-07-13 13:07:09 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( ! $mysqld_variables{'ndb-connectstring'} )
|
2005-07-13 13:07:09 +02:00
|
|
|
{
|
2009-10-26 12:35:42 +01:00
|
|
|
#mtr_report(" - skipping ndbcluster, mysqld not compiled with ndbcluster");
|
2008-03-10 16:38:28 +01:00
|
|
|
$opt_skip_ndbcluster= 2;
|
2005-10-04 15:43:55 +02:00
|
|
|
return;
|
2005-07-13 13:07:09 +02:00
|
|
|
}
|
2006-10-08 15:50:16 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_report(" - using ndbcluster when necessary, mysqld supports it");
|
2006-10-08 15:50:16 +02:00
|
|
|
|
2005-10-04 15:43:55 +02:00
|
|
|
return;
|
2005-07-13 13:07:09 +02:00
|
|
|
}
|
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
sub ndbcluster_wait_started {
|
2006-05-18 23:35:17 +02:00
|
|
|
my $cluster= shift;
|
2006-06-15 22:12:05 +02:00
|
|
|
my $ndb_waiter_extra_opt= shift;
|
2007-12-12 18:19:24 +01:00
|
|
|
my $path_waitlog= join('/', $opt_vardir, $cluster->name(), "ndb_waiter.log");
|
2006-06-15 22:12:05 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $args;
|
2006-06-15 22:12:05 +02:00
|
|
|
mtr_init_args(\$args);
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
|
|
|
mtr_add_arg($args, "--defaults-group-suffix=%s", $cluster->suffix());
|
2008-05-02 12:11:04 +02:00
|
|
|
mtr_add_arg($args, "--timeout=%d", $opt_start_timeout);
|
2006-06-15 22:12:05 +02:00
|
|
|
|
|
|
|
if ($ndb_waiter_extra_opt)
|
|
|
|
{
|
|
|
|
mtr_add_arg($args, "$ndb_waiter_extra_opt");
|
|
|
|
}
|
2006-05-18 23:35:17 +02:00
|
|
|
|
|
|
|
# Start the ndb_waiter which will connect to the ndb_mgmd
|
|
|
|
# and poll it for state of the ndbd's, will return when
|
|
|
|
# all nodes in the cluster is started
|
2005-02-08 06:11:05 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $res= My::SafeProcess->run
|
|
|
|
(
|
|
|
|
name => "ndb_waiter ".$cluster->name(),
|
|
|
|
path => $exe_ndb_waiter,
|
|
|
|
args => \$args,
|
|
|
|
output => $path_waitlog,
|
|
|
|
error => $path_waitlog,
|
|
|
|
append => 1,
|
|
|
|
);
|
2005-02-08 06:11:05 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Check that ndb_mgmd(s) are still alive
|
|
|
|
foreach my $ndb_mgmd ( in_cluster($cluster, ndb_mgmds()) )
|
|
|
|
{
|
|
|
|
my $proc= $ndb_mgmd->{proc};
|
|
|
|
if ( ! $proc->wait_one(0) )
|
|
|
|
{
|
|
|
|
mtr_warning("$proc died");
|
|
|
|
return 2;
|
|
|
|
}
|
|
|
|
}
|
2006-06-15 18:40:18 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Check that all started ndbd(s) are still alive
|
|
|
|
foreach my $ndbd ( in_cluster($cluster, ndbds()) )
|
|
|
|
{
|
|
|
|
my $proc= $ndbd->{proc};
|
|
|
|
next unless defined $proc;
|
|
|
|
if ( ! $proc->wait_one(0) )
|
|
|
|
{
|
|
|
|
mtr_warning("$proc died");
|
|
|
|
return 3;
|
|
|
|
}
|
|
|
|
}
|
2006-05-23 15:27:56 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
if ($res)
|
2007-06-26 12:26:21 +02:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_verbose("ndbcluster_wait_started failed");
|
2007-06-26 12:26:21 +02:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
2006-01-12 19:51:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2006-08-31 10:28:48 +02:00
|
|
|
sub ndb_mgmd_wait_started($) {
|
|
|
|
my ($cluster)= @_;
|
|
|
|
|
|
|
|
my $retries= 100;
|
2007-12-12 18:19:24 +01:00
|
|
|
while ($retries)
|
2006-08-31 10:28:48 +02:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
my $result= ndbcluster_wait_started($cluster, "--no-contact");
|
|
|
|
if ($result == 0)
|
|
|
|
{
|
|
|
|
# ndb_mgmd is started
|
|
|
|
mtr_verbose("ndb_mgmd is started");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
elsif ($result > 1)
|
|
|
|
{
|
|
|
|
mtr_warning("Cluster process failed while waiting for start");
|
|
|
|
return $result;
|
|
|
|
}
|
2006-08-31 10:28:48 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_milli_sleep(100);
|
2006-08-31 10:28:48 +02:00
|
|
|
$retries--;
|
|
|
|
}
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
return 1;
|
2006-08-31 10:28:48 +02:00
|
|
|
}
|
|
|
|
|
2006-01-12 19:51:02 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub ndb_mgmd_start ($$) {
|
|
|
|
my ($cluster, $ndb_mgmd)= @_;
|
2006-01-12 19:51:02 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_verbose("ndb_mgmd_start");
|
|
|
|
|
|
|
|
my $dir= $ndb_mgmd->value("DataDir");
|
|
|
|
mkpath($dir) unless -d $dir;
|
|
|
|
|
|
|
|
my $args;
|
2006-05-18 23:35:17 +02:00
|
|
|
mtr_init_args(\$args);
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
|
|
|
mtr_add_arg($args, "--defaults-group-suffix=%s", $cluster->suffix());
|
|
|
|
mtr_add_arg($args, "--mycnf");
|
2006-06-15 18:40:18 +02:00
|
|
|
mtr_add_arg($args, "--nodaemon");
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $path_ndb_mgmd_log= "$dir/ndb_mgmd.log";
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
$ndb_mgmd->{'proc'}= My::SafeProcess->new
|
|
|
|
(
|
|
|
|
name => $ndb_mgmd->after('cluster_config.'),
|
|
|
|
path => $exe_ndb_mgmd,
|
|
|
|
args => \$args,
|
|
|
|
output => $path_ndb_mgmd_log,
|
|
|
|
error => $path_ndb_mgmd_log,
|
|
|
|
append => 1,
|
|
|
|
verbose => $opt_verbose,
|
|
|
|
);
|
|
|
|
mtr_verbose("Started $ndb_mgmd->{proc}");
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2006-06-15 18:40:18 +02:00
|
|
|
# FIXME Should not be needed
|
|
|
|
# Unfortunately the cluster nodes will fail to start
|
|
|
|
# if ndb_mgmd has not started properly
|
2006-08-31 10:28:48 +02:00
|
|
|
if (ndb_mgmd_wait_started($cluster))
|
2006-06-15 22:12:05 +02:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_warning("Failed to wait for start of ndb_mgmd");
|
|
|
|
return 1;
|
2006-06-15 22:12:05 +02:00
|
|
|
}
|
2006-06-15 18:40:18 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
return 0;
|
2006-01-12 19:51:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub ndbd_start {
|
|
|
|
my ($cluster, $ndbd)= @_;
|
|
|
|
|
|
|
|
mtr_verbose("ndbd_start");
|
2006-01-12 19:51:02 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $dir= $ndbd->value("DataDir");
|
|
|
|
mkpath($dir) unless -d $dir;
|
2006-01-12 19:51:02 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $args;
|
2006-05-18 23:35:17 +02:00
|
|
|
mtr_init_args(\$args);
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
|
|
|
mtr_add_arg($args, "--defaults-group-suffix=%s", $cluster->suffix());
|
2006-05-18 23:35:17 +02:00
|
|
|
mtr_add_arg($args, "--nodaemon");
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# > 5.0 { 'character-sets-dir' => \&fix_charset_dir },
|
2006-05-18 23:35:17 +02:00
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $path_ndbd_log= "$dir/ndbd.log";
|
|
|
|
my $proc= My::SafeProcess->new
|
|
|
|
(
|
|
|
|
name => $ndbd->after('cluster_config.'),
|
|
|
|
path => $exe_ndbd,
|
|
|
|
args => \$args,
|
|
|
|
output => $path_ndbd_log,
|
|
|
|
error => $path_ndbd_log,
|
|
|
|
append => 1,
|
|
|
|
verbose => $opt_verbose,
|
|
|
|
);
|
|
|
|
mtr_verbose("Started $proc");
|
2006-07-20 13:23:45 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
$ndbd->{proc}= $proc;
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
return;
|
2006-01-12 19:51:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub ndbcluster_start ($) {
|
2010-08-17 09:14:46 +02:00
|
|
|
my ($cluster) = @_;
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_verbose("ndbcluster_start '".$cluster->name()."'");
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
foreach my $ndb_mgmd ( in_cluster($cluster, ndb_mgmds()) )
|
2006-01-13 03:13:58 +01:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
next if started($ndb_mgmd);
|
|
|
|
ndb_mgmd_start($cluster, $ndb_mgmd);
|
2006-01-13 03:13:58 +01:00
|
|
|
}
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
foreach my $ndbd ( in_cluster($cluster, ndbds()) )
|
2006-05-18 23:35:17 +02:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
next if started($ndbd);
|
|
|
|
ndbd_start($cluster, $ndbd);
|
2006-05-18 23:35:17 +02:00
|
|
|
}
|
|
|
|
|
2006-01-12 19:51:02 +01:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
sub mysql_server_start($) {
|
|
|
|
my ($mysqld, $tinfo) = @_;
|
|
|
|
|
|
|
|
if ( $mysqld->{proc} )
|
|
|
|
{
|
|
|
|
# Already started
|
|
|
|
|
|
|
|
# Write start of testcase to log file
|
|
|
|
mark_log($mysqld->value('#log-error'), $tinfo);
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
my $datadir= $mysqld->value('datadir');
|
|
|
|
if (not $opt_start_dirty)
|
|
|
|
{
|
|
|
|
|
|
|
|
my @options= ('log-bin', 'relay-log');
|
|
|
|
foreach my $option_name ( @options ) {
|
|
|
|
next unless $mysqld->option($option_name);
|
|
|
|
|
|
|
|
my $file_name= $mysqld->value($option_name);
|
|
|
|
next unless
|
|
|
|
defined $file_name and
|
|
|
|
-e $file_name;
|
|
|
|
|
|
|
|
mtr_debug(" -removing '$file_name'");
|
|
|
|
unlink($file_name) or die ("unable to remove file '$file_name'");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (-d $datadir ) {
|
|
|
|
preserve_error_log($mysqld);
|
|
|
|
mtr_verbose(" - removing '$datadir'");
|
|
|
|
rmtree($datadir);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
my $mysqld_basedir= $mysqld->value('basedir');
|
|
|
|
if ( $basedir eq $mysqld_basedir )
|
|
|
|
{
|
|
|
|
if (! $opt_start_dirty) # If dirty, keep possibly grown system db
|
|
|
|
{
|
|
|
|
# Copy datadir from installed system db
|
|
|
|
for my $path ( "$opt_vardir", "$opt_vardir/..") {
|
|
|
|
my $install_db= "$path/install.db";
|
|
|
|
copytree($install_db, $datadir)
|
|
|
|
if -d $install_db;
|
|
|
|
}
|
|
|
|
mtr_error("Failed to copy system db to '$datadir'")
|
|
|
|
unless -d $datadir;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
mysql_install_db($mysqld); # For versional testing
|
|
|
|
|
|
|
|
mtr_error("Failed to install system db to '$datadir'")
|
|
|
|
unless -d $datadir;
|
|
|
|
|
|
|
|
}
|
|
|
|
restore_error_log($mysqld);
|
|
|
|
|
|
|
|
# Create the servers tmpdir
|
|
|
|
my $tmpdir= $mysqld->value('tmpdir');
|
|
|
|
mkpath($tmpdir) unless -d $tmpdir;
|
|
|
|
|
|
|
|
# Write start of testcase to log file
|
|
|
|
mark_log($mysqld->value('#log-error'), $tinfo);
|
|
|
|
|
|
|
|
# Run <tname>-master.sh
|
|
|
|
if ($mysqld->option('#!run-master-sh') and
|
|
|
|
run_sh_script($tinfo->{master_sh}) )
|
|
|
|
{
|
|
|
|
$tinfo->{'comment'}= "Failed to execute '$tinfo->{master_sh}'";
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
# Run <tname>-slave.sh
|
|
|
|
if ($mysqld->option('#!run-slave-sh') and
|
|
|
|
run_sh_script($tinfo->{slave_sh}))
|
|
|
|
{
|
|
|
|
$tinfo->{'comment'}= "Failed to execute '$tinfo->{slave_sh}'";
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!$opt_embedded_server)
|
|
|
|
{
|
|
|
|
my $extra_opts= get_extra_opts($mysqld, $tinfo);
|
|
|
|
mysqld_start($mysqld,$extra_opts);
|
|
|
|
|
|
|
|
# Save this test case information, so next can examine it
|
|
|
|
$mysqld->{'started_tinfo'}= $tinfo;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
sub mysql_server_wait {
|
|
|
|
my ($mysqld) = @_;
|
|
|
|
|
|
|
|
return not sleep_until_file_created($mysqld->value('pid-file'),
|
|
|
|
$opt_start_timeout,
|
|
|
|
$mysqld->{'proc'});
|
|
|
|
}
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub create_config_file_for_extern {
|
|
|
|
my %opts=
|
|
|
|
(
|
|
|
|
socket => '/tmp/mysqld.sock',
|
|
|
|
port => 3306,
|
2008-09-05 18:28:20 +02:00
|
|
|
user => $opt_user,
|
2007-12-12 18:19:24 +01:00
|
|
|
password => '',
|
|
|
|
@_
|
|
|
|
);
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_report("Creating my.cnf file for extern server...");
|
|
|
|
my $F= IO::File->new($path_config_file, "w")
|
|
|
|
or mtr_error("Can't write to $path_config_file: $!");
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
print $F "[client]\n";
|
|
|
|
while (my ($option, $value)= each( %opts )) {
|
|
|
|
print $F "$option= $value\n";
|
|
|
|
mtr_report(" $option= $value");
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
print $F <<EOF
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# binlog reads from [client] and [mysqlbinlog]
|
|
|
|
[mysqlbinlog]
|
|
|
|
character-sets-dir= $path_charsetsdir
|
2009-11-19 10:10:21 +01:00
|
|
|
local-load= $opt_tmpdir
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# mysql_fix_privilege_tables.sh don't read from [client]
|
|
|
|
[mysql_fix_privilege_tables]
|
|
|
|
socket = $opts{'socket'}
|
|
|
|
port = $opts{'port'}
|
|
|
|
user = $opts{'user'}
|
|
|
|
password = $opts{'password'}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
EOF
|
|
|
|
;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
$F= undef; # Close file
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#
|
2007-12-12 18:19:24 +01:00
|
|
|
# Kill processes left from previous runs, normally
|
|
|
|
# there should be none so make sure to warn
|
|
|
|
# if there is one
|
2004-12-30 16:34:01 +01:00
|
|
|
#
|
2007-12-12 18:19:24 +01:00
|
|
|
sub kill_leftovers ($) {
|
|
|
|
my $rundir= shift;
|
|
|
|
return unless ( -d $rundir );
|
Behaviour change of mysql-test-run.pl:
by default we never run disabled tests (even if they're
explicitely listed on the command-line). We add an option --enable-disabled
which will run tests even though they are disabled, and will print, for each
such test, the comment explaining why it was disabled.
The reason for the change is when you want to run "all tests which are about
NDB" for example: mysql-test-run.pl t/*ndb*.test used to run some disabled
NDB tests, causing failures, causing investigations.
Code amended and approved by Kent.
mysql-test/lib/mtr_cases.pl:
always detect if a test is listed as disabled, and read the comment why is is.
If it is listed, don't run the test, except if
--enable-disabled was given, then mark the test as to-run-even-
though-it-is-listed-as-disabled.
mysql-test/lib/mtr_report.pl:
Report tests which will run though they are listed as disabled
(does something only if --enable-disabled).
mysql-test/mysql-test-run.pl:
New behaviour: by default we never run disabled tests (even if they're
explicitely listed on the command-line). We add an option --enable-disabled
which will run tests even though they are disabled, and will print, for each
such test, the comment explaining why it was disabled.
2006-07-06 17:40:36 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_report("Checking leftover processes...");
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Scan the "run" directory for process id's to kill
|
|
|
|
opendir(RUNDIR, $rundir)
|
|
|
|
or mtr_error("kill_leftovers, can't open dir \"$rundir\": $!");
|
|
|
|
while ( my $elem= readdir(RUNDIR) )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
# Only read pid from files that end with .pid
|
|
|
|
if ( $elem =~ /.*[.]pid$/ )
|
2006-08-23 15:35:24 +02:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
my $pidfile= "$rundir/$elem";
|
|
|
|
next unless -f $pidfile;
|
|
|
|
my $pid= mtr_fromfile($pidfile);
|
|
|
|
unlink($pidfile);
|
|
|
|
unless ($pid=~ /^(\d+)/){
|
|
|
|
# The pid was not a valid number
|
|
|
|
mtr_warning("Got invalid pid '$pid' from '$elem'");
|
|
|
|
next;
|
|
|
|
}
|
|
|
|
mtr_report(" - found old pid $pid in '$elem', killing it...");
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2009-01-21 10:34:01 +01:00
|
|
|
my $ret= kill("KILL", $pid);
|
2007-12-12 18:19:24 +01:00
|
|
|
if ($ret == 0) {
|
|
|
|
mtr_report(" process did not exist!");
|
|
|
|
next;
|
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $check_counter= 100;
|
|
|
|
while ($ret > 0 and $check_counter--) {
|
|
|
|
mtr_milli_sleep(100);
|
|
|
|
$ret= kill(0, $pid);
|
|
|
|
}
|
|
|
|
mtr_report($check_counter ? " ok!" : " failed!");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
mtr_warning("Found non pid file '$elem' in '$rundir'")
|
|
|
|
if -f "$rundir/$elem";
|
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
closedir(RUNDIR);
|
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
#
|
|
|
|
# Check that all the ports that are going to
|
|
|
|
# be used are free
|
|
|
|
#
|
2009-03-04 11:34:47 +01:00
|
|
|
sub check_ports_free ($)
|
2007-12-12 18:19:24 +01:00
|
|
|
{
|
2009-03-04 11:34:47 +01:00
|
|
|
my $bthread= shift;
|
|
|
|
my $portbase = $bthread * 10 + 10000;
|
|
|
|
for ($portbase..$portbase+9){
|
|
|
|
if (mtr_ping_port($_)){
|
|
|
|
mtr_report(" - 'localhost:$_' was not free");
|
|
|
|
return 0; # One port was not free
|
2007-12-12 18:19:24 +01:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2009-03-04 11:34:47 +01:00
|
|
|
return 1; # All ports free
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub initialize_servers {
|
2006-10-06 01:22:33 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( using_extern() )
|
2006-11-28 13:57:07 +01:00
|
|
|
{
|
|
|
|
# Running against an already started server, if the specified
|
|
|
|
# vardir does not already exist it should be created
|
|
|
|
if ( ! -d $opt_vardir )
|
|
|
|
{
|
|
|
|
setup_vardir();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2007-03-28 10:08:26 +02:00
|
|
|
mtr_verbose("No need to create '$opt_vardir' it already exists");
|
2006-11-28 13:57:07 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
2006-04-21 18:48:49 +02:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
# Kill leftovers from previous run
|
|
|
|
# using any pidfiles found in var/run
|
|
|
|
kill_leftovers("$opt_vardir/run");
|
2006-08-30 21:09:47 +02:00
|
|
|
|
2006-10-12 11:29:13 +02:00
|
|
|
if ( ! $opt_start_dirty )
|
2006-04-21 18:48:49 +02:00
|
|
|
{
|
2006-11-28 13:57:07 +01:00
|
|
|
remove_stale_vardir();
|
|
|
|
setup_vardir();
|
|
|
|
|
2008-09-20 15:51:31 +02:00
|
|
|
mysql_install_db(default_mysqld(), "$opt_vardir/install.db");
|
2006-04-21 18:48:49 +02:00
|
|
|
}
|
2006-11-01 18:41:09 +01:00
|
|
|
}
|
2006-04-21 18:48:49 +02:00
|
|
|
}
|
|
|
|
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
#
|
2008-04-08 16:51:26 +02:00
|
|
|
# Remove all newline characters expect after semicolon
|
2007-12-12 18:19:24 +01:00
|
|
|
#
|
2008-04-08 16:51:26 +02:00
|
|
|
sub sql_to_bootstrap {
|
|
|
|
my ($sql) = @_;
|
|
|
|
my @lines= split(/\n/, $sql);
|
|
|
|
my $result= "\n";
|
|
|
|
my $delimiter= ';';
|
|
|
|
|
|
|
|
foreach my $line (@lines) {
|
|
|
|
|
|
|
|
# Change current delimiter if line starts with "delimiter"
|
|
|
|
if ( $line =~ /^delimiter (.*)/ ) {
|
|
|
|
my $new= $1;
|
|
|
|
# Remove old delimiter from end of new
|
|
|
|
$new=~ s/\Q$delimiter\E$//;
|
|
|
|
$delimiter = $new;
|
|
|
|
mtr_debug("changed delimiter to $delimiter");
|
|
|
|
# No need to add the delimiter to result
|
|
|
|
next;
|
2006-03-07 19:44:58 +01:00
|
|
|
}
|
2005-02-08 06:11:05 +01:00
|
|
|
|
2008-04-08 16:51:26 +02:00
|
|
|
# Add newline if line ends with $delimiter
|
|
|
|
# and convert the current delimiter to semicolon
|
|
|
|
if ( $line =~ /\Q$delimiter\E$/ ){
|
|
|
|
$line =~ s/\Q$delimiter\E$/;/;
|
|
|
|
$result.= "$line\n";
|
|
|
|
mtr_debug("Added default delimiter");
|
|
|
|
next;
|
2006-03-07 20:35:59 +01:00
|
|
|
}
|
2006-08-31 20:58:00 +02:00
|
|
|
|
2008-04-08 16:51:26 +02:00
|
|
|
# Remove comments starting with --
|
|
|
|
if ( $line =~ /^\s*--/ ) {
|
|
|
|
mtr_debug("Discarded $line");
|
|
|
|
next;
|
2006-03-07 20:35:59 +01:00
|
|
|
}
|
2006-01-12 19:51:02 +01:00
|
|
|
|
2008-04-24 14:14:11 +02:00
|
|
|
# Replace @HOSTNAME with localhost
|
|
|
|
$line=~ s/\'\@HOSTNAME\@\'/localhost/;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-04-08 16:51:26 +02:00
|
|
|
# Default, just add the line without newline
|
|
|
|
# but with a space as separator
|
|
|
|
$result.= "$line ";
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-04-08 16:51:26 +02:00
|
|
|
}
|
|
|
|
return $result;
|
2006-08-31 20:58:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-09-20 15:51:31 +02:00
|
|
|
sub default_mysqld {
|
|
|
|
# Generate new config file from template
|
|
|
|
my $config= My::ConfigFactory->new_config
|
|
|
|
( {
|
|
|
|
basedir => $basedir,
|
|
|
|
template_path => "include/default_my.cnf",
|
|
|
|
vardir => $opt_vardir,
|
|
|
|
tmpdir => $opt_tmpdir,
|
|
|
|
baseport => 0,
|
|
|
|
user => $opt_user,
|
|
|
|
password => '',
|
|
|
|
}
|
|
|
|
);
|
2006-08-31 20:58:00 +02:00
|
|
|
|
2008-09-20 15:51:31 +02:00
|
|
|
my $mysqld= $config->group('mysqld.1')
|
|
|
|
or mtr_error("Couldn't find mysqld.1 in default config");
|
|
|
|
return $mysqld;
|
2006-08-31 20:58:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub mysql_install_db {
|
2008-09-20 15:51:31 +02:00
|
|
|
my ($mysqld, $datadir)= @_;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-09-20 15:51:31 +02:00
|
|
|
my $install_datadir= $datadir || $mysqld->value('datadir');
|
|
|
|
my $install_basedir= $mysqld->value('basedir');
|
|
|
|
my $install_lang= $mysqld->value('language');
|
|
|
|
my $install_chsdir= $mysqld->value('character-sets-dir');
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_report("Installing system database...");
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-02-26 11:49:24 +01:00
|
|
|
my $args;
|
2004-12-30 16:34:01 +01:00
|
|
|
mtr_init_args(\$args);
|
|
|
|
mtr_add_arg($args, "--no-defaults");
|
|
|
|
mtr_add_arg($args, "--bootstrap");
|
2008-09-20 15:51:31 +02:00
|
|
|
mtr_add_arg($args, "--basedir=%s", $install_basedir);
|
|
|
|
mtr_add_arg($args, "--datadir=%s", $install_datadir);
|
2007-04-13 19:23:02 +02:00
|
|
|
mtr_add_arg($args, "--loose-skip-innodb");
|
2009-10-13 14:47:17 +02:00
|
|
|
mtr_add_arg($args, "--loose-skip-pbxt");
|
2007-04-13 19:23:02 +02:00
|
|
|
mtr_add_arg($args, "--loose-skip-ndbcluster");
|
2008-12-15 13:34:57 +01:00
|
|
|
mtr_add_arg($args, "--loose-skip-maria");
|
2008-02-06 17:55:04 +01:00
|
|
|
mtr_add_arg($args, "--disable-sync-frm");
|
|
|
|
mtr_add_arg($args, "--loose-disable-debug");
|
2008-02-28 10:52:04 +01:00
|
|
|
mtr_add_arg($args, "--tmpdir=%s", "$opt_vardir/tmp/");
|
2006-10-24 21:02:04 +02:00
|
|
|
mtr_add_arg($args, "--core-file");
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2006-09-19 18:39:04 +02:00
|
|
|
if ( $opt_debug )
|
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_add_arg($args, "--debug=d:t:i:A,%s/log/bootstrap.trace",
|
|
|
|
$path_vardir_trace);
|
2006-09-19 18:39:04 +02:00
|
|
|
}
|
|
|
|
|
2008-09-20 15:51:31 +02:00
|
|
|
mtr_add_arg($args, "--language=%s", $install_lang);
|
|
|
|
mtr_add_arg($args, "--character-sets-dir=%s", $install_chsdir);
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-01-10 03:22:01 +01:00
|
|
|
# If DISABLE_GRANT_OPTIONS is defined when the server is compiled (e.g.,
|
|
|
|
# configure --disable-grant-options), mysqld will not recognize the
|
|
|
|
# --bootstrap or --skip-grant-tables options. The user can set
|
|
|
|
# MYSQLD_BOOTSTRAP to the full path to a mysqld which does accept
|
|
|
|
# --bootstrap, to accommodate this.
|
2008-09-20 15:51:31 +02:00
|
|
|
my $exe_mysqld_bootstrap =
|
|
|
|
$ENV{'MYSQLD_BOOTSTRAP'} || find_mysqld($install_basedir);
|
2007-01-10 03:22:01 +01:00
|
|
|
|
2009-02-12 15:08:56 +01:00
|
|
|
# MASV add only to bootstrap.test
|
|
|
|
# Setup args for bootstrap.test
|
|
|
|
#
|
|
|
|
#mtr_init_args(\$cmd_args);
|
|
|
|
#mtr_add_arg($cmd_args, "--loose-skip-maria")
|
2007-01-10 03:22:01 +01:00
|
|
|
|
2007-02-20 12:48:15 +01:00
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
# export MYSQLD_BOOTSTRAP_CMD variable containing <path>/mysqld <args>
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
$ENV{'MYSQLD_BOOTSTRAP_CMD'}= "$exe_mysqld_bootstrap " . join(" ", @$args);
|
|
|
|
|
2008-09-20 15:51:31 +02:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
|
2007-02-26 11:49:24 +01:00
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
# Create the bootstrap.sql file
|
|
|
|
# ----------------------------------------------------------------------
|
2007-02-28 14:26:58 +01:00
|
|
|
my $bootstrap_sql_file= "$opt_vardir/tmp/bootstrap.sql";
|
2007-02-26 11:49:24 +01:00
|
|
|
|
2008-09-20 15:51:31 +02:00
|
|
|
my $path_sql= my_find_file($install_basedir,
|
2009-10-08 00:57:43 +02:00
|
|
|
["mysql", "sql/share", "share/mariadb",
|
|
|
|
"share/mysql", "share", "scripts"],
|
2008-09-20 15:51:31 +02:00
|
|
|
"mysql_system_tables.sql",
|
|
|
|
NOT_REQUIRED);
|
|
|
|
|
|
|
|
if (-f $path_sql )
|
2008-04-24 14:14:11 +02:00
|
|
|
{
|
2008-09-20 15:51:31 +02:00
|
|
|
my $sql_dir= dirname($path_sql);
|
2008-04-24 14:14:11 +02:00
|
|
|
# Use the mysql database for system tables
|
|
|
|
mtr_tofile($bootstrap_sql_file, "use mysql\n");
|
2007-02-26 11:49:24 +01:00
|
|
|
|
2008-04-24 14:14:11 +02:00
|
|
|
# Add the offical mysql system tables
|
|
|
|
# for a production system
|
2008-09-20 15:51:31 +02:00
|
|
|
mtr_appendfile_to_file("$sql_dir/mysql_system_tables.sql",
|
2008-04-24 14:14:11 +02:00
|
|
|
$bootstrap_sql_file);
|
2007-02-26 11:49:24 +01:00
|
|
|
|
2008-04-24 14:14:11 +02:00
|
|
|
# Add the mysql system tables initial data
|
|
|
|
# for a production system
|
2008-09-20 15:51:31 +02:00
|
|
|
mtr_appendfile_to_file("$sql_dir/mysql_system_tables_data.sql",
|
2008-04-24 14:14:11 +02:00
|
|
|
$bootstrap_sql_file);
|
2007-02-26 11:49:24 +01:00
|
|
|
|
2008-04-24 14:14:11 +02:00
|
|
|
# Add test data for timezone - this is just a subset, on a real
|
|
|
|
# system these tables will be populated either by mysql_tzinfo_to_sql
|
|
|
|
# or by downloading the timezone table package from our website
|
2008-09-20 15:51:31 +02:00
|
|
|
mtr_appendfile_to_file("$sql_dir/mysql_test_data_timezone.sql",
|
|
|
|
$bootstrap_sql_file);
|
2007-02-26 11:49:24 +01:00
|
|
|
|
2008-09-20 15:51:31 +02:00
|
|
|
# Fill help tables, just an empty file when running from bk repo
|
|
|
|
# but will be replaced by a real fill_help_tables.sql when
|
|
|
|
# building the source dist
|
|
|
|
mtr_appendfile_to_file("$sql_dir/fill_help_tables.sql",
|
2008-04-24 14:14:11 +02:00
|
|
|
$bootstrap_sql_file);
|
2007-02-28 14:26:58 +01:00
|
|
|
|
2008-04-24 14:14:11 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
# Install db from init_db.sql that exist in early 5.1 and 5.0
|
|
|
|
# versions of MySQL
|
2008-09-20 15:51:31 +02:00
|
|
|
my $init_file= "$install_basedir/mysql-test/lib/init_db.sql";
|
2008-04-24 14:14:11 +02:00
|
|
|
mtr_report(" - from '$init_file'");
|
|
|
|
my $text= mtr_grab_file($init_file) or
|
|
|
|
mtr_error("Can't open '$init_file': $!");
|
2007-02-26 11:49:24 +01:00
|
|
|
|
2008-04-24 14:14:11 +02:00
|
|
|
mtr_tofile($bootstrap_sql_file,
|
|
|
|
sql_to_bootstrap($text));
|
|
|
|
}
|
2007-02-26 11:49:24 +01:00
|
|
|
|
2007-10-04 11:30:30 +02:00
|
|
|
# Remove anonymous users
|
2007-08-24 15:43:45 +02:00
|
|
|
mtr_tofile($bootstrap_sql_file,
|
2008-04-02 10:06:36 +02:00
|
|
|
"DELETE FROM mysql.user where user= '';\n");
|
|
|
|
|
|
|
|
# Create mtr database
|
|
|
|
mtr_tofile($bootstrap_sql_file,
|
|
|
|
"CREATE DATABASE mtr;\n");
|
2007-08-24 15:43:45 +02:00
|
|
|
|
2008-04-08 16:51:26 +02:00
|
|
|
# Add help tables and data for warning detection and supression
|
|
|
|
mtr_tofile($bootstrap_sql_file,
|
|
|
|
sql_to_bootstrap(mtr_grab_file("include/mtr_warnings.sql")));
|
|
|
|
|
2008-04-09 12:27:39 +02:00
|
|
|
# Add procedures for checking server is restored after testcase
|
|
|
|
mtr_tofile($bootstrap_sql_file,
|
|
|
|
sql_to_bootstrap(mtr_grab_file("include/mtr_check.sql")));
|
2007-08-24 15:43:45 +02:00
|
|
|
|
2006-04-24 11:26:41 +02:00
|
|
|
# Log bootstrap command
|
|
|
|
my $path_bootstrap_log= "$opt_vardir/log/bootstrap.log";
|
|
|
|
mtr_tofile($path_bootstrap_log,
|
2007-01-10 03:22:01 +01:00
|
|
|
"$exe_mysqld_bootstrap " . join(" ", @$args) . "\n");
|
2006-04-24 11:26:41 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Create directories mysql and test
|
2008-09-20 15:51:31 +02:00
|
|
|
mkpath("$install_datadir/mysql");
|
|
|
|
mkpath("$install_datadir/test");
|
2007-12-12 18:19:24 +01:00
|
|
|
|
|
|
|
if ( My::SafeProcess->run
|
|
|
|
(
|
|
|
|
name => "bootstrap",
|
|
|
|
path => $exe_mysqld_bootstrap,
|
|
|
|
args => \$args,
|
|
|
|
input => $bootstrap_sql_file,
|
|
|
|
output => $path_bootstrap_log,
|
|
|
|
error => $path_bootstrap_log,
|
|
|
|
append => 1,
|
2008-02-28 10:52:04 +01:00
|
|
|
verbose => $opt_verbose,
|
2007-12-12 18:19:24 +01:00
|
|
|
) != 0)
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2005-01-01 19:27:41 +01:00
|
|
|
mtr_error("Error executing mysqld --bootstrap\n" .
|
2007-02-28 14:26:58 +01:00
|
|
|
"Could not install system database from $bootstrap_sql_file\n" .
|
|
|
|
"see $path_bootstrap_log for errors");
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2006-08-21 09:53:04 +02:00
|
|
|
sub run_testcase_check_skip_test($)
|
|
|
|
{
|
|
|
|
my ($tinfo)= @_;
|
2005-02-08 06:11:05 +01:00
|
|
|
|
2008-10-15 12:46:40 +02:00
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
# Skip some tests silently
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
|
2009-02-15 11:58:34 +01:00
|
|
|
my $start_from= $mtr_cases::start_from;
|
|
|
|
if ( $start_from )
|
2008-10-15 12:46:40 +02:00
|
|
|
{
|
2009-02-15 11:58:34 +01:00
|
|
|
if ($tinfo->{'name'} eq $start_from ||
|
|
|
|
$tinfo->{'shortname'} eq $start_from)
|
2008-10-15 12:46:40 +02:00
|
|
|
{
|
|
|
|
## Found parting test. Run this test and all tests after this one
|
2009-02-15 11:58:34 +01:00
|
|
|
$mtr_cases::start_from= "";
|
2008-10-15 12:46:40 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$tinfo->{'result'}= 'MTR_RES_SKIPPED';
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
# If marked to skip, just print out and return.
|
|
|
|
# Note that a test case not marked as 'skip' can still be
|
|
|
|
# skipped later, because of the test case itself in cooperation
|
|
|
|
# with the mysqltest program tells us so.
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
if ( $tinfo->{'skip'} )
|
|
|
|
{
|
2009-08-18 09:38:18 +02:00
|
|
|
mtr_report_test_skipped($tinfo) unless $start_only;
|
2006-08-21 09:53:04 +02:00
|
|
|
return 1;
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
return 0;
|
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2006-03-08 19:15:56 +01:00
|
|
|
|
2008-01-07 19:44:48 +01:00
|
|
|
sub run_query {
|
|
|
|
my ($tinfo, $mysqld, $query)= @_;
|
2006-03-07 19:44:58 +01:00
|
|
|
|
2007-12-19 11:08:41 +01:00
|
|
|
my $args;
|
|
|
|
mtr_init_args(\$args);
|
|
|
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
|
|
|
mtr_add_arg($args, "--defaults-group-suffix=%s", $mysqld->after('mysqld'));
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-01-07 19:44:48 +01:00
|
|
|
mtr_add_arg($args, "-e %s", $query);
|
|
|
|
|
2007-12-19 11:08:41 +01:00
|
|
|
my $res= My::SafeProcess->run
|
|
|
|
(
|
2008-01-07 19:44:48 +01:00
|
|
|
name => "run_query -> ".$mysqld->name(),
|
2007-12-19 11:08:41 +01:00
|
|
|
path => $exe_mysql,
|
|
|
|
args => \$args,
|
2008-01-07 19:44:48 +01:00
|
|
|
output => '/dev/null',
|
|
|
|
error => '/dev/null'
|
2007-12-12 18:19:24 +01:00
|
|
|
);
|
|
|
|
|
2008-01-07 19:44:48 +01:00
|
|
|
return $res
|
2006-08-21 09:53:04 +02:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2005-01-01 19:27:41 +01:00
|
|
|
|
2006-08-23 15:35:24 +02:00
|
|
|
sub do_before_run_mysqltest($)
|
|
|
|
{
|
|
|
|
my $tinfo= shift;
|
|
|
|
|
2006-10-06 00:57:10 +02:00
|
|
|
# Remove old files produced by mysqltest
|
2008-09-11 22:05:44 +02:00
|
|
|
my $base_file= mtr_match_extension($tinfo->{result_file},
|
|
|
|
"result"); # Trim extension
|
|
|
|
if (defined $base_file ){
|
|
|
|
unlink("$base_file.reject");
|
|
|
|
unlink("$base_file.progress");
|
|
|
|
unlink("$base_file.log");
|
|
|
|
unlink("$base_file.warnings");
|
|
|
|
}
|
2006-08-23 15:35:24 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( $mysql_version_id < 50000 ) {
|
|
|
|
# Set environment variable NDB_STATUS_OK to 1
|
|
|
|
# if script decided to run mysqltest cluster _is_ installed ok
|
|
|
|
$ENV{'NDB_STATUS_OK'} = "1";
|
|
|
|
} elsif ( $mysql_version_id < 50100 ) {
|
|
|
|
# Set environment variable NDB_STATUS_OK to YES
|
|
|
|
# if script decided to run mysqltest cluster _is_ installed ok
|
|
|
|
$ENV{'NDB_STATUS_OK'} = "YES";
|
2006-10-05 12:28:23 +02:00
|
|
|
}
|
2006-08-23 15:35:24 +02:00
|
|
|
}
|
2005-03-21 16:01:39 +01:00
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
#
|
|
|
|
# Check all server for sideffects
|
|
|
|
#
|
|
|
|
# RETURN VALUE
|
|
|
|
# 0 ok
|
|
|
|
# 1 Check failed
|
|
|
|
# >1 Fatal errro
|
2006-08-25 15:17:03 +02:00
|
|
|
|
2008-04-08 16:51:26 +02:00
|
|
|
sub check_testcase($$)
|
2006-11-28 19:54:16 +01:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
my ($tinfo, $mode)= @_;
|
2008-04-27 21:31:32 +02:00
|
|
|
my $tname= $tinfo->{name};
|
2006-11-28 19:54:16 +01:00
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
# Start the mysqltest processes in parallel to save time
|
|
|
|
# also makes it possible to wait for any process to exit during the check
|
|
|
|
my %started;
|
2007-12-12 18:19:24 +01:00
|
|
|
foreach my $mysqld ( mysqlds() )
|
2006-11-28 19:54:16 +01:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( defined $mysqld->{'proc'} )
|
|
|
|
{
|
2008-04-27 21:31:32 +02:00
|
|
|
my $proc= start_check_testcase($tinfo, $mode, $mysqld);
|
|
|
|
$started{$proc->pid()}= $proc;
|
|
|
|
}
|
2006-11-28 19:54:16 +01:00
|
|
|
}
|
|
|
|
|
2008-04-28 12:20:42 +02:00
|
|
|
# Return immediately if no check proceess was started
|
|
|
|
return 0 unless ( keys %started );
|
2007-04-16 16:08:29 +02:00
|
|
|
|
2009-11-24 09:12:48 +01:00
|
|
|
my $timeout= start_timer(check_timeout());
|
2006-11-28 19:54:16 +01:00
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
while (1){
|
|
|
|
my $result;
|
2009-11-24 09:12:48 +01:00
|
|
|
my $proc= My::SafeProcess->wait_any_timeout($timeout);
|
2008-04-27 21:31:32 +02:00
|
|
|
mtr_report("Got $proc");
|
2006-11-28 19:54:16 +01:00
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
if ( delete $started{$proc->pid()} ) {
|
2008-04-28 15:03:30 +02:00
|
|
|
|
|
|
|
my $err_file= $proc->user_data();
|
|
|
|
my $base_file= mtr_match_extension($err_file, "err"); # Trim extension
|
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
# One check testcase process returned
|
|
|
|
my $res= $proc->exit_status();
|
|
|
|
|
|
|
|
if ( $res == 0){
|
|
|
|
# Check completed without problem
|
|
|
|
|
2008-04-28 15:03:30 +02:00
|
|
|
# Remove the .err file the check generated
|
|
|
|
unlink($err_file);
|
|
|
|
|
2008-05-02 12:11:04 +02:00
|
|
|
# Remove the .result file the check generated
|
|
|
|
if ( $mode eq 'after' ){
|
|
|
|
unlink("$base_file.result");
|
|
|
|
}
|
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
if ( keys(%started) == 0){
|
|
|
|
# All checks completed
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
# Wait for next process to exit
|
|
|
|
next;
|
|
|
|
}
|
|
|
|
else
|
2007-12-12 18:19:24 +01:00
|
|
|
{
|
2008-04-27 21:31:32 +02:00
|
|
|
if ( $mode eq "after" and $res == 1 )
|
|
|
|
{
|
|
|
|
# Test failed, grab the report mysqltest has created
|
2008-04-28 15:03:30 +02:00
|
|
|
my $report= mtr_grab_file($err_file);
|
2008-04-27 21:31:32 +02:00
|
|
|
$tinfo->{check}.=
|
2008-11-25 17:51:02 +01:00
|
|
|
"\nMTR's internal check of the test case '$tname' failed.
|
|
|
|
This means that the test case does not preserve the state that existed
|
|
|
|
before the test case was executed. Most likely the test case did not
|
|
|
|
do a proper clean-up.
|
|
|
|
This is the diff of the states of the servers before and after the
|
|
|
|
test case was executed:\n";
|
2008-04-27 21:31:32 +02:00
|
|
|
$tinfo->{check}.= $report;
|
|
|
|
|
|
|
|
# Check failed, mark the test case with that info
|
|
|
|
$tinfo->{'check_testcase_failed'}= 1;
|
|
|
|
$result= 1;
|
|
|
|
}
|
|
|
|
elsif ( $res )
|
|
|
|
{
|
2008-04-28 15:03:30 +02:00
|
|
|
my $report= mtr_grab_file($err_file);
|
2008-04-27 21:31:32 +02:00
|
|
|
$tinfo->{comment}.=
|
2008-11-14 13:19:37 +01:00
|
|
|
"Could not execute 'check-testcase' $mode ".
|
|
|
|
"testcase '$tname' (res: $res):\n";
|
2008-04-27 21:31:32 +02:00
|
|
|
$tinfo->{comment}.= $report;
|
|
|
|
|
|
|
|
$result= 2;
|
|
|
|
}
|
2009-02-15 11:58:34 +01:00
|
|
|
else
|
|
|
|
{
|
|
|
|
# Remove the .result file the check generated
|
|
|
|
unlink("$base_file.result");
|
|
|
|
}
|
2008-04-28 15:03:30 +02:00
|
|
|
# Remove the .err file the check generated
|
|
|
|
unlink($err_file);
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
}
|
|
|
|
}
|
2009-11-24 09:12:48 +01:00
|
|
|
elsif ( $proc->{timeout} ) {
|
|
|
|
$tinfo->{comment}.= "Timeout for 'check-testcase' expired after "
|
|
|
|
.check_timeout()." seconds";
|
2008-11-21 13:45:28 +01:00
|
|
|
$result= 4;
|
|
|
|
}
|
2008-04-27 21:31:32 +02:00
|
|
|
else {
|
|
|
|
# Unknown process returned, most likley a crash, abort everything
|
|
|
|
$tinfo->{comment}=
|
2008-09-11 18:30:30 +02:00
|
|
|
"The server $proc crashed while running ".
|
2009-10-14 09:31:34 +02:00
|
|
|
"'check testcase $mode test'".
|
|
|
|
get_log_from_proc($proc, $tinfo->{name});
|
2008-04-27 21:31:32 +02:00
|
|
|
$result= 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
# Kill any check processes still running
|
|
|
|
map($_->kill(), values(%started));
|
|
|
|
|
|
|
|
return $result;
|
2007-04-16 16:08:29 +02:00
|
|
|
}
|
2008-11-21 13:45:28 +01:00
|
|
|
|
|
|
|
mtr_error("INTERNAL_ERROR: check_testcase");
|
2007-12-12 18:19:24 +01:00
|
|
|
}
|
2007-04-16 16:08:29 +02:00
|
|
|
|
2006-11-28 19:54:16 +01:00
|
|
|
|
2008-08-04 21:54:44 +02:00
|
|
|
# Start run mysqltest on one server
|
|
|
|
#
|
|
|
|
# RETURN VALUE
|
|
|
|
# 0 OK
|
|
|
|
# 1 Check failed
|
|
|
|
#
|
|
|
|
sub start_run_one ($$) {
|
|
|
|
my ($mysqld, $run)= @_;
|
|
|
|
|
|
|
|
my $name= "$run-".$mysqld->name();
|
|
|
|
|
|
|
|
my $args;
|
|
|
|
mtr_init_args(\$args);
|
|
|
|
|
|
|
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
|
|
|
mtr_add_arg($args, "--defaults-group-suffix=%s", $mysqld->after('mysqld'));
|
|
|
|
|
|
|
|
mtr_add_arg($args, "--silent");
|
|
|
|
mtr_add_arg($args, "--skip-safemalloc");
|
|
|
|
mtr_add_arg($args, "--test-file=%s", "include/$run.test");
|
|
|
|
|
|
|
|
my $errfile= "$opt_vardir/tmp/$name.err";
|
|
|
|
my $proc= My::SafeProcess->new
|
|
|
|
(
|
|
|
|
name => $name,
|
|
|
|
path => $exe_mysqltest,
|
|
|
|
error => $errfile,
|
|
|
|
output => $errfile,
|
|
|
|
args => \$args,
|
|
|
|
user_data => $errfile,
|
2009-01-27 10:39:42 +01:00
|
|
|
verbose => $opt_verbose,
|
2008-08-04 21:54:44 +02:00
|
|
|
);
|
|
|
|
mtr_verbose("Started $proc");
|
|
|
|
return $proc;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Run script on all servers, collect results
|
|
|
|
#
|
|
|
|
# RETURN VALUE
|
|
|
|
# 0 ok
|
|
|
|
# 1 Failure
|
|
|
|
|
|
|
|
sub run_on_all($$)
|
|
|
|
{
|
|
|
|
my ($tinfo, $run)= @_;
|
|
|
|
|
|
|
|
# Start the mysqltest processes in parallel to save time
|
|
|
|
# also makes it possible to wait for any process to exit during the check
|
|
|
|
# and to have a timeout process
|
|
|
|
my %started;
|
|
|
|
foreach my $mysqld ( mysqlds() )
|
|
|
|
{
|
|
|
|
if ( defined $mysqld->{'proc'} )
|
|
|
|
{
|
|
|
|
my $proc= start_run_one($mysqld, $run);
|
|
|
|
$started{$proc->pid()}= $proc;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# Return immediately if no check proceess was started
|
|
|
|
return 0 unless ( keys %started );
|
|
|
|
|
2009-11-24 09:12:48 +01:00
|
|
|
my $timeout= start_timer(check_timeout());
|
2008-08-04 21:54:44 +02:00
|
|
|
|
|
|
|
while (1){
|
|
|
|
my $result;
|
2009-11-24 09:12:48 +01:00
|
|
|
my $proc= My::SafeProcess->wait_any_timeout($timeout);
|
2008-08-04 21:54:44 +02:00
|
|
|
mtr_report("Got $proc");
|
|
|
|
|
|
|
|
if ( delete $started{$proc->pid()} ) {
|
|
|
|
|
|
|
|
# One mysqltest process returned
|
|
|
|
my $err_file= $proc->user_data();
|
|
|
|
my $res= $proc->exit_status();
|
|
|
|
|
|
|
|
# Append the report from .err file
|
|
|
|
$tinfo->{comment}.= " == $err_file ==\n";
|
|
|
|
$tinfo->{comment}.= mtr_grab_file($err_file);
|
|
|
|
$tinfo->{comment}.= "\n";
|
|
|
|
|
|
|
|
# Remove the .err file
|
|
|
|
unlink($err_file);
|
|
|
|
|
|
|
|
if ( keys(%started) == 0){
|
|
|
|
# All completed
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
# Wait for next process to exit
|
|
|
|
next;
|
|
|
|
}
|
2009-11-24 09:12:48 +01:00
|
|
|
elsif ($proc->{timeout}) {
|
|
|
|
$tinfo->{comment}.= "Timeout for '$run' expired after "
|
|
|
|
.check_timeout()." seconds";
|
2008-08-04 21:54:44 +02:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
# Unknown process returned, most likley a crash, abort everything
|
|
|
|
$tinfo->{comment}.=
|
2009-10-14 09:31:34 +02:00
|
|
|
"The server $proc crashed while running '$run'".
|
|
|
|
get_log_from_proc($proc, $tinfo->{name});
|
2008-08-04 21:54:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
# Kill any check processes still running
|
|
|
|
map($_->kill(), values(%started));
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
}
|
2008-11-21 13:45:28 +01:00
|
|
|
mtr_error("INTERNAL_ERROR: run_on_all");
|
2008-08-04 21:54:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub mark_log {
|
|
|
|
my ($log, $tinfo)= @_;
|
|
|
|
my $log_msg= "CURRENT_TEST: $tinfo->{name}\n";
|
2009-03-20 15:18:22 +01:00
|
|
|
pre_write_errorlog($log, $tinfo->{name});
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_tofile($log, $log_msg);
|
2006-11-28 19:54:16 +01:00
|
|
|
}
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
|
2006-10-13 10:41:40 +02:00
|
|
|
sub find_testcase_skipped_reason($)
|
|
|
|
{
|
|
|
|
my ($tinfo)= @_;
|
|
|
|
|
2007-06-13 10:35:20 +02:00
|
|
|
# Set default message
|
|
|
|
$tinfo->{'comment'}= "Detected by testcase(no log file)";
|
|
|
|
|
2008-02-25 16:41:59 +01:00
|
|
|
# Open the test log file
|
|
|
|
my $F= IO::File->new($path_current_testlog)
|
2007-06-13 10:35:20 +02:00
|
|
|
or return;
|
2006-10-13 10:41:40 +02:00
|
|
|
my $reason;
|
|
|
|
|
|
|
|
while ( my $line= <$F> )
|
|
|
|
{
|
2006-11-23 15:41:21 +01:00
|
|
|
# Look for "reason: <reason for skipping test>"
|
2006-10-13 10:41:40 +02:00
|
|
|
if ( $line =~ /reason: (.*)/ )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2006-10-13 10:41:40 +02:00
|
|
|
$reason= $1;
|
|
|
|
}
|
|
|
|
}
|
2006-02-09 09:40:48 +01:00
|
|
|
|
2006-10-13 10:41:40 +02:00
|
|
|
if ( ! $reason )
|
|
|
|
{
|
2008-02-25 16:41:59 +01:00
|
|
|
mtr_warning("Could not find reason for skipping test in $path_current_testlog");
|
2006-10-13 10:41:40 +02:00
|
|
|
$reason= "Detected by testcase(reason unknown) ";
|
2006-08-23 15:35:24 +02:00
|
|
|
}
|
2006-10-13 10:41:40 +02:00
|
|
|
$tinfo->{'comment'}= $reason;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-08-04 21:54:44 +02:00
|
|
|
sub find_analyze_request
|
|
|
|
{
|
|
|
|
# Open the test log file
|
|
|
|
my $F= IO::File->new($path_current_testlog)
|
|
|
|
or return;
|
|
|
|
my $analyze;
|
2006-08-21 09:53:04 +02:00
|
|
|
|
2008-08-04 21:54:44 +02:00
|
|
|
while ( my $line= <$F> )
|
|
|
|
{
|
|
|
|
# Look for "reason: <reason for skipping test>"
|
|
|
|
if ( $line =~ /analyze: (.*)/ )
|
|
|
|
{
|
|
|
|
$analyze= $1;
|
|
|
|
}
|
|
|
|
}
|
2006-08-21 09:53:04 +02:00
|
|
|
|
2008-08-04 21:54:44 +02:00
|
|
|
return $analyze;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2009-03-31 15:39:40 +02:00
|
|
|
# The test can leave a file in var/tmp/ to signal
|
|
|
|
# that all servers should be restarted
|
|
|
|
sub restart_forced_by_test
|
|
|
|
{
|
|
|
|
my $restart = 0;
|
|
|
|
foreach my $mysqld ( mysqlds() )
|
|
|
|
{
|
|
|
|
my $datadir = $mysqld->value('datadir');
|
|
|
|
my $force_restart_file = "$datadir/mtr/force_restart";
|
|
|
|
if ( -f $force_restart_file )
|
|
|
|
{
|
|
|
|
mtr_verbose("Restart of servers forced by test");
|
|
|
|
$restart = 1;
|
|
|
|
last;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $restart;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Return timezone value of tinfo or default value
|
|
|
|
sub timezone {
|
|
|
|
my ($tinfo)= @_;
|
2010-08-17 09:14:46 +02:00
|
|
|
local $_ = $tinfo->{timezone};
|
|
|
|
return 'DEFAULT' unless defined $_;
|
2010-08-25 22:22:33 +02:00
|
|
|
no warnings 'uninitialized';
|
|
|
|
s/\$\{(\w+)\}/$ENV{$1}/ge;
|
|
|
|
s/\$(\w+)/$ENV{$1}/ge;
|
2010-08-17 09:14:46 +02:00
|
|
|
$_;
|
2007-12-12 18:19:24 +01:00
|
|
|
}
|
2006-08-21 09:53:04 +02:00
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
sub mycnf_create {
|
|
|
|
my ($config) = @_;
|
|
|
|
my $res;
|
|
|
|
|
|
|
|
foreach my $group ($config->groups()) {
|
|
|
|
$res .= "[$group->{name}]\n";
|
|
|
|
|
|
|
|
foreach my $option ($group->options()) {
|
|
|
|
$res .= $option->name();
|
|
|
|
my $value= $option->value();
|
|
|
|
if (defined $value) {
|
|
|
|
$res .= "=$value";
|
|
|
|
}
|
|
|
|
$res .= "\n";
|
|
|
|
}
|
|
|
|
$res .= "\n";
|
|
|
|
}
|
|
|
|
$res;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub config_files($) {
|
|
|
|
my ($tinfo) = @_;
|
|
|
|
(
|
|
|
|
'my.cnf' => \&mycnf_create,
|
|
|
|
$suites{$tinfo->{suite}}->config_files()
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub _like { return $config ? $config->like($_[0]) : (); }
|
|
|
|
sub mysqlds { return _like('mysqld\.'); }
|
|
|
|
sub ndbds { return _like('cluster_config\.ndbd\.');}
|
|
|
|
sub ndb_mgmds { return _like('cluster_config\.ndb_mgmd\.'); }
|
|
|
|
|
|
|
|
sub fix_servers($) {
|
|
|
|
my ($tinfo) = @_;
|
|
|
|
return () unless $config;
|
|
|
|
my %servers = (
|
|
|
|
qr/mysqld\./ => {
|
|
|
|
SORT => 300,
|
|
|
|
START => \&mysql_server_start,
|
|
|
|
WAIT => \&mysql_server_wait,
|
|
|
|
},
|
|
|
|
qr/mysql_cluster\./ => {
|
|
|
|
SORT => 200,
|
|
|
|
START => \&ndbcluster_start,
|
|
|
|
WAIT => \&ndbcluster_wait_started,
|
|
|
|
},
|
|
|
|
qr/cluster_config\.ndb_mgmd\./ => {
|
|
|
|
SORT => 210,
|
|
|
|
START => undef,
|
|
|
|
},
|
|
|
|
qr/cluster_config\.ndbd\./ => {
|
|
|
|
SORT => 220,
|
|
|
|
START => undef,
|
|
|
|
},
|
|
|
|
$suites{$tinfo->{suite}}->servers()
|
|
|
|
);
|
|
|
|
for ($config->groups()) {
|
|
|
|
while (my ($re,$prop) = each %servers) {
|
|
|
|
@$_{keys %$prop} = values %$prop if $_->{name} =~ /^$re/;
|
|
|
|
}
|
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
}
|
2006-08-21 09:53:04 +02:00
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
sub all_servers {
|
|
|
|
return unless $config;
|
|
|
|
( sort { $a->{SORT} <=> $b->{SORT} }
|
|
|
|
grep { defined $_->{SORT} } $config->groups() );
|
|
|
|
}
|
2006-08-21 09:53:04 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Storage for changed environment variables
|
|
|
|
my %old_env;
|
2006-08-21 09:53:04 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
#
|
|
|
|
# Run a single test case
|
|
|
|
#
|
2008-01-10 10:44:18 +01:00
|
|
|
# RETURN VALUE
|
|
|
|
# 0 OK
|
|
|
|
# > 0 failure
|
|
|
|
#
|
2006-08-21 09:53:04 +02:00
|
|
|
|
2009-03-20 15:18:22 +01:00
|
|
|
sub run_testcase ($$) {
|
|
|
|
my ($tinfo, $server_socket)= @_;
|
2006-08-21 09:53:04 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_verbose("Running test:", $tinfo->{name});
|
|
|
|
|
2010-01-05 13:31:38 +01:00
|
|
|
# Allow only alpanumerics pluss _ - + . in combination names,
|
|
|
|
# or anything beginning with -- (the latter comes from --combination)
|
2009-10-08 11:14:42 +02:00
|
|
|
my $combination= $tinfo->{combination};
|
2010-01-05 13:31:38 +01:00
|
|
|
if ($combination && $combination !~ /^\w[-\w\.\+]+$/
|
|
|
|
&& $combination !~ /^--/)
|
2009-10-08 11:14:42 +02:00
|
|
|
{
|
|
|
|
mtr_error("Combination '$combination' contains illegal characters");
|
|
|
|
}
|
2006-10-20 17:09:07 +02:00
|
|
|
# -------------------------------------------------------
|
|
|
|
# Init variables that can change between each test case
|
|
|
|
# -------------------------------------------------------
|
2007-12-12 18:19:24 +01:00
|
|
|
my $timezone= timezone($tinfo);
|
2010-01-19 11:36:52 +01:00
|
|
|
if ($timezone ne 'DEFAULT') {
|
|
|
|
$ENV{'TZ'}= $timezone;
|
2010-01-27 18:41:05 +01:00
|
|
|
} else {
|
|
|
|
delete($ENV{'TZ'});
|
2010-01-19 11:36:52 +01:00
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_verbose("Setting timezone: $timezone");
|
2006-10-20 17:09:07 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( ! using_extern() )
|
2006-08-16 10:30:22 +02:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
my @restart= servers_need_restart($tinfo);
|
|
|
|
if ( @restart != 0) {
|
2009-03-20 15:18:22 +01:00
|
|
|
# Remember that we restarted for this test case (count restarts)
|
|
|
|
$tinfo->{'restarted'}= 1;
|
2010-08-17 09:14:46 +02:00
|
|
|
stop_servers(reverse @restart);
|
2009-03-20 15:18:22 +01:00
|
|
|
if ($opt_warnings) {
|
|
|
|
check_warnings_post_shutdown($server_socket);
|
|
|
|
}
|
2005-08-29 20:28:42 +02:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( started(all_servers()) == 0 )
|
|
|
|
{
|
2006-11-28 19:54:16 +01:00
|
|
|
|
2008-04-27 15:32:12 +02:00
|
|
|
# Remove old datadirs
|
2009-04-30 13:23:36 +02:00
|
|
|
clean_datadir() unless $opt_start_dirty;
|
2006-11-28 19:54:16 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Restore old ENV
|
|
|
|
while (my ($option, $value)= each( %old_env )) {
|
|
|
|
if (defined $value){
|
|
|
|
mtr_verbose("Restoring $option to $value");
|
|
|
|
$ENV{$option}= $value;
|
2008-08-04 07:04:47 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
} else {
|
|
|
|
mtr_verbose("Removing $option");
|
|
|
|
delete($ENV{$option});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
%old_env= ();
|
|
|
|
|
|
|
|
mtr_verbose("Generating my.cnf from '$tinfo->{template_path}'");
|
|
|
|
|
|
|
|
# Generate new config file from template
|
|
|
|
$config= My::ConfigFactory->new_config
|
|
|
|
( {
|
|
|
|
basedir => $basedir,
|
|
|
|
template_path => $tinfo->{template_path},
|
|
|
|
extra_template_path => $tinfo->{extra_template_path},
|
|
|
|
vardir => $opt_vardir,
|
|
|
|
tmpdir => $opt_tmpdir,
|
2008-08-10 19:46:43 +02:00
|
|
|
baseport => $baseport,
|
2007-12-12 18:19:24 +01:00
|
|
|
user => $opt_user,
|
|
|
|
password => '',
|
2007-12-13 15:02:50 +01:00
|
|
|
ssl => $opt_ssl_supported,
|
2008-02-22 15:38:10 +01:00
|
|
|
embedded => $opt_embedded_server,
|
2007-12-12 18:19:24 +01:00
|
|
|
}
|
|
|
|
);
|
2006-11-28 19:54:16 +01:00
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
fix_servers($tinfo);
|
|
|
|
|
|
|
|
# Write config files:
|
|
|
|
my %config_files = config_files($tinfo);
|
|
|
|
while (my ($file, $generate) = each %config_files) {
|
|
|
|
my ($path) = "$opt_vardir/$file";
|
|
|
|
open (F, '>', $path) or die "Could not open '$path': $!";
|
|
|
|
print F &$generate($config);
|
|
|
|
close F;
|
|
|
|
}
|
2006-11-28 19:54:16 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Remember current config so a restart can occur when a test need
|
|
|
|
# to use a different one
|
|
|
|
$current_config_name= $tinfo->{template_path};
|
|
|
|
|
|
|
|
#
|
|
|
|
# Set variables in the ENV section
|
|
|
|
#
|
|
|
|
foreach my $option ($config->options_in_group("ENV"))
|
|
|
|
{
|
|
|
|
# Save old value to restore it before next time
|
|
|
|
$old_env{$option->name()}= $ENV{$option->name()};
|
|
|
|
|
|
|
|
mtr_verbose($option->name(), "=",$option->value());
|
|
|
|
$ENV{$option->name()}= $option->value();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# Write start of testcase to log
|
2008-02-25 16:41:59 +01:00
|
|
|
mark_log($path_current_testlog, $tinfo);
|
2007-12-12 18:19:24 +01:00
|
|
|
|
|
|
|
if (start_servers($tinfo))
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2006-10-06 17:15:26 +02:00
|
|
|
report_failure_and_restart($tinfo);
|
|
|
|
return 1;
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2006-08-16 10:30:22 +02:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# --------------------------------------------------------------------
|
|
|
|
# If --start or --start-dirty given, stop here to let user manually
|
2006-04-21 04:17:14 +02:00
|
|
|
# run tests
|
2009-04-29 16:13:38 +02:00
|
|
|
# If --wait-all is also given, do the same, but don't die if one
|
|
|
|
# server exits
|
2005-08-17 03:35:50 +02:00
|
|
|
# ----------------------------------------------------------------------
|
2009-04-29 16:13:38 +02:00
|
|
|
|
2009-08-18 09:38:18 +02:00
|
|
|
if ( $start_only )
|
2005-08-17 03:35:50 +02:00
|
|
|
{
|
2008-05-09 11:50:36 +02:00
|
|
|
mtr_print("\nStarted", started(all_servers()));
|
2009-08-18 09:38:18 +02:00
|
|
|
mtr_print("Using config for test", $tinfo->{name});
|
|
|
|
mtr_print("Port and socket path for server(s):");
|
|
|
|
foreach my $mysqld ( mysqlds() )
|
|
|
|
{
|
|
|
|
mtr_print ($mysqld->name() . " " . $mysqld->value('port') .
|
|
|
|
" " . $mysqld->value('socket'));
|
|
|
|
}
|
2008-05-09 11:50:36 +02:00
|
|
|
mtr_print("Waiting for server(s) to exit...");
|
2009-04-29 16:13:38 +02:00
|
|
|
if ( $opt_wait_all ) {
|
|
|
|
My::SafeProcess->wait_all();
|
|
|
|
mtr_print( "All servers exited" );
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
my $proc= My::SafeProcess->wait_any();
|
|
|
|
if ( grep($proc eq $_, started(all_servers())) )
|
|
|
|
{
|
|
|
|
mtr_print("Server $proc died");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
mtr_print("Unknown process $proc died");
|
2008-01-18 22:30:38 +01:00
|
|
|
exit(1);
|
2008-10-02 16:29:41 +02:00
|
|
|
}
|
2005-08-17 03:35:50 +02:00
|
|
|
}
|
|
|
|
|
2009-11-24 09:12:48 +01:00
|
|
|
my $test_timeout= start_timer(testcase_timeout());
|
2007-12-12 18:19:24 +01:00
|
|
|
|
|
|
|
do_before_run_mysqltest($tinfo);
|
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
if ( $opt_check_testcases and check_testcase($tinfo, "before") ){
|
|
|
|
# Failed to record state of server or server crashed
|
|
|
|
report_failure_and_restart($tinfo);
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
return 1;
|
2007-12-12 18:19:24 +01:00
|
|
|
}
|
2006-11-21 22:12:45 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $test= start_mysqltest($tinfo);
|
2009-04-08 14:54:36 +02:00
|
|
|
# Set only when we have to keep waiting after expectedly died server
|
|
|
|
my $keep_waiting_proc = 0;
|
2006-11-21 21:32:58 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
while (1)
|
|
|
|
{
|
2009-04-08 14:54:36 +02:00
|
|
|
my $proc;
|
|
|
|
if ($keep_waiting_proc)
|
|
|
|
{
|
|
|
|
# Any other process exited?
|
|
|
|
$proc = My::SafeProcess->check_any();
|
|
|
|
if ($proc)
|
|
|
|
{
|
|
|
|
mtr_verbose ("Found exited process $proc");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$proc = $keep_waiting_proc;
|
2009-11-24 09:12:48 +01:00
|
|
|
# Also check if timer has expired, if so cancel waiting
|
|
|
|
if ( has_expired($test_timeout) )
|
|
|
|
{
|
|
|
|
$keep_waiting_proc = 0;
|
|
|
|
}
|
2009-04-08 14:54:36 +02:00
|
|
|
}
|
|
|
|
}
|
2009-11-24 09:12:48 +01:00
|
|
|
if (! $keep_waiting_proc)
|
2009-04-08 14:54:36 +02:00
|
|
|
{
|
2009-11-24 09:12:48 +01:00
|
|
|
$proc= My::SafeProcess->wait_any_timeout($test_timeout);
|
2009-04-08 14:54:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
# Will be restored if we need to keep waiting
|
|
|
|
$keep_waiting_proc = 0;
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
unless ( defined $proc )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_error("wait_any failed");
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_verbose("Got $proc");
|
|
|
|
|
|
|
|
# ----------------------------------------------------
|
|
|
|
# Was it the test program that exited
|
|
|
|
# ----------------------------------------------------
|
|
|
|
if ($proc eq $test)
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
my $res= $test->exit_status();
|
|
|
|
|
2008-11-14 13:19:37 +01:00
|
|
|
if ($res == 0 and $opt_warnings and check_warnings($tinfo) )
|
2007-12-12 18:19:24 +01:00
|
|
|
{
|
2008-11-14 13:19:37 +01:00
|
|
|
# Test case suceeded, but it has produced unexpected
|
|
|
|
# warnings, continue in $res == 1
|
|
|
|
$res= 1;
|
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
|
2008-11-14 13:19:37 +01:00
|
|
|
if ( $res == 0 )
|
|
|
|
{
|
2008-04-27 21:31:32 +02:00
|
|
|
my $check_res;
|
2009-03-31 15:39:40 +02:00
|
|
|
if ( restart_forced_by_test() )
|
|
|
|
{
|
2009-10-06 10:35:35 +02:00
|
|
|
stop_all_servers($opt_shutdown_timeout);
|
2009-03-31 15:39:40 +02:00
|
|
|
}
|
|
|
|
elsif ( $opt_check_testcases and
|
2008-04-27 21:31:32 +02:00
|
|
|
$check_res= check_testcase($tinfo, "after"))
|
2007-12-12 18:19:24 +01:00
|
|
|
{
|
2008-04-27 21:31:32 +02:00
|
|
|
if ($check_res == 1) {
|
|
|
|
# Test case had sideeffects, not fatal error, just continue
|
2009-03-20 15:18:22 +01:00
|
|
|
if ($opt_warnings) {
|
|
|
|
# Checking error logs for warnings, so need to stop server
|
|
|
|
# gracefully so that memory leaks etc. can be properly detected.
|
2010-08-17 09:14:46 +02:00
|
|
|
stop_servers(reverse all_servers());
|
2009-03-20 15:18:22 +01:00
|
|
|
check_warnings_post_shutdown($server_socket);
|
|
|
|
# Even if we got warnings here, we should not fail this
|
|
|
|
# particular test, as the warnings may be caused by an earlier
|
|
|
|
# test.
|
|
|
|
} else {
|
|
|
|
# Not checking warnings, so can do a hard shutdown.
|
2009-11-16 21:49:51 +01:00
|
|
|
stop_all_servers($opt_shutdown_timeout);
|
2009-03-20 15:18:22 +01:00
|
|
|
}
|
2008-04-27 21:31:32 +02:00
|
|
|
mtr_report("Resuming tests...\n");
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
# Test case check failed fatally, probably a server crashed
|
|
|
|
report_failure_and_restart($tinfo);
|
|
|
|
return 1;
|
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
}
|
2008-11-14 13:19:37 +01:00
|
|
|
mtr_report_test_passed($tinfo);
|
2007-12-12 18:19:24 +01:00
|
|
|
}
|
|
|
|
elsif ( $res == 62 )
|
|
|
|
{
|
|
|
|
# Testcase itself tell us to skip this one
|
|
|
|
$tinfo->{skip_detected_by_test}= 1;
|
2008-02-25 16:41:59 +01:00
|
|
|
# Try to get reason from test log file
|
2007-12-12 18:19:24 +01:00
|
|
|
find_testcase_skipped_reason($tinfo);
|
|
|
|
mtr_report_test_skipped($tinfo);
|
|
|
|
}
|
|
|
|
elsif ( $res == 65 )
|
|
|
|
{
|
|
|
|
# Testprogram killed by signal
|
|
|
|
$tinfo->{comment}=
|
|
|
|
"testprogram crashed(returned code $res)";
|
|
|
|
report_failure_and_restart($tinfo);
|
|
|
|
}
|
|
|
|
elsif ( $res == 1 )
|
|
|
|
{
|
2008-08-04 21:54:44 +02:00
|
|
|
# Check if the test tool requests that
|
|
|
|
# an analyze script should be run
|
|
|
|
my $analyze= find_analyze_request();
|
|
|
|
if ($analyze){
|
|
|
|
run_on_all($tinfo, "analyze-$analyze");
|
|
|
|
}
|
|
|
|
|
2009-11-19 09:58:50 +01:00
|
|
|
# Wait a bit and see if a server died, if so report that instead
|
|
|
|
mtr_milli_sleep(100);
|
|
|
|
my $srvproc= My::SafeProcess::check_any();
|
|
|
|
if ($srvproc && grep($srvproc eq $_, started(all_servers()))) {
|
|
|
|
$proc= $srvproc;
|
|
|
|
goto SRVDIED;
|
|
|
|
}
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Test case failure reported by mysqltest
|
|
|
|
report_failure_and_restart($tinfo);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
# mysqltest failed, probably crashed
|
|
|
|
$tinfo->{comment}=
|
2009-12-15 10:12:24 +01:00
|
|
|
"mysqltest failed with unexpected return code $res\n";
|
2007-12-12 18:19:24 +01:00
|
|
|
report_failure_and_restart($tinfo);
|
|
|
|
}
|
|
|
|
|
|
|
|
# Save info from this testcase run to mysqltest.log
|
2008-02-25 16:41:59 +01:00
|
|
|
if( -f $path_current_testlog)
|
|
|
|
{
|
|
|
|
mtr_appendfile_to_file($path_current_testlog, $path_testlog);
|
|
|
|
unlink($path_current_testlog);
|
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
|
2008-01-10 10:44:18 +01:00
|
|
|
return ($res == 62) ? 0 : $res;
|
2006-07-19 14:25:52 +02:00
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
|
|
|
|
# ----------------------------------------------------
|
|
|
|
# Check if it was an expected crash
|
|
|
|
# ----------------------------------------------------
|
2009-11-19 09:58:50 +01:00
|
|
|
SRVDIED:
|
2009-04-08 14:54:36 +02:00
|
|
|
my $check_crash = check_expected_crash_and_restart($proc);
|
|
|
|
if ($check_crash)
|
2005-08-18 00:16:44 +02:00
|
|
|
{
|
2009-04-08 14:54:36 +02:00
|
|
|
# Keep waiting if it returned 2, if 1 don't wait or stop waiting.
|
|
|
|
$keep_waiting_proc = 0 if $check_crash == 1;
|
|
|
|
$keep_waiting_proc = $proc if $check_crash == 2;
|
2007-12-12 18:19:24 +01:00
|
|
|
next;
|
2005-08-18 00:16:44 +02:00
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
|
2008-04-10 13:16:32 +02:00
|
|
|
# ----------------------------------------------------
|
|
|
|
# Stop the test case timer
|
|
|
|
# ----------------------------------------------------
|
2009-11-24 09:12:48 +01:00
|
|
|
$test_timeout= 0;
|
2008-04-10 13:16:32 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# ----------------------------------------------------
|
|
|
|
# Check if it was a server that died
|
|
|
|
# ----------------------------------------------------
|
|
|
|
if ( grep($proc eq $_, started(all_servers())) )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
# Server failed, probably crashed
|
|
|
|
$tinfo->{comment}=
|
2009-10-14 09:31:34 +02:00
|
|
|
"Server $proc failed during test run" .
|
|
|
|
get_log_from_proc($proc, $tinfo->{name});
|
2007-12-12 18:19:24 +01:00
|
|
|
|
2009-01-21 10:34:01 +01:00
|
|
|
# ----------------------------------------------------
|
|
|
|
# It's not mysqltest that has exited, kill it
|
|
|
|
# ----------------------------------------------------
|
|
|
|
$test->kill();
|
|
|
|
|
2006-10-17 10:31:06 +02:00
|
|
|
report_failure_and_restart($tinfo);
|
2008-01-10 10:44:18 +01:00
|
|
|
return 1;
|
2006-10-17 10:31:06 +02:00
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
|
2009-01-21 10:34:01 +01:00
|
|
|
# Try to dump core for mysqltest and all servers
|
|
|
|
foreach my $proc ($test, started(all_servers()))
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2009-01-21 10:34:01 +01:00
|
|
|
mtr_print("Trying to dump core for $proc");
|
|
|
|
if ($proc->dump_core())
|
|
|
|
{
|
|
|
|
$proc->wait_one(20);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# ----------------------------------------------------
|
|
|
|
# It's not mysqltest that has exited, kill it
|
|
|
|
# ----------------------------------------------------
|
|
|
|
$test->kill();
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# ----------------------------------------------------
|
|
|
|
# Check if testcase timer expired
|
|
|
|
# ----------------------------------------------------
|
2009-11-24 09:12:48 +01:00
|
|
|
if ( $proc->{timeout} )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2008-11-14 21:35:32 +01:00
|
|
|
my $log_file_name= $opt_vardir."/log/".$tinfo->{shortname}.".log";
|
2006-10-17 10:31:06 +02:00
|
|
|
$tinfo->{comment}=
|
2008-11-21 13:45:28 +01:00
|
|
|
"Test case timeout after ".testcase_timeout().
|
|
|
|
" seconds\n\n";
|
2008-11-15 12:40:40 +01:00
|
|
|
# Add 20 last executed commands from test case log file
|
2008-11-14 21:35:32 +01:00
|
|
|
if (-e $log_file_name)
|
|
|
|
{
|
|
|
|
$tinfo->{comment}.=
|
2008-11-21 13:45:28 +01:00
|
|
|
"== $log_file_name == \n".
|
|
|
|
mtr_lastlinesfromfile($log_file_name, 20)."\n";
|
2008-11-14 21:35:32 +01:00
|
|
|
}
|
2008-11-21 13:45:28 +01:00
|
|
|
$tinfo->{'timeout'}= testcase_timeout(); # Mark as timeout
|
2008-08-04 21:54:44 +02:00
|
|
|
run_on_all($tinfo, 'analyze-timeout');
|
2009-01-21 10:34:01 +01:00
|
|
|
|
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
|
|
|
report_failure_and_restart($tinfo);
|
2008-01-10 10:44:18 +01:00
|
|
|
return 1;
|
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
|
|
|
}
|
2006-11-27 00:47:38 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_error("Unhandled process $proc exited");
|
2005-08-29 20:28:42 +02:00
|
|
|
}
|
2008-01-10 10:44:18 +01:00
|
|
|
mtr_error("Should never come here");
|
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2006-03-13 10:30:36 +01:00
|
|
|
|
2009-03-20 15:18:22 +01:00
|
|
|
# We want to preserve the error log between server restarts, as it may contain
|
|
|
|
# valuable debugging information even if there is no test failure recorded.
|
|
|
|
sub _preserve_error_log_names {
|
|
|
|
my ($mysqld)= @_;
|
2010-08-17 09:14:46 +02:00
|
|
|
my $error_log_file= $mysqld->if_exist('#log-error');
|
|
|
|
return unless $error_log_file and -r $error_log_file;
|
2009-03-20 15:18:22 +01:00
|
|
|
my $error_log_dir= dirname($error_log_file);
|
|
|
|
my $save_name= $error_log_dir ."/../". $mysqld->name() .".error.log";
|
|
|
|
return ($error_log_file, $save_name);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub preserve_error_log {
|
|
|
|
my ($mysqld)= @_;
|
|
|
|
my ($error_log_file, $save_name)= _preserve_error_log_names($mysqld);
|
2010-08-17 09:14:46 +02:00
|
|
|
rename($error_log_file, $save_name) if $save_name;
|
2009-03-20 15:18:22 +01:00
|
|
|
# Ignore any errors, as it's just a best-effort to keep the log if possible.
|
|
|
|
}
|
|
|
|
|
|
|
|
sub restore_error_log {
|
|
|
|
my ($mysqld)= @_;
|
|
|
|
my ($error_log_file, $save_name)= _preserve_error_log_names($mysqld);
|
2010-08-17 09:14:46 +02:00
|
|
|
rename($save_name, $error_log_file) if $save_name;
|
2009-03-20 15:18:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
# Keep track of last position in mysqld error log where we scanned for
|
|
|
|
# warnings, so we can attribute any warnings found to the correct test
|
|
|
|
# suite or server restart.
|
|
|
|
my $last_warning_position= { };
|
|
|
|
|
|
|
|
# Called just before a mysqld server is started or a testcase is run,
|
|
|
|
# to keep track of which tests have been run since last restart, and
|
|
|
|
# of when the error log is reset.
|
|
|
|
#
|
|
|
|
# Second argument $test_name is test name, or undef for server restart.
|
|
|
|
sub pre_write_errorlog {
|
|
|
|
my ($error_log, $test_name)= @_;
|
|
|
|
|
|
|
|
if (! -e $error_log) {
|
|
|
|
# If the error log is moved away, reset the warning parse position.
|
|
|
|
delete $last_warning_position->{$error_log};
|
|
|
|
}
|
|
|
|
|
|
|
|
if (defined($test_name)) {
|
|
|
|
$last_warning_position->{$error_log}{test_names}= []
|
|
|
|
unless exists($last_warning_position->{$error_log}{test_names});
|
|
|
|
push @{$last_warning_position->{$error_log}{test_names}}, $test_name;
|
|
|
|
} else {
|
|
|
|
# Server restart, so clear the list of tests run since last restart.
|
|
|
|
# (except the last one (if any), which is the test about to be run).
|
|
|
|
if (defined($last_warning_position->{$error_log}{test_names}) &&
|
|
|
|
@{$last_warning_position->{$error_log}{test_names}}) {
|
|
|
|
$last_warning_position->{$error_log}{test_names}=
|
|
|
|
[$last_warning_position->{$error_log}{test_names}[-1]];
|
|
|
|
} else {
|
|
|
|
$last_warning_position->{$error_log}{test_names}= [];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-10-14 09:31:34 +02:00
|
|
|
# Extract server log from after the last occurrence of named test
|
|
|
|
# Return as an array of lines
|
2006-03-13 10:30:36 +01:00
|
|
|
#
|
2009-10-14 09:31:34 +02:00
|
|
|
|
|
|
|
sub extract_server_log ($$) {
|
2009-08-28 15:02:48 +02:00
|
|
|
my ($error_log, $tname) = @_;
|
2010-08-17 09:14:46 +02:00
|
|
|
|
|
|
|
return unless $error_log;
|
2009-01-27 14:53:58 +01:00
|
|
|
|
|
|
|
# Open the servers .err log file and read all lines
|
2009-11-11 12:17:49 +01:00
|
|
|
# belonging to current test into @lines
|
2009-01-27 14:53:58 +01:00
|
|
|
my $Ferr = IO::File->new($error_log)
|
2009-11-23 15:04:17 +01:00
|
|
|
or mtr_error("Could not open file '$error_log' for reading: $!");
|
2009-03-20 15:18:22 +01:00
|
|
|
|
2009-11-23 15:04:17 +01:00
|
|
|
my @lines;
|
|
|
|
my $found_test= 0; # Set once we've found the log of this test
|
|
|
|
while ( my $line = <$Ferr> )
|
2006-03-13 10:30:36 +01:00
|
|
|
{
|
2009-11-23 15:04:17 +01:00
|
|
|
if ($found_test)
|
2009-01-27 14:53:58 +01:00
|
|
|
{
|
2009-11-23 15:04:17 +01:00
|
|
|
# If test wasn't last after all, discard what we found, test again.
|
|
|
|
if ( $line =~ /^CURRENT_TEST:/)
|
|
|
|
{
|
|
|
|
@lines= ();
|
|
|
|
$found_test= $line =~ /^CURRENT_TEST: $tname/;
|
2009-01-27 14:53:58 +01:00
|
|
|
}
|
2009-11-23 15:04:17 +01:00
|
|
|
else
|
|
|
|
{
|
|
|
|
push(@lines, $line);
|
2009-01-27 14:53:58 +01:00
|
|
|
}
|
|
|
|
}
|
2009-11-23 15:04:17 +01:00
|
|
|
else
|
|
|
|
{
|
|
|
|
# Search for beginning of test, until found
|
|
|
|
$found_test= 1 if ($line =~ /^CURRENT_TEST: $tname/);
|
|
|
|
}
|
2009-01-27 14:53:58 +01:00
|
|
|
}
|
2009-11-23 15:04:17 +01:00
|
|
|
$Ferr = undef; # Close error log file
|
|
|
|
|
2009-10-14 09:31:34 +02:00
|
|
|
return @lines;
|
|
|
|
}
|
|
|
|
|
|
|
|
# Get log from server identified from its $proc object, from named test
|
|
|
|
# Return as a single string
|
|
|
|
#
|
|
|
|
|
|
|
|
sub get_log_from_proc ($$) {
|
|
|
|
my ($proc, $name)= @_;
|
|
|
|
my $srv_log= "";
|
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
foreach my $mysqld (all_servers()) {
|
2009-10-14 09:31:34 +02:00
|
|
|
if ($mysqld->{proc} eq $proc) {
|
2010-08-17 09:14:46 +02:00
|
|
|
my @srv_lines= extract_server_log($mysqld->if_exist('#log-error'), $name);
|
2009-10-14 09:31:34 +02:00
|
|
|
$srv_log= "\nServer log from this test:\n" . join ("", @srv_lines);
|
|
|
|
last;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $srv_log;
|
|
|
|
}
|
2009-01-27 14:53:58 +01:00
|
|
|
|
2009-11-23 15:04:17 +01:00
|
|
|
#
|
2009-10-14 09:31:34 +02:00
|
|
|
# Perform a rough examination of the servers
|
|
|
|
# error log and write all lines that look
|
|
|
|
# suspicious into $error_log.warnings
|
|
|
|
#
|
2009-11-23 15:04:17 +01:00
|
|
|
sub extract_warning_lines ($) {
|
|
|
|
my ($error_log) = @_;
|
2009-10-14 09:31:34 +02:00
|
|
|
|
2009-11-23 15:04:17 +01:00
|
|
|
# Open the servers .err log file and read all lines
|
|
|
|
# belonging to current tets into @lines
|
|
|
|
my $Ferr = IO::File->new($error_log)
|
|
|
|
or return [];
|
|
|
|
my $last_pos= $last_warning_position->{$error_log}{seek_pos};
|
|
|
|
$Ferr->seek($last_pos, 0) if defined($last_pos);
|
|
|
|
# If the seek fails, we will parse the whole error log, at least we will not
|
|
|
|
# miss any warnings.
|
|
|
|
|
|
|
|
my @lines= <$Ferr>;
|
|
|
|
$last_warning_position->{$error_log}{seek_pos}= $Ferr->tell();
|
|
|
|
$Ferr = undef; # Close error log file
|
|
|
|
|
|
|
|
# mysql_client_test.test sends a COM_DEBUG packet to the server
|
|
|
|
# to provoke a SAFEMALLOC leak report, ignore any warnings
|
|
|
|
# between "Begin/end safemalloc memory dump"
|
|
|
|
if ( grep(/Begin safemalloc memory dump:/, @lines) > 0)
|
|
|
|
{
|
|
|
|
my $discard_lines= 1;
|
|
|
|
foreach my $line ( @lines )
|
|
|
|
{
|
|
|
|
if ($line =~ /Begin safemalloc memory dump:/){
|
|
|
|
$discard_lines = 1;
|
|
|
|
} elsif ($line =~ /End safemalloc memory dump./){
|
|
|
|
$discard_lines = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($discard_lines){
|
|
|
|
$line = "ignored";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2009-01-27 14:53:58 +01:00
|
|
|
|
2009-11-23 15:04:17 +01:00
|
|
|
# Write all suspicious lines to $error_log.warnings file
|
2009-01-27 14:53:58 +01:00
|
|
|
my $warning_log = "$error_log.warnings";
|
|
|
|
my $Fwarn = IO::File->new($warning_log, "w")
|
|
|
|
or die("Could not open file '$warning_log' for writing: $!");
|
|
|
|
print $Fwarn "Suspicious lines from $error_log\n";
|
|
|
|
|
|
|
|
my @patterns =
|
|
|
|
(
|
2009-08-25 15:56:50 +02:00
|
|
|
qr/^Warning:|mysqld: Warning|\[Warning\]/,
|
|
|
|
qr/^Error:|\[ERROR\]/,
|
2009-11-12 11:04:01 +01:00
|
|
|
qr/^==\d+==\s+\S/, # valgrind errors
|
2009-01-27 14:53:58 +01:00
|
|
|
qr/InnoDB: Warning|InnoDB: Error/,
|
|
|
|
qr/^safe_mutex:|allocated at line/,
|
|
|
|
qr/missing DBUG_RETURN/,
|
|
|
|
qr/Attempting backtrace/,
|
|
|
|
qr/Assertion .* failed/,
|
|
|
|
);
|
2009-03-20 15:18:22 +01:00
|
|
|
# These are taken from the include/mtr_warnings.sql global suppression
|
|
|
|
# list. They occur delayed, so they can be parsed during shutdown rather
|
|
|
|
# than during the per-test check.
|
|
|
|
#
|
|
|
|
# ToDo: having the warning suppressions inside the mysqld we are trying to
|
|
|
|
# check is in any case horrible. We should change it to all be done here
|
|
|
|
# within the Perl code, which is both simpler, easier, faster, and more
|
|
|
|
# robust. We could still have individual test cases put in suppressions by
|
|
|
|
# parsing statically or by writing dynamically to a CSV table read by the
|
|
|
|
# Perl code.
|
|
|
|
my @antipatterns =
|
|
|
|
(
|
2009-11-16 21:49:51 +01:00
|
|
|
qr/error .*connecting to master/,
|
2010-08-17 09:14:46 +02:00
|
|
|
qr/Plugin 'ndbcluster' will be forced to shutdown/,
|
2009-03-20 15:18:22 +01:00
|
|
|
qr/InnoDB: Error: in ALTER TABLE `test`.`t[12]`/,
|
|
|
|
qr/InnoDB: Error: table `test`.`t[12]` does not exist in the InnoDB internal/,
|
2009-11-24 10:34:42 +01:00
|
|
|
qr/Slave: Unknown table 't1' Error_code: 1051/,
|
|
|
|
qr/Slave SQL:.*(Error_code: [[:digit:]]+|Query:.*)/,
|
|
|
|
qr/slave SQL thread aborted/,
|
2010-08-17 09:14:46 +02:00
|
|
|
qr/unknown option '--loose[-_]/,
|
|
|
|
qr/unknown variable 'loose[-_]/,
|
2010-09-08 01:00:12 +02:00
|
|
|
qr/Invalid .*old.* table or database name/,
|
2009-11-24 10:34:42 +01:00
|
|
|
qr/Now setting lower_case_table_names to [02]/,
|
2009-11-26 08:45:54 +01:00
|
|
|
qr/Setting lower_case_table_names=2/,
|
2010-08-11 12:55:54 +02:00
|
|
|
qr/You have forced lower_case_table_names to 0/,
|
2010-08-10 16:36:04 +02:00
|
|
|
qr/Plugin 'ndbcluster' will be forced to shutdow/,
|
2009-11-24 10:34:42 +01:00
|
|
|
qr/deprecated/,
|
2009-11-25 12:06:01 +01:00
|
|
|
qr/Slave SQL thread retried transaction/,
|
2009-11-26 09:02:33 +01:00
|
|
|
qr/Slave \(additional info\)/,
|
|
|
|
qr/Incorrect information in file/,
|
2009-11-27 14:20:59 +01:00
|
|
|
qr/Slave I\/O: Get master SERVER_ID failed with error:.*/,
|
|
|
|
qr/Slave I\/O: Get master clock failed with error:.*/,
|
|
|
|
qr/Slave I\/O: Get master COLLATION_SERVER failed with error:.*/,
|
|
|
|
qr/Slave I\/O: Get master TIME_ZONE failed with error:.*/,
|
|
|
|
qr/Slave I\/O: error reconnecting to master '.*' - retry-time: [1-3] retries/,
|
2010-04-07 17:26:30 +02:00
|
|
|
qr/Slave I\/0: Master command COM_BINLOG_DUMP failed/,
|
2009-12-03 12:19:05 +01:00
|
|
|
qr/Error reading packet/,
|
2010-04-07 17:26:30 +02:00
|
|
|
qr/Lost connection to MySQL server at 'reading initial communication packet'/,
|
|
|
|
qr/Failed on request_dump/,
|
2009-12-03 12:19:05 +01:00
|
|
|
qr/Slave: Can't drop database.* database doesn't exist/,
|
2010-01-06 22:27:53 +01:00
|
|
|
qr/Slave: Operation DROP USER failed for 'create_rout_db'/,
|
2010-03-04 09:03:07 +01:00
|
|
|
qr|Checking table: '\./mtr/test_suppressions'|,
|
2010-08-03 23:26:17 +02:00
|
|
|
qr|Table \./test/bug53592 has a primary key in InnoDB data dictionary, but not in MySQL|,
|
2010-03-04 09:03:07 +01:00
|
|
|
qr|mysqld: Table '\./mtr/test_suppressions' is marked as crashed and should be repaired|
|
2009-03-20 15:18:22 +01:00
|
|
|
);
|
2009-01-27 14:53:58 +01:00
|
|
|
|
2009-12-03 12:19:05 +01:00
|
|
|
my $matched_lines= [];
|
2009-03-20 15:18:22 +01:00
|
|
|
LINE: foreach my $line ( @lines )
|
2009-01-27 14:53:58 +01:00
|
|
|
{
|
2009-03-20 15:18:22 +01:00
|
|
|
PAT: foreach my $pat ( @patterns )
|
2009-01-27 14:53:58 +01:00
|
|
|
{
|
|
|
|
if ( $line =~ /$pat/ )
|
|
|
|
{
|
2009-03-20 15:18:22 +01:00
|
|
|
foreach my $apat (@antipatterns)
|
|
|
|
{
|
|
|
|
next LINE if $line =~ $apat;
|
|
|
|
}
|
2009-01-27 14:53:58 +01:00
|
|
|
print $Fwarn $line;
|
2009-12-03 12:19:05 +01:00
|
|
|
push @$matched_lines, $line;
|
2009-03-20 15:18:22 +01:00
|
|
|
last PAT;
|
2009-01-27 14:53:58 +01:00
|
|
|
}
|
|
|
|
}
|
2006-03-13 10:30:36 +01:00
|
|
|
}
|
2009-01-27 14:53:58 +01:00
|
|
|
$Fwarn = undef; # Close file
|
|
|
|
|
2009-12-03 12:19:05 +01:00
|
|
|
if (scalar(@$matched_lines) > 0 &&
|
2009-03-20 15:18:22 +01:00
|
|
|
defined($last_warning_position->{$error_log}{test_names})) {
|
2009-12-03 12:19:05 +01:00
|
|
|
return ($last_warning_position->{$error_log}{test_names}, $matched_lines);
|
2009-03-20 15:18:22 +01:00
|
|
|
} else {
|
2009-12-03 12:19:05 +01:00
|
|
|
return ([], $matched_lines);
|
2009-03-20 15:18:22 +01:00
|
|
|
}
|
2006-03-13 10:30:36 +01:00
|
|
|
}
|
|
|
|
|
2006-03-22 22:34:48 +01:00
|
|
|
|
2008-04-08 16:51:26 +02:00
|
|
|
# Run include/check-warnings.test
|
2006-03-22 22:34:48 +01:00
|
|
|
#
|
2008-04-08 16:51:26 +02:00
|
|
|
# RETURN VALUE
|
|
|
|
# 0 OK
|
|
|
|
# 1 Check failed
|
2006-03-22 22:34:48 +01:00
|
|
|
#
|
2008-04-27 21:31:32 +02:00
|
|
|
sub start_check_warnings ($$) {
|
2008-04-08 16:51:26 +02:00
|
|
|
my $tinfo= shift;
|
|
|
|
my $mysqld= shift;
|
|
|
|
|
|
|
|
my $name= "warnings-".$mysqld->name();
|
|
|
|
|
2009-03-02 13:48:35 +01:00
|
|
|
my $log_error= $mysqld->value('#log-error');
|
|
|
|
# To be communicated to the test
|
|
|
|
$ENV{MTR_LOG_ERROR}= $log_error;
|
2009-11-23 15:04:17 +01:00
|
|
|
extract_warning_lines($log_error);
|
2006-03-22 22:34:48 +01:00
|
|
|
|
2008-04-08 16:51:26 +02:00
|
|
|
my $args;
|
|
|
|
mtr_init_args(\$args);
|
|
|
|
|
|
|
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
|
|
|
mtr_add_arg($args, "--defaults-group-suffix=%s", $mysqld->after('mysqld'));
|
|
|
|
|
|
|
|
mtr_add_arg($args, "--skip-safemalloc");
|
|
|
|
mtr_add_arg($args, "--test-file=%s", "include/check-warnings.test");
|
|
|
|
|
2008-07-24 22:21:19 +02:00
|
|
|
if ( $opt_embedded_server )
|
2006-03-22 22:34:48 +01:00
|
|
|
{
|
2008-07-24 22:21:19 +02:00
|
|
|
|
|
|
|
# Get the args needed for the embedded server
|
|
|
|
# and append them to args prefixed
|
|
|
|
# with --sever-arg=
|
|
|
|
|
|
|
|
my $mysqld= $config->group('embedded')
|
|
|
|
or mtr_error("Could not get [embedded] section");
|
|
|
|
|
|
|
|
my $mysqld_args;
|
|
|
|
mtr_init_args(\$mysqld_args);
|
|
|
|
my $extra_opts= get_extra_opts($mysqld, $tinfo);
|
|
|
|
mysqld_arguments($mysqld_args, $mysqld, $extra_opts);
|
|
|
|
mtr_add_arg($args, "--server-arg=%s", $_) for @$mysqld_args;
|
|
|
|
}
|
|
|
|
|
2008-04-08 16:51:26 +02:00
|
|
|
my $errfile= "$opt_vardir/tmp/$name.err";
|
2008-04-27 21:31:32 +02:00
|
|
|
my $proc= My::SafeProcess->new
|
2008-04-08 16:51:26 +02:00
|
|
|
(
|
|
|
|
name => $name,
|
|
|
|
path => $exe_mysqltest,
|
|
|
|
error => $errfile,
|
|
|
|
output => $errfile,
|
|
|
|
args => \$args,
|
2010-03-10 11:32:14 +01:00
|
|
|
user_data => [$errfile, $mysqld],
|
2009-01-27 10:39:42 +01:00
|
|
|
verbose => $opt_verbose,
|
2008-04-08 16:51:26 +02:00
|
|
|
);
|
2008-04-27 21:31:32 +02:00
|
|
|
mtr_verbose("Started $proc");
|
|
|
|
return $proc;
|
2006-03-22 22:34:48 +01:00
|
|
|
}
|
|
|
|
|
2006-04-24 10:39:56 +02:00
|
|
|
|
2006-03-13 10:30:36 +01:00
|
|
|
#
|
2008-04-08 16:51:26 +02:00
|
|
|
# Loop through our list of processes and check the error log
|
2009-11-16 21:49:51 +01:00
|
|
|
# for unexpected errors and warnings
|
2006-03-13 10:30:36 +01:00
|
|
|
#
|
2008-04-08 16:51:26 +02:00
|
|
|
sub check_warnings ($) {
|
|
|
|
my ($tinfo)= @_;
|
|
|
|
my $res= 0;
|
2006-03-13 10:30:36 +01:00
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
my $tname= $tinfo->{name};
|
2006-03-13 10:30:36 +01:00
|
|
|
|
2008-04-08 16:51:26 +02:00
|
|
|
# Clear previous warnings
|
2008-04-24 13:02:53 +02:00
|
|
|
delete($tinfo->{warnings});
|
2006-03-13 11:30:16 +01:00
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
# Start the mysqltest processes in parallel to save time
|
|
|
|
# also makes it possible to wait for any process to exit during the check
|
|
|
|
my %started;
|
2008-04-08 16:51:26 +02:00
|
|
|
foreach my $mysqld ( mysqlds() )
|
|
|
|
{
|
2008-04-27 21:31:32 +02:00
|
|
|
if ( defined $mysqld->{'proc'} )
|
2006-06-10 21:20:14 +02:00
|
|
|
{
|
2008-04-27 21:31:32 +02:00
|
|
|
my $proc= start_check_warnings($tinfo, $mysqld);
|
|
|
|
$started{$proc->pid()}= $proc;
|
2006-03-13 10:30:36 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-04-28 12:20:42 +02:00
|
|
|
# Return immediately if no check proceess was started
|
|
|
|
return 0 unless ( keys %started );
|
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
|
|
|
|
2009-11-24 09:12:48 +01:00
|
|
|
my $timeout= start_timer(check_timeout());
|
2006-06-10 20:59:14 +02:00
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
while (1){
|
|
|
|
my $result= 0;
|
2009-11-24 09:12:48 +01:00
|
|
|
my $proc= My::SafeProcess->wait_any_timeout($timeout);
|
2008-04-27 21:31:32 +02:00
|
|
|
mtr_report("Got $proc");
|
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
if ( delete $started{$proc->pid()} ) {
|
|
|
|
# One check warning process returned
|
|
|
|
my $res= $proc->exit_status();
|
2010-03-10 11:32:14 +01:00
|
|
|
my ($err_file, $mysqld)= @{$proc->user_data()};
|
2006-03-13 10:30:36 +01:00
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
if ( $res == 0 or $res == 62 ){
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
if ( $res == 0 ) {
|
|
|
|
# Check completed with problem
|
2008-04-28 15:03:30 +02:00
|
|
|
my $report= mtr_grab_file($err_file);
|
2008-04-27 21:31:32 +02:00
|
|
|
# Log to var/log/warnings file
|
|
|
|
mtr_tofile("$opt_vardir/log/warnings",
|
|
|
|
$tname."\n".$report);
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
$tinfo->{'warnings'}.= $report;
|
|
|
|
$result= 1;
|
|
|
|
}
|
2007-05-01 20:05:09 +02:00
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
if ( $res == 62 ) {
|
|
|
|
# Test case was ok and called "skip"
|
2009-02-13 16:27:33 +01:00
|
|
|
# Remove the .err file the check generated
|
|
|
|
unlink($err_file);
|
2008-04-27 21:31:32 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( keys(%started) == 0){
|
|
|
|
# All checks completed
|
|
|
|
return $result;
|
|
|
|
}
|
|
|
|
# Wait for next process to exit
|
|
|
|
next;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2008-04-28 15:03:30 +02:00
|
|
|
my $report= mtr_grab_file($err_file);
|
2008-04-27 21:31:32 +02:00
|
|
|
$tinfo->{comment}.=
|
2008-11-14 13:19:37 +01:00
|
|
|
"Could not execute 'check-warnings' for ".
|
2010-03-10 11:32:14 +01:00
|
|
|
"testcase '$tname' (res: $res) server: '".
|
|
|
|
$mysqld->name() .":\n";
|
2008-04-27 21:31:32 +02:00
|
|
|
$tinfo->{comment}.= $report;
|
|
|
|
|
|
|
|
$result= 2;
|
|
|
|
}
|
|
|
|
}
|
2009-11-24 09:12:48 +01:00
|
|
|
elsif ( $proc->{timeout} ) {
|
|
|
|
$tinfo->{comment}.= "Timeout for 'check warnings' expired after "
|
|
|
|
.check_timeout()." seconds";
|
2008-11-21 13:45:28 +01:00
|
|
|
$result= 4;
|
|
|
|
}
|
2008-04-27 21:31:32 +02:00
|
|
|
else {
|
|
|
|
# Unknown process returned, most likley a crash, abort everything
|
|
|
|
$tinfo->{comment}=
|
2009-10-14 09:31:34 +02:00
|
|
|
"The server $proc crashed while running 'check warnings'".
|
|
|
|
get_log_from_proc($proc, $tinfo->{name});
|
2008-04-27 21:31:32 +02:00
|
|
|
$result= 3;
|
2007-05-01 20:05:09 +02:00
|
|
|
}
|
2008-04-27 21:31:32 +02:00
|
|
|
|
|
|
|
# Kill any check processes still running
|
|
|
|
map($_->kill(), values(%started));
|
|
|
|
|
|
|
|
return $result;
|
2007-05-01 20:05:09 +02:00
|
|
|
}
|
2008-04-27 21:31:32 +02:00
|
|
|
|
2008-11-21 13:45:28 +01:00
|
|
|
mtr_error("INTERNAL_ERROR: check_warnings");
|
2007-05-01 20:05:09 +02:00
|
|
|
}
|
|
|
|
|
2009-03-20 15:18:22 +01:00
|
|
|
# Check for warnings generated during shutdown of a mysqld server.
|
2009-11-16 21:49:51 +01:00
|
|
|
# If any, report them to master server, and return true; else just return
|
|
|
|
# false.
|
|
|
|
|
2009-03-20 15:18:22 +01:00
|
|
|
sub check_warnings_post_shutdown {
|
|
|
|
my ($server_socket)= @_;
|
|
|
|
my $testname_hash= { };
|
2009-12-03 12:19:05 +01:00
|
|
|
my $report= '';
|
2009-03-20 15:18:22 +01:00
|
|
|
foreach my $mysqld ( mysqlds())
|
|
|
|
{
|
2009-12-03 12:19:05 +01:00
|
|
|
my ($testlist, $match_lines)=
|
|
|
|
extract_warning_lines($mysqld->value('#log-error'));
|
2009-03-20 15:18:22 +01:00
|
|
|
$testname_hash->{$_}= 1 for @$testlist;
|
2009-12-03 12:19:05 +01:00
|
|
|
$report.= join('', @$match_lines);
|
2009-03-20 15:18:22 +01:00
|
|
|
}
|
|
|
|
my @warning_tests= keys(%$testname_hash);
|
|
|
|
if (@warning_tests) {
|
|
|
|
my $fake_test= My::Test->new(testnames => \@warning_tests);
|
2009-12-03 12:19:05 +01:00
|
|
|
$fake_test->{'warnings'}= $report;
|
2009-03-20 15:18:22 +01:00
|
|
|
$fake_test->write_test($server_socket, 'WARNINGS');
|
|
|
|
}
|
|
|
|
}
|
2007-05-01 20:05:09 +02:00
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
#
|
2007-12-12 18:19:24 +01:00
|
|
|
# Loop through our list of processes and look for and entry
|
|
|
|
# with the provided pid, if found check for the file indicating
|
|
|
|
# expected crash and restart it.
|
2004-12-30 16:34:01 +01:00
|
|
|
#
|
2007-12-12 18:19:24 +01:00
|
|
|
sub check_expected_crash_and_restart {
|
|
|
|
my ($proc)= @_;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
foreach my $mysqld ( mysqlds() )
|
2006-03-13 10:30:36 +01:00
|
|
|
{
|
2009-11-26 11:34:16 +01:00
|
|
|
next unless ( $mysqld->{proc} and $mysqld->{proc} eq $proc );
|
2006-04-24 10:39:56 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Check if crash expected by looking at the .expect file
|
|
|
|
# in var/tmp
|
|
|
|
my $expect_file= "$opt_vardir/tmp/".$mysqld->name().".expect";
|
|
|
|
if ( -f $expect_file )
|
|
|
|
{
|
2008-08-09 11:16:12 +02:00
|
|
|
mtr_verbose("Crash was expected, file '$expect_file' exists");
|
2006-10-04 23:05:12 +02:00
|
|
|
|
2009-04-08 14:54:36 +02:00
|
|
|
for (my $waits = 0; $waits < 50; $waits++)
|
|
|
|
{
|
2008-08-09 11:16:12 +02:00
|
|
|
# If last line in expect file starts with "wait"
|
|
|
|
# sleep a little and try again, thus allowing the
|
|
|
|
# test script to control when the server should start
|
2009-04-08 14:54:36 +02:00
|
|
|
# up again. Keep trying for up to 5s at a time.
|
2008-11-14 22:44:56 +01:00
|
|
|
my $last_line= mtr_lastlinesfromfile($expect_file, 1);
|
2008-08-09 11:16:12 +02:00
|
|
|
if ($last_line =~ /^wait/ )
|
|
|
|
{
|
2009-04-08 14:54:36 +02:00
|
|
|
mtr_verbose("Test says wait before restart") if $waits == 0;
|
2008-08-09 11:16:12 +02:00
|
|
|
mtr_milli_sleep(100);
|
|
|
|
next;
|
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-08-09 11:16:12 +02:00
|
|
|
unlink($expect_file);
|
2007-05-28 18:03:24 +02:00
|
|
|
|
2008-08-09 11:16:12 +02:00
|
|
|
# Start server with same settings as last time
|
|
|
|
mysqld_start($mysqld, $mysqld->{'started_opts'});
|
|
|
|
|
2009-04-08 14:54:36 +02:00
|
|
|
return 1;
|
2008-08-09 11:16:12 +02:00
|
|
|
}
|
2009-04-08 14:54:36 +02:00
|
|
|
# Loop ran through: we should keep waiting after a re-check
|
|
|
|
return 2;
|
2007-12-12 18:19:24 +01:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Not an expected crash
|
|
|
|
return 0;
|
2006-03-13 10:30:36 +01:00
|
|
|
}
|
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-05-05 00:21:12 +02:00
|
|
|
# Remove all files and subdirectories of a directory
|
|
|
|
sub clean_dir {
|
|
|
|
my ($dir)= @_;
|
2008-05-09 11:50:36 +02:00
|
|
|
mtr_verbose("clean_dir: $dir");
|
2008-05-05 00:21:12 +02:00
|
|
|
finddepth(
|
|
|
|
{ no_chdir => 1,
|
|
|
|
wanted => sub {
|
|
|
|
if (-d $_){
|
|
|
|
# A dir
|
|
|
|
if ($_ eq $dir){
|
|
|
|
# The dir to clean
|
|
|
|
return;
|
|
|
|
} else {
|
2008-05-09 11:50:36 +02:00
|
|
|
mtr_verbose("rmdir: '$_'");
|
2008-05-05 13:47:43 +02:00
|
|
|
rmdir($_) or mtr_warning("rmdir($_) failed: $!");
|
2008-05-05 00:21:12 +02:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
# Hopefully a file
|
2008-05-09 11:50:36 +02:00
|
|
|
mtr_verbose("unlink: '$_'");
|
2008-05-05 13:47:43 +02:00
|
|
|
unlink($_) or mtr_warning("unlink($_) failed: $!");
|
2008-05-05 00:21:12 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
$dir);
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2006-04-24 10:39:56 +02:00
|
|
|
|
2008-04-27 15:32:12 +02:00
|
|
|
sub clean_datadir {
|
|
|
|
mtr_verbose("Cleaning datadirs...");
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-05-05 22:55:47 +02:00
|
|
|
if (started(all_servers()) != 0){
|
|
|
|
mtr_error("Trying to clean datadir before all servers stopped");
|
|
|
|
}
|
2007-05-28 18:03:24 +02:00
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
for (all_servers())
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2010-08-17 09:14:46 +02:00
|
|
|
preserve_error_log($_); # or at least, try to
|
|
|
|
my $dir= "$opt_vardir/".$_->{name};
|
|
|
|
mtr_verbose(" - removing '$dir'");
|
|
|
|
rmtree($dir);
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2008-04-27 15:32:12 +02:00
|
|
|
# Remove all files in tmp and var/tmp
|
2008-05-05 00:21:12 +02:00
|
|
|
clean_dir("$opt_vardir/tmp");
|
2008-04-27 15:32:12 +02:00
|
|
|
if ($opt_tmpdir ne "$opt_vardir/tmp"){
|
2008-05-05 00:21:12 +02:00
|
|
|
clean_dir($opt_tmpdir);
|
2005-07-06 22:21:35 +02:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2006-04-24 10:39:56 +02:00
|
|
|
|
2008-04-27 15:32:12 +02:00
|
|
|
#
|
|
|
|
# Save datadir before it's removed
|
|
|
|
#
|
|
|
|
sub save_datadir_after_failure($$) {
|
|
|
|
my ($dir, $savedir)= @_;
|
2006-04-24 10:39:56 +02:00
|
|
|
|
2008-04-27 23:35:38 +02:00
|
|
|
mtr_report(" - saving '$dir'");
|
|
|
|
my $dir_name= basename($dir);
|
|
|
|
rename("$dir", "$savedir/$dir_name");
|
2008-04-27 15:32:12 +02:00
|
|
|
}
|
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-04-27 15:32:12 +02:00
|
|
|
sub after_failure ($) {
|
|
|
|
my ($tinfo)= @_;
|
2006-09-17 20:54:06 +02:00
|
|
|
|
2008-04-27 15:32:12 +02:00
|
|
|
mtr_report("Saving datadirs...");
|
2007-02-14 14:44:34 +01:00
|
|
|
|
2008-04-27 15:32:12 +02:00
|
|
|
my $save_dir= "$opt_vardir/log/";
|
|
|
|
$save_dir.= $tinfo->{name};
|
|
|
|
# Add combination name if any
|
2008-04-27 19:02:43 +02:00
|
|
|
$save_dir.= "-$tinfo->{combination}"
|
2008-04-27 15:32:12 +02:00
|
|
|
if defined $tinfo->{combination};
|
2006-10-04 12:47:32 +02:00
|
|
|
|
2008-04-27 23:35:38 +02:00
|
|
|
# Save savedir path for server
|
|
|
|
$tinfo->{savedir}= $save_dir;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-04-27 15:32:12 +02:00
|
|
|
mkpath($save_dir) if ! -d $save_dir;
|
2007-09-21 17:52:02 +02:00
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
# Save the used config files
|
|
|
|
my %config_files = config_files($tinfo);
|
|
|
|
while (my ($file, $generate) = each %config_files) {
|
|
|
|
copy("$opt_vardir/$file", $save_dir);
|
|
|
|
}
|
2007-11-01 19:40:27 +01:00
|
|
|
|
2008-04-28 14:37:40 +02:00
|
|
|
# Copy the tmp dir
|
|
|
|
copytree("$opt_vardir/tmp/", "$save_dir/tmp/");
|
2007-10-30 15:22:52 +01:00
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
foreach (all_servers()) {
|
|
|
|
my $dir= "$opt_vardir/".$_->{name};
|
|
|
|
save_datadir_after_failure($dir, $save_dir);
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2006-03-13 10:30:36 +01:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-03-15 09:58:39 +01:00
|
|
|
|
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
|
|
|
sub report_failure_and_restart ($) {
|
|
|
|
my $tinfo= shift;
|
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
stop_all_servers();
|
2007-03-15 09:58:39 +01:00
|
|
|
|
2008-04-27 23:35:38 +02:00
|
|
|
$tinfo->{'result'}= 'MTR_RES_FAILED';
|
2007-03-15 09:58:39 +01:00
|
|
|
|
2008-04-27 23:35:38 +02:00
|
|
|
my $test_failures= $tinfo->{'failures'} || 0;
|
|
|
|
$tinfo->{'failures'}= $test_failures + 1;
|
2007-03-15 09:58:39 +01:00
|
|
|
|
|
|
|
|
2008-04-27 23:35:38 +02:00
|
|
|
if ( $tinfo->{comment} )
|
2007-03-15 09:58:39 +01:00
|
|
|
{
|
2008-04-27 23:35:38 +02:00
|
|
|
# The test failure has been detected by mysql-test-run.pl
|
|
|
|
# when starting the servers or due to other error, the reason for
|
|
|
|
# failing the test is saved in "comment"
|
|
|
|
;
|
2007-03-15 09:58:39 +01:00
|
|
|
}
|
|
|
|
|
2008-08-04 21:54:44 +02:00
|
|
|
if ( !defined $tinfo->{logfile} )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2008-08-04 21:54:44 +02:00
|
|
|
my $logfile= $path_current_testlog;
|
2008-08-29 12:25:19 +02:00
|
|
|
if ( defined $logfile )
|
2006-04-20 14:43:06 +02:00
|
|
|
{
|
2008-08-29 12:25:19 +02:00
|
|
|
if ( -f $logfile )
|
|
|
|
{
|
|
|
|
# Test failure was detected by test tool and its report
|
|
|
|
# about what failed has been saved to file. Save the report
|
|
|
|
# in tinfo
|
|
|
|
$tinfo->{logfile}= mtr_fromfile($logfile);
|
2009-12-15 10:12:24 +01:00
|
|
|
# If no newlines in the test log:
|
2010-01-06 09:52:55 +01:00
|
|
|
# (it will contain the CURRENT_TEST written by mtr, so is not empty)
|
2009-12-15 10:12:24 +01:00
|
|
|
if ($tinfo->{logfile} !~ /\n/)
|
|
|
|
{
|
|
|
|
# Show how far it got before suddenly failing
|
|
|
|
$tinfo->{comment}.= "mysqltest failed but provided no output\n";
|
|
|
|
my $log_file_name= $opt_vardir."/log/".$tinfo->{shortname}.".log";
|
|
|
|
if (-e $log_file_name) {
|
|
|
|
$tinfo->{comment}.=
|
|
|
|
"The result from queries just before the failure was:".
|
|
|
|
"\n< snip >\n".
|
|
|
|
mtr_lastlinesfromfile($log_file_name, 20)."\n";
|
|
|
|
}
|
|
|
|
}
|
2008-08-29 12:25:19 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
# The test tool report didn't exist, display an
|
|
|
|
# error message
|
|
|
|
$tinfo->{logfile}= "Could not open test tool report '$logfile'";
|
|
|
|
}
|
2006-04-20 14:43:06 +02:00
|
|
|
}
|
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
|
|
|
}
|
2007-03-15 09:58:39 +01:00
|
|
|
|
2008-04-27 15:43:22 +02:00
|
|
|
after_failure($tinfo);
|
2007-03-15 09:58:39 +01:00
|
|
|
|
2008-04-27 23:35:38 +02:00
|
|
|
mtr_report_test($tinfo);
|
2007-03-15 09:58:39 +01:00
|
|
|
|
2007-05-01 20:05:09 +02:00
|
|
|
}
|
2005-06-20 21:37:39 +02:00
|
|
|
|
2005-06-24 18:23:59 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub run_sh_script {
|
|
|
|
my ($script)= @_;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
return 0 unless defined $script;
|
2006-10-04 12:47:32 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_verbose("Running '$script'");
|
|
|
|
my $ret= system("/bin/sh $script") >> 8;
|
|
|
|
return $ret;
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2007-03-15 09:58:39 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub mysqld_stop {
|
|
|
|
my $mysqld= shift or die "usage: mysqld_stop(<mysqld>)";
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $args;
|
|
|
|
mtr_init_args(\$args);
|
2007-05-28 18:03:24 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_add_arg($args, "--no-defaults");
|
2009-10-06 10:35:35 +02:00
|
|
|
mtr_add_arg($args, "--character-sets-dir=%s", $mysqld->value('character-sets-dir'));
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_add_arg($args, "--user=%s", $opt_user);
|
|
|
|
mtr_add_arg($args, "--password=");
|
|
|
|
mtr_add_arg($args, "--port=%d", $mysqld->value('port'));
|
|
|
|
mtr_add_arg($args, "--host=%s", $mysqld->value('#host'));
|
|
|
|
mtr_add_arg($args, "--connect_timeout=20");
|
|
|
|
mtr_add_arg($args, "--protocol=tcp");
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_add_arg($args, "shutdown");
|
2007-06-01 14:32:26 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
My::SafeProcess->run
|
|
|
|
(
|
|
|
|
name => "mysqladmin shutdown ".$mysqld->name(),
|
|
|
|
path => $exe_mysqladmin,
|
|
|
|
args => \$args,
|
2010-08-07 16:42:30 +02:00
|
|
|
error => "$opt_vardir/log/mysqladmin.err",
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
);
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2006-04-24 10:39:56 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub mysqld_arguments ($$$) {
|
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
|
|
|
my $args= shift;
|
2007-03-15 09:58:39 +01:00
|
|
|
my $mysqld= shift;
|
2008-01-07 19:44:48 +01:00
|
|
|
my $extra_opts= shift;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-02-22 15:38:10 +01:00
|
|
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
2007-09-21 17:52:02 +02:00
|
|
|
|
2007-10-30 15:22:52 +01:00
|
|
|
# When mysqld is run by a root user(euid is 0), it will fail
|
2007-11-23 15:54:11 +01:00
|
|
|
# to start unless we specify what user to run as, see BUG#30630
|
|
|
|
my $euid= $>;
|
2008-02-20 14:55:30 +01:00
|
|
|
if (!IS_WINDOWS and $euid == 0 and
|
2008-01-07 19:44:48 +01:00
|
|
|
(grep(/^--user/, @$extra_opts)) == 0) {
|
2008-02-22 15:38:10 +01:00
|
|
|
mtr_add_arg($args, "--user=root");
|
2007-10-30 15:22:52 +01:00
|
|
|
}
|
|
|
|
|
2006-03-23 15:07:39 +01:00
|
|
|
if ( $opt_valgrind_mysqld )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2008-02-22 15:38:10 +01:00
|
|
|
mtr_add_arg($args, "--skip-safemalloc");
|
2006-11-07 16:09:32 +01:00
|
|
|
|
|
|
|
if ( $mysql_version_id < 50100 )
|
2008-02-06 17:55:04 +01:00
|
|
|
{
|
2008-02-22 15:38:10 +01:00
|
|
|
mtr_add_arg($args, "--skip-bdb");
|
2008-02-06 17:55:04 +01:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2009-02-15 11:58:34 +01:00
|
|
|
mtr_add_arg($args, "%s--disable-sync-frm");
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2009-02-15 11:58:34 +01:00
|
|
|
if (!using_extern() and $mysql_version_id >= 50106 )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2009-11-16 21:49:51 +01:00
|
|
|
# Turn on logging to file and tables
|
2009-02-15 11:58:34 +01:00
|
|
|
mtr_add_arg($args, "%s--log-output=table,file");
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
# Check if "extra_opt" contains --log-bin
|
|
|
|
my $skip_binlog= not grep /^--(loose-)?log-bin/, @$extra_opts;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Indicate to mysqld it will be debugged in debugger
|
2006-03-23 15:07:39 +01:00
|
|
|
if ( $glob_debugger )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2008-02-22 15:38:10 +01:00
|
|
|
mtr_add_arg($args, "--gdb");
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2006-09-17 20:54:06 +02:00
|
|
|
my $found_skip_core= 0;
|
2008-01-07 19:44:48 +01:00
|
|
|
foreach my $arg ( @$extra_opts )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2007-03-15 09:58:39 +01:00
|
|
|
# Allow --skip-core-file to be set in <testname>-[master|slave].opt file
|
2006-09-17 20:54:06 +02:00
|
|
|
if ($arg eq "--skip-core-file")
|
|
|
|
{
|
|
|
|
$found_skip_core= 1;
|
|
|
|
}
|
2007-02-06 14:19:07 +01:00
|
|
|
elsif ($skip_binlog and mtr_match_prefix($arg, "--binlog-format"))
|
|
|
|
{
|
|
|
|
; # Dont add --binlog-format when running without binlog
|
|
|
|
}
|
2008-08-29 14:46:22 +02:00
|
|
|
elsif ($arg eq "--loose-skip-log-bin" and
|
|
|
|
$mysqld->option("log-slave-updates"))
|
|
|
|
{
|
|
|
|
; # Dont add --skip-log-bin when mysqld have --log-slave-updates in config
|
|
|
|
}
|
2006-09-17 20:54:06 +02:00
|
|
|
else
|
|
|
|
{
|
2008-02-22 15:38:10 +01:00
|
|
|
mtr_add_arg($args, "%s", $arg);
|
2006-09-17 20:54:06 +02:00
|
|
|
}
|
|
|
|
}
|
2009-03-09 14:31:39 +01:00
|
|
|
$opt_skip_core = $found_skip_core;
|
2006-09-17 20:54:06 +02:00
|
|
|
if ( !$found_skip_core )
|
|
|
|
{
|
2008-02-22 15:38:10 +01:00
|
|
|
mtr_add_arg($args, "%s", "--core-file");
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2009-02-12 15:08:56 +01:00
|
|
|
# Enable the debug sync facility, set default wait timeout.
|
|
|
|
# Facility stays disabled if timeout value is zero.
|
|
|
|
mtr_add_arg($args, "--loose-debug-sync-timeout=%s",
|
|
|
|
$opt_debug_sync_timeout);
|
2004-12-30 16:34:01 +01:00
|
|
|
|
|
|
|
return $args;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub mysqld_start ($$) {
|
2006-05-18 23:35:17 +02:00
|
|
|
my $mysqld= shift;
|
2008-01-07 19:44:48 +01:00
|
|
|
my $extra_opts= shift;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-01-07 19:44:48 +01:00
|
|
|
mtr_verbose(My::Options::toStr("mysqld_start", @$extra_opts));
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2008-03-25 09:19:03 +01:00
|
|
|
my $exe= find_mysqld($mysqld->value('basedir'));
|
2006-05-18 23:35:17 +02:00
|
|
|
my $wait_for_pid_file= 1;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2006-10-20 17:09:07 +02:00
|
|
|
mtr_error("Internal error: mysqld should never be started for embedded")
|
2007-12-12 18:19:24 +01:00
|
|
|
if $opt_embedded_server;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $args;
|
2004-12-30 16:34:01 +01:00
|
|
|
mtr_init_args(\$args);
|
|
|
|
|
2006-03-23 15:07:39 +01:00
|
|
|
if ( $opt_valgrind_mysqld )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2005-09-17 01:09:32 +02:00
|
|
|
valgrind_arguments($args, \$exe);
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2010-08-04 12:19:18 +02:00
|
|
|
if ( $opt_strace)
|
|
|
|
{
|
|
|
|
strace_arguments($args, \$exe, $mysqld->name());
|
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-02-22 15:38:10 +01:00
|
|
|
mtr_add_arg($args, "--defaults-group-suffix=%s", $mysqld->after('mysqld'));
|
2008-01-07 19:44:48 +01:00
|
|
|
mysqld_arguments($args,$mysqld,$extra_opts);
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-02-22 15:38:10 +01:00
|
|
|
if ( $opt_debug )
|
2006-03-23 15:07:39 +01:00
|
|
|
{
|
2008-02-22 15:38:10 +01:00
|
|
|
mtr_add_arg($args, "--debug=d:t:i:A,%s/log/%s.trace",
|
|
|
|
$path_vardir_trace, $mysqld->name());
|
|
|
|
}
|
|
|
|
|
2009-03-02 13:48:35 +01:00
|
|
|
if (IS_WINDOWS)
|
|
|
|
{
|
|
|
|
# Trick the server to send output to stderr, with --console
|
2009-09-18 02:55:27 +02:00
|
|
|
if (!(grep(/^--log-error/, @$args))) {
|
2009-09-17 02:13:50 +02:00
|
|
|
mtr_add_arg($args, "--console");
|
|
|
|
}
|
2009-03-02 13:48:35 +01:00
|
|
|
}
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( $opt_gdb || $opt_manual_gdb )
|
2006-03-23 15:07:39 +01:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
gdb_arguments(\$args, \$exe, $mysqld->name());
|
2006-03-23 15:07:39 +01:00
|
|
|
}
|
|
|
|
elsif ( $opt_ddd || $opt_manual_ddd )
|
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
ddd_arguments(\$args, \$exe, $mysqld->name());
|
2006-03-23 15:07:39 +01:00
|
|
|
}
|
2006-04-04 09:49:32 +02:00
|
|
|
elsif ( $opt_debugger )
|
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
debugger_arguments(\$args, \$exe, $mysqld->name());
|
2006-03-23 15:07:39 +01:00
|
|
|
}
|
2006-03-23 16:22:56 +01:00
|
|
|
elsif ( $opt_manual_debug )
|
|
|
|
{
|
2008-09-05 17:37:55 +02:00
|
|
|
print "\nStart " .$mysqld->name()." in your debugger\n" .
|
2006-03-23 16:22:56 +01:00
|
|
|
"dir: $glob_mysql_test_dir\n" .
|
|
|
|
"exe: $exe\n" .
|
|
|
|
"args: " . join(" ", @$args) . "\n\n" .
|
|
|
|
"Waiting ....\n";
|
|
|
|
|
|
|
|
# Indicate the exe should not be started
|
|
|
|
$exe= undef;
|
|
|
|
}
|
2006-05-18 23:35:17 +02:00
|
|
|
else
|
|
|
|
{
|
|
|
|
# Default to not wait until pid file has been created
|
|
|
|
$wait_for_pid_file= 0;
|
|
|
|
}
|
2006-03-23 15:07:39 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Remove the old pidfile if any
|
|
|
|
unlink($mysqld->value('pid-file'));
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2009-03-02 13:48:35 +01:00
|
|
|
my $output= $mysqld->value('#log-error');
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( $opt_valgrind and $opt_debug )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
# When both --valgrind and --debug is selected, send
|
|
|
|
# all output to the trace file, making it possible to
|
|
|
|
# see the exact location where valgrind complains
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2009-02-12 15:08:56 +01:00
|
|
|
# Write a message about this to the normal log file
|
|
|
|
my $trace_name= "$opt_vardir/log/".$mysqld->name().".trace";
|
|
|
|
mtr_tofile($output,
|
|
|
|
"NOTE: When running with --valgrind --debug the output from",
|
|
|
|
"mysqld(where the valgrind messages shows up) is stored ",
|
|
|
|
"together with the trace file to make it ",
|
|
|
|
"easier to find the exact position of valgrind errors.",
|
|
|
|
"See trace file $trace_name.\n");
|
|
|
|
$output= $trace_name;
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2009-11-12 11:04:01 +01:00
|
|
|
# Remember this log file for valgrind error report search
|
|
|
|
$mysqld_logs{$output}= 1 if $opt_valgrind;
|
2010-01-05 21:35:50 +01:00
|
|
|
# Remember data dir for gmon.out files if using gprof
|
|
|
|
$gprof_dirs{$mysqld->value('datadir')}= 1 if $opt_gprof;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( defined $exe )
|
2006-09-28 13:10:18 +02:00
|
|
|
{
|
2009-03-20 15:18:22 +01:00
|
|
|
pre_write_errorlog($output);
|
2007-12-12 18:19:24 +01:00
|
|
|
$mysqld->{'proc'}= My::SafeProcess->new
|
|
|
|
(
|
|
|
|
name => $mysqld->name(),
|
|
|
|
path => $exe,
|
|
|
|
args => \$args,
|
|
|
|
output => $output,
|
|
|
|
error => $output,
|
|
|
|
append => 1,
|
|
|
|
verbose => $opt_verbose,
|
2009-03-09 14:31:39 +01:00
|
|
|
nocore => $opt_skip_core,
|
2007-12-12 18:19:24 +01:00
|
|
|
host => undef,
|
|
|
|
shutdown => sub { mysqld_stop($mysqld) },
|
|
|
|
);
|
|
|
|
mtr_verbose("Started $mysqld->{proc}");
|
2006-09-28 13:10:18 +02:00
|
|
|
}
|
2006-04-24 10:39:56 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( $wait_for_pid_file &&
|
|
|
|
!sleep_until_file_created($mysqld->value('pid-file'),
|
|
|
|
$opt_start_timeout,
|
|
|
|
$mysqld->{'proc'}))
|
2006-05-18 23:35:17 +02:00
|
|
|
{
|
2009-10-08 11:23:04 +02:00
|
|
|
my $mname= $mysqld->name();
|
|
|
|
mtr_error("Failed to start mysqld $mname with command $exe");
|
2006-05-18 23:35:17 +02:00
|
|
|
}
|
|
|
|
|
2006-06-11 10:10:55 +02:00
|
|
|
# Remember options used when starting
|
2008-01-07 19:44:48 +01:00
|
|
|
$mysqld->{'started_opts'}= $extra_opts;
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
return;
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2006-04-24 10:39:56 +02:00
|
|
|
|
2006-05-18 23:35:17 +02:00
|
|
|
sub stop_all_servers () {
|
2009-10-06 10:35:35 +02:00
|
|
|
my $shutdown_timeout = $_[0] or 0;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-05-09 11:50:36 +02:00
|
|
|
mtr_verbose("Stopping all servers...");
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Kill all started servers
|
2009-10-06 10:35:35 +02:00
|
|
|
My::SafeProcess::shutdown($shutdown_timeout,
|
2007-12-12 18:19:24 +01:00
|
|
|
started(all_servers()));
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2008-01-08 11:11:06 +01:00
|
|
|
# Remove pidfiles
|
|
|
|
foreach my $server ( all_servers() )
|
2006-05-18 23:35:17 +02:00
|
|
|
{
|
2008-01-08 11:11:06 +01:00
|
|
|
my $pid_file= $server->if_exist('pid-file');
|
|
|
|
unlink($pid_file) if defined $pid_file;
|
2006-05-18 23:35:17 +02:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Mark servers as stopped
|
|
|
|
map($_->{proc}= undef, all_servers());
|
2006-04-24 10:39:56 +02:00
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Find out if server should be restarted for this test
|
|
|
|
sub server_need_restart {
|
|
|
|
my ($tinfo, $server)= @_;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
if ( using_extern() )
|
2006-10-11 14:50:19 +02:00
|
|
|
{
|
2008-02-04 09:15:44 +01:00
|
|
|
mtr_verbose_restart($server, "no restart for --extern server");
|
2007-12-12 18:19:24 +01:00
|
|
|
return 0;
|
2006-05-18 23:35:17 +02:00
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
|
|
|
|
if ( $tinfo->{'force_restart'} ) {
|
2008-02-04 09:15:44 +01:00
|
|
|
mtr_verbose_restart($server, "forced in .opt file");
|
2007-12-12 18:19:24 +01:00
|
|
|
return 1;
|
2006-05-18 23:35:17 +02:00
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
|
|
|
|
if ( $tinfo->{template_path} ne $current_config_name)
|
2006-06-11 10:10:55 +02:00
|
|
|
{
|
2008-02-04 09:15:44 +01:00
|
|
|
mtr_verbose_restart($server, "using different config file");
|
2007-12-12 18:19:24 +01:00
|
|
|
return 1;
|
2006-06-11 10:10:55 +02:00
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
|
|
|
|
if ( $tinfo->{'master_sh'} || $tinfo->{'slave_sh'} )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2008-02-04 09:15:44 +01:00
|
|
|
mtr_verbose_restart($server, "sh script to run");
|
2007-12-12 18:19:24 +01:00
|
|
|
return 1;
|
2006-05-18 23:35:17 +02:00
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
|
|
|
|
if ( ! started($server) )
|
2006-05-19 17:19:57 +02:00
|
|
|
{
|
2008-02-04 09:15:44 +01:00
|
|
|
mtr_verbose_restart($server, "not started");
|
2007-12-12 18:19:24 +01:00
|
|
|
return 1;
|
2006-05-19 17:19:57 +02:00
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
|
|
|
|
my $started_tinfo= $server->{'started_tinfo'};
|
|
|
|
if ( defined $started_tinfo )
|
2006-10-06 11:23:19 +02:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
|
|
|
|
# Check if timezone of test that server was started
|
|
|
|
# with differs from timezone of next test
|
|
|
|
if ( timezone($started_tinfo) ne timezone($tinfo) )
|
2006-11-17 10:46:21 +01:00
|
|
|
{
|
2008-02-04 09:15:44 +01:00
|
|
|
mtr_verbose_restart($server, "different timezone");
|
2007-12-12 18:19:24 +01:00
|
|
|
return 1;
|
2006-11-17 10:46:21 +01:00
|
|
|
}
|
2006-10-06 11:23:19 +02:00
|
|
|
}
|
2006-08-16 10:30:22 +02:00
|
|
|
|
2008-04-14 12:57:37 +02:00
|
|
|
# Temporary re-enable the "always restart slave" hack
|
|
|
|
# this should be removed asap, but will require that each rpl
|
|
|
|
# testcase cleanup better after itself - ie. stop and reset
|
|
|
|
# replication
|
|
|
|
# Use the "#!use-slave-opt" marker to detect that this is a "slave"
|
|
|
|
# server
|
|
|
|
if ( $server->option("#!use-slave-opt") ){
|
|
|
|
mtr_verbose_restart($server, "Always restart slave(s)");
|
|
|
|
return 1;
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2008-04-14 12:57:37 +02:00
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
if ($server->name() =~ /^mysqld\./)
|
2006-10-06 11:23:19 +02:00
|
|
|
{
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-12-19 11:08:41 +01:00
|
|
|
# Check that running process was started with same options
|
|
|
|
# as the current test requires
|
2008-01-07 19:44:48 +01:00
|
|
|
my $extra_opts= get_extra_opts($server, $tinfo);
|
2007-12-19 11:08:41 +01:00
|
|
|
my $started_opts= $server->{'started_opts'};
|
2008-01-07 19:44:48 +01:00
|
|
|
|
|
|
|
if (!My::Options::same($started_opts, $extra_opts) )
|
2006-10-06 11:23:19 +02:00
|
|
|
{
|
2008-01-09 13:47:09 +01:00
|
|
|
my $use_dynamic_option_switch= 0;
|
2008-02-04 09:15:44 +01:00
|
|
|
if (!$use_dynamic_option_switch)
|
2006-10-06 11:23:19 +02:00
|
|
|
{
|
2008-02-04 09:15:44 +01:00
|
|
|
mtr_verbose_restart($server, "running with different options '" .
|
|
|
|
join(" ", @{$extra_opts}) . "' != '" .
|
|
|
|
join(" ", @{$started_opts}) . "'" );
|
|
|
|
return 1;
|
2006-10-06 11:23:19 +02:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2008-01-07 19:44:48 +01:00
|
|
|
mtr_verbose(My::Options::toStr("started_opts", @$started_opts));
|
|
|
|
mtr_verbose(My::Options::toStr("extra_opts", @$extra_opts));
|
|
|
|
|
|
|
|
# Get diff and check if dynamic switch is possible
|
|
|
|
my @diff_opts= My::Options::diff($started_opts, $extra_opts);
|
|
|
|
mtr_verbose(My::Options::toStr("diff_opts", @diff_opts));
|
|
|
|
|
|
|
|
my $query= My::Options::toSQL(@diff_opts);
|
|
|
|
mtr_verbose("Attempting dynamic switch '$query'");
|
|
|
|
if (run_query($tinfo, $server, $query)){
|
2007-12-19 11:08:41 +01:00
|
|
|
mtr_verbose("Restart: running with different options '" .
|
2008-01-07 19:44:48 +01:00
|
|
|
join(" ", @{$extra_opts}) . "' != '" .
|
2008-02-04 09:15:44 +01:00
|
|
|
join(" ", @{$started_opts}) . "'" );
|
2007-12-19 11:08:41 +01:00
|
|
|
return 1;
|
|
|
|
}
|
2008-01-08 15:47:04 +01:00
|
|
|
|
|
|
|
# Remember the dynamically set options
|
|
|
|
$server->{'started_opts'}= $extra_opts;
|
2006-10-06 11:23:19 +02:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2006-08-16 10:30:22 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
# Default, no restart
|
|
|
|
return 0;
|
2006-08-16 10:30:22 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub servers_need_restart($) {
|
|
|
|
my ($tinfo)= @_;
|
|
|
|
return grep { server_need_restart($tinfo, $_); } all_servers();
|
|
|
|
}
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
############################################
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
############################################
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
#
|
|
|
|
# Filter a list of servers and return only those that are part
|
|
|
|
# of the specified cluster
|
|
|
|
#
|
|
|
|
sub in_cluster {
|
|
|
|
my ($cluster)= shift;
|
|
|
|
# Return only processes for a specific cluster
|
|
|
|
return grep { $_->suffix() eq $cluster->suffix() } @_;
|
|
|
|
}
|
2006-05-18 23:35:17 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
#
|
|
|
|
# Filter a list of servers and return the SafeProcess
|
|
|
|
# for only those that are started or stopped
|
|
|
|
#
|
|
|
|
sub started { return grep(defined $_, map($_->{proc}, @_)); }
|
|
|
|
sub stopped { return grep(!defined $_, map($_->{proc}, @_)); }
|
2006-05-18 23:35:17 +02:00
|
|
|
|
|
|
|
|
2008-01-07 19:44:48 +01:00
|
|
|
sub get_extra_opts {
|
2007-12-12 18:19:24 +01:00
|
|
|
my ($mysqld, $tinfo)= @_;
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
my $opts=
|
2007-12-12 18:19:24 +01:00
|
|
|
$mysqld->option("#!use-slave-opt") ?
|
|
|
|
$tinfo->{slave_opt} : $tinfo->{master_opt};
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2008-04-24 13:02:53 +02:00
|
|
|
# Expand environment variables
|
|
|
|
foreach my $opt ( @$opts )
|
|
|
|
{
|
2010-08-25 22:22:33 +02:00
|
|
|
no warnings 'uninitialized';
|
|
|
|
$opt =~ s/\$\{(\w+)\}/$ENV{$1}/ge;
|
|
|
|
$opt =~ s/\$(\w+)/$ENV{$1}/ge;
|
2008-04-24 13:02:53 +02:00
|
|
|
}
|
|
|
|
return $opts;
|
2007-12-12 18:19:24 +01:00
|
|
|
}
|
2006-05-18 23:35:17 +02:00
|
|
|
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub stop_servers($$) {
|
2009-03-20 15:18:22 +01:00
|
|
|
my (@servers)= @_;
|
2006-06-11 10:10:55 +02:00
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
mtr_report("Restarting ", started(@servers));
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
My::SafeProcess::shutdown($opt_shutdown_timeout,
|
|
|
|
started(@servers));
|
2006-05-18 23:35:17 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
foreach my $server (@servers)
|
2006-05-18 23:35:17 +02:00
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
# Mark server as stopped
|
|
|
|
$server->{proc}= undef;
|
|
|
|
|
|
|
|
# Forget history
|
|
|
|
delete $server->{'started_tinfo'};
|
|
|
|
delete $server->{'started_opts'};
|
|
|
|
delete $server->{'started_cnf'};
|
2006-05-18 23:35:17 +02:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2006-05-02 14:46:18 +02:00
|
|
|
|
2006-10-06 17:15:26 +02:00
|
|
|
#
|
2007-12-12 18:19:24 +01:00
|
|
|
# start_servers
|
2006-10-06 17:15:26 +02:00
|
|
|
#
|
2007-12-12 18:19:24 +01:00
|
|
|
# Start servers not already started
|
2006-10-06 17:15:26 +02:00
|
|
|
#
|
|
|
|
# RETURN
|
|
|
|
# 0 OK
|
|
|
|
# 1 Start failed
|
|
|
|
#
|
2007-12-12 18:19:24 +01:00
|
|
|
sub start_servers($) {
|
|
|
|
my ($tinfo)= @_;
|
2006-10-06 17:15:26 +02:00
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
for (all_servers()) {
|
|
|
|
$_->{START}->($_, $tinfo) if $_->{START};
|
2006-01-12 19:51:02 +01:00
|
|
|
}
|
|
|
|
|
2010-08-17 09:14:46 +02:00
|
|
|
for (all_servers()) {
|
|
|
|
next unless $_->{WAIT} and started($_);
|
|
|
|
if ($_->{WAIT}->($_)) {
|
|
|
|
$tinfo->{comment}= "Failed to start ".$_->name();
|
2006-10-06 17:15:26 +02:00
|
|
|
return 1;
|
2006-05-23 15:27:56 +02:00
|
|
|
}
|
2006-05-18 23:35:17 +02:00
|
|
|
}
|
2006-10-06 17:15:26 +02:00
|
|
|
return 0;
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
|
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
|
|
|
#
|
|
|
|
# Run include/check-testcase.test
|
2007-12-12 18:19:24 +01:00
|
|
|
# Before a testcase, run in record mode and save result file to var/tmp
|
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
|
|
|
# After testcase, run and compare with the recorded file, they should be equal!
|
|
|
|
#
|
2006-10-08 17:48:01 +02:00
|
|
|
# RETURN VALUE
|
2008-04-27 21:31:32 +02:00
|
|
|
# The newly started process
|
2006-10-08 17:48:01 +02:00
|
|
|
#
|
2008-04-27 21:31:32 +02:00
|
|
|
sub start_check_testcase ($$$) {
|
2007-12-12 18:19:24 +01:00
|
|
|
my $tinfo= shift;
|
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
|
|
|
my $mode= shift;
|
2006-06-10 19:33:37 +02:00
|
|
|
my $mysqld= shift;
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $name= "check-".$mysqld->name();
|
2008-09-05 16:22:02 +02:00
|
|
|
# Replace dots in name with underscore to avoid that mysqltest
|
|
|
|
# misinterpret's what the filename extension is :(
|
|
|
|
$name=~ s/\./_/g;
|
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
|
|
|
|
|
|
|
my $args;
|
|
|
|
mtr_init_args(\$args);
|
|
|
|
|
2008-04-08 16:51:26 +02:00
|
|
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
|
|
|
mtr_add_arg($args, "--defaults-group-suffix=%s", $mysqld->after('mysqld'));
|
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
|
|
|
|
|
|
|
mtr_add_arg($args, "--skip-safemalloc");
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_add_arg($args, "--result-file=%s", "$opt_vardir/tmp/$name.result");
|
|
|
|
mtr_add_arg($args, "--test-file=%s", "include/check-testcase.test");
|
2009-02-13 16:27:33 +01:00
|
|
|
mtr_add_arg($args, "--verbose");
|
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
|
|
|
|
|
|
|
if ( $mode eq "before" )
|
|
|
|
{
|
|
|
|
mtr_add_arg($args, "--record");
|
|
|
|
}
|
2007-12-12 18:19:24 +01:00
|
|
|
my $errfile= "$opt_vardir/tmp/$name.err";
|
2008-04-27 21:31:32 +02:00
|
|
|
my $proc= My::SafeProcess->new
|
2007-12-12 18:19:24 +01:00
|
|
|
(
|
|
|
|
name => $name,
|
|
|
|
path => $exe_mysqltest,
|
|
|
|
error => $errfile,
|
2009-01-21 10:32:05 +01:00
|
|
|
output => $errfile,
|
2007-12-12 18:19:24 +01:00
|
|
|
args => \$args,
|
2008-04-27 21:31:32 +02:00
|
|
|
user_data => $errfile,
|
2008-10-06 19:34:00 +02:00
|
|
|
verbose => $opt_verbose,
|
2007-12-12 18:19:24 +01:00
|
|
|
);
|
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
|
|
|
|
2008-04-27 21:31:32 +02:00
|
|
|
mtr_report("Started $proc");
|
|
|
|
return $proc;
|
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
|
|
|
}
|
|
|
|
|
2006-11-10 13:12:08 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub run_mysqltest ($) {
|
|
|
|
my $proc= start_mysqltest(@_);
|
|
|
|
$proc->wait();
|
2006-11-10 13:12:08 +01:00
|
|
|
}
|
2006-04-24 10:39:56 +02:00
|
|
|
|
2006-07-10 12:06:30 +02:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
sub start_mysqltest ($) {
|
2006-08-16 10:30:22 +02:00
|
|
|
my ($tinfo)= @_;
|
2005-01-01 19:27:41 +01:00
|
|
|
my $exe= $exe_mysqltest;
|
|
|
|
my $args;
|
2004-12-30 16:34:01 +01:00
|
|
|
|
|
|
|
mtr_init_args(\$args);
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
2004-12-30 16:34:01 +01:00
|
|
|
mtr_add_arg($args, "--silent");
|
|
|
|
mtr_add_arg($args, "--skip-safemalloc");
|
|
|
|
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
|
2006-11-08 22:53:40 +01:00
|
|
|
mtr_add_arg($args, "--character-sets-dir=%s", $path_charsetsdir);
|
2006-11-21 21:32:58 +01:00
|
|
|
mtr_add_arg($args, "--logdir=%s/log", $opt_vardir);
|
2005-08-29 20:28:42 +02:00
|
|
|
|
2006-12-20 16:53:06 +01:00
|
|
|
# Log line number and time for each line in .test file
|
|
|
|
mtr_add_arg($args, "--mark-progress")
|
|
|
|
if $opt_mark_progress;
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr_add_arg($args, "--database=test");
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2005-01-01 19:27:41 +01:00
|
|
|
if ( $opt_ps_protocol )
|
|
|
|
{
|
|
|
|
mtr_add_arg($args, "--ps-protocol");
|
|
|
|
}
|
|
|
|
|
2005-11-03 19:00:37 +01:00
|
|
|
if ( $opt_sp_protocol )
|
|
|
|
{
|
|
|
|
mtr_add_arg($args, "--sp-protocol");
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( $opt_view_protocol )
|
|
|
|
{
|
|
|
|
mtr_add_arg($args, "--view-protocol");
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( $opt_cursor_protocol )
|
|
|
|
{
|
|
|
|
mtr_add_arg($args, "--cursor-protocol");
|
|
|
|
}
|
|
|
|
|
2005-01-01 19:27:41 +01:00
|
|
|
if ( $opt_strace_client )
|
|
|
|
{
|
2007-12-12 18:19:24 +01:00
|
|
|
$exe= $opt_strace_client || "strace";
|
2005-01-01 19:27:41 +01:00
|
|
|
mtr_add_arg($args, "-o");
|
2005-05-15 17:22:54 +02:00
|
|
|
mtr_add_arg($args, "%s/log/mysqltest.strace", $opt_vardir);
|
2005-01-01 19:27:41 +01:00
|
|
|
mtr_add_arg($args, "$exe_mysqltest");
|
|
|
|
}
|
|
|
|
|
2008-05-04 21:40:40 +02:00
|
|
|
mtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
|
2004-12-30 16:34:01 +01:00
|
|
|
|
|
|
|
if ( $opt_compress )
|
|
|
|
{
|
|
|
|
mtr_add_arg($args, "--compress");
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( $opt_sleep )
|
|
|
|
{
|
|
|
|
mtr_add_arg($args, "--sleep=%d", $opt_sleep);
|
|
|
|
}
|
|
|
|
|
2005-10-04 15:43:55 +02:00
|
|
|
if ( $opt_ssl )
|
|
|
|
{
|
2006-08-16 10:30:22 +02:00
|
|
|
# Turn on SSL for _all_ test cases if option --ssl was used
|
2006-11-08 22:56:06 +01:00
|
|
|
mtr_add_arg($args, "--ssl");
|
2005-10-04 15:43:55 +02:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
|
2007-08-09 15:00:32 +02:00
|
|
|
foreach my $arg ( @opt_extra_mysqltest_opt )
|
|
|
|
{
|
|
|
|
mtr_add_arg($args, "%s", $arg);
|
|
|
|
}
|
2010-02-17 16:28:02 +01:00
|
|
|
if ( $opt_max_connections ) {
|
|
|
|
mtr_add_arg($args, "--max-connections=%d", $opt_max_connections);
|
|
|
|
}
|
2007-08-09 15:00:32 +02:00
|
|
|
|
2008-02-22 15:38:10 +01:00
|
|
|
if ( $opt_embedded_server )
|
2004-12-30 16:34:01 +01:00
|
|
|
{
|
2008-02-22 15:38:10 +01:00
|
|
|
|
|
|
|
# Get the args needed for the embedded server
|
|
|
|
# and append them to args prefixed
|
|
|
|
# with --sever-arg=
|
2008-02-04 09:15:44 +01:00
|
|
|
|
2008-02-22 15:38:10 +01:00
|
|
|
my $mysqld= $config->group('embedded')
|
|
|
|
or mtr_error("Could not get [embedded] section");
|
|
|
|
|
|
|
|
my $mysqld_args;
|
|
|
|
mtr_init_args(\$mysqld_args);
|
|
|
|
my $extra_opts= get_extra_opts($mysqld, $tinfo);
|
|
|
|
mysqld_arguments($mysqld_args, $mysqld, $extra_opts);
|
|
|
|
mtr_add_arg($args, "--server-arg=%s", $_) for @$mysqld_args;
|
2008-09-05 16:06:08 +02:00
|
|
|
|
|
|
|
if (IS_WINDOWS)
|
|
|
|
{
|
|
|
|
# Trick the server to send output to stderr, with --console
|
2009-09-18 02:55:27 +02:00
|
|
|
if (!(grep(/^--server-arg=--log-error/, @$args))) {
|
2009-09-17 02:13:50 +02:00
|
|
|
mtr_add_arg($args, "--server-arg=--console");
|
|
|
|
}
|
2008-09-05 16:06:08 +02:00
|
|
|
}
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
|
|
|
|
2007-08-09 15:00:32 +02:00
|
|
|
foreach my $arg ( @opt_extra_mysqltest_opt )
|
|
|
|
{
|
|
|
|
mtr_add_arg($args, "%s", $arg);
|
|
|
|
}
|
|
|
|
|
2005-07-15 17:51:43 +02:00
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
# export MYSQL_TEST variable containing <path>/mysqltest <args>
|
|
|
|
# ----------------------------------------------------------------------
|
2008-02-20 14:55:30 +01:00
|
|
|
$ENV{'MYSQL_TEST'}= mtr_args2str($exe_mysqltest, @$args);
|
2005-07-15 17:51:43 +02:00
|
|
|
|
2005-09-21 10:24:46 +02:00
|
|
|
# ----------------------------------------------------------------------
|
2005-09-20 14:11:58 +02:00
|
|
|
# Add arguments that should not go into the MYSQL_TEST env var
|
2005-09-21 10:24:46 +02:00
|
|
|
# ----------------------------------------------------------------------
|
2006-04-10 17:58:21 +02:00
|
|
|
if ( $opt_valgrind_mysqltest )
|
2006-04-08 22:27:43 +02:00
|
|
|
{
|
|
|
|
# Prefix the Valgrind options to the argument list.
|
|
|
|
# We do this here, since we do not want to Valgrind the nested invocations
|
|
|
|
# of mysqltest; that would mess up the stderr output causing test failure.
|
|
|
|
my @args_saved = @$args;
|
|
|
|
mtr_init_args(\$args);
|
|
|
|
valgrind_arguments($args, \$exe);
|
|
|
|
mtr_add_arg($args, "%s", $_) for @args_saved;
|
|
|
|
}
|
|
|
|
|
2007-06-26 12:26:21 +02:00
|
|
|
mtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
|
2006-03-23 15:07:39 +01:00
|
|
|
|
2007-08-03 13:12:53 +02:00
|
|
|
# Number of lines of resut to include in failure report
|
|
|
|
mtr_add_arg($args, "--tail-lines=20");
|
|
|
|
|
2006-11-10 13:12:08 +01:00
|
|
|
if ( defined $tinfo->{'result_file'} ) {
|
2007-06-26 12:26:21 +02:00
|
|
|
mtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
|
2006-11-10 13:12:08 +01:00
|
|
|
}
|
2005-09-21 10:24:46 +02:00
|
|
|
|
2008-08-04 21:54:44 +02:00
|
|
|
client_debug_arg($args, "mysqltest");
|
|
|
|
|
2005-09-21 10:24:46 +02:00
|
|
|
if ( $opt_record )
|
|
|
|
{
|
|
|
|
mtr_add_arg($args, "--record");
|
2008-11-10 14:53:21 +01:00
|
|
|
|
2008-11-10 14:53:53 +01:00
|
|
|
# When recording to a non existing result file
|
|
|
|
# the name of that file is in "record_file"
|
|
|
|
if ( defined $tinfo->{'record_file'} ) {
|
|
|
|
mtr_add_arg($args, "--result-file=%s", $tinfo->{record_file});
|
|
|
|
}
|
2005-09-21 10:24:46 +02:00
|
|
|
}
|
|
|
|
|
2006-03-23 15:07:39 +01:00
|
|
|
if ( $opt_client_gdb )
|
|
|
|
{
|
|
|
|
gdb_arguments(\$args, \$exe, "client");
|
|
|
|
}
|
|
|
|
elsif ( $opt_client_ddd )
|
|
|
|
{
|
|
|
|
ddd_arguments(\$args, \$exe, "client");
|
|
|
|
}
|
2006-04-04 09:49:32 +02:00
|
|
|
elsif ( $opt_client_debugger )
|
|
|
|
{
|
|
|
|
debugger_arguments(\$args, \$exe, "client");
|
2009-02-13 16:27:33 +01:00
|
|
|
}
|
2006-03-23 15:30:21 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
my $proc= My::SafeProcess->new
|
|
|
|
(
|
|
|
|
name => "mysqltest",
|
|
|
|
path => $exe,
|
|
|
|
args => \$args,
|
2008-02-25 16:41:59 +01:00
|
|
|
append => 1,
|
|
|
|
error => $path_current_testlog,
|
2007-12-12 18:19:24 +01:00
|
|
|
verbose => $opt_verbose,
|
|
|
|
);
|
|
|
|
mtr_verbose("Started $proc");
|
|
|
|
return $proc;
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2005-01-02 16:57:21 +01:00
|
|
|
|
2005-09-17 01:09:32 +02:00
|
|
|
|
2006-03-23 15:07:39 +01:00
|
|
|
#
|
|
|
|
# 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
|
2010-01-07 13:17:54 +01:00
|
|
|
my $str= join " ", map { s/"/\\"/g; "\"$_\""; } @$$args;
|
2008-05-01 09:34:25 +02:00
|
|
|
my $gdb_init_file= "$opt_vardir/tmp/gdbinit.$type";
|
2006-03-23 15:07:39 +01:00
|
|
|
|
2006-03-23 20:05:09 +01:00
|
|
|
# Remove the old gdbinit file
|
|
|
|
unlink($gdb_init_file);
|
|
|
|
|
2006-03-23 15:07:39 +01:00
|
|
|
if ( $type eq "client" )
|
|
|
|
{
|
|
|
|
# write init file for client
|
2010-02-19 09:10:05 +01:00
|
|
|
mtr_tofile($gdb_init_file, "set args $str\n");
|
2006-03-23 15:07:39 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
# write init file for mysqld
|
2010-02-19 09:10:05 +01:00
|
|
|
mtr_tofile($gdb_init_file, "set args $str\n");
|
2006-03-23 16:22:56 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( $opt_manual_gdb )
|
|
|
|
{
|
2006-03-23 20:05:09 +01:00
|
|
|
print "\nTo start gdb for $type, type in another window:\n";
|
2007-04-13 15:06:05 +02:00
|
|
|
print "gdb -cd $glob_mysql_test_dir -x $gdb_init_file $$exe\n";
|
2006-03-23 16:22:56 +01:00
|
|
|
|
|
|
|
# Indicate the exe should not be started
|
|
|
|
$$exe= undef;
|
|
|
|
return;
|
2006-03-23 15:07:39 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
$$args= [];
|
|
|
|
mtr_add_arg($$args, "-title");
|
|
|
|
mtr_add_arg($$args, "$type");
|
|
|
|
mtr_add_arg($$args, "-e");
|
2006-03-23 16:22:56 +01:00
|
|
|
|
2006-05-03 20:04:57 +02:00
|
|
|
if ( $exe_libtool )
|
2006-03-23 15:07:39 +01:00
|
|
|
{
|
2006-05-02 14:46:18 +02:00
|
|
|
mtr_add_arg($$args, $exe_libtool);
|
2006-03-23 15:07:39 +01:00
|
|
|
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";
|
2004-12-30 16:34:01 +01:00
|
|
|
}
|
2005-01-02 16:57:21 +01:00
|
|
|
|
2006-04-24 10:39:56 +02:00
|
|
|
|
2006-03-23 15:07:39 +01:00
|
|
|
#
|
|
|
|
# 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
|
2010-01-07 13:17:54 +01:00
|
|
|
my $str= join " ", map { s/"/\\"/g; "\"$_\""; } @$$args;
|
2008-05-01 09:34:25 +02:00
|
|
|
my $gdb_init_file= "$opt_vardir/tmp/gdbinit.$type";
|
2005-09-17 01:09:32 +02:00
|
|
|
|
2006-03-23 20:05:09 +01:00
|
|
|
# Remove the old gdbinit file
|
|
|
|
unlink($gdb_init_file);
|
|
|
|
|
2006-03-23 15:07:39 +01:00
|
|
|
if ( $type eq "client" )
|
|
|
|
{
|
|
|
|
# write init file for client
|
2010-02-19 09:10:05 +01:00
|
|
|
mtr_tofile($gdb_init_file, "set args $str\n");
|
2006-03-23 15:07:39 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
# write init file for mysqld
|
2010-02-19 09:10:05 +01:00
|
|
|
mtr_tofile($gdb_init_file, "file $$exe\nset args $str\n");
|
2006-03-23 16:22:56 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( $opt_manual_ddd )
|
|
|
|
{
|
2006-03-23 20:05:09 +01:00
|
|
|
print "\nTo start ddd for $type, type in another window:\n";
|
2007-04-13 15:06:05 +02:00
|
|
|
print "ddd -cd $glob_mysql_test_dir -x $gdb_init_file $$exe\n";
|
2006-03-23 16:22:56 +01:00
|
|
|
|
|
|
|
# Indicate the exe should not be started
|
|
|
|
$$exe= undef;
|
|
|
|
return;
|
2006-03-23 15:07:39 +01:00
|
|
|
}
|
2005-09-17 01:09:32 +02:00
|
|
|
|
2006-03-23 15:07:39 +01:00
|
|
|
my $save_exe= $$exe;
|
|
|
|
$$args= [];
|
2006-05-03 20:04:57 +02:00
|
|
|
if ( $exe_libtool )
|
2006-03-23 15:07:39 +01:00
|
|
|
{
|
2006-05-02 14:46:18 +02:00
|
|
|
$$exe= $exe_libtool;
|
2006-03-23 15:07:39 +01:00
|
|
|
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");
|
|
|
|
}
|
|
|
|
|
2006-04-04 09:49:32 +02:00
|
|
|
|
|
|
|
#
|
|
|
|
# Modify the exe and args so that program is run in the selected debugger
|
|
|
|
#
|
|
|
|
sub debugger_arguments {
|
|
|
|
my $args= shift;
|
|
|
|
my $exe= shift;
|
|
|
|
my $debugger= $opt_debugger || $opt_client_debugger;
|
|
|
|
|
2007-03-05 09:52:40 +01:00
|
|
|
if ( $debugger =~ /vcexpress|vc|devenv/ )
|
2006-04-04 09:49:32 +02:00
|
|
|
{
|
|
|
|
# vc[express] /debugexe exe arg1 .. argn
|
|
|
|
|
2009-11-18 10:27:43 +01:00
|
|
|
# Add name of the exe and /debugexe before args
|
2006-04-04 09:49:32 +02:00
|
|
|
unshift(@$$args, "$$exe");
|
2009-11-18 10:27:43 +01:00
|
|
|
unshift(@$$args, "/debugexe");
|
2006-04-04 09:49:32 +02:00
|
|
|
|
2007-03-05 09:52:40 +01:00
|
|
|
# Set exe to debuggername
|
|
|
|
$$exe= $debugger;
|
|
|
|
|
2006-04-04 09:49:32 +02:00
|
|
|
}
|
2007-03-05 09:52:40 +01:00
|
|
|
elsif ( $debugger =~ /windbg/ )
|
2006-04-04 09:49:32 +02:00
|
|
|
{
|
|
|
|
# windbg exe arg1 .. argn
|
|
|
|
|
|
|
|
# Add name of the exe before args
|
|
|
|
unshift(@$$args, "$$exe");
|
|
|
|
|
2007-03-05 09:52:40 +01:00
|
|
|
# Set exe to debuggername
|
|
|
|
$$exe= $debugger;
|
|
|
|
|
|
|
|
}
|
|
|
|
elsif ( $debugger eq "dbx" )
|
|
|
|
{
|
|
|
|
# xterm -e dbx -r exe arg1 .. argn
|
|
|
|
|
|
|
|
unshift(@$$args, $$exe);
|
|
|
|
unshift(@$$args, "-r");
|
|
|
|
unshift(@$$args, $debugger);
|
|
|
|
unshift(@$$args, "-e");
|
|
|
|
|
|
|
|
$$exe= "xterm";
|
|
|
|
|
2006-04-04 09:49:32 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
mtr_error("Unknown argument \"$debugger\" passed to --debugger");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2006-03-23 15:07:39 +01:00
|
|
|
#
|
|
|
|
# Modify the exe and args so that program is run in valgrind
|
|
|
|
#
|
2005-09-17 01:09:32 +02:00
|
|
|
sub valgrind_arguments {
|
|
|
|
my $args= shift;
|
|
|
|
my $exe= shift;
|
|
|
|
|
2006-07-26 14:44:59 +02:00
|
|
|
if ( $opt_callgrind)
|
|
|
|
{
|
|
|
|
mtr_add_arg($args, "--tool=callgrind");
|
|
|
|
mtr_add_arg($args, "--base=$opt_vardir/log");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
mtr_add_arg($args, "--tool=memcheck"); # From >= 2.1.2 needs this option
|
|
|
|
mtr_add_arg($args, "--leak-check=yes");
|
|
|
|
mtr_add_arg($args, "--num-callers=16");
|
|
|
|
mtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_mysql_test_dir)
|
|
|
|
if -f "$glob_mysql_test_dir/valgrind.supp";
|
|
|
|
}
|
2005-09-17 01:09:32 +02:00
|
|
|
|
2006-06-16 15:56:08 +02:00
|
|
|
# Add valgrind options, can be overriden by user
|
2007-10-23 11:52:55 +02:00
|
|
|
mtr_add_arg($args, '%s', $_) for (@valgrind_args);
|
2005-12-09 17:52:29 +01:00
|
|
|
|
2005-09-17 01:09:32 +02:00
|
|
|
mtr_add_arg($args, $$exe);
|
|
|
|
|
2006-03-23 15:07:39 +01:00
|
|
|
$$exe= $opt_valgrind_path || "valgrind";
|
2006-10-25 14:34:18 +02:00
|
|
|
|
|
|
|
if ($exe_libtool)
|
|
|
|
{
|
|
|
|
# Add "libtool --mode-execute" before the test to execute
|
|
|
|
# if running in valgrind(to avoid valgrinding bash)
|
|
|
|
unshift(@$args, "--mode=execute", $$exe);
|
|
|
|
$$exe= $exe_libtool;
|
|
|
|
}
|
2005-09-17 01:09:32 +02:00
|
|
|
}
|
|
|
|
|
2010-08-04 12:19:18 +02:00
|
|
|
#
|
|
|
|
# Modify the exe and args so that program is run in strace
|
|
|
|
#
|
|
|
|
sub strace_arguments {
|
|
|
|
my $args= shift;
|
|
|
|
my $exe= shift;
|
|
|
|
my $mysqld_name= shift;
|
|
|
|
|
|
|
|
mtr_add_arg($args, "-f");
|
|
|
|
mtr_add_arg($args, "-o%s/var/log/%s.strace", $glob_mysql_test_dir, $mysqld_name);
|
|
|
|
|
|
|
|
# Add strace options, can be overriden by user
|
|
|
|
mtr_add_arg($args, '%s', $_) for (@strace_args);
|
|
|
|
|
|
|
|
mtr_add_arg($args, $$exe);
|
|
|
|
|
|
|
|
$$exe= "strace";
|
|
|
|
|
|
|
|
if ($exe_libtool)
|
|
|
|
{
|
|
|
|
# Add "libtool --mode-execute" before the test to execute
|
|
|
|
# if running in valgrind(to avoid valgrinding bash)
|
|
|
|
unshift(@$args, "--mode=execute", $$exe);
|
|
|
|
$$exe= $exe_libtool;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-09-17 01:09:32 +02:00
|
|
|
|
2005-01-02 16:57:21 +01:00
|
|
|
#
|
2007-12-12 18:19:24 +01:00
|
|
|
# Usage
|
2005-01-02 16:57:21 +01:00
|
|
|
#
|
2005-06-21 20:25:50 +02:00
|
|
|
sub usage ($) {
|
2008-09-05 14:09:39 +02:00
|
|
|
my ($message)= @_;
|
2006-06-08 19:55:22 +02:00
|
|
|
|
|
|
|
if ( $message )
|
|
|
|
{
|
2007-02-23 12:13:55 +01:00
|
|
|
print STDERR "$message\n";
|
2010-02-10 20:06:24 +01:00
|
|
|
print STDERR "For full list of options, use $0 --help\n";
|
|
|
|
exit;
|
2006-06-08 19:55:22 +02:00
|
|
|
}
|
|
|
|
|
2007-02-23 12:13:55 +01:00
|
|
|
print <<HERE;
|
2005-01-02 16:57:21 +01:00
|
|
|
|
2006-10-04 12:47:32 +02:00
|
|
|
$0 [ OPTIONS ] [ TESTCASE ]
|
2005-01-02 16:57:21 +01:00
|
|
|
|
|
|
|
Options to control what engine/variation to run
|
|
|
|
|
|
|
|
embedded-server Use the embedded server, i.e. no mysqld daemons
|
|
|
|
ps-protocol Use the binary protocol between client and server
|
2005-11-03 19:00:37 +01:00
|
|
|
cursor-protocol Use the cursor protocol between client and server
|
|
|
|
(implies --ps-protocol)
|
|
|
|
view-protocol Create a view to execute all non updating queries
|
|
|
|
sp-protocol Create a stored procedure to execute all queries
|
2005-10-04 15:43:55 +02:00
|
|
|
compress Use the compressed protocol between client and server
|
|
|
|
ssl Use ssl protocol between client and server
|
2006-01-24 08:30:54 +01:00
|
|
|
skip-ssl Dont start server with support for ssl connections
|
2006-11-02 21:05:20 +01:00
|
|
|
vs-config Visual Studio configuration used to create executables
|
|
|
|
(default: MTR_VS_CONFIG environment variable)
|
Added option --staging-run to mysql-test-run to mark slow, not important tests, to not be run in staging trees
Use MY_MUTEX_INIT_FAST for pool mutex
mysql-test/mysql-test-run.pl:
Added option --staging-run
Added information about --parallell=# to help message
mysql-test/suite/federated/federated_server.test:
Slow test, don't run with --staging-run
mysql-test/suite/maria/t/maria-preload.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_optimize.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_relayrotate.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_001.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_sp003.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_start_stop_slave.test:
Slow test, don't run with --staging-run
mysql-test/t/compress.test:
Slow test, don't run with --staging-run
mysql-test/t/count_distinct3.test:
Slow test, don't run with --staging-run
mysql-test/t/index_merge_innodb.test:
Slow test, don't run with --staging-run
mysql-test/t/information_schema_all_engines.test:
Slow test, don't run with --staging-run
mysql-test/t/innodb_mysql.test:
Slow test, don't run with --staging-run
mysql-test/t/pool_of_threads.test:
Slow test, don't run with --staging-run
mysql-test/t/preload.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl_compress.test:
Slow test, don't run with --staging-run
mysql-test/valgrind.supp:
Suppress warnings from SuSE 11.1 on x86
sql/scheduler.cc:
Use MY_MUTEX_INIT_FAST for pool mutex
2009-06-05 17:35:22 +02:00
|
|
|
parallel=# How many parallell test should be run
|
2009-05-12 14:53:46 +02:00
|
|
|
defaults-file=<config template> Use fixed config template for all
|
2007-12-12 18:19:24 +01:00
|
|
|
tests
|
2008-04-24 14:14:11 +02:00
|
|
|
defaults_extra_file=<config template> Extra config template to add to
|
2007-12-12 18:19:24 +01:00
|
|
|
all generated configs
|
2009-09-07 22:50:10 +02:00
|
|
|
combination=<opt> Use at least twice to run tests with specified
|
2009-05-12 14:53:46 +02:00
|
|
|
options to mysqld
|
|
|
|
skip-combinations Ignore combination file (or options)
|
2007-12-12 18:19:24 +01:00
|
|
|
|
2006-03-23 16:39:51 +01:00
|
|
|
Options to control directories to use
|
|
|
|
tmpdir=DIR The directory where temporary files are stored
|
|
|
|
(default: ./var/tmp).
|
2006-04-19 23:09:49 +02:00
|
|
|
vardir=DIR The directory where files generated from the test run
|
|
|
|
is stored (default: ./var). Specifying a ramdisk or
|
|
|
|
tmpfs will speed up tests.
|
2006-11-13 12:44:12 +01:00
|
|
|
mem Run testsuite in "memory" using tmpfs or ramdisk
|
|
|
|
Attempts to find a suitable location
|
|
|
|
using a builtin list of standard locations
|
2006-11-08 23:16:44 +01:00
|
|
|
for tmpfs (/dev/shm)
|
|
|
|
The option can also be set using environment
|
|
|
|
variable MTR_MEM=[DIR]
|
2008-03-03 12:53:57 +01:00
|
|
|
client-bindir=PATH Path to the directory where client binaries are located
|
|
|
|
client-libdir=PATH Path to the directory where client libraries are located
|
|
|
|
|
2006-03-23 16:39:51 +01:00
|
|
|
|
2005-01-02 16:57:21 +01:00
|
|
|
Options to control what test suites or cases to run
|
|
|
|
|
|
|
|
force Continue to run the suite after failure
|
2006-02-06 15:42:26 +01:00
|
|
|
with-ndbcluster-only Run only tests that include "ndb" in the filename
|
2006-06-14 21:45:15 +02:00
|
|
|
skip-ndb[cluster] Skip all tests that need cluster
|
2007-10-05 19:23:44 +02:00
|
|
|
do-test=PREFIX or REGEX
|
|
|
|
Run test cases which name are prefixed with PREFIX
|
|
|
|
or fulfills REGEX
|
|
|
|
skip-test=PREFIX or REGEX
|
|
|
|
Skip test cases which name are prefixed with PREFIX
|
|
|
|
or fulfills REGEX
|
2008-01-11 10:44:16 +01:00
|
|
|
start-from=PREFIX Run test cases starting test prefixed with PREFIX where
|
|
|
|
prefix may be suite.testname or just testname
|
|
|
|
suite[s]=NAME1,..,NAMEN
|
|
|
|
Collect tests in suites from the comma separated
|
2007-06-27 14:28:02 +02:00
|
|
|
list of suite names.
|
2008-03-25 16:29:32 +01:00
|
|
|
The default is: "$DEFAULT_SUITES"
|
2005-01-02 16:57:21 +01:00
|
|
|
skip-rpl Skip the replication test cases.
|
2008-09-05 17:37:55 +02:00
|
|
|
big-test Also run tests marked as "big"
|
Added option --staging-run to mysql-test-run to mark slow, not important tests, to not be run in staging trees
Use MY_MUTEX_INIT_FAST for pool mutex
mysql-test/mysql-test-run.pl:
Added option --staging-run
Added information about --parallell=# to help message
mysql-test/suite/federated/federated_server.test:
Slow test, don't run with --staging-run
mysql-test/suite/maria/t/maria-preload.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_optimize.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_relayrotate.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_001.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_sp003.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_start_stop_slave.test:
Slow test, don't run with --staging-run
mysql-test/t/compress.test:
Slow test, don't run with --staging-run
mysql-test/t/count_distinct3.test:
Slow test, don't run with --staging-run
mysql-test/t/index_merge_innodb.test:
Slow test, don't run with --staging-run
mysql-test/t/information_schema_all_engines.test:
Slow test, don't run with --staging-run
mysql-test/t/innodb_mysql.test:
Slow test, don't run with --staging-run
mysql-test/t/pool_of_threads.test:
Slow test, don't run with --staging-run
mysql-test/t/preload.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl_compress.test:
Slow test, don't run with --staging-run
mysql-test/valgrind.supp:
Suppress warnings from SuSE 11.1 on x86
sql/scheduler.cc:
Use MY_MUTEX_INIT_FAST for pool mutex
2009-06-05 17:35:22 +02:00
|
|
|
staging-run Run a limited number of tests (no slow tests). Used
|
|
|
|
for running staging trees with valgrind.
|
2009-05-12 14:53:46 +02:00
|
|
|
enable-disabled Run also tests marked as disabled
|
2009-06-22 16:29:02 +02:00
|
|
|
print-testcases Don't run the tests but print details about all the
|
2009-05-12 14:53:46 +02:00
|
|
|
selected tests, in the order they would be run.
|
2005-01-02 16:57:21 +01:00
|
|
|
|
|
|
|
Options that specify ports
|
|
|
|
|
2010-01-25 11:20:52 +01:00
|
|
|
mtr-port-base=# Base for port numbers, ports from this number to
|
|
|
|
port-base=# number+9 are reserved. Should be divisible by 10;
|
|
|
|
if not it will be rounded down. May be set with
|
|
|
|
environment variable MTR_PORT_BASE. If this value is
|
|
|
|
set and is not "auto", it overrides build-thread.
|
2007-12-12 18:19:24 +01:00
|
|
|
mtr-build-thread=# Specify unique number to calculate port number(s) from.
|
2007-12-19 12:58:06 +01:00
|
|
|
build-thread=# Can be set in environment variable MTR_BUILD_THREAD.
|
2007-12-12 18:19:24 +01:00
|
|
|
Set MTR_BUILD_THREAD="auto" to automatically aquire
|
|
|
|
a build thread id that is unique to current host
|
2005-01-02 16:57:21 +01:00
|
|
|
|
|
|
|
Options for test case authoring
|
|
|
|
|
|
|
|
record TESTNAME (Re)genereate the result file for TESTNAME
|
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
|
|
|
check-testcases Check testcases for sideeffects
|
2006-12-20 16:53:06 +01:00
|
|
|
mark-progress Log line number and elapsed time to <testname>.progress
|
2005-01-02 16:57:21 +01:00
|
|
|
|
|
|
|
Options that pass on options
|
|
|
|
|
|
|
|
mysqld=ARGS Specify additional arguments to "mysqld"
|
2009-02-12 15:08:56 +01:00
|
|
|
mysqltest=ARGS Specify additional arguments to "mysqltest"
|
2005-01-02 16:57:21 +01:00
|
|
|
|
|
|
|
Options to run test on running server
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
extern option=value Run only the tests against an already started server
|
|
|
|
the options to use for connection to the extern server
|
|
|
|
must be specified using name-value pair notation
|
|
|
|
For example:
|
|
|
|
./$0 --extern socket=/tmp/mysqld.sock
|
2005-01-02 16:57:21 +01:00
|
|
|
|
|
|
|
Options for debugging the product
|
|
|
|
|
2006-04-19 23:09:49 +02:00
|
|
|
client-ddd Start mysqltest client in ddd
|
|
|
|
client-debugger=NAME Start mysqltest in the selected debugger
|
2006-03-23 15:07:39 +01:00
|
|
|
client-gdb Start mysqltest client in gdb
|
|
|
|
ddd Start mysqld in ddd
|
2006-04-19 23:09:49 +02:00
|
|
|
debug Dump trace output for all servers and client programs
|
2006-04-04 09:49:32 +02:00
|
|
|
debugger=NAME Start mysqld in the selected debugger
|
2006-04-19 23:09:49 +02:00
|
|
|
gdb Start the mysqld(s) in gdb
|
|
|
|
manual-debug Let user manually start mysqld in debugger, before
|
|
|
|
running test(s)
|
|
|
|
manual-gdb Let user manually start mysqld in gdb, before running
|
|
|
|
test(s)
|
2007-04-13 15:06:05 +02:00
|
|
|
manual-ddd Let user manually start mysqld in ddd, before running
|
|
|
|
test(s)
|
2007-01-19 09:41:08 +01:00
|
|
|
max-save-core Limit the number of core files saved (to avoid filling
|
|
|
|
up disks for heavily crashing server). Defaults to
|
2008-04-27 15:32:12 +02:00
|
|
|
$opt_max_save_core, set to 0 for no limit. Set
|
|
|
|
it's default with MTR_MAX_SAVE_CORE
|
|
|
|
max-save-datadir Limit the number of datadir saved (to avoid filling
|
|
|
|
up disks for heavily crashing server). Defaults to
|
|
|
|
$opt_max_save_datadir, set to 0 for no limit. Set
|
|
|
|
it's default with MTR_MAX_SAVE_DATDIR
|
2008-04-28 09:24:30 +02:00
|
|
|
max-test-fail Limit the number of test failurs before aborting
|
|
|
|
the current test run. Defaults to
|
|
|
|
$opt_max_test_fail, set to 0 for no limit. Set
|
|
|
|
it's default with MTR_MAX_TEST_FAIL
|
2005-01-02 16:57:21 +01:00
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
Options for valgrind
|
2005-01-02 16:57:21 +01:00
|
|
|
|
2006-04-19 23:09:49 +02:00
|
|
|
valgrind Run the "mysqltest" and "mysqld" executables using
|
2007-10-23 11:52:55 +02:00
|
|
|
valgrind with default options
|
2006-06-16 15:56:08 +02:00
|
|
|
valgrind-all Synonym for --valgrind
|
2006-10-25 14:34:18 +02:00
|
|
|
valgrind-mysqltest Run the "mysqltest" and "mysql_client_test" executable
|
|
|
|
with valgrind
|
2006-03-23 15:07:39 +01:00
|
|
|
valgrind-mysqld Run the "mysqld" executable with valgrind
|
2007-10-23 11:52:55 +02:00
|
|
|
valgrind-options=ARGS Deprecated, use --valgrind-option
|
|
|
|
valgrind-option=ARGS Option to give valgrind, replaces default option(s),
|
|
|
|
can be specified more then once
|
2009-05-12 14:53:46 +02:00
|
|
|
valgrind-path=<EXE> Path to the valgrind executable
|
2006-07-26 14:44:59 +02:00
|
|
|
callgrind Instruct valgrind to use callgrind
|
2005-01-02 16:57:21 +01:00
|
|
|
|
2010-08-04 12:19:18 +02:00
|
|
|
Options for strace
|
|
|
|
|
|
|
|
strace Run the "mysqld" executables using strace. Default
|
|
|
|
options are -f -o var/log/'mysqld-name'.strace
|
|
|
|
strace-option=ARGS Option to give strace, replaces default option(s),
|
|
|
|
strace-client=[path] Create strace output for mysqltest client, optionally
|
|
|
|
specifying name and path to the trace program to use.
|
|
|
|
Example: $0 --strace-client=ktrace
|
|
|
|
|
2005-01-02 16:57:21 +01:00
|
|
|
Misc options
|
2008-09-05 18:28:20 +02:00
|
|
|
user=USER User for connecting to mysqld(default: $opt_user)
|
2006-03-01 13:29:37 +01:00
|
|
|
comment=STR Write STR to the output
|
2006-04-19 23:09:49 +02:00
|
|
|
notimer Don't show test case execution time
|
2007-12-12 18:19:24 +01:00
|
|
|
verbose More verbose output(use multiple times for even more)
|
2009-05-12 14:53:46 +02:00
|
|
|
verbose-restart Write when and why servers are restarted
|
2007-12-12 18:19:24 +01:00
|
|
|
start Only initialize and start the servers, using the
|
|
|
|
startup settings for the first specified test case
|
|
|
|
Example:
|
|
|
|
$0 --start alias &
|
2006-04-21 04:17:14 +02:00
|
|
|
start-dirty Only start the servers (without initialization) for
|
2007-12-12 18:19:24 +01:00
|
|
|
the first specified test case
|
2009-04-29 16:13:38 +02:00
|
|
|
wait-all If --start or --start-dirty option is used, wait for all
|
|
|
|
servers to exit before finishing the process
|
2007-12-12 18:19:24 +01:00
|
|
|
fast Run as fast as possible, dont't wait for servers
|
|
|
|
to shutdown etc.
|
2009-12-06 18:34:54 +01:00
|
|
|
parallel=N Run tests in N parallel threads (default 1)
|
2009-06-03 12:46:04 +02:00
|
|
|
Use parallel=auto for auto-setting of N
|
2008-01-10 10:44:18 +01:00
|
|
|
repeat=N Run each test N number of times
|
2009-12-06 18:34:54 +01:00
|
|
|
retry=N Retry tests that fail up to N times (default $opt_retry).
|
|
|
|
Retries are also limited by the maximum number of
|
|
|
|
failures before stopping, set with the --retry-failure
|
|
|
|
option
|
|
|
|
retry-failure=N When using the --retry option to retry failed tests,
|
|
|
|
stop when N failures have occured (default $opt_retry_failure)
|
2006-04-21 04:17:14 +02:00
|
|
|
reorder Reorder tests to get fewer server restarts
|
2005-01-02 16:57:21 +01:00
|
|
|
help Get this help text
|
|
|
|
|
2007-12-12 18:19:24 +01:00
|
|
|
testcase-timeout=MINUTES Max test case run time (default $opt_testcase_timeout)
|
|
|
|
suite-timeout=MINUTES Max test suite run time (default $opt_suite_timeout)
|
|
|
|
shutdown-timeout=SECONDS Max number of seconds to wait for server shutdown
|
|
|
|
before killing servers (default $opt_shutdown_timeout)
|
|
|
|
warnings Scan the log files for warnings. Use --nowarnings
|
|
|
|
to turn off.
|
2005-08-18 00:16:44 +02:00
|
|
|
|
2009-09-24 14:19:15 +02:00
|
|
|
stop-file=file (also MTR_STOP_FILE environment variable) if this
|
|
|
|
file detected mysql test will not start new tests
|
|
|
|
until the file will be removed.
|
|
|
|
stop-keep-alive=sec (also MTR_STOP_KEEP_ALIVE environment variable)
|
|
|
|
works with stop-file, print messages every sec
|
|
|
|
seconds when mysql test is waiting to removing
|
|
|
|
the file (for buildbot)
|
|
|
|
|
2006-11-17 13:36:10 +01:00
|
|
|
sleep=SECONDS Passed to mysqltest, will be used as fixed sleep time
|
2009-02-12 15:08:56 +01:00
|
|
|
debug-sync-timeout=NUM Set default timeout for WAIT_FOR debug sync
|
|
|
|
actions. Disable facility with NUM=0.
|
2009-02-27 12:20:53 +01:00
|
|
|
gcov Collect coverage information after the test.
|
|
|
|
The result is a gcov file per source and header file.
|
2009-08-25 17:02:55 +02:00
|
|
|
gcov-src-dir=subdir Colllect coverage only within the given subdirectory.
|
|
|
|
For example, if you're only developing the SQL layer,
|
|
|
|
it makes sense to use --gcov-src-dir=sql
|
2009-05-12 14:53:46 +02:00
|
|
|
experimental=<file> Refer to list of tests considered experimental;
|
|
|
|
failures will be marked exp-fail instead of fail.
|
|
|
|
report-features First run a "test" that reports mysql features
|
|
|
|
timestamp Print timestamp before each test report line
|
|
|
|
timediff With --timestamp, also print time passed since
|
|
|
|
*previous* test started
|
2010-02-17 16:28:02 +01:00
|
|
|
max-connections=N Max number of open connection to server in mysqltest
|
2005-08-18 00:16:44 +02:00
|
|
|
|
2005-01-02 16:57:21 +01:00
|
|
|
HERE
|
2007-12-12 18:19:24 +01:00
|
|
|
exit(1);
|
2005-08-18 00:16:44 +02:00
|
|
|
|
2005-01-02 16:57:21 +01:00
|
|
|
}
|
2009-01-16 20:27:45 +01:00
|
|
|
|
|
|
|
sub list_options ($) {
|
|
|
|
my $hash= shift;
|
|
|
|
|
|
|
|
for (keys %$hash) {
|
2010-01-07 13:17:54 +01:00
|
|
|
s/([:=].*|[+!])$//;
|
2009-01-16 20:27:45 +01:00
|
|
|
s/\|/\n--/g;
|
|
|
|
print "--$_\n";
|
|
|
|
}
|
|
|
|
|
2009-02-15 11:58:34 +01:00
|
|
|
exit(1);
|
2009-01-16 20:27:45 +01:00
|
|
|
}
|
2010-08-17 09:14:46 +02:00
|
|
|
|
|
|
|
sub time_format($) {
|
|
|
|
sprintf '%d:%02d:%02d', $_[0]/3600, ($_[0]/60)%60, $_[0]%60;
|
|
|
|
}
|
|
|
|
|
|
|
|
my $num_tests;
|
|
|
|
|
|
|
|
sub xterm_stat {
|
2010-08-27 16:53:16 +02:00
|
|
|
if (-t STDOUT and defined $ENV{TERM} and $ENV{TERM} =~ /xterm/) {
|
2010-08-17 09:14:46 +02:00
|
|
|
my ($left) = @_;
|
|
|
|
|
|
|
|
# 2.5 -> best by test
|
|
|
|
$num_tests = $left + 2.5 unless $num_tests;
|
|
|
|
|
|
|
|
my $done = $num_tests - $left;
|
|
|
|
my $spent = time - $^T;
|
|
|
|
|
|
|
|
printf "\e];mtr: spent %s on %d tests. %s (%d tests) left\a",
|
|
|
|
time_format($spent), $done,
|
|
|
|
time_format($spent/$done * $left), $left;
|
|
|
|
}
|
|
|
|
}
|