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.
359
# Figure out which tests we are going to run
378
360
if (!$opt_suites)
381
$opt_suites= $opt_suites_default;
383
my %extra_suites= ();
385
foreach my $dir ( reverse splitdir($glob_basedir) )
387
my $extra_suite= $extra_suites{$dir};
388
if (defined $extra_suite){
389
dtr_report("Found extra suite: $extra_suite");
390
$opt_suites= "$extra_suite,$opt_suites";
362
$opt_suites= $opt_suites_default;
364
# Check for any extra suites to enable based on the path name
365
my %extra_suites= ();
367
foreach my $dir ( reverse splitdir($glob_basedir) )
369
my $extra_suite= $extra_suites{$dir};
370
if (defined $extra_suite){
371
mtr_report("Found extra suite: $extra_suite");
372
$opt_suites= "$extra_suite,$opt_suites";
396
378
my $tests= collect_test_cases($opt_suites);
458
440
# If so requested, we try to avail ourselves of a unique build thread number.
459
if ( $ENV{'DTR_BUILD_THREAD'} ) {
460
if ( lc($ENV{'DTR_BUILD_THREAD'}) eq 'auto' ) {
441
if ( $ENV{'MTR_BUILD_THREAD'} ) {
442
if ( lc($ENV{'MTR_BUILD_THREAD'}) eq 'auto' ) {
461
443
print "Requesting build thread... ";
462
$ENV{'DTR_BUILD_THREAD'} = dtr_require_unique_id_and_wait("/tmp/drizzle-test-ports", 200, 299);
463
print "got ".$ENV{'DTR_BUILD_THREAD'}."\n";
444
$ENV{'MTR_BUILD_THREAD'} = mtr_require_unique_id_and_wait("/tmp/mysql-test-ports", 200, 299);
445
print "got ".$ENV{'MTR_BUILD_THREAD'}."\n";
467
if ( $ENV{'DTR_BUILD_THREAD'} )
449
if ( $ENV{'MTR_BUILD_THREAD'} )
469
set_dtr_build_thread_ports($ENV{'DTR_BUILD_THREAD'});
451
set_mtr_build_thread_ports($ENV{'MTR_BUILD_THREAD'});
472
454
# This is needed for test log evaluation in "gen-build-status-page"
508
490
'master_port=i' => \$opt_master_myport,
509
491
'slave_port=i' => \$opt_slave_myport,
510
492
'memc_port=i' => \$opt_memc_myport,
511
'pbms_port=i' => \$opt_pbms_myport,
512
'rabbitmq_port=i' => \$opt_rabbitmq_myport,
513
'dtr-build-thread=i' => \$opt_dtr_build_thread,
493
'mtr-build-thread=i' => \$opt_mtr_build_thread,
515
495
# Test case authoring
516
496
'record' => \$opt_record,
517
497
'check-testcases' => \$opt_check_testcases,
518
498
'mark-progress' => \$opt_mark_progress,
520
# Extra options used when starting drizzled
521
'drizzled=s' => \@opt_extra_drizzled_opt,
500
# Extra options used when starting mysqld
501
'mysqld=s' => \@opt_extra_mysqld_opt,
522
502
'engine=s' => \$opt_engine,
524
504
# 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);
664
# Figure out which tests we are going to run
665
my $suitedir= "$glob_drizzle_test_dir/suite";
668
opendir(SUITE_DIR, $suitedir)
669
or dtr_error("can't open directory \"$suitedir\": $!");
671
while ( my $elem= readdir(SUITE_DIR) )
673
next if $elem eq ".";
674
next if $elem eq "..";
675
next if $elem eq "big"; # Eats up too much disk
676
next if $elem eq "large_tests"; # Eats up too much disk
677
next if $elem eq "stress"; # Currently fails
678
next if $elem eq "broken"; # Old broken test, mainly unsupported featurs
680
my $local_dir= "$suitedir/$elem";
682
next unless -d $local_dir;
683
next unless -d "$local_dir/t"; # We want to make sure it has tests
684
next unless -d "$local_dir/r"; # Ditto, results
686
$opt_suites_default.= ",$elem";
691
usage("") if $opt_usage;
643
$glob_basedir= dirname($glob_mysql_test_dir);
693
645
# In the RPM case, binaries and libraries are installed in the
694
646
# default system locations, instead of having our own private base
695
# directory. And we install "/usr/share/drizzle-test". Moving up one
696
# 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
697
649
# directory for RPM installs.
698
650
if ( ! $source_dist and ! -d "$glob_basedir/bin" )
711
663
$glob_builddir="..";
714
# Expect drizzle-bench to be located adjacent to the source tree, by default
715
$glob_drizzle_bench_dir= "$glob_basedir/../drizzle-bench"
716
unless defined $glob_drizzle_bench_dir;
717
$glob_drizzle_bench_dir= undef
718
unless -d $glob_drizzle_bench_dir;
720
$glob_timers= dtr_init_timers();
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;
673
$source_dist ? $glob_mysql_test_dir : $glob_basedir;
675
$glob_timers= mtr_init_timers();
723
# Find the drizzled executable to be able to find the drizzled version
678
# Find the mysqld executable to be able to find the mysqld version
724
679
# number as early as possible
727
682
# Look for the client binaries directory
728
$path_client_bindir= dtr_path_exists("$glob_builddir/client",
683
$path_client_bindir= mtr_path_exists("$glob_builddir/client",
729
684
"$glob_basedir/client",
730
685
"$glob_basedir/bin");
732
687
if (!$opt_extern)
734
$exe_drizzled= dtr_exe_exists ("$glob_basedir/drizzled/drizzled",
689
$exe_drizzled= mtr_exe_exists ("$glob_basedir/drizzled/drizzled",
735
690
"$path_client_bindir/drizzled",
736
691
"$glob_basedir/libexec/drizzled",
737
692
"$glob_basedir/bin/drizzled",
738
693
"$glob_basedir/sbin/drizzled",
739
694
"$glob_builddir/drizzled/drizzled");
741
# Use the drizzled found above to find out what features are available
742
collect_drizzled_features();
696
# Use the mysqld found above to find out what features are available
697
collect_mysqld_features();
746
$drizzled_variables{'port'}= 4427;
701
$mysqld_variables{'port'}= 4427;
749
704
if (!$opt_engine)
899
854
$glob_debugger= 1;
900
855
if ( $opt_extern )
902
dtr_error("Can't use --extern when using debugger");
857
mtr_error("Can't use --extern when using debugger");
906
861
# --------------------------------------------------------------------------
907
862
# Check if special exe was selected for master or slave
908
863
# --------------------------------------------------------------------------
909
$exe_master_drizzled= $exe_master_drizzled || $exe_drizzled;
910
$exe_slave_drizzled= $exe_slave_drizzled || $exe_drizzled;
864
$exe_master_mysqld= $exe_master_mysqld || $exe_drizzled;
865
$exe_slave_mysqld= $exe_slave_mysqld || $exe_drizzled;
912
867
# --------------------------------------------------------------------------
913
868
# Check valgrind arguments
914
869
# --------------------------------------------------------------------------
915
870
if ( $opt_valgrind or $opt_valgrind_path or @valgrind_args)
917
dtr_report("Turning on valgrind for all executables");
872
mtr_report("Turning on valgrind for all executables");
918
873
$opt_valgrind= 1;
919
$opt_valgrind_drizzled= 1;
874
$opt_valgrind_mysqld= 1;
920
875
$opt_valgrind_drizzletest= 1;
921
$ENV{'VALGRIND_RUN'} = '1';
923
elsif ( $opt_valgrind_drizzled )
877
elsif ( $opt_valgrind_mysqld )
925
dtr_report("Turning on valgrind for drizzled(s) only");
879
mtr_report("Turning on valgrind for mysqld(s) only");
926
880
$opt_valgrind= 1;
928
882
elsif ( $opt_valgrind_drizzletest )
930
dtr_report("Turning on valgrind for drizzletest and drizzle_client_test only");
933
elsif ( $opt_valgrind_drizzleslap )
935
dtr_report("Turning on valgrind for drizzleslap only");
884
mtr_report("Turning on valgrind for drizzletest and drizzle_client_test only");
936
885
$opt_valgrind= 1;
939
888
if ( $opt_callgrind )
941
dtr_report("Turning on valgrind with callgrind for drizzled(s)");
890
mtr_report("Turning on valgrind with callgrind for mysqld(s)");
942
891
$opt_valgrind= 1;
943
$opt_valgrind_drizzled= 1;
892
$opt_valgrind_mysqld= 1;
945
894
# Set special valgrind options unless options passed on command line
946
895
push(@valgrind_args, "--trace-children=yes")
1151
1111
# But a fairly safe range seems to be 5001 - 32767
1154
sub set_dtr_build_thread_ports($) {
1155
my $dtr_build_thread= shift;
1114
sub set_mtr_build_thread_ports($) {
1115
my $mtr_build_thread= shift;
1157
if ( lc($dtr_build_thread) eq 'auto' ) {
1117
if ( lc($mtr_build_thread) eq 'auto' ) {
1158
1118
print "Requesting build thread... ";
1159
$ENV{'DTR_BUILD_THREAD'} = $dtr_build_thread = dtr_require_unique_id_and_wait("/tmp/drizzle-test-ports", 200, 299);
1160
print "got ".$dtr_build_thread."\n";
1119
$ENV{'MTR_BUILD_THREAD'} = $mtr_build_thread = mtr_require_unique_id_and_wait("/tmp/mysql-test-ports", 200, 299);
1120
print "got ".$mtr_build_thread."\n";
1163
$dtr_build_thread= (($dtr_build_thread * 10) % 2000) - 1000;
1123
$mtr_build_thread= (($mtr_build_thread * 10) % 2000) - 1000;
1165
1125
# Up to two masters, up to three slaves
1166
1126
# A magic value in command_line_setup depends on these equations.
1167
$opt_master_myport= gimme_a_good_port($dtr_build_thread + 9000); # and 1
1127
$opt_master_myport= gimme_a_good_port($mtr_build_thread + 9000); # and 1
1170
1130
$opt_slave_myport= gimme_a_good_port($opt_master_myport + 2); # and 3 4
1171
1131
$opt_memc_myport= gimme_a_good_port($opt_master_myport + 10);
1172
$opt_pbms_myport= gimme_a_good_port($opt_master_myport + 11);
1173
$opt_rabbitmq_myport= gimme_a_good_port($opt_master_myport + 12);
1175
1133
if ( $opt_master_myport < 5001 or $opt_master_myport + 10 >= 32767 )
1177
dtr_error("DTR_BUILD_THREAD number results in a port",
1135
mtr_error("MTR_BUILD_THREAD number results in a port",
1178
1136
"outside 5001 - 32767",
1179
1137
"($opt_master_myport - $opt_master_myport + 10)");
1203
1161
##############################################################################
1206
sub collect_drizzled_features () {
1164
sub collect_mysqld_features () {
1207
1165
my $found_variable_list_start= 0;
1208
1166
my $tmpdir= tempdir(CLEANUP => 0); # Directory removed by this function
1211
# Execute "drizzled --help" to get a list
1169
# Execute "mysqld --help --verbose" to get a list
1212
1170
# list of all features and settings
1214
# --no-defaults are to avoid loading
1172
# --no-defaults and --skip-grant-tables are to avoid loading
1215
1173
# system-wide configs and plugins
1217
my $list= `$exe_drizzled --no-defaults --help`;
1175
# --datadir must exist, mysqld will chdir into it
1177
my $list= `$exe_drizzled --no-defaults --datadir=$tmpdir --skip-grant-tables --verbose --help`;
1219
1179
foreach my $line (split('\n', $list))
1224
1184
# Look for version
1225
1185
my $exe_name= basename($exe_drizzled);
1226
dtr_verbose("exe_name: $exe_name");
1186
mtr_verbose("exe_name: $exe_name");
1227
1187
if ( $line =~ /^\S*$exe_name\s\sVer\s([0-9]*)\.([0-9]*)\.([0-9]*)/ )
1229
1189
#print "Major: $1 Minor: $2 Build: $3\n";
1230
1190
$drizzle_version_id= $1*10000 + $2*100 + $3;
1231
1191
#print "drizzle_version_id: $drizzle_version_id\n";
1232
dtr_report("Drizzle Version $1.$2.$3");
1192
mtr_report("Drizzle Version $1.$2.$3");
1197
if (!$found_variable_list_start)
1199
# Look for start of variables list
1200
if ( $line =~ /[\-]+\s[\-]+/ )
1202
$found_variable_list_start= 1;
1207
# Put variables into hash
1208
if ( $line =~ /^([\S]+)[ \t]+(.*?)\r?$/ )
1210
# print "$1=\"$2\"\n";
1211
$mysqld_variables{$1}= $2;
1215
# The variable list is ended with a blank line
1216
if ( $line =~ /^[\s]*$/ )
1222
# Send out a warning, we should fix the variables that has no
1223
# space between variable name and it's value
1224
# or should it be fixed width column parsing? It does not
1225
# look like that in function my_print_variables in my_getopt.c
1226
mtr_warning("Could not parse variable list line : $line");
1236
1232
rmtree($tmpdir);
1237
dtr_error("Could not find version of Drizzle") unless $drizzle_version_id;
1233
mtr_error("Could not find version of Drizzle") unless $drizzle_version_id;
1234
mtr_error("Could not find variabes list") unless $found_variable_list_start;
1242
1239
sub run_query($$) {
1243
my ($drizzled, $query)= @_;
1240
my ($mysqld, $query)= @_;
1246
dtr_init_args(\$args);
1243
mtr_init_args(\$args);
1248
dtr_add_arg($args, "--no-defaults");
1249
dtr_add_arg($args, "--skip-stack-trace");
1250
dtr_add_arg($args, "--user=%s", $opt_user);
1251
dtr_add_arg($args, "--port=%d", $drizzled->{'port'});
1252
dtr_add_arg($args, "--silent"); # Tab separated output
1253
dtr_add_arg($args, "-e '%s'", $query);
1245
mtr_add_arg($args, "--no-defaults");
1246
mtr_add_arg($args, "--skip-stack-trace");
1247
mtr_add_arg($args, "--user=%s", $opt_user);
1248
mtr_add_arg($args, "--port=%d", $mysqld->{'port'});
1249
mtr_add_arg($args, "--silent"); # Tab separated output
1250
mtr_add_arg($args, "-e '%s'", $query);
1255
1252
my $cmd= "$exe_drizzle " . join(' ', @$args);
1256
dtr_verbose("cmd: $cmd");
1253
mtr_verbose("cmd: $cmd");
1261
sub collect_drizzled_features_from_running_server ()
1258
sub collect_mysqld_features_from_running_server ()
1263
my $list= run_query($master->[0], "use drizzle; SHOW VARIABLES");
1260
my $list= run_query($master->[0], "use mysql; SHOW VARIABLES");
1265
1262
foreach my $line (split('\n', $list))
1286
1283
$exe_libtool= "../libtool";
1287
1284
if ($opt_valgrind or $glob_debugger)
1289
dtr_report("Using \"$exe_libtool\" when running valgrind or debugger");
1286
mtr_report("Using \"$exe_libtool\" when running valgrind or debugger");
1290
# Look for my_print_defaults
1291
$exe_my_print_defaults=
1293
"$path_client_bindir/my_print_defaults",
1294
"$glob_basedir/extra/my_print_defaults",
1295
"$glob_builddir/extra/my_print_defaults");
1293
1297
# Look for perror
1294
1298
$exe_perror= "perror";
1296
1300
# Look for the client binaries
1297
$exe_drizzledump= dtr_exe_exists("$path_client_bindir/drizzledump");
1298
$exe_drizzleimport= dtr_exe_exists("$path_client_bindir/drizzleimport");
1299
$exe_drizzle= dtr_exe_exists("$path_client_bindir/drizzle");
1300
$exe_drizzleadmin= dtr_exe_exists("$path_client_bindir/drizzleadmin");
1301
$exe_drizzledump= mtr_exe_exists("$path_client_bindir/drizzledump");
1302
$exe_drizzleimport= mtr_exe_exists("$path_client_bindir/drizzleimport");
1303
$exe_drizzle= mtr_exe_exists("$path_client_bindir/drizzle");
1302
1305
if (!$opt_extern)
1304
1307
# Look for SQL scripts directory
1305
1308
if ( $drizzle_version_id >= 50100 )
1307
$exe_drizzleslap= dtr_exe_exists("$path_client_bindir/drizzleslap");
1310
$exe_drizzleslap= mtr_exe_exists("$path_client_bindir/drizzleslap");
1311
1314
# Look for schema_writer
1313
$exe_schemawriter= dtr_exe_exists("$glob_basedir/drizzled/message/schema_writer",
1316
$exe_schemawriter= mtr_exe_exists("$glob_basedir/drizzled/message/schema_writer",
1314
1317
"$glob_builddir/drizzled/message/schema_writer");
1317
1320
# Look for drizzletest executable
1319
$exe_drizzletest= dtr_exe_exists("$path_client_bindir/drizzletest");
1322
$exe_drizzletest= mtr_exe_exists("$path_client_bindir/drizzletest");
1322
1325
# Look for drizzle_client_test executable which may _not_ exist in
1323
1326
# some versions, test using it should be skipped
1325
1328
$exe_drizzle_client_test=
1326
dtr_exe_maybe_exists(
1329
mtr_exe_maybe_exists(
1327
1330
"$glob_basedir/tests/drizzle_client_test",
1328
1331
"$glob_basedir/bin/drizzle_client_test");
1331
1334
# Look for bug25714 executable which may _not_ exist in
1332
1335
# some versions, test using it should be skipped
1334
dtr_exe_maybe_exists(
1337
mtr_exe_maybe_exists(
1335
1338
"$glob_basedir/tests/bug25714");
1340
sub generate_cmdline_drizzledump ($) {
1343
sub generate_cmdline_mysqldump ($) {
1343
dtr_native_path($exe_drizzledump) .
1346
mtr_native_path($exe_drizzledump) .
1344
1347
" --no-defaults -uroot " .
1345
"--port=$drizzled->{'port'} ";
1348
"--port=$mysqld->{'port'} ";
1348
1351
sub generate_cmdline_drizzle ($) {
1351
dtr_native_path($exe_drizzle) .
1352
" -uroot --port=$drizzled->{'port'} ";
1354
mtr_native_path($exe_drizzle) .
1355
" -uroot --port=$mysqld->{'port'} ";
1355
sub generate_cmdline_drizzleadmin ($) {
1358
dtr_native_path($exe_drizzleadmin) .
1359
" -uroot --port=$drizzled->{'port'} ";
1362
1359
##############################################################################
1371
1368
my $exe= $exe_drizzle_client_test;
1374
dtr_init_args(\$args);
1371
mtr_init_args(\$args);
1375
1372
if ( $opt_valgrind_drizzletest )
1377
1374
valgrind_arguments($args, \$exe);
1380
dtr_add_arg($args, "--no-defaults");
1381
dtr_add_arg($args, "--testcase");
1382
dtr_add_arg($args, "--user=root");
1383
dtr_add_arg($args, "--port=$master->[0]->{'port'}");
1377
mtr_add_arg($args, "--no-defaults");
1378
mtr_add_arg($args, "--testcase");
1379
mtr_add_arg($args, "--user=root");
1380
mtr_add_arg($args, "--port=$master->[0]->{'port'}");
1385
1382
if ( $opt_extern || $drizzle_version_id >= 50000 )
1387
dtr_add_arg($args, "--vardir=$opt_vardir")
1384
mtr_add_arg($args, "--vardir=$opt_vardir")
1390
1387
if ( $opt_debug )
1393
1390
"--debug=d:t:A,$path_vardir_trace/log/drizzle_client_test.trace");
1446
1443
$ENV{'LD_LIBRARY_PATH'} ?
1447
1444
split(':', $ENV{'LD_LIBRARY_PATH'}) : (),
1448
1445
@ld_library_paths);
1449
dtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1446
mtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1451
1448
$ENV{'DYLD_LIBRARY_PATH'}= join(":", @ld_library_paths,
1452
1449
$ENV{'DYLD_LIBRARY_PATH'} ?
1453
1450
split(':', $ENV{'DYLD_LIBRARY_PATH'}) : ());
1454
dtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1451
mtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1456
1453
# The environment variable used for shared libs on AIX
1457
1454
$ENV{'SHLIB_PATH'}= join(":", @ld_library_paths,
1458
1455
$ENV{'SHLIB_PATH'} ?
1459
1456
split(':', $ENV{'SHLIB_PATH'}) : ());
1460
dtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1457
mtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1462
1459
# The environment variable used for shared libs on hp-ux
1463
1460
$ENV{'LIBPATH'}= join(":", @ld_library_paths,
1464
1461
$ENV{'LIBPATH'} ?
1465
1462
split(':', $ENV{'LIBPATH'}) : ());
1466
dtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1463
mtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1468
1465
# --------------------------------------------------------------------------
1469
1466
# Also command lines in .opt files may contain env vars
1500
1497
$ENV{'SLAVE_MYPORT1'}= $slave->[1]->{'port'};
1501
1498
$ENV{'SLAVE_MYPORT2'}= $slave->[2]->{'port'};
1502
1499
$ENV{'MC_PORT'}= $opt_memc_myport;
1503
$ENV{'PBMS_PORT'}= $opt_pbms_myport;
1504
$ENV{'RABBITMQ_NODE_PORT'}= $opt_rabbitmq_myport;
1505
$ENV{'DRIZZLE_TCP_PORT'}= $drizzled_variables{'drizzle-protocol.port'};
1507
$ENV{'DTR_BUILD_THREAD'}= $opt_dtr_build_thread;
1509
$ENV{'EXE_DRIZZLE'}= $exe_drizzle;
1500
$ENV{'DRIZZLE_TCP_PORT'}= $mysqld_variables{'drizzle-protocol-port'};
1502
$ENV{'MTR_BUILD_THREAD'}= $opt_mtr_build_thread;
1504
$ENV{'EXE_MYSQL'}= $exe_drizzle;
1512
1507
# ----------------------------------------------------
1513
1508
# Setup env to childs can execute myqldump
1514
1509
# ----------------------------------------------------
1515
my $cmdline_drizzleadmin= generate_cmdline_drizzleadmin($master->[0]);
1516
my $cmdline_drizzledump= generate_cmdline_drizzledump($master->[0]);
1517
my $cmdline_drizzledumpslave= generate_cmdline_drizzledump($slave->[0]);
1518
my $cmdline_drizzledump_secondary= dtr_native_path($exe_drizzledump) .
1510
my $cmdline_mysqldump= generate_cmdline_mysqldump($master->[0]);
1511
my $cmdline_mysqldumpslave= generate_cmdline_mysqldump($slave->[0]);
1512
my $cmdline_mysqldump_secondary= mtr_native_path($exe_drizzledump) .
1519
1513
" --no-defaults -uroot " .
1520
1514
" --port=$master->[0]->{'secondary_port'} ";
1522
1516
if ( $opt_debug )
1524
$cmdline_drizzledump .=
1525
" --debug=d:t:A,$path_vardir_trace/log/drizzledump-master.trace";
1526
$cmdline_drizzledumpslave .=
1527
" --debug=d:t:A,$path_vardir_trace/log/drizzledump-slave.trace";
1528
$cmdline_drizzledump_secondary .=
1529
" --debug=d:t:A,$path_vardir_trace/log/drizzledump-drizzle.trace";
1518
$cmdline_mysqldump .=
1519
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-master.trace";
1520
$cmdline_mysqldumpslave .=
1521
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-slave.trace";
1522
$cmdline_mysqldump_secondary .=
1523
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-mysql.trace";
1531
$ENV{'DRIZZLE_ADMIN'}= $cmdline_drizzleadmin;
1532
$ENV{'DRIZZLE_DUMP'}= $cmdline_drizzledump;
1533
$ENV{'DRIZZLE_DUMP_SLAVE'}= $cmdline_drizzledumpslave;
1534
$ENV{'DRIZZLE_DUMP_SECONDARY'}= $cmdline_drizzledump_secondary;
1525
$ENV{'DRIZZLE_DUMP'}= $cmdline_mysqldump;
1526
$ENV{'DRIZZLE_DUMP_SLAVE'}= $cmdline_mysqldumpslave;
1527
$ENV{'DRIZZLE_DUMP_SECONDARY'}= $cmdline_mysqldump_secondary;
1536
1529
# ----------------------------------------------------
1537
1530
# Setup env so we can execute drizzle client
1538
1531
# ----------------------------------------------------
1539
#my $cmdline_drizzle = generate_cmdline_drizzle($master->[0]);
1540
#$ENV{'DRIZZLE'}= $cmdline_drizzle;
1532
my $cmdline_drizzle = generate_cmdline_drizzle($master->[0]);
1533
$ENV{'DRIZZLE'}= $cmdline_drizzle;
1542
1535
# ----------------------------------------------------
1543
# Setup env so childs can execute drizzleslap
1536
# Setup env so childs can execute mysqlslap
1544
1537
# ----------------------------------------------------
1545
1538
if ( $exe_drizzleslap )
1547
my $cmdline_drizzleslap;
1549
if ( $opt_valgrind_drizzleslap )
1551
$cmdline_drizzleslap= "$glob_basedir/libtool --mode=execute valgrind --log-file=$opt_vardir/log/drizzleslap-valgrind.log ";
1553
$cmdline_drizzleslap .=
1554
dtr_native_path($exe_drizzleslap) .
1540
my $cmdline_drizzleslap=
1541
mtr_native_path($exe_drizzleslap) .
1556
1543
"--port=$master->[0]->{'port'} ";
1557
1544
my $cmdline_drizzleslap_secondary=
1558
dtr_native_path($exe_drizzleslap) .
1545
mtr_native_path($exe_drizzleslap) .
1560
1547
" --port=$master->[0]->{'secondary_port'} ";
1575
1562
# ----------------------------------------------------
1576
# Setup env so childs can execute drizzleimport
1563
# Setup env so childs can execute mysqlimport
1577
1564
# ----------------------------------------------------
1578
my $cmdline_drizzleimport=
1579
dtr_native_path($exe_drizzleimport) .
1565
my $cmdline_mysqlimport=
1566
mtr_native_path($exe_drizzleimport) .
1581
1568
"--port=$master->[0]->{'port'} ";
1583
1570
if ( $opt_debug )
1585
$cmdline_drizzleimport .=
1586
" --debug=d:t:A,$path_vardir_trace/log/drizzleimport.trace";
1572
$cmdline_mysqlimport .=
1573
" --debug=d:t:A,$path_vardir_trace/log/mysqlimport.trace";
1588
$ENV{'DRIZZLE_IMPORT'}= $cmdline_drizzleimport;
1591
# ----------------------------------------------------
1592
# Setup env so childs can execute drizzle
1593
# ----------------------------------------------------
1594
my $cmdline_drizzle=
1595
dtr_native_path($exe_drizzle) .
1575
$ENV{'DRIZZLE_IMPORT'}= $cmdline_mysqlimport;
1578
# ----------------------------------------------------
1579
# Setup env so childs can execute mysql
1580
# ----------------------------------------------------
1582
mtr_native_path($exe_drizzle) .
1596
1583
" --no-defaults --host=localhost --user=root --password= " .
1597
1584
"--port=$master->[0]->{'port'} ";
1598
1585
my $cmdline_drizzle_secondary=
1599
dtr_native_path($exe_drizzle) .
1586
mtr_native_path($exe_drizzle) .
1600
1587
" --no-defaults --host=localhost --user=root --password= " .
1601
1588
" --port=$master->[0]->{'secondary_port'} ";
1603
$ENV{'DRIZZLE'}= $cmdline_drizzle;
1590
$ENV{'MYSQL'}= $cmdline_mysql;
1604
1591
$ENV{'DRIZZLE_SECONDARY'}= $cmdline_drizzle_secondary;
1606
1593
# ----------------------------------------------------
1617
1604
# ----------------------------------------------------
1618
# Setup env so childs can execute drizzle_fix_system_tables
1605
# Setup env so childs can execute mysql_fix_system_tables
1619
1606
# ----------------------------------------------------
1620
1607
#if ( !$opt_extern)
1623
my $cmdline_drizzle_fix_system_tables=
1610
my $cmdline_mysql_fix_system_tables=
1624
1611
"$exe_drizzle_fix_system_tables --no-defaults --host=localhost " .
1625
1612
"--user=root --password= " .
1626
1613
"--basedir=$glob_basedir --bindir=$path_client_bindir --verbose " .
1627
1614
"--port=$master->[0]->{'port'} ";
1628
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_drizzle_fix_system_tables;
1615
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_mysql_fix_system_tables;
1632
1619
# ----------------------------------------------------
1620
# Setup env so childs can execute my_print_defaults
1621
# ----------------------------------------------------
1622
$ENV{'DRIZZLE_MY_PRINT_DEFAULTS'}= mtr_native_path($exe_my_print_defaults);
1624
# ----------------------------------------------------
1633
1625
# Setup env so childs can shutdown the server
1634
1626
# ----------------------------------------------------
1635
$ENV{'DRIZZLED_SHUTDOWN'}= dtr_native_path($exe_drizzle);
1627
$ENV{'DRIZZLED_SHUTDOWN'}= mtr_native_path($exe_drizzle);
1637
1629
# ----------------------------------------------------
1638
1630
# Setup env so childs can execute perror
1639
1631
# ----------------------------------------------------
1640
$ENV{'MY_PERROR'}= dtr_native_path($exe_perror);
1632
$ENV{'MY_PERROR'}= mtr_native_path($exe_perror);
1642
1634
# ----------------------------------------------------
1643
# Add the path where drizzled will find ha_example.so
1635
# Add the path where mysqld will find ha_example.so
1644
1636
# ----------------------------------------------------
1645
1637
$ENV{'EXAMPLE_PLUGIN'}=
1646
1638
($lib_example_plugin ? basename($lib_example_plugin) : "");
1648
1640
($lib_example_plugin ? "--plugin_dir=" . dirname($lib_example_plugin) : "");
1650
1642
# ----------------------------------------------------
1643
# Setup env so childs can execute myisampack and myisamchk
1644
# ----------------------------------------------------
1645
# $ENV{'MYISAMCHK'}= mtr_native_path(mtr_exe_exists(
1646
# "$path_client_bindir/myisamchk",
1647
# "$glob_basedir/storage/myisam/myisamchk",
1648
# "$glob_basedir/myisam/myisamchk"));
1649
# $ENV{'MYISAMPACK'}= mtr_native_path(mtr_exe_exists(
1650
# "$path_client_bindir/myisampack",
1651
# "$glob_basedir/storage/myisam/myisampack",
1652
# "$glob_basedir/myisam/myisampack"));
1654
# ----------------------------------------------------
1651
1655
# We are nice and report a bit about our settings
1652
1656
# ----------------------------------------------------
1653
1657
if (!$opt_extern)
1655
print "Using DTR_BUILD_THREAD = $ENV{DTR_BUILD_THREAD}\n";
1659
print "Using MTR_BUILD_THREAD = $ENV{MTR_BUILD_THREAD}\n";
1656
1660
print "Using MASTER_MYPORT = $ENV{MASTER_MYPORT}\n";
1657
1661
print "Using MASTER_MYPORT1 = $ENV{MASTER_MYPORT1}\n";
1658
1662
print "Using SLAVE_MYPORT = $ENV{SLAVE_MYPORT}\n";
1659
1663
print "Using SLAVE_MYPORT1 = $ENV{SLAVE_MYPORT1}\n";
1660
1664
print "Using SLAVE_MYPORT2 = $ENV{SLAVE_MYPORT2}\n";
1661
1665
print "Using MC_PORT = $ENV{MC_PORT}\n";
1662
print "Using PBMS_PORT = $ENV{PBMS_PORT}\n";
1663
print "Using RABBITMQ_NODE_PORT = $ENV{RABBITMQ_NODE_PORT}\n";
1666
1668
# Create an environment variable to make it possible
1731
1733
if ( $opt_mem and readlink($opt_vardir) eq $opt_mem )
1733
1735
# Remove the directory which the link points at
1734
dtr_verbose("Removing " . readlink($opt_vardir));
1735
dtr_rmtree(readlink($opt_vardir));
1736
mtr_verbose("Removing " . readlink($opt_vardir));
1737
mtr_rmtree(readlink($opt_vardir));
1737
1739
# Remove the "var" symlink
1738
dtr_verbose("unlink($opt_vardir)");
1740
mtr_verbose("unlink($opt_vardir)");
1739
1741
unlink($opt_vardir);
1741
1743
elsif ( $opt_mem )
1743
1745
# Just remove the "var" symlink
1744
dtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1746
mtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1746
dtr_verbose("unlink($opt_vardir)");
1748
mtr_verbose("unlink($opt_vardir)");
1747
1749
unlink($opt_vardir);
1751
# Some users creates a soft link in drizzle-test/var to another area
1753
# Some users creates a soft link in mysql-test/var to another area
1752
1754
# - allow it, but remove all files in it
1754
dtr_report("WARNING: Using the 'drizzle-test/var' symlink");
1756
mtr_report("WARNING: Using the 'mysql-test/var' symlink");
1756
1758
# Make sure the directory where it points exist
1757
dtr_error("The destination for symlink $opt_vardir does not exist")
1759
mtr_error("The destination for symlink $opt_vardir does not exist")
1758
1760
if ! -d readlink($opt_vardir);
1760
1762
foreach my $bin ( glob("$opt_vardir/*") )
1762
dtr_verbose("Removing bin $bin");
1764
mtr_verbose("Removing bin $bin");
1769
1771
# Remove the entire "var" dir
1770
dtr_verbose("Removing $opt_vardir/");
1771
dtr_rmtree("$opt_vardir/");
1772
mtr_verbose("Removing $opt_vardir/");
1773
mtr_rmtree("$opt_vardir/");
1774
1776
if ( $opt_mem )
1802
1804
# Create var and the directories needed in var
1804
1806
sub setup_vardir() {
1805
dtr_report("Creating Directories");
1807
mtr_report("Creating Directories");
1807
1809
if ( $opt_vardir eq $default_vardir )
1810
# Running with "var" in drizzle-test dir
1812
# Running with "var" in mysql-test dir
1812
1814
if ( -l $opt_vardir )
1814
1816
# it's a symlink
1816
1818
# Make sure the directory where it points exist
1817
dtr_error("The destination for symlink $opt_vardir does not exist")
1819
mtr_error("The destination for symlink $opt_vardir does not exist")
1818
1820
if ! -d readlink($opt_vardir);
1820
1822
elsif ( $opt_mem )
1822
1824
# Runinng with "var" as a link to some "memory" location, normally tmpfs
1823
dtr_verbose("Creating $opt_mem");
1825
mtr_verbose("Creating $opt_mem");
1824
1826
mkpath($opt_mem);
1826
dtr_report("Symlinking 'var' to '$opt_mem'");
1828
mtr_report("Symlinking 'var' to '$opt_mem'");
1827
1829
symlink($opt_mem, $opt_vardir);
1831
1833
if ( ! -d $opt_vardir )
1833
dtr_verbose("Creating $opt_vardir");
1835
mtr_verbose("Creating $opt_vardir");
1834
1836
mkpath($opt_vardir);
1837
1839
# Ensure a proper error message if vardir couldn't be created
1838
1840
unless ( -d $opt_vardir and -w $opt_vardir )
1840
dtr_error("Writable 'var' directory is needed, use the " .
1842
mtr_error("Writable 'var' directory is needed, use the " .
1841
1843
"'--vardir=<path>' option");
1849
1851
# Create new data dirs
1850
1852
foreach my $data_dir (@data_dir_lst)
1852
mkpath("$data_dir/local/mysql");
1853
system("$exe_schemawriter mysql $data_dir/local/mysql/db.opt");
1854
mkpath("$data_dir/mysql");
1855
system("$exe_schemawriter mysql $data_dir/mysql/db.opt");
1855
mkpath("$data_dir/local/test");
1856
system("$exe_schemawriter test $data_dir/local/test/db.opt");
1857
mkpath("$data_dir/test");
1858
system("$exe_schemawriter test $data_dir/test/db.opt");
1859
1861
# Make a link std_data_ln in var/ that points to std_data
1860
symlink(collapse_path("$glob_drizzle_test_dir/std_data"),
1862
symlink(collapse_path("$glob_mysql_test_dir/std_data"),
1861
1863
"$opt_vardir/std_data_ln");
1863
symlink(collapse_path("$glob_suite_path/filesystem_engine/tests/t"),
1864
"$opt_vardir/filesystem_ln");
1866
1865
# Remove old log files
1867
1866
foreach my $name (glob("r/*.progress r/*.log r/*.warnings"))
1943
drizzled_start($master->[0],[],[]);
1940
mysqld_start($master->[0],[],[]);
1944
1941
if ( ! $master->[0]->{'pid'} )
1946
dtr_error("Can't start the drizzled server");
1943
mtr_error("Can't start the mysqld server");
1950
dtr_init_args(\$args);
1947
mtr_init_args(\$args);
1952
dtr_add_arg($args, "--user=%s", $opt_user);
1949
mtr_add_arg($args, "--user=%s", $opt_user);
1954
1951
if ( $opt_small_bench )
1956
dtr_add_arg($args, "--small-test");
1957
dtr_add_arg($args, "--small-tables");
1953
mtr_add_arg($args, "--small-test");
1954
mtr_add_arg($args, "--small-tables");
1960
chdir($glob_drizzle_bench_dir)
1961
or dtr_error("Couldn't chdir to '$glob_drizzle_bench_dir': $!");
1957
chdir($glob_mysql_bench_dir)
1958
or mtr_error("Couldn't chdir to '$glob_mysql_bench_dir': $!");
1963
1960
if ( ! $benchmark )
1965
dtr_run("$glob_drizzle_bench_dir/run-all-tests", $args, "", "", "", "");
1962
mtr_run("$glob_mysql_bench_dir/run-all-tests", $args, "", "", "", "");
1966
1963
# FIXME check result code?!
1968
1965
elsif ( -x $benchmark )
1970
dtr_run("$glob_drizzle_bench_dir/$benchmark", $args, "", "", "", "");
1967
mtr_run("$glob_mysql_bench_dir/$benchmark", $args, "", "", "", "");
1971
1968
# FIXME check result code?!
1975
dtr_error("Benchmark $benchmark not found");
1972
mtr_error("Benchmark $benchmark not found");
1978
chdir($glob_drizzle_test_dir); # Go back
1975
chdir($glob_mysql_test_dir); # Go back
1981
1978
stop_masters();
2541
2538
my $prefix= ""; # If drizzletest server arg
2543
dtr_add_arg($args, "%s--no-defaults", $prefix);
2540
mtr_add_arg($args, "%s--no-defaults", $prefix);
2542
$path_my_basedir= collapse_path($path_my_basedir);
2543
mtr_add_arg($args, "%s--basedir=%s", $prefix, $path_my_basedir);
2545
2545
if ($opt_engine)
2547
dtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2547
mtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2550
2550
if ( $drizzle_version_id >= 50036)
2552
# By default, prevent the started drizzled to access files outside of vardir
2553
dtr_add_arg($args, "%s--secure-file-priv=%s", $prefix, $opt_vardir);
2552
# By default, prevent the started mysqld to access files outside of vardir
2553
mtr_add_arg($args, "%s--secure-file-priv=%s", $prefix, $opt_vardir);
2556
dtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2556
mtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2558
2558
# Increase default connect_timeout to avoid intermittent
2559
2559
# disconnects when test servers are put under load
2560
2560
# see BUG#28359
2561
dtr_add_arg($args, "%s--mysql-protocol.connect-timeout=60", $prefix);
2564
# When drizzled is run by a root user(euid is 0), it will fail
2561
mtr_add_arg($args, "%s--mysql-protocol-connect-timeout=60", $prefix);
2564
# When mysqld is run by a root user(euid is 0), it will fail
2565
2565
# to start unless we specify what user to run as, see BUG#30630
2567
if (grep(/^--user/, @$extra_opt, @opt_extra_drizzled_opt) == 0) {
2568
dtr_add_arg($args, "%s--user=root", $prefix);
2567
if (grep(/^--user/, @$extra_opt, @opt_extra_mysqld_opt) == 0) {
2568
mtr_add_arg($args, "%s--user=root", $prefix);
2571
dtr_add_arg($args, "%s--pid-file=%s", $prefix,
2572
$drizzled->{'path_pid'});
2574
dtr_add_arg($args, "%s--mysql-protocol.port=%d", $prefix,
2575
$drizzled->{'port'});
2577
dtr_add_arg($args, "%s--drizzle-protocol.port=%d", $prefix,
2578
$drizzled->{'secondary_port'});
2580
dtr_add_arg($args, "%s--datadir=%s", $prefix,
2581
$drizzled->{'path_myddir'});
2583
dtr_add_arg($args, "%s--mysql-unix-socket-protocol.path=%s", $prefix,
2584
$drizzled->{'path_sock'});
2571
mtr_add_arg($args, "%s--pid-file=%s", $prefix,
2572
$mysqld->{'path_pid'});
2574
mtr_add_arg($args, "%s--mysql-protocol-port=%d", $prefix,
2577
mtr_add_arg($args, "%s--drizzle-protocol-port=%d", $prefix,
2578
$mysqld->{'secondary_port'});
2580
mtr_add_arg($args, "%s--datadir=%s", $prefix,
2581
$mysqld->{'path_myddir'});
2586
2583
# Check if "extra_opt" contains --skip-log-bin
2587
if ( $drizzled->{'type'} eq 'master' )
2584
if ( $mysqld->{'type'} eq 'master' )
2589
dtr_add_arg($args, "%s--server-id=%d", $prefix,
2586
mtr_add_arg($args, "%s--server-id=%d", $prefix,
2590
2587
$idx > 0 ? $idx + 101 : 1);
2593
"%s--innodb.data-file-path=ibdata1:20M:autoextend", $prefix);
2590
"%s--loose-innodb_data_file_path=ibdata1:20M:autoextend", $prefix);
2592
mtr_add_arg($args, "%s--loose-innodb-lock-wait-timeout=5", $prefix);
2598
dtr_error("unknown drizzled type")
2599
unless $drizzled->{'type'} eq 'slave';
2597
mtr_error("unknown mysqld type")
2598
unless $mysqld->{'type'} eq 'slave';
2601
2600
# Directory where slaves find the dumps generated by "load data"
2602
2601
# on the server. The path need to have constant length otherwise
2608
2607
foreach my $arg ( @$slave_master_info )
2610
dtr_add_arg($args, "%s%s", $prefix, $arg);
2609
mtr_add_arg($args, "%s%s", $prefix, $arg);
2615
2614
my $slave_server_id= 2 + $idx;
2616
2615
my $slave_rpl_rank= $slave_server_id;
2617
dtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2616
mtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2621
2620
if ( $opt_debug )
2623
dtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/%s%s.trace",
2624
$prefix, $path_vardir_trace, $drizzled->{'type'}, $sidx);
2622
mtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/%s%s.trace",
2623
$prefix, $path_vardir_trace, $mysqld->{'type'}, $sidx);
2627
dtr_add_arg($args, "%s--sort-buffer-size=256K", $prefix);
2628
dtr_add_arg($args, "%s--max-heap-table-size=1M", $prefix);
2626
mtr_add_arg($args, "%s--myisam_key_cache_size=1M", $prefix);
2627
mtr_add_arg($args, "%s--sort_buffer=256K", $prefix);
2628
mtr_add_arg($args, "%s--max_heap_table_size=1M", $prefix);
2630
2630
if ( $opt_warnings )
2632
dtr_add_arg($args, "%s--log-warnings", $prefix);
2632
mtr_add_arg($args, "%s--log-warnings", $prefix);
2635
# Indicate to "drizzled" it will be debugged in debugger
2635
# Indicate to "mysqld" it will be debugged in debugger
2636
2636
if ( $glob_debugger )
2638
dtr_add_arg($args, "%s--gdb", $prefix);
2638
mtr_add_arg($args, "%s--gdb", $prefix);
2641
2641
my $found_skip_core= 0;
2642
foreach my $arg ( @opt_extra_drizzled_opt, @$extra_opt )
2642
foreach my $arg ( @opt_extra_mysqld_opt, @$extra_opt )
2644
2644
# Allow --skip-core-file to be set in <testname>-[master|slave].opt file
2645
2645
if ($arg eq "--skip-core-file")
2677
2677
my $wait_for_pid_file= 1;
2679
my $type= $drizzled->{'type'};
2680
my $idx= $drizzled->{'idx'};
2679
my $type= $mysqld->{'type'};
2680
my $idx= $mysqld->{'idx'};
2682
2682
if ( $type eq 'master' )
2684
$exe= $exe_master_drizzled;
2684
$exe= $exe_master_mysqld;
2686
2686
elsif ( $type eq 'slave' )
2688
$exe= $exe_slave_drizzled;
2688
$exe= $exe_slave_mysqld;
2692
dtr_error("Unknown 'type' \"$type\" passed to drizzled_start");
2692
mtr_error("Unknown 'type' \"$type\" passed to mysqld_start");
2695
dtr_init_args(\$args);
2695
mtr_init_args(\$args);
2697
if ( $opt_valgrind_drizzled )
2697
if ( $opt_valgrind_mysqld )
2699
2699
valgrind_arguments($args, \$exe);
2702
drizzled_arguments($args,$drizzled,$extra_opt,$slave_master_info);
2702
mysqld_arguments($args,$mysqld,$extra_opt,$slave_master_info);
2704
2704
if ( $opt_gdb || $opt_manual_gdb)
2737
2737
# Remove the pidfile
2738
unlink($drizzled->{'path_pid'});
2738
unlink($mysqld->{'path_pid'});
2740
2740
if ( defined $exe )
2742
dtr_verbose("running Drizzle with: $exe @$args");
2743
$pid= dtr_spawn($exe, $args, "",
2744
$drizzled->{'path_myerr'},
2745
$drizzled->{'path_myerr'},
2742
$pid= mtr_spawn($exe, $args, "",
2743
$mysqld->{'path_myerr'},
2744
$mysqld->{'path_myerr'},
2747
2746
{ append_log_file => 1 });
2751
if ( $wait_for_pid_file && !sleep_until_file_created($drizzled->{'path_pid'},
2752
$drizzled->{'start_timeout'},
2750
if ( $wait_for_pid_file && !sleep_until_file_created($mysqld->{'path_pid'},
2751
$mysqld->{'start_timeout'},
2756
dtr_error("Failed to start drizzled $drizzled->{'type'}");
2755
mtr_error("Failed to start mysqld $mysqld->{'type'}");
2760
2759
# Remember pid of the started process
2761
$drizzled->{'pid'}= $pid;
2760
$mysqld->{'pid'}= $pid;
2763
2762
# Remember options used when starting
2764
$drizzled->{'start_opts'}= $extra_opt;
2765
$drizzled->{'start_slave_master_info'}= $slave_master_info;
2763
$mysqld->{'start_opts'}= $extra_opt;
2764
$mysqld->{'start_slave_master_info'}= $slave_master_info;
2767
dtr_verbose("drizzled pid: $pid");
2766
mtr_verbose("mysqld pid: $pid");
2772
2771
sub stop_all_servers () {
2774
dtr_report("Stopping All Servers");
2773
mtr_report("Stopping All Servers");
2776
2775
my %admin_pids; # hash of admin processes that requests shutdown
2777
2776
my @kill_pids; # list of processes to shutdown/kill
2780
2779
# Start shutdown of all started masters
2781
foreach my $drizzled (@{$slave}, @{$master})
2780
foreach my $mysqld (@{$slave}, @{$master})
2783
if ( $drizzled->{'pid'} )
2782
if ( $mysqld->{'pid'} )
2785
$pid= dtr_server_shutdown($drizzled);
2784
$pid= mtr_server_shutdown($mysqld);
2786
2785
$admin_pids{$pid}= 1;
2788
2787
push(@kill_pids,{
2789
pid => $drizzled->{'pid'},
2790
real_pid => $drizzled->{'real_pid'},
2791
pidfile => $drizzled->{'path_pid'},
2792
sockfile => $drizzled->{'path_sock'},
2793
port => $drizzled->{'port'},
2794
errfile => $drizzled->{'path_myerr'},
2788
pid => $mysqld->{'pid'},
2789
real_pid => $mysqld->{'real_pid'},
2790
pidfile => $mysqld->{'path_pid'},
2791
sockfile => $mysqld->{'path_sock'},
2792
port => $mysqld->{'port'},
2793
errfile => $mysqld->{'path_myerr'},
2797
$drizzled->{'pid'}= 0; # Assume we are done with it
2796
$mysqld->{'pid'}= 0; # Assume we are done with it
2801
2800
# Wait blocking until all shutdown processes has completed
2802
dtr_wait_blocking(\%admin_pids);
2801
mtr_wait_blocking(\%admin_pids);
2804
2803
# Make sure that process has shutdown else try to kill them
2805
dtr_check_stop_servers(\@kill_pids);
2804
mtr_check_stop_servers(\@kill_pids);
2816
2815
if ( $tinfo->{'master_sh'} )
2818
2817
$do_restart= 1; # Always restart if script to run
2819
dtr_verbose("Restart master: Always restart if script to run");
2818
mtr_verbose("Restart master: Always restart if script to run");
2821
2820
if ( $tinfo->{'force_restart'} )
2823
2822
$do_restart= 1; # Always restart if --force-restart in -opt file
2824
dtr_verbose("Restart master: Restart forced with --force-restart");
2823
mtr_verbose("Restart master: Restart forced with --force-restart");
2826
2825
elsif( $tinfo->{'component_id'} eq 'im' )
2828
2827
$do_restart= 1;
2829
dtr_verbose("Restart master: Always restart for im tests");
2828
mtr_verbose("Restart master: Always restart for im tests");
2831
2830
elsif ( $master->[0]->{'running_master_options'} and
2832
2831
$master->[0]->{'running_master_options'}->{'timezone'} ne
2833
2832
$tinfo->{'timezone'})
2835
2834
$do_restart= 1;
2836
dtr_verbose("Restart master: Different timezone");
2835
mtr_verbose("Restart master: Different timezone");
2838
2837
# Check that running master was started with same options
2839
2838
# as the current test requires
2840
elsif (! dtr_same_opts($master->[0]->{'start_opts'},
2839
elsif (! mtr_same_opts($master->[0]->{'start_opts'},
2841
2840
$tinfo->{'master_opt'}) )
2843
2842
# Chech that diff is binlog format only
2844
my $diff_opts= dtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2843
my $diff_opts= mtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2845
2844
if (scalar(@$diff_opts) eq 2)
2847
2846
$do_restart= 1;
2936
2935
delete $master->[0]->{'running_master_options'}; # Forget history
2938
2937
# Start shutdown of all started masters
2939
foreach my $drizzled (@{$master})
2938
foreach my $mysqld (@{$master})
2941
if ( $drizzled->{'pid'} )
2940
if ( $mysqld->{'pid'} )
2943
$pid= dtr_server_shutdown($drizzled);
2942
$pid= mtr_server_shutdown($mysqld);
2945
2944
$admin_pids{$pid}= 1;
2947
2946
push(@kill_pids,{
2948
pid => $drizzled->{'pid'},
2949
real_pid => $drizzled->{'real_pid'},
2950
pidfile => $drizzled->{'path_pid'},
2951
sockfile => $drizzled->{'path_sock'},
2952
port => $drizzled->{'port'},
2953
errfile => $drizzled->{'path_myerr'},
2947
pid => $mysqld->{'pid'},
2948
real_pid => $mysqld->{'real_pid'},
2949
pidfile => $mysqld->{'path_pid'},
2950
sockfile => $mysqld->{'path_sock'},
2951
port => $mysqld->{'port'},
2952
errfile => $mysqld->{'path_myerr'},
2956
$drizzled->{'pid'}= 0; # Assume we are done with it
2955
$mysqld->{'pid'}= 0; # Assume we are done with it
2964
2963
delete $slave->[0]->{'running_slave_options'}; # Forget history
2966
2965
# Start shutdown of all started slaves
2967
foreach my $drizzled (@{$slave})
2966
foreach my $mysqld (@{$slave})
2969
if ( $drizzled->{'pid'} )
2968
if ( $mysqld->{'pid'} )
2971
$pid= dtr_server_shutdown($drizzled);
2970
$pid= mtr_server_shutdown($mysqld);
2973
2972
$admin_pids{$pid}= 1;
2975
2974
push(@kill_pids,{
2976
pid => $drizzled->{'pid'},
2977
real_pid => $drizzled->{'real_pid'},
2978
pidfile => $drizzled->{'path_pid'},
2979
sockfile => $drizzled->{'path_sock'},
2980
port => $drizzled->{'port'},
2981
errfile => $drizzled->{'path_myerr'},
2975
pid => $mysqld->{'pid'},
2976
real_pid => $mysqld->{'real_pid'},
2977
pidfile => $mysqld->{'path_pid'},
2978
sockfile => $mysqld->{'path_sock'},
2979
port => $mysqld->{'port'},
2980
errfile => $mysqld->{'path_myerr'},
2984
$drizzled->{'pid'}= 0; # Assume we are done with it
2983
$mysqld->{'pid'}= 0; # Assume we are done with it
3081
3080
sub run_check_testcase ($$) {
3083
3082
my $mode= shift;
3084
my $drizzled= shift;
3086
my $name= "check-" . $drizzled->{'type'} . $drizzled->{'idx'};
3085
my $name= "check-" . $mysqld->{'type'} . $mysqld->{'idx'};
3089
dtr_init_args(\$args);
3091
dtr_add_arg($args, "--no-defaults");
3092
dtr_add_arg($args, "--silent");
3093
dtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3095
dtr_add_arg($args, "--port=%d", $drizzled->{'port'});
3096
dtr_add_arg($args, "--database=test");
3097
dtr_add_arg($args, "--user=%s", $opt_user);
3098
dtr_add_arg($args, "--password=");
3100
dtr_add_arg($args, "-R");
3101
dtr_add_arg($args, "$opt_vardir/tmp/$name.result");
3088
mtr_init_args(\$args);
3090
mtr_add_arg($args, "--no-defaults");
3091
mtr_add_arg($args, "--silent");
3092
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3094
mtr_add_arg($args, "--port=%d", $mysqld->{'port'});
3095
mtr_add_arg($args, "--database=test");
3096
mtr_add_arg($args, "--user=%s", $opt_user);
3097
mtr_add_arg($args, "--password=");
3099
mtr_add_arg($args, "-R");
3100
mtr_add_arg($args, "$opt_vardir/tmp/$name.result");
3103
3102
if ( $mode eq "before" )
3105
dtr_add_arg($args, "--record");
3104
mtr_add_arg($args, "--record");
3108
3107
if ( $opt_testdir )
3110
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
3109
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3113
my $res = dtr_run_test($exe_drizzletest,$args,
3112
my $res = mtr_run_test($exe_drizzletest,$args,
3114
3113
"include/check-testcase.test", "", "", "");
3116
3115
if ( $res == 1 and $mode eq "after")
3118
dtr_run("diff",["-u",
3117
mtr_run("diff",["-u",
3119
3118
"$opt_vardir/tmp/$name.result",
3120
3119
"$opt_vardir/tmp/$name.reject"],
3121
3120
"", "", "", "");
3125
dtr_error("Could not execute 'check-testcase' $mode testcase");
3124
mtr_error("Could not execute 'check-testcase' $mode testcase");
3140
drizzled_start($master->[0],[],[]);
3139
mysqld_start($master->[0],[],[]);
3141
3140
if ( ! $master->[0]->{'pid'} )
3143
dtr_error("Can't start the drizzled server");
3142
mtr_error("Can't start the mysqld server");
3145
drizzled_wait_started($master->[0]);
3144
mysqld_wait_started($master->[0]);
3148
3147
my $tinfo = {};
3149
3148
$tinfo->{'name'} = 'report features';
3150
3149
$tinfo->{'result_file'} = undef;
3151
$tinfo->{'component_id'} = 'drizzled';
3150
$tinfo->{'component_id'} = 'mysqld';
3152
3151
$tinfo->{'path'} = 'include/report-features.test';
3153
3152
$tinfo->{'timezone'}= "GMT-3";
3154
3153
$tinfo->{'slave_num'} = 0;
3169
3168
my $exe= $exe_drizzletest;
3172
dtr_init_args(\$args);
3171
mtr_init_args(\$args);
3174
dtr_add_arg($args, "--no-defaults");
3175
dtr_add_arg($args, "--silent");
3176
dtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3177
dtr_add_arg($args, "--logdir=%s/log", $opt_vardir);
3173
mtr_add_arg($args, "--no-defaults");
3174
mtr_add_arg($args, "--silent");
3175
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3176
mtr_add_arg($args, "--logdir=%s/log", $opt_vardir);
3179
3178
# Log line number and time for each line in .test file
3180
dtr_add_arg($args, "--mark-progress")
3179
mtr_add_arg($args, "--mark-progress")
3181
3180
if $opt_mark_progress;
3184
dtr_add_arg($args, "--port=%d", $master->[0]->{'port'});
3185
dtr_add_arg($args, "--database=test");
3186
dtr_add_arg($args, "--user=%s", $opt_user);
3187
dtr_add_arg($args, "--password=");
3183
mtr_add_arg($args, "--port=%d", $master->[0]->{'port'});
3184
mtr_add_arg($args, "--database=test");
3185
mtr_add_arg($args, "--user=%s", $opt_user);
3186
mtr_add_arg($args, "--password=");
3190
3189
if ( $opt_strace_client )
3192
3191
$exe= "strace"; # FIXME there are ktrace, ....
3193
dtr_add_arg($args, "-o");
3194
dtr_add_arg($args, "%s/log/drizzletest.strace", $opt_vardir);
3195
dtr_add_arg($args, "$exe_drizzletest");
3192
mtr_add_arg($args, "-o");
3193
mtr_add_arg($args, "%s/log/drizzletest.strace", $opt_vardir);
3194
mtr_add_arg($args, "$exe_drizzletest");
3198
3197
if ( $opt_timer )
3200
dtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3199
mtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3203
3202
if ( $opt_compress )
3205
dtr_add_arg($args, "--compress");
3204
mtr_add_arg($args, "--compress");
3208
3207
if ( $opt_sleep )
3210
dtr_add_arg($args, "--sleep=%d", $opt_sleep);
3209
mtr_add_arg($args, "--sleep=%d", $opt_sleep);
3213
3212
if ( $opt_debug )
3215
dtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3214
mtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3216
3215
$path_vardir_trace);
3219
3218
if ( $opt_testdir )
3221
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
3220
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3238
3237
# We do this here, since we do not want to Valgrind the nested invocations
3239
3238
# of drizzletest; that would mess up the stderr output causing test failure.
3240
3239
my @args_saved = @$args;
3241
dtr_init_args(\$args);
3240
mtr_init_args(\$args);
3242
3241
valgrind_arguments($args, \$exe);
3243
dtr_add_arg($args, "%s", $_) for @args_saved;
3242
mtr_add_arg($args, "%s", $_) for @args_saved;
3246
dtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3245
mtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3248
3247
# Number of lines of resut to include in failure report
3249
dtr_add_arg($args, "--tail-lines=20");
3248
mtr_add_arg($args, "--tail-lines=20");
3251
3250
if ( defined $tinfo->{'result_file'} ) {
3252
dtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3251
mtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3255
3254
if ( $opt_record )
3257
dtr_add_arg($args, "--record");
3256
mtr_add_arg($args, "--record");
3260
3259
if ( $opt_client_gdb )
3273
3272
if ( $opt_check_testcases )
3275
foreach my $drizzled (@{$master}, @{$slave})
3274
foreach my $mysqld (@{$master}, @{$slave})
3277
if ($drizzled->{'pid'})
3276
if ($mysqld->{'pid'})
3279
run_check_testcase("before", $drizzled);
3278
run_check_testcase("before", $mysqld);
3284
my $res = dtr_run_test($exe,$args,"","",$path_timefile,"");
3283
my $res = mtr_run_test($exe,$args,"","",$path_timefile,"");
3286
3285
if ( $opt_check_testcases )
3288
foreach my $drizzled (@{$master}, @{$slave})
3287
foreach my $mysqld (@{$master}, @{$slave})
3290
if ($drizzled->{'pid'})
3289
if ($mysqld->{'pid'})
3292
if (run_check_testcase("after", $drizzled))
3291
if (run_check_testcase("after", $mysqld))
3294
3293
# Check failed, mark the test case with that info
3295
3294
$tinfo->{'check_testcase_failed'}= 1;
3347
dtr_add_arg($$args, "-title");
3348
dtr_add_arg($$args, "$type");
3349
dtr_add_arg($$args, "-e");
3346
mtr_add_arg($$args, "-title");
3347
mtr_add_arg($$args, "$type");
3348
mtr_add_arg($$args, "-e");
3351
dtr_add_arg($$args, "dbx");
3352
dtr_add_arg($$args, "-c");
3353
dtr_add_arg($$args, "source $dbx_init_file");
3354
dtr_add_arg($$args, "$$exe");
3350
mtr_add_arg($$args, "dbx");
3351
mtr_add_arg($$args, "-c");
3352
mtr_add_arg($$args, "source $dbx_init_file");
3353
mtr_add_arg($$args, "$$exe");
3356
3355
$$exe= "xterm";
3420
dtr_add_arg($$args, "-title");
3421
dtr_add_arg($$args, "$type");
3422
dtr_add_arg($$args, "-e");
3405
mtr_add_arg($$args, "-title");
3406
mtr_add_arg($$args, "$type");
3407
mtr_add_arg($$args, "-e");
3424
3409
if ( $exe_libtool )
3426
dtr_add_arg($$args, $exe_libtool);
3427
dtr_add_arg($$args, "--mode=execute");
3411
mtr_add_arg($$args, $exe_libtool);
3412
mtr_add_arg($$args, "--mode=execute");
3430
dtr_add_arg($$args, "gdb");
3431
dtr_add_arg($$args, "-x");
3432
dtr_add_arg($$args, "$gdb_init_file");
3433
dtr_add_arg($$args, "$$exe");
3415
mtr_add_arg($$args, "gdb");
3416
mtr_add_arg($$args, "-x");
3417
mtr_add_arg($$args, "$gdb_init_file");
3418
mtr_add_arg($$args, "$$exe");
3435
3420
$$exe= "xterm";
3546
3531
if ( $opt_callgrind)
3548
dtr_add_arg($args, "--tool=callgrind");
3533
mtr_add_arg($args, "--tool=callgrind");
3534
mtr_add_arg($args, "--base=$opt_vardir/log");
3550
3536
elsif ($opt_massif)
3552
dtr_add_arg($args, "--tool=massif");
3538
mtr_add_arg($args, "--tool=massif");
3556
dtr_add_arg($args, "--tool=memcheck"); # From >= 2.1.2 needs this option
3557
dtr_add_arg($args, "--leak-check=yes");
3558
dtr_add_arg($args, "--num-callers=16");
3559
dtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_drizzle_test_dir)
3560
if -f "$glob_drizzle_test_dir/valgrind.supp";
3542
mtr_add_arg($args, "--tool=memcheck"); # From >= 2.1.2 needs this option
3543
mtr_add_arg($args, "--leak-check=yes");
3544
mtr_add_arg($args, "--num-callers=16");
3545
mtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_mysql_test_dir)
3546
if -f "$glob_mysql_test_dir/valgrind.supp";
3563
3549
# Add valgrind options, can be overriden by user
3564
dtr_add_arg($args, '%s', $_) for (@valgrind_args);
3550
mtr_add_arg($args, '%s', $_) for (@valgrind_args);
3566
dtr_add_arg($args, $$exe);
3552
mtr_add_arg($args, $$exe);
3568
3554
$$exe= $opt_valgrind_path || "valgrind";
3708
3694
client-ddd Start drizzletest client in ddd
3709
3695
client-debugger=NAME Start drizzletest in the selected debugger
3710
3696
client-gdb Start drizzletest client in gdb
3711
ddd Start drizzled in ddd
3697
ddd Start mysqld in ddd
3712
3698
debug Dump trace output for all servers and client programs
3713
debugger=NAME Start drizzled in the selected debugger
3714
gdb Start the drizzled(s) in gdb
3715
manual-debug Let user manually start drizzled in debugger, before
3699
debugger=NAME Start mysqld in the selected debugger
3700
gdb Start the mysqld(s) in gdb
3701
manual-debug Let user manually start mysqld in debugger, before
3716
3702
running test(s)
3717
manual-gdb Let user manually start drizzled in gdb, before running
3719
manual-ddd Let user manually start drizzled in ddd, before running
3721
master-binary=PATH Specify the master "drizzled" to use
3722
slave-binary=PATH Specify the slave "drizzled" to use
3703
manual-gdb Let user manually start mysqld in gdb, before running
3705
manual-ddd Let user manually start mysqld in ddd, before running
3707
master-binary=PATH Specify the master "mysqld" to use
3708
slave-binary=PATH Specify the slave "mysqld" to use
3723
3709
strace-client Create strace output for drizzletest client
3724
3710
max-save-core Limit the number of core files saved (to avoid filling
3725
3711
up disks for heavily crashing server). Defaults to
3731
3717
gprof See online documentation on how to use it.
3732
valgrind Run the "drizzletest" and "drizzled" executables using
3718
valgrind Run the "drizzletest" and "mysqld" executables using
3733
3719
valgrind with default options
3734
3720
valgrind-all Synonym for --valgrind
3735
valgrind-drizzleslap Run "drizzleslap" with valgrind.
3736
valgrind-drizzletest Run the "drizzletest" and "drizzle_client_test" executable
3721
valgrind-drizzletest Run the "drizzletest" and "drizzle_client_test" executable
3738
valgrind-drizzled Run the "drizzled" executable with valgrind
3723
valgrind-mysqld Run the "mysqld" executable with valgrind
3739
3724
valgrind-options=ARGS Deprecated, use --valgrind-option
3740
3725
valgrind-option=ARGS Option to give valgrind, replaces default option(s),
3741
3726
can be specified more then once