23
23
# - To make this Perl script easy to alter even for those that not
24
24
# code Perl that often, keeep the coding style as close as possible to
25
# the C/C++ MySQL coding standard.
25
# the C/C++ drizzle coding standard.
27
27
# - All lists of arguments to send to commands are Perl lists/arrays,
28
28
# not strings we append args to. Within reason, most string
29
29
# concatenation for arguments should be avoided.
31
31
# - Functions defined in the main program are not to be prefixed,
32
# functions in "library files" are to be prefixed with "mtr_" (for
33
# Mysql-Test-Run). There are some exceptions, code that fits best in
32
# functions in "library files" are to be prefixed with "dtr_" (for
33
# Drizzle-Test-Run). There are some exceptions, code that fits best in
34
34
# the main program, but are put into separate files to avoid
35
35
# clutter, may be without prefix.
386
386
# Count max number of slaves used by a test case
387
387
if ( $test->{slave_num} > $max_slave_num) {
388
388
$max_slave_num= $test->{slave_num};
389
mtr_error("Too many slaves") if $max_slave_num > 3;
389
dtr_error("Too many slaves") if $max_slave_num > 3;
392
392
# Count max number of masters used by a test case
393
393
if ( $test->{master_num} > $max_master_num) {
394
394
$max_master_num= $test->{master_num};
395
mtr_error("Too many masters") if $max_master_num > 2;
396
mtr_error("Too few masters") if $max_master_num < 1;
395
dtr_error("Too many masters") if $max_master_num > 2;
396
dtr_error("Too few masters") if $max_master_num < 1;
399
399
$use_innodb||= $test->{'innodb_test'};
439
439
# If so requested, we try to avail ourselves of a unique build thread number.
440
if ( $ENV{'MTR_BUILD_THREAD'} ) {
441
if ( lc($ENV{'MTR_BUILD_THREAD'}) eq 'auto' ) {
440
if ( $ENV{'DTR_BUILD_THREAD'} ) {
441
if ( lc($ENV{'DTR_BUILD_THREAD'}) eq 'auto' ) {
442
442
print "Requesting build thread... ";
443
$ENV{'MTR_BUILD_THREAD'} = mtr_require_unique_id_and_wait("/tmp/mysql-test-ports", 200, 299);
444
print "got ".$ENV{'MTR_BUILD_THREAD'}."\n";
443
$ENV{'DTR_BUILD_THREAD'} = dtr_require_unique_id_and_wait("/tmp/drizzle-test-ports", 200, 299);
444
print "got ".$ENV{'DTR_BUILD_THREAD'}."\n";
448
if ( $ENV{'MTR_BUILD_THREAD'} )
448
if ( $ENV{'DTR_BUILD_THREAD'} )
450
set_mtr_build_thread_ports($ENV{'MTR_BUILD_THREAD'});
450
set_dtr_build_thread_ports($ENV{'DTR_BUILD_THREAD'});
453
453
# This is needed for test log evaluation in "gen-build-status-page"
489
489
'master_port=i' => \$opt_master_myport,
490
490
'slave_port=i' => \$opt_slave_myport,
491
491
'memc_port=i' => \$opt_memc_myport,
492
'mtr-build-thread=i' => \$opt_mtr_build_thread,
492
'dtr-build-thread=i' => \$opt_dtr_build_thread,
494
494
# Test case authoring
495
495
'record' => \$opt_record,
496
496
'check-testcases' => \$opt_check_testcases,
497
497
'mark-progress' => \$opt_mark_progress,
499
# Extra options used when starting mysqld
500
'mysqld=s' => \@opt_extra_mysqld_opt,
499
# Extra options used when starting drizzled
500
'drizzled=s' => \@opt_extra_drizzled_opt,
501
501
'engine=s' => \$opt_engine,
503
503
# Run test on running server
520
520
'debugger=s' => \$opt_debugger,
521
521
'client-debugger=s' => \$opt_client_debugger,
522
522
'strace-client' => \$opt_strace_client,
523
'master-binary=s' => \$exe_master_mysqld,
524
'slave-binary=s' => \$exe_slave_mysqld,
523
'master-binary=s' => \$exe_master_drizzled,
524
'slave-binary=s' => \$exe_slave_drizzled,
525
525
'max-save-core=i' => \$opt_max_save_core,
527
527
# Coverage, profiling etc
619
619
# Find the absolute path to the test directory
620
620
if ( ! $opt_testdir )
622
$glob_mysql_test_dir= cwd();
622
$glob_drizzle_test_dir= cwd();
626
$glob_mysql_test_dir= $opt_testdir;
626
$glob_drizzle_test_dir= $opt_testdir;
628
$default_vardir= "$glob_mysql_test_dir/var";
629
$default_top_srcdir= "$glob_mysql_test_dir/..";
630
$default_top_builddir= "$glob_mysql_test_dir/..";
628
$default_vardir= "$glob_drizzle_test_dir/var";
629
$default_top_srcdir= "$glob_drizzle_test_dir/..";
630
$default_top_builddir= "$glob_drizzle_test_dir/..";
632
632
if ( ! $opt_suitepath )
634
$glob_suite_path= "$glob_mysql_test_dir/../plugin";
634
$glob_suite_path= "$glob_drizzle_test_dir/../plugin";
638
638
$glob_suite_path= $opt_suitepath;
640
640
# In most cases, the base directory we find everything relative to,
641
# is the parent directory of the "mysql-test" directory. For source
641
# is the parent directory of the "drizzle-test" directory. For source
642
642
# distributions, TAR binary distributions and some other packages.
643
$glob_basedir= dirname($glob_mysql_test_dir);
643
$glob_basedir= dirname($glob_drizzle_test_dir);
645
645
# In the RPM case, binaries and libraries are installed in the
646
646
# default system locations, instead of having our own private base
647
# directory. And we install "/usr/share/mysql-test". Moving up one
648
# more directory relative to "mysql-test" gives us a usable base
647
# directory. And we install "/usr/share/drizzle-test". Moving up one
648
# more directory relative to "drizzle-test" gives us a usable base
649
649
# directory for RPM installs.
650
650
if ( ! $source_dist and ! -d "$glob_basedir/bin" )
663
663
$glob_builddir="..";
666
# Expect mysql-bench to be located adjacent to the source tree, by default
667
$glob_mysql_bench_dir= "$glob_basedir/../mysql-bench"
668
unless defined $glob_mysql_bench_dir;
669
$glob_mysql_bench_dir= undef
670
unless -d $glob_mysql_bench_dir;
666
# Expect drizzle-bench to be located adjacent to the source tree, by default
667
$glob_drizzle_bench_dir= "$glob_basedir/../drizzle-bench"
668
unless defined $glob_drizzle_bench_dir;
669
$glob_drizzle_bench_dir= undef
670
unless -d $glob_drizzle_bench_dir;
672
$glob_timers= mtr_init_timers();
672
$glob_timers= dtr_init_timers();
675
675
# Find the drizzled executable to be able to find the drizzled version
851
851
$glob_debugger= 1;
852
852
if ( $opt_extern )
854
mtr_error("Can't use --extern when using debugger");
854
dtr_error("Can't use --extern when using debugger");
858
858
# --------------------------------------------------------------------------
859
859
# Check if special exe was selected for master or slave
860
860
# --------------------------------------------------------------------------
861
$exe_master_mysqld= $exe_master_mysqld || $exe_drizzled;
862
$exe_slave_mysqld= $exe_slave_mysqld || $exe_drizzled;
861
$exe_master_drizzled= $exe_master_drizzled || $exe_drizzled;
862
$exe_slave_drizzled= $exe_slave_drizzled || $exe_drizzled;
864
864
# --------------------------------------------------------------------------
865
865
# Check valgrind arguments
866
866
# --------------------------------------------------------------------------
867
867
if ( $opt_valgrind or $opt_valgrind_path or @valgrind_args)
869
mtr_report("Turning on valgrind for all executables");
869
dtr_report("Turning on valgrind for all executables");
870
870
$opt_valgrind= 1;
871
$opt_valgrind_mysqld= 1;
871
$opt_valgrind_drizzled= 1;
872
872
$opt_valgrind_drizzletest= 1;
874
elsif ( $opt_valgrind_mysqld )
874
elsif ( $opt_valgrind_drizzled )
876
mtr_report("Turning on valgrind for mysqld(s) only");
876
dtr_report("Turning on valgrind for drizzled(s) only");
877
877
$opt_valgrind= 1;
879
879
elsif ( $opt_valgrind_drizzletest )
881
mtr_report("Turning on valgrind for drizzletest and drizzle_client_test only");
881
dtr_report("Turning on valgrind for drizzletest and drizzle_client_test only");
882
882
$opt_valgrind= 1;
884
884
elsif ( $opt_valgrind_drizzleslap )
886
mtr_report("Turning on valgrind for drizzleslap only");
886
dtr_report("Turning on valgrind for drizzleslap only");
887
887
$opt_valgrind= 1;
890
890
if ( $opt_callgrind )
892
mtr_report("Turning on valgrind with callgrind for mysqld(s)");
892
dtr_report("Turning on valgrind with callgrind for drizzled(s)");
893
893
$opt_valgrind= 1;
894
$opt_valgrind_mysqld= 1;
894
$opt_valgrind_drizzled= 1;
896
896
# Set special valgrind options unless options passed on command line
897
897
push(@valgrind_args, "--trace-children=yes")
1113
1113
# But a fairly safe range seems to be 5001 - 32767
1116
sub set_mtr_build_thread_ports($) {
1117
my $mtr_build_thread= shift;
1116
sub set_dtr_build_thread_ports($) {
1117
my $dtr_build_thread= shift;
1119
if ( lc($mtr_build_thread) eq 'auto' ) {
1119
if ( lc($dtr_build_thread) eq 'auto' ) {
1120
1120
print "Requesting build thread... ";
1121
$ENV{'MTR_BUILD_THREAD'} = $mtr_build_thread = mtr_require_unique_id_and_wait("/tmp/mysql-test-ports", 200, 299);
1122
print "got ".$mtr_build_thread."\n";
1121
$ENV{'DTR_BUILD_THREAD'} = $dtr_build_thread = dtr_require_unique_id_and_wait("/tmp/drizzle-test-ports", 200, 299);
1122
print "got ".$dtr_build_thread."\n";
1125
$mtr_build_thread= (($mtr_build_thread * 10) % 2000) - 1000;
1125
$dtr_build_thread= (($dtr_build_thread * 10) % 2000) - 1000;
1127
1127
# Up to two masters, up to three slaves
1128
1128
# A magic value in command_line_setup depends on these equations.
1129
$opt_master_myport= gimme_a_good_port($mtr_build_thread + 9000); # and 1
1129
$opt_master_myport= gimme_a_good_port($dtr_build_thread + 9000); # and 1
1132
1132
$opt_slave_myport= gimme_a_good_port($opt_master_myport + 2); # and 3 4
1184
1184
# Look for version
1185
1185
my $exe_name= basename($exe_drizzled);
1186
mtr_verbose("exe_name: $exe_name");
1186
dtr_verbose("exe_name: $exe_name");
1187
1187
if ( $line =~ /^\S*$exe_name\s\sVer\s([0-9]*)\.([0-9]*)\.([0-9]*)/ )
1189
1189
#print "Major: $1 Minor: $2 Build: $3\n";
1190
1190
$drizzle_version_id= $1*10000 + $2*100 + $3;
1191
1191
#print "drizzle_version_id: $drizzle_version_id\n";
1192
mtr_report("Drizzle Version $1.$2.$3");
1192
dtr_report("Drizzle Version $1.$2.$3");
1196
1196
rmtree($tmpdir);
1197
mtr_error("Could not find version of Drizzle") unless $drizzle_version_id;
1197
dtr_error("Could not find version of Drizzle") unless $drizzle_version_id;
1202
1202
sub run_query($$) {
1203
my ($mysqld, $query)= @_;
1203
my ($drizzled, $query)= @_;
1206
mtr_init_args(\$args);
1206
dtr_init_args(\$args);
1208
mtr_add_arg($args, "--no-defaults");
1209
mtr_add_arg($args, "--skip-stack-trace");
1210
mtr_add_arg($args, "--user=%s", $opt_user);
1211
mtr_add_arg($args, "--port=%d", $mysqld->{'port'});
1212
mtr_add_arg($args, "--silent"); # Tab separated output
1213
mtr_add_arg($args, "-e '%s'", $query);
1208
dtr_add_arg($args, "--no-defaults");
1209
dtr_add_arg($args, "--skip-stack-trace");
1210
dtr_add_arg($args, "--user=%s", $opt_user);
1211
dtr_add_arg($args, "--port=%d", $drizzled->{'port'});
1212
dtr_add_arg($args, "--silent"); # Tab separated output
1213
dtr_add_arg($args, "-e '%s'", $query);
1215
1215
my $cmd= "$exe_drizzle " . join(' ', @$args);
1216
mtr_verbose("cmd: $cmd");
1216
dtr_verbose("cmd: $cmd");
1221
sub collect_mysqld_features_from_running_server ()
1221
sub collect_drizzled_features_from_running_server ()
1223
my $list= run_query($master->[0], "use mysql; SHOW VARIABLES");
1223
my $list= run_query($master->[0], "use drizzle; SHOW VARIABLES");
1225
1225
foreach my $line (split('\n', $list))
1254
1254
$exe_perror= "perror";
1256
1256
# Look for the client binaries
1257
$exe_drizzledump= mtr_exe_exists("$path_client_bindir/drizzledump");
1258
$exe_drizzleimport= mtr_exe_exists("$path_client_bindir/drizzleimport");
1259
$exe_drizzle= mtr_exe_exists("$path_client_bindir/drizzle");
1257
$exe_drizzledump= dtr_exe_exists("$path_client_bindir/drizzledump");
1258
$exe_drizzleimport= dtr_exe_exists("$path_client_bindir/drizzleimport");
1259
$exe_drizzle= dtr_exe_exists("$path_client_bindir/drizzle");
1261
1261
if (!$opt_extern)
1263
1263
# Look for SQL scripts directory
1264
1264
if ( $drizzle_version_id >= 50100 )
1266
$exe_drizzleslap= mtr_exe_exists("$path_client_bindir/drizzleslap");
1266
$exe_drizzleslap= dtr_exe_exists("$path_client_bindir/drizzleslap");
1270
1270
# Look for schema_writer
1272
$exe_schemawriter= mtr_exe_exists("$glob_basedir/drizzled/message/schema_writer",
1272
$exe_schemawriter= dtr_exe_exists("$glob_basedir/drizzled/message/schema_writer",
1273
1273
"$glob_builddir/drizzled/message/schema_writer");
1276
1276
# Look for drizzletest executable
1278
$exe_drizzletest= mtr_exe_exists("$path_client_bindir/drizzletest");
1278
$exe_drizzletest= dtr_exe_exists("$path_client_bindir/drizzletest");
1281
1281
# Look for drizzle_client_test executable which may _not_ exist in
1282
1282
# some versions, test using it should be skipped
1284
1284
$exe_drizzle_client_test=
1285
mtr_exe_maybe_exists(
1285
dtr_exe_maybe_exists(
1286
1286
"$glob_basedir/tests/drizzle_client_test",
1287
1287
"$glob_basedir/bin/drizzle_client_test");
1290
1290
# Look for bug25714 executable which may _not_ exist in
1291
1291
# some versions, test using it should be skipped
1293
mtr_exe_maybe_exists(
1293
dtr_exe_maybe_exists(
1294
1294
"$glob_basedir/tests/bug25714");
1299
sub generate_cmdline_mysqldump ($) {
1299
sub generate_cmdline_drizzledump ($) {
1302
mtr_native_path($exe_drizzledump) .
1302
dtr_native_path($exe_drizzledump) .
1303
1303
" --no-defaults -uroot " .
1304
"--port=$mysqld->{'port'} ";
1304
"--port=$drizzled->{'port'} ";
1307
1307
sub generate_cmdline_drizzle ($) {
1310
mtr_native_path($exe_drizzle) .
1311
" -uroot --port=$mysqld->{'port'} ";
1310
dtr_native_path($exe_drizzle) .
1311
" -uroot --port=$drizzled->{'port'} ";
1324
1324
my $exe= $exe_drizzle_client_test;
1327
mtr_init_args(\$args);
1327
dtr_init_args(\$args);
1328
1328
if ( $opt_valgrind_drizzletest )
1330
1330
valgrind_arguments($args, \$exe);
1333
mtr_add_arg($args, "--no-defaults");
1334
mtr_add_arg($args, "--testcase");
1335
mtr_add_arg($args, "--user=root");
1336
mtr_add_arg($args, "--port=$master->[0]->{'port'}");
1333
dtr_add_arg($args, "--no-defaults");
1334
dtr_add_arg($args, "--testcase");
1335
dtr_add_arg($args, "--user=root");
1336
dtr_add_arg($args, "--port=$master->[0]->{'port'}");
1338
1338
if ( $opt_extern || $drizzle_version_id >= 50000 )
1340
mtr_add_arg($args, "--vardir=$opt_vardir")
1340
dtr_add_arg($args, "--vardir=$opt_vardir")
1343
1343
if ( $opt_debug )
1346
1346
"--debug=d:t:A,$path_vardir_trace/log/drizzle_client_test.trace");
1399
1399
$ENV{'LD_LIBRARY_PATH'} ?
1400
1400
split(':', $ENV{'LD_LIBRARY_PATH'}) : (),
1401
1401
@ld_library_paths);
1402
mtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1402
dtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1404
1404
$ENV{'DYLD_LIBRARY_PATH'}= join(":", @ld_library_paths,
1405
1405
$ENV{'DYLD_LIBRARY_PATH'} ?
1406
1406
split(':', $ENV{'DYLD_LIBRARY_PATH'}) : ());
1407
mtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1407
dtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1409
1409
# The environment variable used for shared libs on AIX
1410
1410
$ENV{'SHLIB_PATH'}= join(":", @ld_library_paths,
1411
1411
$ENV{'SHLIB_PATH'} ?
1412
1412
split(':', $ENV{'SHLIB_PATH'}) : ());
1413
mtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1413
dtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1415
1415
# The environment variable used for shared libs on hp-ux
1416
1416
$ENV{'LIBPATH'}= join(":", @ld_library_paths,
1417
1417
$ENV{'LIBPATH'} ?
1418
1418
split(':', $ENV{'LIBPATH'}) : ());
1419
mtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1419
dtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1421
1421
# --------------------------------------------------------------------------
1422
1422
# Also command lines in .opt files may contain env vars
1453
1453
$ENV{'SLAVE_MYPORT1'}= $slave->[1]->{'port'};
1454
1454
$ENV{'SLAVE_MYPORT2'}= $slave->[2]->{'port'};
1455
1455
$ENV{'MC_PORT'}= $opt_memc_myport;
1456
$ENV{'DRIZZLE_TCP_PORT'}= $mysqld_variables{'drizzle-protocol.port'};
1458
$ENV{'MTR_BUILD_THREAD'}= $opt_mtr_build_thread;
1460
$ENV{'EXE_MYSQL'}= $exe_drizzle;
1456
$ENV{'DRIZZLE_TCP_PORT'}= $drizzled_variables{'drizzle-protocol.port'};
1458
$ENV{'DTR_BUILD_THREAD'}= $opt_dtr_build_thread;
1460
$ENV{'EXE_DRIZZLE'}= $exe_drizzle;
1463
1463
# ----------------------------------------------------
1464
1464
# Setup env to childs can execute myqldump
1465
1465
# ----------------------------------------------------
1466
my $cmdline_mysqldump= generate_cmdline_mysqldump($master->[0]);
1467
my $cmdline_mysqldumpslave= generate_cmdline_mysqldump($slave->[0]);
1468
my $cmdline_mysqldump_secondary= mtr_native_path($exe_drizzledump) .
1466
my $cmdline_drizzledump= generate_cmdline_drizzledump($master->[0]);
1467
my $cmdline_drizzledumpslave= generate_cmdline_drizzledump($slave->[0]);
1468
my $cmdline_drizzledump_secondary= dtr_native_path($exe_drizzledump) .
1469
1469
" --no-defaults -uroot " .
1470
1470
" --port=$master->[0]->{'secondary_port'} ";
1472
1472
if ( $opt_debug )
1474
$cmdline_mysqldump .=
1475
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-master.trace";
1476
$cmdline_mysqldumpslave .=
1477
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-slave.trace";
1478
$cmdline_mysqldump_secondary .=
1479
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-mysql.trace";
1474
$cmdline_drizzledump .=
1475
" --debug=d:t:A,$path_vardir_trace/log/drizzledump-master.trace";
1476
$cmdline_drizzledumpslave .=
1477
" --debug=d:t:A,$path_vardir_trace/log/drizzledump-slave.trace";
1478
$cmdline_drizzledump_secondary .=
1479
" --debug=d:t:A,$path_vardir_trace/log/drizzledump-drizzle.trace";
1481
$ENV{'DRIZZLE_DUMP'}= $cmdline_mysqldump;
1482
$ENV{'DRIZZLE_DUMP_SLAVE'}= $cmdline_mysqldumpslave;
1483
$ENV{'DRIZZLE_DUMP_SECONDARY'}= $cmdline_mysqldump_secondary;
1481
$ENV{'DRIZZLE_DUMP'}= $cmdline_drizzledump;
1482
$ENV{'DRIZZLE_DUMP_SLAVE'}= $cmdline_drizzledumpslave;
1483
$ENV{'DRIZZLE_DUMP_SECONDARY'}= $cmdline_drizzledump_secondary;
1485
1485
# ----------------------------------------------------
1486
1486
# Setup env so we can execute drizzle client
1487
1487
# ----------------------------------------------------
1488
my $cmdline_drizzle = generate_cmdline_drizzle($master->[0]);
1489
$ENV{'DRIZZLE'}= $cmdline_drizzle;
1488
#my $cmdline_drizzle = generate_cmdline_drizzle($master->[0]);
1489
#$ENV{'DRIZZLE'}= $cmdline_drizzle;
1491
1491
# ----------------------------------------------------
1492
# Setup env so childs can execute mysqlslap
1492
# Setup env so childs can execute drizzleslap
1493
1493
# ----------------------------------------------------
1494
1494
if ( $exe_drizzleslap )
1524
1524
# ----------------------------------------------------
1525
# Setup env so childs can execute mysqlimport
1525
# Setup env so childs can execute drizzleimport
1526
1526
# ----------------------------------------------------
1527
my $cmdline_mysqlimport=
1528
mtr_native_path($exe_drizzleimport) .
1527
my $cmdline_drizzleimport=
1528
dtr_native_path($exe_drizzleimport) .
1530
1530
"--port=$master->[0]->{'port'} ";
1532
1532
if ( $opt_debug )
1534
$cmdline_mysqlimport .=
1535
" --debug=d:t:A,$path_vardir_trace/log/mysqlimport.trace";
1534
$cmdline_drizzleimport .=
1535
" --debug=d:t:A,$path_vardir_trace/log/drizzleimport.trace";
1537
$ENV{'DRIZZLE_IMPORT'}= $cmdline_mysqlimport;
1540
# ----------------------------------------------------
1541
# Setup env so childs can execute mysql
1542
# ----------------------------------------------------
1544
mtr_native_path($exe_drizzle) .
1537
$ENV{'DRIZZLE_IMPORT'}= $cmdline_drizzleimport;
1540
# ----------------------------------------------------
1541
# Setup env so childs can execute drizzle
1542
# ----------------------------------------------------
1543
my $cmdline_drizzle=
1544
dtr_native_path($exe_drizzle) .
1545
1545
" --no-defaults --host=localhost --user=root --password= " .
1546
1546
"--port=$master->[0]->{'port'} ";
1547
1547
my $cmdline_drizzle_secondary=
1548
mtr_native_path($exe_drizzle) .
1548
dtr_native_path($exe_drizzle) .
1549
1549
" --no-defaults --host=localhost --user=root --password= " .
1550
1550
" --port=$master->[0]->{'secondary_port'} ";
1552
$ENV{'MYSQL'}= $cmdline_mysql;
1552
$ENV{'DRIZZLE'}= $cmdline_drizzle;
1553
1553
$ENV{'DRIZZLE_SECONDARY'}= $cmdline_drizzle_secondary;
1555
1555
# ----------------------------------------------------
1566
1566
# ----------------------------------------------------
1567
# Setup env so childs can execute mysql_fix_system_tables
1567
# Setup env so childs can execute drizzle_fix_system_tables
1568
1568
# ----------------------------------------------------
1569
1569
#if ( !$opt_extern)
1572
my $cmdline_mysql_fix_system_tables=
1572
my $cmdline_drizzle_fix_system_tables=
1573
1573
"$exe_drizzle_fix_system_tables --no-defaults --host=localhost " .
1574
1574
"--user=root --password= " .
1575
1575
"--basedir=$glob_basedir --bindir=$path_client_bindir --verbose " .
1576
1576
"--port=$master->[0]->{'port'} ";
1577
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_mysql_fix_system_tables;
1577
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_drizzle_fix_system_tables;
1581
1581
# ----------------------------------------------------
1582
1582
# Setup env so childs can shutdown the server
1583
1583
# ----------------------------------------------------
1584
$ENV{'DRIZZLED_SHUTDOWN'}= mtr_native_path($exe_drizzle);
1584
$ENV{'DRIZZLED_SHUTDOWN'}= dtr_native_path($exe_drizzle);
1586
1586
# ----------------------------------------------------
1587
1587
# Setup env so childs can execute perror
1588
1588
# ----------------------------------------------------
1589
$ENV{'MY_PERROR'}= mtr_native_path($exe_perror);
1589
$ENV{'MY_PERROR'}= dtr_native_path($exe_perror);
1591
1591
# ----------------------------------------------------
1592
# Add the path where mysqld will find ha_example.so
1592
# Add the path where drizzled will find ha_example.so
1593
1593
# ----------------------------------------------------
1594
1594
$ENV{'EXAMPLE_PLUGIN'}=
1595
1595
($lib_example_plugin ? basename($lib_example_plugin) : "");
1678
1678
if ( $opt_mem and readlink($opt_vardir) eq $opt_mem )
1680
1680
# Remove the directory which the link points at
1681
mtr_verbose("Removing " . readlink($opt_vardir));
1682
mtr_rmtree(readlink($opt_vardir));
1681
dtr_verbose("Removing " . readlink($opt_vardir));
1682
dtr_rmtree(readlink($opt_vardir));
1684
1684
# Remove the "var" symlink
1685
mtr_verbose("unlink($opt_vardir)");
1685
dtr_verbose("unlink($opt_vardir)");
1686
1686
unlink($opt_vardir);
1688
1688
elsif ( $opt_mem )
1690
1690
# Just remove the "var" symlink
1691
mtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1691
dtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1693
mtr_verbose("unlink($opt_vardir)");
1693
dtr_verbose("unlink($opt_vardir)");
1694
1694
unlink($opt_vardir);
1698
# Some users creates a soft link in mysql-test/var to another area
1698
# Some users creates a soft link in drizzle-test/var to another area
1699
1699
# - allow it, but remove all files in it
1701
mtr_report("WARNING: Using the 'mysql-test/var' symlink");
1701
dtr_report("WARNING: Using the 'drizzle-test/var' symlink");
1703
1703
# Make sure the directory where it points exist
1704
mtr_error("The destination for symlink $opt_vardir does not exist")
1704
dtr_error("The destination for symlink $opt_vardir does not exist")
1705
1705
if ! -d readlink($opt_vardir);
1707
1707
foreach my $bin ( glob("$opt_vardir/*") )
1709
mtr_verbose("Removing bin $bin");
1709
dtr_verbose("Removing bin $bin");
1716
1716
# Remove the entire "var" dir
1717
mtr_verbose("Removing $opt_vardir/");
1718
mtr_rmtree("$opt_vardir/");
1717
dtr_verbose("Removing $opt_vardir/");
1718
dtr_rmtree("$opt_vardir/");
1721
1721
if ( $opt_mem )
1749
1749
# Create var and the directories needed in var
1751
1751
sub setup_vardir() {
1752
mtr_report("Creating Directories");
1752
dtr_report("Creating Directories");
1754
1754
if ( $opt_vardir eq $default_vardir )
1757
# Running with "var" in mysql-test dir
1757
# Running with "var" in drizzle-test dir
1759
1759
if ( -l $opt_vardir )
1761
1761
# it's a symlink
1763
1763
# Make sure the directory where it points exist
1764
mtr_error("The destination for symlink $opt_vardir does not exist")
1764
dtr_error("The destination for symlink $opt_vardir does not exist")
1765
1765
if ! -d readlink($opt_vardir);
1767
1767
elsif ( $opt_mem )
1769
1769
# Runinng with "var" as a link to some "memory" location, normally tmpfs
1770
mtr_verbose("Creating $opt_mem");
1770
dtr_verbose("Creating $opt_mem");
1771
1771
mkpath($opt_mem);
1773
mtr_report("Symlinking 'var' to '$opt_mem'");
1773
dtr_report("Symlinking 'var' to '$opt_mem'");
1774
1774
symlink($opt_mem, $opt_vardir);
1778
1778
if ( ! -d $opt_vardir )
1780
mtr_verbose("Creating $opt_vardir");
1780
dtr_verbose("Creating $opt_vardir");
1781
1781
mkpath($opt_vardir);
1784
1784
# Ensure a proper error message if vardir couldn't be created
1785
1785
unless ( -d $opt_vardir and -w $opt_vardir )
1787
mtr_error("Writable 'var' directory is needed, use the " .
1787
dtr_error("Writable 'var' directory is needed, use the " .
1788
1788
"'--vardir=<path>' option");
1859
1859
sub check_debug_support ($) {
1860
my $mysqld_variables= shift;
1860
my $drizzled_variables= shift;
1862
if ( ! $mysqld_variables->{'debug'} )
1862
if ( ! $drizzled_variables->{'debug'} )
1864
#mtr_report("Binaries are not debug compiled");
1864
#dtr_report("Binaries are not debug compiled");
1865
1865
$debug_compiled_binaries= 0;
1867
1867
if ( $opt_debug )
1869
mtr_error("Can't use --debug, binaries does not support it");
1869
dtr_error("Can't use --debug, binaries does not support it");
1873
mtr_report("Binaries are debug compiled");
1873
dtr_report("Binaries are debug compiled");
1874
1874
$debug_compiled_binaries= 1;
1890
mysqld_start($master->[0],[],[]);
1890
drizzled_start($master->[0],[],[]);
1891
1891
if ( ! $master->[0]->{'pid'} )
1893
mtr_error("Can't start the mysqld server");
1893
dtr_error("Can't start the drizzled server");
1897
mtr_init_args(\$args);
1897
dtr_init_args(\$args);
1899
mtr_add_arg($args, "--user=%s", $opt_user);
1899
dtr_add_arg($args, "--user=%s", $opt_user);
1901
1901
if ( $opt_small_bench )
1903
mtr_add_arg($args, "--small-test");
1904
mtr_add_arg($args, "--small-tables");
1903
dtr_add_arg($args, "--small-test");
1904
dtr_add_arg($args, "--small-tables");
1907
chdir($glob_mysql_bench_dir)
1908
or mtr_error("Couldn't chdir to '$glob_mysql_bench_dir': $!");
1907
chdir($glob_drizzle_bench_dir)
1908
or dtr_error("Couldn't chdir to '$glob_drizzle_bench_dir': $!");
1910
1910
if ( ! $benchmark )
1912
mtr_run("$glob_mysql_bench_dir/run-all-tests", $args, "", "", "", "");
1912
dtr_run("$glob_drizzle_bench_dir/run-all-tests", $args, "", "", "", "");
1913
1913
# FIXME check result code?!
1915
1915
elsif ( -x $benchmark )
1917
mtr_run("$glob_mysql_bench_dir/$benchmark", $args, "", "", "", "");
1917
dtr_run("$glob_drizzle_bench_dir/$benchmark", $args, "", "", "", "");
1918
1918
# FIXME check result code?!
1922
mtr_error("Benchmark $benchmark not found");
1922
dtr_error("Benchmark $benchmark not found");
1925
chdir($glob_mysql_test_dir); # Go back
1925
chdir($glob_drizzle_test_dir); # Go back
1928
1928
stop_masters();
2342
2342
if ( -d $path_snapshot)
2344
mtr_report("Restoring snapshot of databases");
2344
dtr_report("Restoring snapshot of databases");
2346
2346
foreach my $data_dir (@data_dir_lst)
2348
2348
my $name= basename($data_dir);
2349
2349
save_files_before_restore($test_name, $data_dir);
2350
mtr_rmtree("$data_dir");
2351
mtr_copy_dir("$path_snapshot/$name", "$data_dir");
2350
dtr_rmtree("$data_dir");
2351
dtr_copy_dir("$path_snapshot/$name", "$data_dir");
2356
2356
# No snapshot existed
2357
mtr_error("No snapshot existed");
2357
dtr_error("No snapshot existed");
2361
2361
sub report_failure_and_restart ($) {
2362
2362
my $tinfo= shift;
2364
mtr_report_test_failed($tinfo);
2364
dtr_report_test_failed($tinfo);
2366
2366
if ( $opt_force )
2488
2488
my $prefix= ""; # If drizzletest server arg
2490
mtr_add_arg($args, "%s--no-defaults", $prefix);
2490
dtr_add_arg($args, "%s--no-defaults", $prefix);
2492
2492
if ($opt_engine)
2494
mtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2494
dtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2497
2497
if ( $drizzle_version_id >= 50036)
2499
# By default, prevent the started mysqld to access files outside of vardir
2500
mtr_add_arg($args, "%s--secure-file-priv=%s", $prefix, $opt_vardir);
2499
# By default, prevent the started drizzled to access files outside of vardir
2500
dtr_add_arg($args, "%s--secure-file-priv=%s", $prefix, $opt_vardir);
2503
mtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2503
dtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2505
2505
# Increase default connect_timeout to avoid intermittent
2506
2506
# disconnects when test servers are put under load
2507
2507
# see BUG#28359
2508
mtr_add_arg($args, "%s--mysql-protocol.connect-timeout=60", $prefix);
2511
# When mysqld is run by a root user(euid is 0), it will fail
2508
dtr_add_arg($args, "%s--mysql-protocol.connect-timeout=60", $prefix);
2511
# When drizzled is run by a root user(euid is 0), it will fail
2512
2512
# to start unless we specify what user to run as, see BUG#30630
2514
if (grep(/^--user/, @$extra_opt, @opt_extra_mysqld_opt) == 0) {
2515
mtr_add_arg($args, "%s--user=root", $prefix);
2514
if (grep(/^--user/, @$extra_opt, @opt_extra_drizzled_opt) == 0) {
2515
dtr_add_arg($args, "%s--user=root", $prefix);
2518
mtr_add_arg($args, "%s--pid-file=%s", $prefix,
2519
$mysqld->{'path_pid'});
2521
mtr_add_arg($args, "%s--mysql-protocol.port=%d", $prefix,
2524
mtr_add_arg($args, "%s--drizzle-protocol.port=%d", $prefix,
2525
$mysqld->{'secondary_port'});
2527
mtr_add_arg($args, "%s--datadir=%s", $prefix,
2528
$mysqld->{'path_myddir'});
2518
dtr_add_arg($args, "%s--pid-file=%s", $prefix,
2519
$drizzled->{'path_pid'});
2521
dtr_add_arg($args, "%s--mysql-protocol.port=%d", $prefix,
2522
$drizzled->{'port'});
2524
dtr_add_arg($args, "%s--mysql-protocol.port=%d", $prefix,
2525
$drizzled->{'secondary_port'});
2527
dtr_add_arg($args, "%s--datadir=%s", $prefix,
2528
$drizzled->{'path_myddir'});
2530
2530
# Check if "extra_opt" contains --skip-log-bin
2531
if ( $mysqld->{'type'} eq 'master' )
2531
if ( $drizzled->{'type'} eq 'master' )
2533
mtr_add_arg($args, "%s--server-id=%d", $prefix,
2533
dtr_add_arg($args, "%s--server-id=%d", $prefix,
2534
2534
$idx > 0 ? $idx + 101 : 1);
2537
2537
"%s--innodb.data-file-path=ibdata1:20M:autoextend", $prefix);
2542
mtr_error("unknown mysqld type")
2543
unless $mysqld->{'type'} eq 'slave';
2542
dtr_error("unknown drizzled type")
2543
unless $drizzled->{'type'} eq 'slave';
2545
2545
# Directory where slaves find the dumps generated by "load data"
2546
2546
# on the server. The path need to have constant length otherwise
2552
2552
foreach my $arg ( @$slave_master_info )
2554
mtr_add_arg($args, "%s%s", $prefix, $arg);
2554
dtr_add_arg($args, "%s%s", $prefix, $arg);
2559
2559
my $slave_server_id= 2 + $idx;
2560
2560
my $slave_rpl_rank= $slave_server_id;
2561
mtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2561
dtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2565
2565
if ( $opt_debug )
2567
mtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/%s%s.trace",
2568
$prefix, $path_vardir_trace, $mysqld->{'type'}, $sidx);
2567
dtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/%s%s.trace",
2568
$prefix, $path_vardir_trace, $drizzled->{'type'}, $sidx);
2571
mtr_add_arg($args, "%s--sort-buffer-size=256K", $prefix);
2572
mtr_add_arg($args, "%s--max-heap-table-size=1M", $prefix);
2571
dtr_add_arg($args, "%s--sort-buffer-size=256K", $prefix);
2572
dtr_add_arg($args, "%s--max-heap-table-size=1M", $prefix);
2574
2574
if ( $opt_warnings )
2576
mtr_add_arg($args, "%s--log-warnings", $prefix);
2576
dtr_add_arg($args, "%s--log-warnings", $prefix);
2579
# Indicate to "mysqld" it will be debugged in debugger
2579
# Indicate to "drizzled" it will be debugged in debugger
2580
2580
if ( $glob_debugger )
2582
mtr_add_arg($args, "%s--gdb", $prefix);
2582
dtr_add_arg($args, "%s--gdb", $prefix);
2585
2585
my $found_skip_core= 0;
2586
foreach my $arg ( @opt_extra_mysqld_opt, @$extra_opt )
2586
foreach my $arg ( @opt_extra_drizzled_opt, @$extra_opt )
2588
2588
# Allow --skip-core-file to be set in <testname>-[master|slave].opt file
2589
2589
if ($arg eq "--skip-core-file")
2621
2621
my $wait_for_pid_file= 1;
2623
my $type= $mysqld->{'type'};
2624
my $idx= $mysqld->{'idx'};
2623
my $type= $drizzled->{'type'};
2624
my $idx= $drizzled->{'idx'};
2626
2626
if ( $type eq 'master' )
2628
$exe= $exe_master_mysqld;
2628
$exe= $exe_master_drizzled;
2630
2630
elsif ( $type eq 'slave' )
2632
$exe= $exe_slave_mysqld;
2632
$exe= $exe_slave_drizzled;
2636
mtr_error("Unknown 'type' \"$type\" passed to mysqld_start");
2636
dtr_error("Unknown 'type' \"$type\" passed to drizzled_start");
2639
mtr_init_args(\$args);
2639
dtr_init_args(\$args);
2641
if ( $opt_valgrind_mysqld )
2641
if ( $opt_valgrind_drizzled )
2643
2643
valgrind_arguments($args, \$exe);
2646
mysqld_arguments($args,$mysqld,$extra_opt,$slave_master_info);
2646
drizzled_arguments($args,$drizzled,$extra_opt,$slave_master_info);
2648
2648
if ( $opt_gdb || $opt_manual_gdb)
2681
2681
# Remove the pidfile
2682
unlink($mysqld->{'path_pid'});
2682
unlink($drizzled->{'path_pid'});
2684
2684
if ( defined $exe )
2686
mtr_verbose("running Drizzle with: $exe @$args");
2687
$pid= mtr_spawn($exe, $args, "",
2688
$mysqld->{'path_myerr'},
2689
$mysqld->{'path_myerr'},
2686
dtr_verbose("running Drizzle with: $exe @$args");
2687
$pid= dtr_spawn($exe, $args, "",
2688
$drizzled->{'path_myerr'},
2689
$drizzled->{'path_myerr'},
2691
2691
{ append_log_file => 1 });
2695
if ( $wait_for_pid_file && !sleep_until_file_created($mysqld->{'path_pid'},
2696
$mysqld->{'start_timeout'},
2695
if ( $wait_for_pid_file && !sleep_until_file_created($drizzled->{'path_pid'},
2696
$drizzled->{'start_timeout'},
2700
mtr_error("Failed to start mysqld $mysqld->{'type'}");
2700
dtr_error("Failed to start drizzled $drizzled->{'type'}");
2704
2704
# Remember pid of the started process
2705
$mysqld->{'pid'}= $pid;
2705
$drizzled->{'pid'}= $pid;
2707
2707
# Remember options used when starting
2708
$mysqld->{'start_opts'}= $extra_opt;
2709
$mysqld->{'start_slave_master_info'}= $slave_master_info;
2708
$drizzled->{'start_opts'}= $extra_opt;
2709
$drizzled->{'start_slave_master_info'}= $slave_master_info;
2711
mtr_verbose("mysqld pid: $pid");
2711
dtr_verbose("drizzled pid: $pid");
2716
2716
sub stop_all_servers () {
2718
mtr_report("Stopping All Servers");
2718
dtr_report("Stopping All Servers");
2720
2720
my %admin_pids; # hash of admin processes that requests shutdown
2721
2721
my @kill_pids; # list of processes to shutdown/kill
2724
2724
# Start shutdown of all started masters
2725
foreach my $mysqld (@{$slave}, @{$master})
2725
foreach my $drizzled (@{$slave}, @{$master})
2727
if ( $mysqld->{'pid'} )
2727
if ( $drizzled->{'pid'} )
2729
$pid= mtr_server_shutdown($mysqld);
2729
$pid= dtr_server_shutdown($drizzled);
2730
2730
$admin_pids{$pid}= 1;
2732
2732
push(@kill_pids,{
2733
pid => $mysqld->{'pid'},
2734
real_pid => $mysqld->{'real_pid'},
2735
pidfile => $mysqld->{'path_pid'},
2736
sockfile => $mysqld->{'path_sock'},
2737
port => $mysqld->{'port'},
2738
errfile => $mysqld->{'path_myerr'},
2733
pid => $drizzled->{'pid'},
2734
real_pid => $drizzled->{'real_pid'},
2735
pidfile => $drizzled->{'path_pid'},
2736
sockfile => $drizzled->{'path_sock'},
2737
port => $drizzled->{'port'},
2738
errfile => $drizzled->{'path_myerr'},
2741
$mysqld->{'pid'}= 0; # Assume we are done with it
2741
$drizzled->{'pid'}= 0; # Assume we are done with it
2745
2745
# Wait blocking until all shutdown processes has completed
2746
mtr_wait_blocking(\%admin_pids);
2746
dtr_wait_blocking(\%admin_pids);
2748
2748
# Make sure that process has shutdown else try to kill them
2749
mtr_check_stop_servers(\@kill_pids);
2749
dtr_check_stop_servers(\@kill_pids);
2760
2760
if ( $tinfo->{'master_sh'} )
2762
2762
$do_restart= 1; # Always restart if script to run
2763
mtr_verbose("Restart master: Always restart if script to run");
2763
dtr_verbose("Restart master: Always restart if script to run");
2765
2765
if ( $tinfo->{'force_restart'} )
2767
2767
$do_restart= 1; # Always restart if --force-restart in -opt file
2768
mtr_verbose("Restart master: Restart forced with --force-restart");
2768
dtr_verbose("Restart master: Restart forced with --force-restart");
2770
2770
elsif( $tinfo->{'component_id'} eq 'im' )
2772
2772
$do_restart= 1;
2773
mtr_verbose("Restart master: Always restart for im tests");
2773
dtr_verbose("Restart master: Always restart for im tests");
2775
2775
elsif ( $master->[0]->{'running_master_options'} and
2776
2776
$master->[0]->{'running_master_options'}->{'timezone'} ne
2777
2777
$tinfo->{'timezone'})
2779
2779
$do_restart= 1;
2780
mtr_verbose("Restart master: Different timezone");
2780
dtr_verbose("Restart master: Different timezone");
2782
2782
# Check that running master was started with same options
2783
2783
# as the current test requires
2784
elsif (! mtr_same_opts($master->[0]->{'start_opts'},
2784
elsif (! dtr_same_opts($master->[0]->{'start_opts'},
2785
2785
$tinfo->{'master_opt'}) )
2787
2787
# Chech that diff is binlog format only
2788
my $diff_opts= mtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2788
my $diff_opts= dtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2789
2789
if (scalar(@$diff_opts) eq 2)
2791
2791
$do_restart= 1;
2880
2880
delete $master->[0]->{'running_master_options'}; # Forget history
2882
2882
# Start shutdown of all started masters
2883
foreach my $mysqld (@{$master})
2883
foreach my $drizzled (@{$master})
2885
if ( $mysqld->{'pid'} )
2885
if ( $drizzled->{'pid'} )
2887
$pid= mtr_server_shutdown($mysqld);
2887
$pid= dtr_server_shutdown($drizzled);
2889
2889
$admin_pids{$pid}= 1;
2891
2891
push(@kill_pids,{
2892
pid => $mysqld->{'pid'},
2893
real_pid => $mysqld->{'real_pid'},
2894
pidfile => $mysqld->{'path_pid'},
2895
sockfile => $mysqld->{'path_sock'},
2896
port => $mysqld->{'port'},
2897
errfile => $mysqld->{'path_myerr'},
2892
pid => $drizzled->{'pid'},
2893
real_pid => $drizzled->{'real_pid'},
2894
pidfile => $drizzled->{'path_pid'},
2895
sockfile => $drizzled->{'path_sock'},
2896
port => $drizzled->{'port'},
2897
errfile => $drizzled->{'path_myerr'},
2900
$mysqld->{'pid'}= 0; # Assume we are done with it
2900
$drizzled->{'pid'}= 0; # Assume we are done with it
2908
2908
delete $slave->[0]->{'running_slave_options'}; # Forget history
2910
2910
# Start shutdown of all started slaves
2911
foreach my $mysqld (@{$slave})
2911
foreach my $drizzled (@{$slave})
2913
if ( $mysqld->{'pid'} )
2913
if ( $drizzled->{'pid'} )
2915
$pid= mtr_server_shutdown($mysqld);
2915
$pid= dtr_server_shutdown($drizzled);
2917
2917
$admin_pids{$pid}= 1;
2919
2919
push(@kill_pids,{
2920
pid => $mysqld->{'pid'},
2921
real_pid => $mysqld->{'real_pid'},
2922
pidfile => $mysqld->{'path_pid'},
2923
sockfile => $mysqld->{'path_sock'},
2924
port => $mysqld->{'port'},
2925
errfile => $mysqld->{'path_myerr'},
2920
pid => $drizzled->{'pid'},
2921
real_pid => $drizzled->{'real_pid'},
2922
pidfile => $drizzled->{'path_pid'},
2923
sockfile => $drizzled->{'path_sock'},
2924
port => $drizzled->{'port'},
2925
errfile => $drizzled->{'path_myerr'},
2928
$mysqld->{'pid'}= 0; # Assume we are done with it
2928
$drizzled->{'pid'}= 0; # Assume we are done with it
3025
3025
sub run_check_testcase ($$) {
3027
3027
my $mode= shift;
3028
my $drizzled= shift;
3030
my $name= "check-" . $mysqld->{'type'} . $mysqld->{'idx'};
3030
my $name= "check-" . $drizzled->{'type'} . $drizzled->{'idx'};
3033
mtr_init_args(\$args);
3035
mtr_add_arg($args, "--no-defaults");
3036
mtr_add_arg($args, "--silent");
3037
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3039
mtr_add_arg($args, "--port=%d", $mysqld->{'port'});
3040
mtr_add_arg($args, "--database=test");
3041
mtr_add_arg($args, "--user=%s", $opt_user);
3042
mtr_add_arg($args, "--password=");
3044
mtr_add_arg($args, "-R");
3045
mtr_add_arg($args, "$opt_vardir/tmp/$name.result");
3033
dtr_init_args(\$args);
3035
dtr_add_arg($args, "--no-defaults");
3036
dtr_add_arg($args, "--silent");
3037
dtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3039
dtr_add_arg($args, "--port=%d", $drizzled->{'port'});
3040
dtr_add_arg($args, "--database=test");
3041
dtr_add_arg($args, "--user=%s", $opt_user);
3042
dtr_add_arg($args, "--password=");
3044
dtr_add_arg($args, "-R");
3045
dtr_add_arg($args, "$opt_vardir/tmp/$name.result");
3047
3047
if ( $mode eq "before" )
3049
mtr_add_arg($args, "--record");
3049
dtr_add_arg($args, "--record");
3052
3052
if ( $opt_testdir )
3054
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3054
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
3057
my $res = mtr_run_test($exe_drizzletest,$args,
3057
my $res = dtr_run_test($exe_drizzletest,$args,
3058
3058
"include/check-testcase.test", "", "", "");
3060
3060
if ( $res == 1 and $mode eq "after")
3062
mtr_run("diff",["-u",
3062
dtr_run("diff",["-u",
3063
3063
"$opt_vardir/tmp/$name.result",
3064
3064
"$opt_vardir/tmp/$name.reject"],
3065
3065
"", "", "", "");
3069
mtr_error("Could not execute 'check-testcase' $mode testcase");
3069
dtr_error("Could not execute 'check-testcase' $mode testcase");
3084
mysqld_start($master->[0],[],[]);
3084
drizzled_start($master->[0],[],[]);
3085
3085
if ( ! $master->[0]->{'pid'} )
3087
mtr_error("Can't start the mysqld server");
3087
dtr_error("Can't start the drizzled server");
3089
mysqld_wait_started($master->[0]);
3089
drizzled_wait_started($master->[0]);
3092
3092
my $tinfo = {};
3093
3093
$tinfo->{'name'} = 'report features';
3094
3094
$tinfo->{'result_file'} = undef;
3095
$tinfo->{'component_id'} = 'mysqld';
3095
$tinfo->{'component_id'} = 'drizzled';
3096
3096
$tinfo->{'path'} = 'include/report-features.test';
3097
3097
$tinfo->{'timezone'}= "GMT-3";
3098
3098
$tinfo->{'slave_num'} = 0;
3113
3113
my $exe= $exe_drizzletest;
3116
mtr_init_args(\$args);
3116
dtr_init_args(\$args);
3118
mtr_add_arg($args, "--no-defaults");
3119
mtr_add_arg($args, "--silent");
3120
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3121
mtr_add_arg($args, "--logdir=%s/log", $opt_vardir);
3118
dtr_add_arg($args, "--no-defaults");
3119
dtr_add_arg($args, "--silent");
3120
dtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3121
dtr_add_arg($args, "--logdir=%s/log", $opt_vardir);
3123
3123
# Log line number and time for each line in .test file
3124
mtr_add_arg($args, "--mark-progress")
3124
dtr_add_arg($args, "--mark-progress")
3125
3125
if $opt_mark_progress;
3128
mtr_add_arg($args, "--port=%d", $master->[0]->{'port'});
3129
mtr_add_arg($args, "--database=test");
3130
mtr_add_arg($args, "--user=%s", $opt_user);
3131
mtr_add_arg($args, "--password=");
3128
dtr_add_arg($args, "--port=%d", $master->[0]->{'port'});
3129
dtr_add_arg($args, "--database=test");
3130
dtr_add_arg($args, "--user=%s", $opt_user);
3131
dtr_add_arg($args, "--password=");
3134
3134
if ( $opt_strace_client )
3136
3136
$exe= "strace"; # FIXME there are ktrace, ....
3137
mtr_add_arg($args, "-o");
3138
mtr_add_arg($args, "%s/log/drizzletest.strace", $opt_vardir);
3139
mtr_add_arg($args, "$exe_drizzletest");
3137
dtr_add_arg($args, "-o");
3138
dtr_add_arg($args, "%s/log/drizzletest.strace", $opt_vardir);
3139
dtr_add_arg($args, "$exe_drizzletest");
3142
3142
if ( $opt_timer )
3144
mtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3144
dtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3147
3147
if ( $opt_compress )
3149
mtr_add_arg($args, "--compress");
3149
dtr_add_arg($args, "--compress");
3152
3152
if ( $opt_sleep )
3154
mtr_add_arg($args, "--sleep=%d", $opt_sleep);
3154
dtr_add_arg($args, "--sleep=%d", $opt_sleep);
3157
3157
if ( $opt_debug )
3159
mtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3159
dtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3160
3160
$path_vardir_trace);
3163
3163
if ( $opt_testdir )
3165
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3165
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
3182
3182
# We do this here, since we do not want to Valgrind the nested invocations
3183
3183
# of drizzletest; that would mess up the stderr output causing test failure.
3184
3184
my @args_saved = @$args;
3185
mtr_init_args(\$args);
3185
dtr_init_args(\$args);
3186
3186
valgrind_arguments($args, \$exe);
3187
mtr_add_arg($args, "%s", $_) for @args_saved;
3187
dtr_add_arg($args, "%s", $_) for @args_saved;
3190
mtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3190
dtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3192
3192
# Number of lines of resut to include in failure report
3193
mtr_add_arg($args, "--tail-lines=20");
3193
dtr_add_arg($args, "--tail-lines=20");
3195
3195
if ( defined $tinfo->{'result_file'} ) {
3196
mtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3196
dtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3199
3199
if ( $opt_record )
3201
mtr_add_arg($args, "--record");
3201
dtr_add_arg($args, "--record");
3204
3204
if ( $opt_client_gdb )
3217
3217
if ( $opt_check_testcases )
3219
foreach my $mysqld (@{$master}, @{$slave})
3219
foreach my $drizzled (@{$master}, @{$slave})
3221
if ($mysqld->{'pid'})
3221
if ($drizzled->{'pid'})
3223
run_check_testcase("before", $mysqld);
3223
run_check_testcase("before", $drizzled);
3228
my $res = mtr_run_test($exe,$args,"","",$path_timefile,"");
3228
my $res = dtr_run_test($exe,$args,"","",$path_timefile,"");
3230
3230
if ( $opt_check_testcases )
3232
foreach my $mysqld (@{$master}, @{$slave})
3232
foreach my $drizzled (@{$master}, @{$slave})
3234
if ($mysqld->{'pid'})
3234
if ($drizzled->{'pid'})
3236
if (run_check_testcase("after", $mysqld))
3236
if (run_check_testcase("after", $drizzled))
3238
3238
# Check failed, mark the test case with that info
3239
3239
$tinfo->{'check_testcase_failed'}= 1;
3291
mtr_add_arg($$args, "-title");
3292
mtr_add_arg($$args, "$type");
3293
mtr_add_arg($$args, "-e");
3291
dtr_add_arg($$args, "-title");
3292
dtr_add_arg($$args, "$type");
3293
dtr_add_arg($$args, "-e");
3295
mtr_add_arg($$args, "dbx");
3296
mtr_add_arg($$args, "-c");
3297
mtr_add_arg($$args, "source $dbx_init_file");
3298
mtr_add_arg($$args, "$$exe");
3295
dtr_add_arg($$args, "dbx");
3296
dtr_add_arg($$args, "-c");
3297
dtr_add_arg($$args, "source $dbx_init_file");
3298
dtr_add_arg($$args, "$$exe");
3300
3300
$$exe= "xterm";
3364
mtr_add_arg($$args, "-title");
3365
mtr_add_arg($$args, "$type");
3366
mtr_add_arg($$args, "-e");
3364
dtr_add_arg($$args, "-title");
3365
dtr_add_arg($$args, "$type");
3366
dtr_add_arg($$args, "-e");
3368
3368
if ( $exe_libtool )
3370
mtr_add_arg($$args, $exe_libtool);
3371
mtr_add_arg($$args, "--mode=execute");
3370
dtr_add_arg($$args, $exe_libtool);
3371
dtr_add_arg($$args, "--mode=execute");
3374
mtr_add_arg($$args, "gdb");
3375
mtr_add_arg($$args, "-x");
3376
mtr_add_arg($$args, "$gdb_init_file");
3377
mtr_add_arg($$args, "$$exe");
3374
dtr_add_arg($$args, "gdb");
3375
dtr_add_arg($$args, "-x");
3376
dtr_add_arg($$args, "$gdb_init_file");
3377
dtr_add_arg($$args, "$$exe");
3379
3379
$$exe= "xterm";
3490
3490
if ( $opt_callgrind)
3492
mtr_add_arg($args, "--tool=callgrind");
3492
dtr_add_arg($args, "--tool=callgrind");
3494
3494
elsif ($opt_massif)
3496
mtr_add_arg($args, "--tool=massif");
3496
dtr_add_arg($args, "--tool=massif");
3500
mtr_add_arg($args, "--tool=memcheck"); # From >= 2.1.2 needs this option
3501
mtr_add_arg($args, "--leak-check=yes");
3502
mtr_add_arg($args, "--num-callers=16");
3503
mtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_mysql_test_dir)
3504
if -f "$glob_mysql_test_dir/valgrind.supp";
3500
dtr_add_arg($args, "--tool=memcheck"); # From >= 2.1.2 needs this option
3501
dtr_add_arg($args, "--leak-check=yes");
3502
dtr_add_arg($args, "--num-callers=16");
3503
dtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_drizzle_test_dir)
3504
if -f "$glob_drizzle_test_dir/valgrind.supp";
3507
3507
# Add valgrind options, can be overriden by user
3508
mtr_add_arg($args, '%s', $_) for (@valgrind_args);
3508
dtr_add_arg($args, '%s', $_) for (@valgrind_args);
3510
mtr_add_arg($args, $$exe);
3510
dtr_add_arg($args, $$exe);
3512
3512
$$exe= $opt_valgrind_path || "valgrind";
3652
3652
client-ddd Start drizzletest client in ddd
3653
3653
client-debugger=NAME Start drizzletest in the selected debugger
3654
3654
client-gdb Start drizzletest client in gdb
3655
ddd Start mysqld in ddd
3655
ddd Start drizzled in ddd
3656
3656
debug Dump trace output for all servers and client programs
3657
debugger=NAME Start mysqld in the selected debugger
3658
gdb Start the mysqld(s) in gdb
3659
manual-debug Let user manually start mysqld in debugger, before
3657
debugger=NAME Start drizzled in the selected debugger
3658
gdb Start the drizzled(s) in gdb
3659
manual-debug Let user manually start drizzled in debugger, before
3660
3660
running test(s)
3661
manual-gdb Let user manually start mysqld in gdb, before running
3663
manual-ddd Let user manually start mysqld in ddd, before running
3665
master-binary=PATH Specify the master "mysqld" to use
3666
slave-binary=PATH Specify the slave "mysqld" to use
3661
manual-gdb Let user manually start drizzled in gdb, before running
3663
manual-ddd Let user manually start drizzled in ddd, before running
3665
master-binary=PATH Specify the master "drizzled" to use
3666
slave-binary=PATH Specify the slave "drizzled" to use
3667
3667
strace-client Create strace output for drizzletest client
3668
3668
max-save-core Limit the number of core files saved (to avoid filling
3669
3669
up disks for heavily crashing server). Defaults to
3675
3675
gprof See online documentation on how to use it.
3676
valgrind Run the "drizzletest" and "mysqld" executables using
3676
valgrind Run the "drizzletest" and "drizzled" executables using
3677
3677
valgrind with default options
3678
3678
valgrind-all Synonym for --valgrind
3679
3679
valgrind-drizzleslap Run "drizzleslap" with valgrind.
3680
3680
valgrind-drizzletest Run the "drizzletest" and "drizzle_client_test" executable
3682
valgrind-mysqld Run the "mysqld" executable with valgrind
3682
valgrind-drizzled Run the "drizzled" executable with valgrind
3683
3683
valgrind-options=ARGS Deprecated, use --valgrind-option
3684
3684
valgrind-option=ARGS Option to give valgrind, replaces default option(s),
3685
3685
can be specified more then once