9
# This program is free software; you can redistribute it and/or modify
10
# it under the terms of the GNU General Public License as published by
11
# the Free Software Foundation; version 2 of the License.
13
# This program is distributed in the hope that it will be useful,
14
# but WITHOUT ANY WARRANTY; without even the implied warranty of
15
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
# GNU General Public License for more details.
18
# You should have received a copy of the GNU General Public License
19
# along with this program; if not, write to the Free Software
20
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
23
7
##############################################################################
25
9
# drizzle-test-run.pl
39
23
# - To make this Perl script easy to alter even for those that not
40
24
# code Perl that often, keeep the coding style as close as possible to
41
# the C/C++ drizzle coding standard.
25
# the C/C++ MySQL coding standard.
43
27
# - All lists of arguments to send to commands are Perl lists/arrays,
44
28
# not strings we append args to. Within reason, most string
45
29
# concatenation for arguments should be avoided.
47
31
# - Functions defined in the main program are not to be prefixed,
48
# functions in "library files" are to be prefixed with "dtr_" (for
49
# Drizzle-Test-Run). There are some exceptions, code that fits best in
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
50
34
# the main program, but are put into separate files to avoid
51
35
# clutter, may be without prefix.
404
386
# Count max number of slaves used by a test case
405
387
if ( $test->{slave_num} > $max_slave_num) {
406
388
$max_slave_num= $test->{slave_num};
407
dtr_error("Too many slaves") if $max_slave_num > 3;
389
mtr_error("Too many slaves") if $max_slave_num > 3;
410
392
# Count max number of masters used by a test case
411
393
if ( $test->{master_num} > $max_master_num) {
412
394
$max_master_num= $test->{master_num};
413
dtr_error("Too many masters") if $max_master_num > 2;
414
dtr_error("Too few masters") if $max_master_num < 1;
395
mtr_error("Too many masters") if $max_master_num > 2;
396
mtr_error("Too few masters") if $max_master_num < 1;
417
399
$use_innodb||= $test->{'innodb_test'};
457
439
# If so requested, we try to avail ourselves of a unique build thread number.
458
if ( $ENV{'DTR_BUILD_THREAD'} ) {
459
if ( lc($ENV{'DTR_BUILD_THREAD'}) eq 'auto' ) {
440
if ( $ENV{'MTR_BUILD_THREAD'} ) {
441
if ( lc($ENV{'MTR_BUILD_THREAD'}) eq 'auto' ) {
460
442
print "Requesting build thread... ";
461
$ENV{'DTR_BUILD_THREAD'} = dtr_require_unique_id_and_wait("/tmp/drizzle-test-ports", 200, 299);
462
print "got ".$ENV{'DTR_BUILD_THREAD'}."\n";
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";
466
if ( $ENV{'DTR_BUILD_THREAD'} )
448
if ( $ENV{'MTR_BUILD_THREAD'} )
468
set_dtr_build_thread_ports($ENV{'DTR_BUILD_THREAD'});
450
set_mtr_build_thread_ports($ENV{'MTR_BUILD_THREAD'});
471
453
# This is needed for test log evaluation in "gen-build-status-page"
507
489
'master_port=i' => \$opt_master_myport,
508
490
'slave_port=i' => \$opt_slave_myport,
509
491
'memc_port=i' => \$opt_memc_myport,
510
'pbms_port=i' => \$opt_pbms_myport,
511
'dtr-build-thread=i' => \$opt_dtr_build_thread,
492
'mtr-build-thread=i' => \$opt_mtr_build_thread,
513
494
# Test case authoring
514
495
'record' => \$opt_record,
515
496
'check-testcases' => \$opt_check_testcases,
516
497
'mark-progress' => \$opt_mark_progress,
518
# Extra options used when starting drizzled
519
'drizzled=s' => \@opt_extra_drizzled_opt,
499
# Extra options used when starting mysqld
500
'mysqld=s' => \@opt_extra_mysqld_opt,
520
501
'engine=s' => \$opt_engine,
522
503
# Run test on running server
638
619
# Find the absolute path to the test directory
639
620
if ( ! $opt_testdir )
641
$glob_drizzle_test_dir= cwd();
622
$glob_mysql_test_dir= cwd();
645
$glob_drizzle_test_dir= $opt_testdir;
626
$glob_mysql_test_dir= $opt_testdir;
647
$default_vardir= "$glob_drizzle_test_dir/var";
648
$default_top_srcdir= "$glob_drizzle_test_dir/..";
649
$default_top_builddir= "$glob_drizzle_test_dir/..";
628
$default_vardir= "$glob_mysql_test_dir/var";
629
$default_top_srcdir= "$glob_mysql_test_dir/..";
630
$default_top_builddir= "$glob_mysql_test_dir/..";
651
632
if ( ! $opt_suitepath )
653
$glob_suite_path= "$glob_drizzle_test_dir/../plugin";
634
$glob_suite_path= "$glob_mysql_test_dir/../plugin";
657
638
$glob_suite_path= $opt_suitepath;
659
640
# In most cases, the base directory we find everything relative to,
660
# is the parent directory of the "drizzle-test" directory. For source
641
# is the parent directory of the "mysql-test" directory. For source
661
642
# distributions, TAR binary distributions and some other packages.
662
$glob_basedir= dirname($glob_drizzle_test_dir);
643
$glob_basedir= dirname($glob_mysql_test_dir);
664
645
# In the RPM case, binaries and libraries are installed in the
665
646
# default system locations, instead of having our own private base
666
# directory. And we install "/usr/share/drizzle-test". Moving up one
667
# more directory relative to "drizzle-test" gives us a usable 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
668
649
# directory for RPM installs.
669
650
if ( ! $source_dist and ! -d "$glob_basedir/bin" )
682
663
$glob_builddir="..";
685
# Expect drizzle-bench to be located adjacent to the source tree, by default
686
$glob_drizzle_bench_dir= "$glob_basedir/../drizzle-bench"
687
unless defined $glob_drizzle_bench_dir;
688
$glob_drizzle_bench_dir= undef
689
unless -d $glob_drizzle_bench_dir;
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;
691
$glob_timers= dtr_init_timers();
672
$glob_timers= mtr_init_timers();
694
675
# Find the drizzled executable to be able to find the drizzled version
870
851
$glob_debugger= 1;
871
852
if ( $opt_extern )
873
dtr_error("Can't use --extern when using debugger");
854
mtr_error("Can't use --extern when using debugger");
877
858
# --------------------------------------------------------------------------
878
859
# Check if special exe was selected for master or slave
879
860
# --------------------------------------------------------------------------
880
$exe_master_drizzled= $exe_master_drizzled || $exe_drizzled;
881
$exe_slave_drizzled= $exe_slave_drizzled || $exe_drizzled;
861
$exe_master_mysqld= $exe_master_mysqld || $exe_drizzled;
862
$exe_slave_mysqld= $exe_slave_mysqld || $exe_drizzled;
883
864
# --------------------------------------------------------------------------
884
865
# Check valgrind arguments
885
866
# --------------------------------------------------------------------------
886
867
if ( $opt_valgrind or $opt_valgrind_path or @valgrind_args)
888
dtr_report("Turning on valgrind for all executables");
869
mtr_report("Turning on valgrind for all executables");
889
870
$opt_valgrind= 1;
890
$opt_valgrind_drizzled= 1;
871
$opt_valgrind_mysqld= 1;
891
872
$opt_valgrind_drizzletest= 1;
892
$ENV{'VALGRIND_RUN'} = '1';
894
elsif ( $opt_valgrind_drizzled )
874
elsif ( $opt_valgrind_mysqld )
896
dtr_report("Turning on valgrind for drizzled(s) only");
876
mtr_report("Turning on valgrind for mysqld(s) only");
897
877
$opt_valgrind= 1;
899
879
elsif ( $opt_valgrind_drizzletest )
901
dtr_report("Turning on valgrind for drizzletest and drizzle_client_test only");
881
mtr_report("Turning on valgrind for drizzletest and drizzle_client_test only");
902
882
$opt_valgrind= 1;
904
884
elsif ( $opt_valgrind_drizzleslap )
906
dtr_report("Turning on valgrind for drizzleslap only");
886
mtr_report("Turning on valgrind for drizzleslap only");
907
887
$opt_valgrind= 1;
910
890
if ( $opt_callgrind )
912
dtr_report("Turning on valgrind with callgrind for drizzled(s)");
892
mtr_report("Turning on valgrind with callgrind for mysqld(s)");
913
893
$opt_valgrind= 1;
914
$opt_valgrind_drizzled= 1;
894
$opt_valgrind_mysqld= 1;
916
896
# Set special valgrind options unless options passed on command line
917
897
push(@valgrind_args, "--trace-children=yes")
1122
1113
# But a fairly safe range seems to be 5001 - 32767
1125
sub set_dtr_build_thread_ports($) {
1126
my $dtr_build_thread= shift;
1116
sub set_mtr_build_thread_ports($) {
1117
my $mtr_build_thread= shift;
1128
if ( lc($dtr_build_thread) eq 'auto' ) {
1119
if ( lc($mtr_build_thread) eq 'auto' ) {
1129
1120
print "Requesting build thread... ";
1130
$ENV{'DTR_BUILD_THREAD'} = $dtr_build_thread = dtr_require_unique_id_and_wait("/tmp/drizzle-test-ports", 200, 299);
1131
print "got ".$dtr_build_thread."\n";
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";
1134
$dtr_build_thread= (($dtr_build_thread * 10) % 2000) - 1000;
1125
$mtr_build_thread= (($mtr_build_thread * 10) % 2000) - 1000;
1136
1127
# Up to two masters, up to three slaves
1137
1128
# A magic value in command_line_setup depends on these equations.
1138
$opt_master_myport= gimme_a_good_port($dtr_build_thread + 9000); # and 1
1129
$opt_master_myport= gimme_a_good_port($mtr_build_thread + 9000); # and 1
1141
1132
$opt_slave_myport= gimme_a_good_port($opt_master_myport + 2); # and 3 4
1142
1133
$opt_memc_myport= gimme_a_good_port($opt_master_myport + 10);
1143
$opt_pbms_myport= gimme_a_good_port($opt_master_myport + 11);
1145
1135
if ( $opt_master_myport < 5001 or $opt_master_myport + 10 >= 32767 )
1147
dtr_error("DTR_BUILD_THREAD number results in a port",
1137
mtr_error("MTR_BUILD_THREAD number results in a port",
1148
1138
"outside 5001 - 32767",
1149
1139
"($opt_master_myport - $opt_master_myport + 10)");
1194
1184
# Look for version
1195
1185
my $exe_name= basename($exe_drizzled);
1196
dtr_verbose("exe_name: $exe_name");
1186
mtr_verbose("exe_name: $exe_name");
1197
1187
if ( $line =~ /^\S*$exe_name\s\sVer\s([0-9]*)\.([0-9]*)\.([0-9]*)/ )
1199
1189
#print "Major: $1 Minor: $2 Build: $3\n";
1200
1190
$drizzle_version_id= $1*10000 + $2*100 + $3;
1201
1191
#print "drizzle_version_id: $drizzle_version_id\n";
1202
dtr_report("Drizzle Version $1.$2.$3");
1192
mtr_report("Drizzle Version $1.$2.$3");
1206
1196
rmtree($tmpdir);
1207
dtr_error("Could not find version of Drizzle") unless $drizzle_version_id;
1197
mtr_error("Could not find version of Drizzle") unless $drizzle_version_id;
1212
1202
sub run_query($$) {
1213
my ($drizzled, $query)= @_;
1203
my ($mysqld, $query)= @_;
1216
dtr_init_args(\$args);
1206
mtr_init_args(\$args);
1218
dtr_add_arg($args, "--no-defaults");
1219
dtr_add_arg($args, "--skip-stack-trace");
1220
dtr_add_arg($args, "--user=%s", $opt_user);
1221
dtr_add_arg($args, "--port=%d", $drizzled->{'port'});
1222
dtr_add_arg($args, "--silent"); # Tab separated output
1223
dtr_add_arg($args, "-e '%s'", $query);
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);
1225
1215
my $cmd= "$exe_drizzle " . join(' ', @$args);
1226
dtr_verbose("cmd: $cmd");
1216
mtr_verbose("cmd: $cmd");
1231
sub collect_drizzled_features_from_running_server ()
1221
sub collect_mysqld_features_from_running_server ()
1233
my $list= run_query($master->[0], "use drizzle; SHOW VARIABLES");
1223
my $list= run_query($master->[0], "use mysql; SHOW VARIABLES");
1235
1225
foreach my $line (split('\n', $list))
1264
1254
$exe_perror= "perror";
1266
1256
# Look for the client binaries
1267
$exe_drizzledump= dtr_exe_exists("$path_client_bindir/drizzledump");
1268
$exe_drizzleimport= dtr_exe_exists("$path_client_bindir/drizzleimport");
1269
$exe_drizzle= dtr_exe_exists("$path_client_bindir/drizzle");
1270
$exe_drizzleadmin= dtr_exe_exists("$path_client_bindir/drizzleadmin");
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");
1272
1261
if (!$opt_extern)
1274
1263
# Look for SQL scripts directory
1275
1264
if ( $drizzle_version_id >= 50100 )
1277
$exe_drizzleslap= dtr_exe_exists("$path_client_bindir/drizzleslap");
1266
$exe_drizzleslap= mtr_exe_exists("$path_client_bindir/drizzleslap");
1281
1270
# Look for schema_writer
1283
$exe_schemawriter= dtr_exe_exists("$glob_basedir/drizzled/message/schema_writer",
1272
$exe_schemawriter= mtr_exe_exists("$glob_basedir/drizzled/message/schema_writer",
1284
1273
"$glob_builddir/drizzled/message/schema_writer");
1287
1276
# Look for drizzletest executable
1289
$exe_drizzletest= dtr_exe_exists("$path_client_bindir/drizzletest");
1278
$exe_drizzletest= mtr_exe_exists("$path_client_bindir/drizzletest");
1292
1281
# Look for drizzle_client_test executable which may _not_ exist in
1293
1282
# some versions, test using it should be skipped
1295
1284
$exe_drizzle_client_test=
1296
dtr_exe_maybe_exists(
1285
mtr_exe_maybe_exists(
1297
1286
"$glob_basedir/tests/drizzle_client_test",
1298
1287
"$glob_basedir/bin/drizzle_client_test");
1301
1290
# Look for bug25714 executable which may _not_ exist in
1302
1291
# some versions, test using it should be skipped
1304
dtr_exe_maybe_exists(
1293
mtr_exe_maybe_exists(
1305
1294
"$glob_basedir/tests/bug25714");
1310
sub generate_cmdline_drizzledump ($) {
1299
sub generate_cmdline_mysqldump ($) {
1313
dtr_native_path($exe_drizzledump) .
1302
mtr_native_path($exe_drizzledump) .
1314
1303
" --no-defaults -uroot " .
1315
"--port=$drizzled->{'port'} ";
1304
"--port=$mysqld->{'port'} ";
1318
1307
sub generate_cmdline_drizzle ($) {
1321
dtr_native_path($exe_drizzle) .
1322
" -uroot --port=$drizzled->{'port'} ";
1310
mtr_native_path($exe_drizzle) .
1311
" -uroot --port=$mysqld->{'port'} ";
1325
sub generate_cmdline_drizzleadmin ($) {
1328
dtr_native_path($exe_drizzleadmin) .
1329
" -uroot --port=$drizzled->{'port'} ";
1332
1315
##############################################################################
1341
1324
my $exe= $exe_drizzle_client_test;
1344
dtr_init_args(\$args);
1327
mtr_init_args(\$args);
1345
1328
if ( $opt_valgrind_drizzletest )
1347
1330
valgrind_arguments($args, \$exe);
1350
dtr_add_arg($args, "--no-defaults");
1351
dtr_add_arg($args, "--testcase");
1352
dtr_add_arg($args, "--user=root");
1353
dtr_add_arg($args, "--port=$master->[0]->{'port'}");
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'}");
1355
1338
if ( $opt_extern || $drizzle_version_id >= 50000 )
1357
dtr_add_arg($args, "--vardir=$opt_vardir")
1340
mtr_add_arg($args, "--vardir=$opt_vardir")
1360
1343
if ( $opt_debug )
1363
1346
"--debug=d:t:A,$path_vardir_trace/log/drizzle_client_test.trace");
1416
1399
$ENV{'LD_LIBRARY_PATH'} ?
1417
1400
split(':', $ENV{'LD_LIBRARY_PATH'}) : (),
1418
1401
@ld_library_paths);
1419
dtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1402
mtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1421
1404
$ENV{'DYLD_LIBRARY_PATH'}= join(":", @ld_library_paths,
1422
1405
$ENV{'DYLD_LIBRARY_PATH'} ?
1423
1406
split(':', $ENV{'DYLD_LIBRARY_PATH'}) : ());
1424
dtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1407
mtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1426
1409
# The environment variable used for shared libs on AIX
1427
1410
$ENV{'SHLIB_PATH'}= join(":", @ld_library_paths,
1428
1411
$ENV{'SHLIB_PATH'} ?
1429
1412
split(':', $ENV{'SHLIB_PATH'}) : ());
1430
dtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1413
mtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1432
1415
# The environment variable used for shared libs on hp-ux
1433
1416
$ENV{'LIBPATH'}= join(":", @ld_library_paths,
1434
1417
$ENV{'LIBPATH'} ?
1435
1418
split(':', $ENV{'LIBPATH'}) : ());
1436
dtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1419
mtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1438
1421
# --------------------------------------------------------------------------
1439
1422
# Also command lines in .opt files may contain env vars
1470
1453
$ENV{'SLAVE_MYPORT1'}= $slave->[1]->{'port'};
1471
1454
$ENV{'SLAVE_MYPORT2'}= $slave->[2]->{'port'};
1472
1455
$ENV{'MC_PORT'}= $opt_memc_myport;
1473
$ENV{'PBMS_PORT'}= $opt_pbms_myport;
1474
$ENV{'DRIZZLE_TCP_PORT'}= $drizzled_variables{'drizzle-protocol.port'};
1476
$ENV{'DTR_BUILD_THREAD'}= $opt_dtr_build_thread;
1478
$ENV{'EXE_DRIZZLE'}= $exe_drizzle;
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;
1481
1463
# ----------------------------------------------------
1482
1464
# Setup env to childs can execute myqldump
1483
1465
# ----------------------------------------------------
1484
my $cmdline_drizzleadmin= generate_cmdline_drizzleadmin($master->[0]);
1485
my $cmdline_drizzledump= generate_cmdline_drizzledump($master->[0]);
1486
my $cmdline_drizzledumpslave= generate_cmdline_drizzledump($slave->[0]);
1487
my $cmdline_drizzledump_secondary= dtr_native_path($exe_drizzledump) .
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) .
1488
1469
" --no-defaults -uroot " .
1489
1470
" --port=$master->[0]->{'secondary_port'} ";
1491
1472
if ( $opt_debug )
1493
$cmdline_drizzledump .=
1494
" --debug=d:t:A,$path_vardir_trace/log/drizzledump-master.trace";
1495
$cmdline_drizzledumpslave .=
1496
" --debug=d:t:A,$path_vardir_trace/log/drizzledump-slave.trace";
1497
$cmdline_drizzledump_secondary .=
1498
" --debug=d:t:A,$path_vardir_trace/log/drizzledump-drizzle.trace";
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";
1500
$ENV{'DRIZZLE_ADMIN'}= $cmdline_drizzleadmin;
1501
$ENV{'DRIZZLE_DUMP'}= $cmdline_drizzledump;
1502
$ENV{'DRIZZLE_DUMP_SLAVE'}= $cmdline_drizzledumpslave;
1503
$ENV{'DRIZZLE_DUMP_SECONDARY'}= $cmdline_drizzledump_secondary;
1481
$ENV{'DRIZZLE_DUMP'}= $cmdline_mysqldump;
1482
$ENV{'DRIZZLE_DUMP_SLAVE'}= $cmdline_mysqldumpslave;
1483
$ENV{'DRIZZLE_DUMP_SECONDARY'}= $cmdline_mysqldump_secondary;
1505
1485
# ----------------------------------------------------
1506
1486
# Setup env so we can execute drizzle client
1507
1487
# ----------------------------------------------------
1508
#my $cmdline_drizzle = generate_cmdline_drizzle($master->[0]);
1509
#$ENV{'DRIZZLE'}= $cmdline_drizzle;
1488
my $cmdline_drizzle = generate_cmdline_drizzle($master->[0]);
1489
$ENV{'DRIZZLE'}= $cmdline_drizzle;
1511
1491
# ----------------------------------------------------
1512
# Setup env so childs can execute drizzleslap
1492
# Setup env so childs can execute mysqlslap
1513
1493
# ----------------------------------------------------
1514
1494
if ( $exe_drizzleslap )
1544
1524
# ----------------------------------------------------
1545
# Setup env so childs can execute drizzleimport
1525
# Setup env so childs can execute mysqlimport
1546
1526
# ----------------------------------------------------
1547
my $cmdline_drizzleimport=
1548
dtr_native_path($exe_drizzleimport) .
1527
my $cmdline_mysqlimport=
1528
mtr_native_path($exe_drizzleimport) .
1550
1530
"--port=$master->[0]->{'port'} ";
1552
1532
if ( $opt_debug )
1554
$cmdline_drizzleimport .=
1555
" --debug=d:t:A,$path_vardir_trace/log/drizzleimport.trace";
1534
$cmdline_mysqlimport .=
1535
" --debug=d:t:A,$path_vardir_trace/log/mysqlimport.trace";
1557
$ENV{'DRIZZLE_IMPORT'}= $cmdline_drizzleimport;
1560
# ----------------------------------------------------
1561
# Setup env so childs can execute drizzle
1562
# ----------------------------------------------------
1563
my $cmdline_drizzle=
1564
dtr_native_path($exe_drizzle) .
1537
$ENV{'DRIZZLE_IMPORT'}= $cmdline_mysqlimport;
1540
# ----------------------------------------------------
1541
# Setup env so childs can execute mysql
1542
# ----------------------------------------------------
1544
mtr_native_path($exe_drizzle) .
1565
1545
" --no-defaults --host=localhost --user=root --password= " .
1566
1546
"--port=$master->[0]->{'port'} ";
1567
1547
my $cmdline_drizzle_secondary=
1568
dtr_native_path($exe_drizzle) .
1548
mtr_native_path($exe_drizzle) .
1569
1549
" --no-defaults --host=localhost --user=root --password= " .
1570
1550
" --port=$master->[0]->{'secondary_port'} ";
1572
$ENV{'DRIZZLE'}= $cmdline_drizzle;
1552
$ENV{'MYSQL'}= $cmdline_mysql;
1573
1553
$ENV{'DRIZZLE_SECONDARY'}= $cmdline_drizzle_secondary;
1575
1555
# ----------------------------------------------------
1586
1566
# ----------------------------------------------------
1587
# Setup env so childs can execute drizzle_fix_system_tables
1567
# Setup env so childs can execute mysql_fix_system_tables
1588
1568
# ----------------------------------------------------
1589
1569
#if ( !$opt_extern)
1592
my $cmdline_drizzle_fix_system_tables=
1572
my $cmdline_mysql_fix_system_tables=
1593
1573
"$exe_drizzle_fix_system_tables --no-defaults --host=localhost " .
1594
1574
"--user=root --password= " .
1595
1575
"--basedir=$glob_basedir --bindir=$path_client_bindir --verbose " .
1596
1576
"--port=$master->[0]->{'port'} ";
1597
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_drizzle_fix_system_tables;
1577
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_mysql_fix_system_tables;
1601
1581
# ----------------------------------------------------
1602
1582
# Setup env so childs can shutdown the server
1603
1583
# ----------------------------------------------------
1604
$ENV{'DRIZZLED_SHUTDOWN'}= dtr_native_path($exe_drizzle);
1584
$ENV{'DRIZZLED_SHUTDOWN'}= mtr_native_path($exe_drizzle);
1606
1586
# ----------------------------------------------------
1607
1587
# Setup env so childs can execute perror
1608
1588
# ----------------------------------------------------
1609
$ENV{'MY_PERROR'}= dtr_native_path($exe_perror);
1589
$ENV{'MY_PERROR'}= mtr_native_path($exe_perror);
1611
1591
# ----------------------------------------------------
1612
# Add the path where drizzled will find ha_example.so
1592
# Add the path where mysqld will find ha_example.so
1613
1593
# ----------------------------------------------------
1614
1594
$ENV{'EXAMPLE_PLUGIN'}=
1615
1595
($lib_example_plugin ? basename($lib_example_plugin) : "");
1699
1678
if ( $opt_mem and readlink($opt_vardir) eq $opt_mem )
1701
1680
# Remove the directory which the link points at
1702
dtr_verbose("Removing " . readlink($opt_vardir));
1703
dtr_rmtree(readlink($opt_vardir));
1681
mtr_verbose("Removing " . readlink($opt_vardir));
1682
mtr_rmtree(readlink($opt_vardir));
1705
1684
# Remove the "var" symlink
1706
dtr_verbose("unlink($opt_vardir)");
1685
mtr_verbose("unlink($opt_vardir)");
1707
1686
unlink($opt_vardir);
1709
1688
elsif ( $opt_mem )
1711
1690
# Just remove the "var" symlink
1712
dtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1691
mtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1714
dtr_verbose("unlink($opt_vardir)");
1693
mtr_verbose("unlink($opt_vardir)");
1715
1694
unlink($opt_vardir);
1719
# Some users creates a soft link in drizzle-test/var to another area
1698
# Some users creates a soft link in mysql-test/var to another area
1720
1699
# - allow it, but remove all files in it
1722
dtr_report("WARNING: Using the 'drizzle-test/var' symlink");
1701
mtr_report("WARNING: Using the 'mysql-test/var' symlink");
1724
1703
# Make sure the directory where it points exist
1725
dtr_error("The destination for symlink $opt_vardir does not exist")
1704
mtr_error("The destination for symlink $opt_vardir does not exist")
1726
1705
if ! -d readlink($opt_vardir);
1728
1707
foreach my $bin ( glob("$opt_vardir/*") )
1730
dtr_verbose("Removing bin $bin");
1709
mtr_verbose("Removing bin $bin");
1737
1716
# Remove the entire "var" dir
1738
dtr_verbose("Removing $opt_vardir/");
1739
dtr_rmtree("$opt_vardir/");
1717
mtr_verbose("Removing $opt_vardir/");
1718
mtr_rmtree("$opt_vardir/");
1742
1721
if ( $opt_mem )
1770
1749
# Create var and the directories needed in var
1772
1751
sub setup_vardir() {
1773
dtr_report("Creating Directories");
1752
mtr_report("Creating Directories");
1775
1754
if ( $opt_vardir eq $default_vardir )
1778
# Running with "var" in drizzle-test dir
1757
# Running with "var" in mysql-test dir
1780
1759
if ( -l $opt_vardir )
1782
1761
# it's a symlink
1784
1763
# Make sure the directory where it points exist
1785
dtr_error("The destination for symlink $opt_vardir does not exist")
1764
mtr_error("The destination for symlink $opt_vardir does not exist")
1786
1765
if ! -d readlink($opt_vardir);
1788
1767
elsif ( $opt_mem )
1790
1769
# Runinng with "var" as a link to some "memory" location, normally tmpfs
1791
dtr_verbose("Creating $opt_mem");
1770
mtr_verbose("Creating $opt_mem");
1792
1771
mkpath($opt_mem);
1794
dtr_report("Symlinking 'var' to '$opt_mem'");
1773
mtr_report("Symlinking 'var' to '$opt_mem'");
1795
1774
symlink($opt_mem, $opt_vardir);
1799
1778
if ( ! -d $opt_vardir )
1801
dtr_verbose("Creating $opt_vardir");
1780
mtr_verbose("Creating $opt_vardir");
1802
1781
mkpath($opt_vardir);
1805
1784
# Ensure a proper error message if vardir couldn't be created
1806
1785
unless ( -d $opt_vardir and -w $opt_vardir )
1808
dtr_error("Writable 'var' directory is needed, use the " .
1787
mtr_error("Writable 'var' directory is needed, use the " .
1809
1788
"'--vardir=<path>' option");
1880
1859
sub check_debug_support ($) {
1881
my $drizzled_variables= shift;
1860
my $mysqld_variables= shift;
1883
if ( ! $drizzled_variables->{'debug'} )
1862
if ( ! $mysqld_variables->{'debug'} )
1885
#dtr_report("Binaries are not debug compiled");
1864
#mtr_report("Binaries are not debug compiled");
1886
1865
$debug_compiled_binaries= 0;
1888
1867
if ( $opt_debug )
1890
dtr_error("Can't use --debug, binaries does not support it");
1869
mtr_error("Can't use --debug, binaries does not support it");
1894
dtr_report("Binaries are debug compiled");
1873
mtr_report("Binaries are debug compiled");
1895
1874
$debug_compiled_binaries= 1;
1911
drizzled_start($master->[0],[],[]);
1890
mysqld_start($master->[0],[],[]);
1912
1891
if ( ! $master->[0]->{'pid'} )
1914
dtr_error("Can't start the drizzled server");
1893
mtr_error("Can't start the mysqld server");
1918
dtr_init_args(\$args);
1897
mtr_init_args(\$args);
1920
dtr_add_arg($args, "--user=%s", $opt_user);
1899
mtr_add_arg($args, "--user=%s", $opt_user);
1922
1901
if ( $opt_small_bench )
1924
dtr_add_arg($args, "--small-test");
1925
dtr_add_arg($args, "--small-tables");
1903
mtr_add_arg($args, "--small-test");
1904
mtr_add_arg($args, "--small-tables");
1928
chdir($glob_drizzle_bench_dir)
1929
or dtr_error("Couldn't chdir to '$glob_drizzle_bench_dir': $!");
1907
chdir($glob_mysql_bench_dir)
1908
or mtr_error("Couldn't chdir to '$glob_mysql_bench_dir': $!");
1931
1910
if ( ! $benchmark )
1933
dtr_run("$glob_drizzle_bench_dir/run-all-tests", $args, "", "", "", "");
1912
mtr_run("$glob_mysql_bench_dir/run-all-tests", $args, "", "", "", "");
1934
1913
# FIXME check result code?!
1936
1915
elsif ( -x $benchmark )
1938
dtr_run("$glob_drizzle_bench_dir/$benchmark", $args, "", "", "", "");
1917
mtr_run("$glob_mysql_bench_dir/$benchmark", $args, "", "", "", "");
1939
1918
# FIXME check result code?!
1943
dtr_error("Benchmark $benchmark not found");
1922
mtr_error("Benchmark $benchmark not found");
1946
chdir($glob_drizzle_test_dir); # Go back
1925
chdir($glob_mysql_test_dir); # Go back
1949
1928
stop_masters();
2509
2488
my $prefix= ""; # If drizzletest server arg
2511
dtr_add_arg($args, "%s--no-defaults", $prefix);
2490
mtr_add_arg($args, "%s--no-defaults", $prefix);
2513
2492
if ($opt_engine)
2515
dtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2494
mtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2518
2497
if ( $drizzle_version_id >= 50036)
2520
# By default, prevent the started drizzled to access files outside of vardir
2521
dtr_add_arg($args, "%s--secure-file-priv=%s", $prefix, $opt_vardir);
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);
2524
dtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2503
mtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2526
2505
# Increase default connect_timeout to avoid intermittent
2527
2506
# disconnects when test servers are put under load
2528
2507
# see BUG#28359
2529
dtr_add_arg($args, "%s--mysql-protocol.connect-timeout=60", $prefix);
2532
# When drizzled is run by a root user(euid is 0), it will fail
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
2533
2512
# to start unless we specify what user to run as, see BUG#30630
2535
if (grep(/^--user/, @$extra_opt, @opt_extra_drizzled_opt) == 0) {
2536
dtr_add_arg($args, "%s--user=root", $prefix);
2514
if (grep(/^--user/, @$extra_opt, @opt_extra_mysqld_opt) == 0) {
2515
mtr_add_arg($args, "%s--user=root", $prefix);
2539
dtr_add_arg($args, "%s--pid-file=%s", $prefix,
2540
$drizzled->{'path_pid'});
2542
dtr_add_arg($args, "%s--mysql-protocol.port=%d", $prefix,
2543
$drizzled->{'port'});
2545
dtr_add_arg($args, "%s--drizzle-protocol.port=%d", $prefix,
2546
$drizzled->{'secondary_port'});
2548
dtr_add_arg($args, "%s--datadir=%s", $prefix,
2549
$drizzled->{'path_myddir'});
2551
dtr_add_arg($args, "%s--mysql-unix-socket-protocol.path=%s", $prefix,
2552
$drizzled->{'path_sock'});
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'});
2554
2530
# Check if "extra_opt" contains --skip-log-bin
2555
if ( $drizzled->{'type'} eq 'master' )
2531
if ( $mysqld->{'type'} eq 'master' )
2557
dtr_add_arg($args, "%s--server-id=%d", $prefix,
2533
mtr_add_arg($args, "%s--server-id=%d", $prefix,
2558
2534
$idx > 0 ? $idx + 101 : 1);
2561
2537
"%s--innodb.data-file-path=ibdata1:20M:autoextend", $prefix);
2566
dtr_error("unknown drizzled type")
2567
unless $drizzled->{'type'} eq 'slave';
2542
mtr_error("unknown mysqld type")
2543
unless $mysqld->{'type'} eq 'slave';
2569
2545
# Directory where slaves find the dumps generated by "load data"
2570
2546
# on the server. The path need to have constant length otherwise
2576
2552
foreach my $arg ( @$slave_master_info )
2578
dtr_add_arg($args, "%s%s", $prefix, $arg);
2554
mtr_add_arg($args, "%s%s", $prefix, $arg);
2583
2559
my $slave_server_id= 2 + $idx;
2584
2560
my $slave_rpl_rank= $slave_server_id;
2585
dtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2561
mtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2589
2565
if ( $opt_debug )
2591
dtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/%s%s.trace",
2592
$prefix, $path_vardir_trace, $drizzled->{'type'}, $sidx);
2567
mtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/%s%s.trace",
2568
$prefix, $path_vardir_trace, $mysqld->{'type'}, $sidx);
2595
dtr_add_arg($args, "%s--sort-buffer-size=256K", $prefix);
2596
dtr_add_arg($args, "%s--max-heap-table-size=1M", $prefix);
2571
mtr_add_arg($args, "%s--sort-buffer-size=256K", $prefix);
2572
mtr_add_arg($args, "%s--max-heap-table-size=1M", $prefix);
2598
2574
if ( $opt_warnings )
2600
dtr_add_arg($args, "%s--log-warnings", $prefix);
2576
mtr_add_arg($args, "%s--log-warnings", $prefix);
2603
# Indicate to "drizzled" it will be debugged in debugger
2579
# Indicate to "mysqld" it will be debugged in debugger
2604
2580
if ( $glob_debugger )
2606
dtr_add_arg($args, "%s--gdb", $prefix);
2582
mtr_add_arg($args, "%s--gdb", $prefix);
2609
2585
my $found_skip_core= 0;
2610
foreach my $arg ( @opt_extra_drizzled_opt, @$extra_opt )
2586
foreach my $arg ( @opt_extra_mysqld_opt, @$extra_opt )
2612
2588
# Allow --skip-core-file to be set in <testname>-[master|slave].opt file
2613
2589
if ($arg eq "--skip-core-file")
2645
2621
my $wait_for_pid_file= 1;
2647
my $type= $drizzled->{'type'};
2648
my $idx= $drizzled->{'idx'};
2623
my $type= $mysqld->{'type'};
2624
my $idx= $mysqld->{'idx'};
2650
2626
if ( $type eq 'master' )
2652
$exe= $exe_master_drizzled;
2628
$exe= $exe_master_mysqld;
2654
2630
elsif ( $type eq 'slave' )
2656
$exe= $exe_slave_drizzled;
2632
$exe= $exe_slave_mysqld;
2660
dtr_error("Unknown 'type' \"$type\" passed to drizzled_start");
2636
mtr_error("Unknown 'type' \"$type\" passed to mysqld_start");
2663
dtr_init_args(\$args);
2639
mtr_init_args(\$args);
2665
if ( $opt_valgrind_drizzled )
2641
if ( $opt_valgrind_mysqld )
2667
2643
valgrind_arguments($args, \$exe);
2670
drizzled_arguments($args,$drizzled,$extra_opt,$slave_master_info);
2646
mysqld_arguments($args,$mysqld,$extra_opt,$slave_master_info);
2672
2648
if ( $opt_gdb || $opt_manual_gdb)
2705
2681
# Remove the pidfile
2706
unlink($drizzled->{'path_pid'});
2682
unlink($mysqld->{'path_pid'});
2708
2684
if ( defined $exe )
2710
dtr_verbose("running Drizzle with: $exe @$args");
2711
$pid= dtr_spawn($exe, $args, "",
2712
$drizzled->{'path_myerr'},
2713
$drizzled->{'path_myerr'},
2686
mtr_verbose("running Drizzle with: $exe @$args");
2687
$pid= mtr_spawn($exe, $args, "",
2688
$mysqld->{'path_myerr'},
2689
$mysqld->{'path_myerr'},
2715
2691
{ append_log_file => 1 });
2719
if ( $wait_for_pid_file && !sleep_until_file_created($drizzled->{'path_pid'},
2720
$drizzled->{'start_timeout'},
2695
if ( $wait_for_pid_file && !sleep_until_file_created($mysqld->{'path_pid'},
2696
$mysqld->{'start_timeout'},
2724
dtr_error("Failed to start drizzled $drizzled->{'type'}");
2700
mtr_error("Failed to start mysqld $mysqld->{'type'}");
2728
2704
# Remember pid of the started process
2729
$drizzled->{'pid'}= $pid;
2705
$mysqld->{'pid'}= $pid;
2731
2707
# Remember options used when starting
2732
$drizzled->{'start_opts'}= $extra_opt;
2733
$drizzled->{'start_slave_master_info'}= $slave_master_info;
2708
$mysqld->{'start_opts'}= $extra_opt;
2709
$mysqld->{'start_slave_master_info'}= $slave_master_info;
2735
dtr_verbose("drizzled pid: $pid");
2711
mtr_verbose("mysqld pid: $pid");
2740
2716
sub stop_all_servers () {
2742
dtr_report("Stopping All Servers");
2718
mtr_report("Stopping All Servers");
2744
2720
my %admin_pids; # hash of admin processes that requests shutdown
2745
2721
my @kill_pids; # list of processes to shutdown/kill
2748
2724
# Start shutdown of all started masters
2749
foreach my $drizzled (@{$slave}, @{$master})
2725
foreach my $mysqld (@{$slave}, @{$master})
2751
if ( $drizzled->{'pid'} )
2727
if ( $mysqld->{'pid'} )
2753
$pid= dtr_server_shutdown($drizzled);
2729
$pid= mtr_server_shutdown($mysqld);
2754
2730
$admin_pids{$pid}= 1;
2756
2732
push(@kill_pids,{
2757
pid => $drizzled->{'pid'},
2758
real_pid => $drizzled->{'real_pid'},
2759
pidfile => $drizzled->{'path_pid'},
2760
sockfile => $drizzled->{'path_sock'},
2761
port => $drizzled->{'port'},
2762
errfile => $drizzled->{'path_myerr'},
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'},
2765
$drizzled->{'pid'}= 0; # Assume we are done with it
2741
$mysqld->{'pid'}= 0; # Assume we are done with it
2769
2745
# Wait blocking until all shutdown processes has completed
2770
dtr_wait_blocking(\%admin_pids);
2746
mtr_wait_blocking(\%admin_pids);
2772
2748
# Make sure that process has shutdown else try to kill them
2773
dtr_check_stop_servers(\@kill_pids);
2749
mtr_check_stop_servers(\@kill_pids);
2784
2760
if ( $tinfo->{'master_sh'} )
2786
2762
$do_restart= 1; # Always restart if script to run
2787
dtr_verbose("Restart master: Always restart if script to run");
2763
mtr_verbose("Restart master: Always restart if script to run");
2789
2765
if ( $tinfo->{'force_restart'} )
2791
2767
$do_restart= 1; # Always restart if --force-restart in -opt file
2792
dtr_verbose("Restart master: Restart forced with --force-restart");
2768
mtr_verbose("Restart master: Restart forced with --force-restart");
2794
2770
elsif( $tinfo->{'component_id'} eq 'im' )
2796
2772
$do_restart= 1;
2797
dtr_verbose("Restart master: Always restart for im tests");
2773
mtr_verbose("Restart master: Always restart for im tests");
2799
2775
elsif ( $master->[0]->{'running_master_options'} and
2800
2776
$master->[0]->{'running_master_options'}->{'timezone'} ne
2801
2777
$tinfo->{'timezone'})
2803
2779
$do_restart= 1;
2804
dtr_verbose("Restart master: Different timezone");
2780
mtr_verbose("Restart master: Different timezone");
2806
2782
# Check that running master was started with same options
2807
2783
# as the current test requires
2808
elsif (! dtr_same_opts($master->[0]->{'start_opts'},
2784
elsif (! mtr_same_opts($master->[0]->{'start_opts'},
2809
2785
$tinfo->{'master_opt'}) )
2811
2787
# Chech that diff is binlog format only
2812
my $diff_opts= dtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2788
my $diff_opts= mtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2813
2789
if (scalar(@$diff_opts) eq 2)
2815
2791
$do_restart= 1;
2904
2880
delete $master->[0]->{'running_master_options'}; # Forget history
2906
2882
# Start shutdown of all started masters
2907
foreach my $drizzled (@{$master})
2883
foreach my $mysqld (@{$master})
2909
if ( $drizzled->{'pid'} )
2885
if ( $mysqld->{'pid'} )
2911
$pid= dtr_server_shutdown($drizzled);
2887
$pid= mtr_server_shutdown($mysqld);
2913
2889
$admin_pids{$pid}= 1;
2915
2891
push(@kill_pids,{
2916
pid => $drizzled->{'pid'},
2917
real_pid => $drizzled->{'real_pid'},
2918
pidfile => $drizzled->{'path_pid'},
2919
sockfile => $drizzled->{'path_sock'},
2920
port => $drizzled->{'port'},
2921
errfile => $drizzled->{'path_myerr'},
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'},
2924
$drizzled->{'pid'}= 0; # Assume we are done with it
2900
$mysqld->{'pid'}= 0; # Assume we are done with it
2932
2908
delete $slave->[0]->{'running_slave_options'}; # Forget history
2934
2910
# Start shutdown of all started slaves
2935
foreach my $drizzled (@{$slave})
2911
foreach my $mysqld (@{$slave})
2937
if ( $drizzled->{'pid'} )
2913
if ( $mysqld->{'pid'} )
2939
$pid= dtr_server_shutdown($drizzled);
2915
$pid= mtr_server_shutdown($mysqld);
2941
2917
$admin_pids{$pid}= 1;
2943
2919
push(@kill_pids,{
2944
pid => $drizzled->{'pid'},
2945
real_pid => $drizzled->{'real_pid'},
2946
pidfile => $drizzled->{'path_pid'},
2947
sockfile => $drizzled->{'path_sock'},
2948
port => $drizzled->{'port'},
2949
errfile => $drizzled->{'path_myerr'},
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'},
2952
$drizzled->{'pid'}= 0; # Assume we are done with it
2928
$mysqld->{'pid'}= 0; # Assume we are done with it
3049
3025
sub run_check_testcase ($$) {
3051
3027
my $mode= shift;
3052
my $drizzled= shift;
3054
my $name= "check-" . $drizzled->{'type'} . $drizzled->{'idx'};
3030
my $name= "check-" . $mysqld->{'type'} . $mysqld->{'idx'};
3057
dtr_init_args(\$args);
3059
dtr_add_arg($args, "--no-defaults");
3060
dtr_add_arg($args, "--silent");
3061
dtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3063
dtr_add_arg($args, "--port=%d", $drizzled->{'port'});
3064
dtr_add_arg($args, "--database=test");
3065
dtr_add_arg($args, "--user=%s", $opt_user);
3066
dtr_add_arg($args, "--password=");
3068
dtr_add_arg($args, "-R");
3069
dtr_add_arg($args, "$opt_vardir/tmp/$name.result");
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");
3071
3047
if ( $mode eq "before" )
3073
dtr_add_arg($args, "--record");
3049
mtr_add_arg($args, "--record");
3076
3052
if ( $opt_testdir )
3078
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
3054
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3081
my $res = dtr_run_test($exe_drizzletest,$args,
3057
my $res = mtr_run_test($exe_drizzletest,$args,
3082
3058
"include/check-testcase.test", "", "", "");
3084
3060
if ( $res == 1 and $mode eq "after")
3086
dtr_run("diff",["-u",
3062
mtr_run("diff",["-u",
3087
3063
"$opt_vardir/tmp/$name.result",
3088
3064
"$opt_vardir/tmp/$name.reject"],
3089
3065
"", "", "", "");
3093
dtr_error("Could not execute 'check-testcase' $mode testcase");
3069
mtr_error("Could not execute 'check-testcase' $mode testcase");
3108
drizzled_start($master->[0],[],[]);
3084
mysqld_start($master->[0],[],[]);
3109
3085
if ( ! $master->[0]->{'pid'} )
3111
dtr_error("Can't start the drizzled server");
3087
mtr_error("Can't start the mysqld server");
3113
drizzled_wait_started($master->[0]);
3089
mysqld_wait_started($master->[0]);
3116
3092
my $tinfo = {};
3117
3093
$tinfo->{'name'} = 'report features';
3118
3094
$tinfo->{'result_file'} = undef;
3119
$tinfo->{'component_id'} = 'drizzled';
3095
$tinfo->{'component_id'} = 'mysqld';
3120
3096
$tinfo->{'path'} = 'include/report-features.test';
3121
3097
$tinfo->{'timezone'}= "GMT-3";
3122
3098
$tinfo->{'slave_num'} = 0;
3137
3113
my $exe= $exe_drizzletest;
3140
dtr_init_args(\$args);
3116
mtr_init_args(\$args);
3142
dtr_add_arg($args, "--no-defaults");
3143
dtr_add_arg($args, "--silent");
3144
dtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3145
dtr_add_arg($args, "--logdir=%s/log", $opt_vardir);
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);
3147
3123
# Log line number and time for each line in .test file
3148
dtr_add_arg($args, "--mark-progress")
3124
mtr_add_arg($args, "--mark-progress")
3149
3125
if $opt_mark_progress;
3152
dtr_add_arg($args, "--port=%d", $master->[0]->{'port'});
3153
dtr_add_arg($args, "--database=test");
3154
dtr_add_arg($args, "--user=%s", $opt_user);
3155
dtr_add_arg($args, "--password=");
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=");
3158
3134
if ( $opt_strace_client )
3160
3136
$exe= "strace"; # FIXME there are ktrace, ....
3161
dtr_add_arg($args, "-o");
3162
dtr_add_arg($args, "%s/log/drizzletest.strace", $opt_vardir);
3163
dtr_add_arg($args, "$exe_drizzletest");
3137
mtr_add_arg($args, "-o");
3138
mtr_add_arg($args, "%s/log/drizzletest.strace", $opt_vardir);
3139
mtr_add_arg($args, "$exe_drizzletest");
3166
3142
if ( $opt_timer )
3168
dtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3144
mtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3171
3147
if ( $opt_compress )
3173
dtr_add_arg($args, "--compress");
3149
mtr_add_arg($args, "--compress");
3176
3152
if ( $opt_sleep )
3178
dtr_add_arg($args, "--sleep=%d", $opt_sleep);
3154
mtr_add_arg($args, "--sleep=%d", $opt_sleep);
3181
3157
if ( $opt_debug )
3183
dtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3159
mtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3184
3160
$path_vardir_trace);
3187
3163
if ( $opt_testdir )
3189
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
3165
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3206
3182
# We do this here, since we do not want to Valgrind the nested invocations
3207
3183
# of drizzletest; that would mess up the stderr output causing test failure.
3208
3184
my @args_saved = @$args;
3209
dtr_init_args(\$args);
3185
mtr_init_args(\$args);
3210
3186
valgrind_arguments($args, \$exe);
3211
dtr_add_arg($args, "%s", $_) for @args_saved;
3187
mtr_add_arg($args, "%s", $_) for @args_saved;
3214
dtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3190
mtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3216
3192
# Number of lines of resut to include in failure report
3217
dtr_add_arg($args, "--tail-lines=20");
3193
mtr_add_arg($args, "--tail-lines=20");
3219
3195
if ( defined $tinfo->{'result_file'} ) {
3220
dtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3196
mtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3223
3199
if ( $opt_record )
3225
dtr_add_arg($args, "--record");
3201
mtr_add_arg($args, "--record");
3228
3204
if ( $opt_client_gdb )
3241
3217
if ( $opt_check_testcases )
3243
foreach my $drizzled (@{$master}, @{$slave})
3219
foreach my $mysqld (@{$master}, @{$slave})
3245
if ($drizzled->{'pid'})
3221
if ($mysqld->{'pid'})
3247
run_check_testcase("before", $drizzled);
3223
run_check_testcase("before", $mysqld);
3252
my $res = dtr_run_test($exe,$args,"","",$path_timefile,"");
3228
my $res = mtr_run_test($exe,$args,"","",$path_timefile,"");
3254
3230
if ( $opt_check_testcases )
3256
foreach my $drizzled (@{$master}, @{$slave})
3232
foreach my $mysqld (@{$master}, @{$slave})
3258
if ($drizzled->{'pid'})
3234
if ($mysqld->{'pid'})
3260
if (run_check_testcase("after", $drizzled))
3236
if (run_check_testcase("after", $mysqld))
3262
3238
# Check failed, mark the test case with that info
3263
3239
$tinfo->{'check_testcase_failed'}= 1;
3315
dtr_add_arg($$args, "-title");
3316
dtr_add_arg($$args, "$type");
3317
dtr_add_arg($$args, "-e");
3291
mtr_add_arg($$args, "-title");
3292
mtr_add_arg($$args, "$type");
3293
mtr_add_arg($$args, "-e");
3319
dtr_add_arg($$args, "dbx");
3320
dtr_add_arg($$args, "-c");
3321
dtr_add_arg($$args, "source $dbx_init_file");
3322
dtr_add_arg($$args, "$$exe");
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");
3324
3300
$$exe= "xterm";
3388
dtr_add_arg($$args, "-title");
3389
dtr_add_arg($$args, "$type");
3390
dtr_add_arg($$args, "-e");
3364
mtr_add_arg($$args, "-title");
3365
mtr_add_arg($$args, "$type");
3366
mtr_add_arg($$args, "-e");
3392
3368
if ( $exe_libtool )
3394
dtr_add_arg($$args, $exe_libtool);
3395
dtr_add_arg($$args, "--mode=execute");
3370
mtr_add_arg($$args, $exe_libtool);
3371
mtr_add_arg($$args, "--mode=execute");
3398
dtr_add_arg($$args, "gdb");
3399
dtr_add_arg($$args, "-x");
3400
dtr_add_arg($$args, "$gdb_init_file");
3401
dtr_add_arg($$args, "$$exe");
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");
3403
3379
$$exe= "xterm";
3514
3490
if ( $opt_callgrind)
3516
dtr_add_arg($args, "--tool=callgrind");
3492
mtr_add_arg($args, "--tool=callgrind");
3518
3494
elsif ($opt_massif)
3520
dtr_add_arg($args, "--tool=massif");
3496
mtr_add_arg($args, "--tool=massif");
3524
dtr_add_arg($args, "--tool=memcheck"); # From >= 2.1.2 needs this option
3525
dtr_add_arg($args, "--leak-check=yes");
3526
dtr_add_arg($args, "--num-callers=16");
3527
dtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_drizzle_test_dir)
3528
if -f "$glob_drizzle_test_dir/valgrind.supp";
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";
3531
3507
# Add valgrind options, can be overriden by user
3532
dtr_add_arg($args, '%s', $_) for (@valgrind_args);
3508
mtr_add_arg($args, '%s', $_) for (@valgrind_args);
3534
dtr_add_arg($args, $$exe);
3510
mtr_add_arg($args, $$exe);
3536
3512
$$exe= $opt_valgrind_path || "valgrind";
3676
3652
client-ddd Start drizzletest client in ddd
3677
3653
client-debugger=NAME Start drizzletest in the selected debugger
3678
3654
client-gdb Start drizzletest client in gdb
3679
ddd Start drizzled in ddd
3655
ddd Start mysqld in ddd
3680
3656
debug Dump trace output for all servers and client programs
3681
debugger=NAME Start drizzled in the selected debugger
3682
gdb Start the drizzled(s) in gdb
3683
manual-debug Let user manually start drizzled in debugger, before
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
3684
3660
running test(s)
3685
manual-gdb Let user manually start drizzled in gdb, before running
3687
manual-ddd Let user manually start drizzled in ddd, before running
3689
master-binary=PATH Specify the master "drizzled" to use
3690
slave-binary=PATH Specify the slave "drizzled" to use
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
3691
3667
strace-client Create strace output for drizzletest client
3692
3668
max-save-core Limit the number of core files saved (to avoid filling
3693
3669
up disks for heavily crashing server). Defaults to
3699
3675
gprof See online documentation on how to use it.
3700
valgrind Run the "drizzletest" and "drizzled" executables using
3676
valgrind Run the "drizzletest" and "mysqld" executables using
3701
3677
valgrind with default options
3702
3678
valgrind-all Synonym for --valgrind
3703
3679
valgrind-drizzleslap Run "drizzleslap" with valgrind.
3704
3680
valgrind-drizzletest Run the "drizzletest" and "drizzle_client_test" executable
3706
valgrind-drizzled Run the "drizzled" executable with valgrind
3682
valgrind-mysqld Run the "mysqld" executable with valgrind
3707
3683
valgrind-options=ARGS Deprecated, use --valgrind-option
3708
3684
valgrind-option=ARGS Option to give valgrind, replaces default option(s),
3709
3685
can be specified more then once