501
470
'suite|suites=s' => \$opt_suites,
502
471
'skip-rpl' => \$opt_skip_rpl,
503
472
'skip-test=s' => \$opt_skip_test,
473
'big-test' => \$opt_big_test,
504
474
'combination=s' => \@opt_combinations,
505
475
'skip-combination' => \$opt_skip_combination,
508
478
'master_port=i' => \$opt_master_myport,
509
479
'slave_port=i' => \$opt_slave_myport,
510
'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,
480
'mtr-build-thread=i' => \$opt_mtr_build_thread,
515
482
# Test case authoring
516
483
'record' => \$opt_record,
517
484
'check-testcases' => \$opt_check_testcases,
518
485
'mark-progress' => \$opt_mark_progress,
520
# Extra options used when starting drizzled
521
'drizzled=s' => \@opt_extra_drizzled_opt,
487
# Extra options used when starting mysqld
488
'mysqld=s' => \@opt_extra_mysqld_opt,
522
489
'engine=s' => \$opt_engine,
524
491
# Run test on running server
525
492
'extern' => \$opt_extern,
528
'subunit' => \$opt_subunit,
531
495
'gdb' => \$opt_gdb,
533
496
'client-gdb' => \$opt_client_gdb,
534
'client-dbx' => \$opt_client_dbx,
535
497
'manual-gdb' => \$opt_manual_gdb,
536
'manual-dbx' => \$opt_manual_dbx,
537
498
'manual-debug' => \$opt_manual_debug,
538
499
'ddd' => \$opt_ddd,
539
500
'client-ddd' => \$opt_client_ddd,
638
592
# Find the absolute path to the test directory
639
593
if ( ! $opt_testdir )
641
$glob_drizzle_test_dir= cwd();
595
$glob_mysql_test_dir= cwd();
645
$glob_drizzle_test_dir= $opt_testdir;
599
$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/..";
601
$default_vardir= "$glob_mysql_test_dir/var";
651
if ( ! $opt_suitepath )
653
$glob_suite_path= "$glob_drizzle_test_dir/../plugin";
657
$glob_suite_path= $opt_suitepath;
659
603
# In most cases, the base directory we find everything relative to,
660
# is the parent directory of the "drizzle-test" directory. For source
604
# is the parent directory of the "mysql-test" directory. For source
661
605
# 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;
606
$glob_basedir= dirname($glob_mysql_test_dir);
693
608
# In the RPM case, binaries and libraries are installed in the
694
609
# 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
610
# directory. And we install "/usr/share/mysql-test". Moving up one
611
# more directory relative to "mysql-test" gives us a usable base
697
612
# directory for RPM installs.
698
613
if ( ! $source_dist and ! -d "$glob_basedir/bin" )
711
626
$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();
629
# Expect mysql-bench to be located adjacent to the source tree, by default
630
$glob_mysql_bench_dir= "$glob_basedir/../mysql-bench"
631
unless defined $glob_mysql_bench_dir;
632
$glob_mysql_bench_dir= undef
633
unless -d $glob_mysql_bench_dir;
636
$source_dist ? $glob_mysql_test_dir : $glob_basedir;
638
$glob_timers= mtr_init_timers();
723
# Find the drizzled executable to be able to find the drizzled version
641
# Find the mysqld executable to be able to find the mysqld version
724
642
# number as early as possible
727
645
# Look for the client binaries directory
728
$path_client_bindir= dtr_path_exists("$glob_builddir/client",
646
$path_client_bindir= mtr_path_exists("$glob_builddir/client",
729
647
"$glob_basedir/client",
730
648
"$glob_basedir/bin");
732
650
if (!$opt_extern)
734
$exe_drizzled= dtr_exe_exists ("$glob_basedir/drizzled/drizzled",
652
$exe_drizzled= mtr_exe_exists ("$glob_basedir/drizzled/drizzled",
735
653
"$path_client_bindir/drizzled",
736
654
"$glob_basedir/libexec/drizzled",
737
655
"$glob_basedir/bin/drizzled",
738
656
"$glob_basedir/sbin/drizzled",
739
657
"$glob_builddir/drizzled/drizzled");
741
# Use the drizzled found above to find out what features are available
742
collect_drizzled_features();
659
# Use the mysqld found above to find out what features are available
660
collect_mysqld_features();
746
$drizzled_variables{'port'}= 4427;
664
$mysqld_variables{'port'}= 4427;
749
667
if (!$opt_engine)
893
801
# --------------------------------------------------------------------------
894
802
if ( $opt_gdb || $opt_client_gdb || $opt_ddd || $opt_client_ddd ||
895
803
$opt_manual_gdb || $opt_manual_ddd || $opt_manual_debug ||
896
$opt_debugger || $opt_client_debugger || $opt_gdb || $opt_manual_gdb)
804
$opt_debugger || $opt_client_debugger )
898
806
# Indicate that we are using debugger
899
807
$glob_debugger= 1;
900
808
if ( $opt_extern )
902
dtr_error("Can't use --extern when using debugger");
810
mtr_error("Can't use --extern when using debugger");
906
814
# --------------------------------------------------------------------------
907
815
# Check if special exe was selected for master or slave
908
816
# --------------------------------------------------------------------------
909
$exe_master_drizzled= $exe_master_drizzled || $exe_drizzled;
910
$exe_slave_drizzled= $exe_slave_drizzled || $exe_drizzled;
817
$exe_master_mysqld= $exe_master_mysqld || $exe_drizzled;
818
$exe_slave_mysqld= $exe_slave_mysqld || $exe_drizzled;
912
820
# --------------------------------------------------------------------------
913
821
# Check valgrind arguments
914
822
# --------------------------------------------------------------------------
915
823
if ( $opt_valgrind or $opt_valgrind_path or @valgrind_args)
917
dtr_report("Turning on valgrind for all executables");
825
mtr_report("Turning on valgrind for all executables");
918
826
$opt_valgrind= 1;
919
$opt_valgrind_drizzled= 1;
827
$opt_valgrind_mysqld= 1;
920
828
$opt_valgrind_drizzletest= 1;
921
$ENV{'VALGRIND_RUN'} = '1';
923
elsif ( $opt_valgrind_drizzled )
830
elsif ( $opt_valgrind_mysqld )
925
dtr_report("Turning on valgrind for drizzled(s) only");
832
mtr_report("Turning on valgrind for mysqld(s) only");
926
833
$opt_valgrind= 1;
928
835
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");
837
mtr_report("Turning on valgrind for drizzletest and drizzle_client_test only");
936
838
$opt_valgrind= 1;
939
841
if ( $opt_callgrind )
941
dtr_report("Turning on valgrind with callgrind for drizzled(s)");
843
mtr_report("Turning on valgrind with callgrind for mysqld(s)");
942
844
$opt_valgrind= 1;
943
$opt_valgrind_drizzled= 1;
845
$opt_valgrind_mysqld= 1;
945
847
# Set special valgrind options unless options passed on command line
946
848
push(@valgrind_args, "--trace-children=yes")
947
849
unless @valgrind_args;
952
dtr_report("Valgrind with Massif tool for drizzled(s)");
954
$opt_valgrind_drizzled= 1;
957
852
if ( $opt_valgrind )
959
854
# Set valgrind_options to default unless already defined
960
855
push(@valgrind_args, @default_valgrind_args)
961
856
unless @valgrind_args;
963
dtr_report("Running valgrind with options \"",
858
mtr_report("Running valgrind with options \"",
964
859
join(" ", @valgrind_args), "\"");
886
# On QNX, /tmp/dir/master.sock and /tmp/dir//master.sock seem to be
887
# considered different, so avoid the extra slash (/) in the socket
889
my $sockdir = $opt_tmpdir;
892
# On some operating systems, there is a limit to the length of a
893
# UNIX domain socket's path far below PATH_MAX, so try to avoid long
895
$sockdir = tempdir(CLEANUP => 0) if ( length($sockdir) >= 70 );
996
path_myddir => "$opt_vardir/master-data",
997
path_myerr => "$opt_vardir/log/master.err",
998
path_pid => "$opt_vardir/run/master.pid",
999
path_sock => "$opt_vardir/master.sock",
1000
port => $opt_master_myport,
1001
secondary_port => $opt_master_myport + $secondary_port_offset,
1002
start_timeout => 400, # enough time create innodb tables
1003
cluster => 0, # index in clusters list
902
path_myddir => "$opt_vardir/master-data",
903
path_myerr => "$opt_vardir/log/master.err",
904
path_pid => "$opt_vardir/run/master.pid",
905
path_sock => "$sockdir/master.sock",
906
port => $opt_master_myport,
907
start_timeout => 400, # enough time create innodb tables
908
cluster => 0, # index in clusters list
1012
path_myddir => "$opt_vardir/master1-data",
1013
path_myerr => "$opt_vardir/log/master1.err",
1014
path_pid => "$opt_vardir/run/master1.pid",
1015
path_sock => "$opt_vardir/master1.sock",
1016
port => $opt_master_myport + 1,
1017
secondary_port => $opt_master_myport + 1 + $secondary_port_offset,
1018
start_timeout => 400, # enough time create innodb tables
1019
cluster => 0, # index in clusters list
917
path_myddir => "$opt_vardir/master1-data",
918
path_myerr => "$opt_vardir/log/master1.err",
919
path_pid => "$opt_vardir/run/master1.pid",
920
path_sock => "$sockdir/master1.sock",
921
port => $opt_master_myport + 1,
922
start_timeout => 400, # enough time create innodb tables
923
cluster => 0, # index in clusters list
1028
path_myddir => "$opt_vardir/slave-data",
1029
path_myerr => "$opt_vardir/log/slave.err",
1030
path_pid => "$opt_vardir/run/slave.pid",
1031
path_sock => "$opt_vardir/slave.sock",
1032
port => $opt_slave_myport,
1033
secondary_port => $opt_slave_myport + $secondary_port_offset,
1034
start_timeout => 400,
1035
cluster => 1, # index in clusters list
932
path_myddir => "$opt_vardir/slave-data",
933
path_myerr => "$opt_vardir/log/slave.err",
934
path_pid => "$opt_vardir/run/slave.pid",
935
path_sock => "$sockdir/slave.sock",
936
port => $opt_slave_myport,
937
start_timeout => 400,
939
cluster => 1, # index in clusters list
1044
path_myddir => "$opt_vardir/slave1-data",
1045
path_myerr => "$opt_vardir/log/slave1.err",
1046
path_pid => "$opt_vardir/run/slave1.pid",
1047
path_sock => "$opt_vardir/slave1.sock",
1048
port => $opt_slave_myport + 1,
1049
secondary_port => $opt_slave_myport + 1 + $secondary_port_offset,
1050
start_timeout => 300,
1051
cluster => -1, # index in clusters list
948
path_myddir => "$opt_vardir/slave1-data",
949
path_myerr => "$opt_vardir/log/slave1.err",
950
path_pid => "$opt_vardir/run/slave1.pid",
951
path_sock => "$sockdir/slave1.sock",
952
port => $opt_slave_myport + 1,
953
start_timeout => 300,
954
cluster => -1, # index in clusters list
1060
path_myddir => "$opt_vardir/slave2-data",
1061
path_myerr => "$opt_vardir/log/slave2.err",
1062
path_pid => "$opt_vardir/run/slave2.pid",
1063
path_sock => "$opt_vardir/slave2.sock",
1064
port => $opt_slave_myport + 2,
1065
secondary_port => $opt_slave_myport + 2 + $secondary_port_offset,
1066
start_timeout => 300,
1067
cluster => -1, # index in clusters list
963
path_myddir => "$opt_vardir/slave2-data",
964
path_myerr => "$opt_vardir/log/slave2.err",
965
path_pid => "$opt_vardir/run/slave2.pid",
966
path_sock => "$sockdir/slave2.sock",
967
port => $opt_slave_myport + 2,
968
start_timeout => 300,
969
cluster => -1, # index in clusters list
1151
1027
# But a fairly safe range seems to be 5001 - 32767
1154
sub set_dtr_build_thread_ports($) {
1155
my $dtr_build_thread= shift;
1030
sub set_mtr_build_thread_ports($) {
1031
my $mtr_build_thread= shift;
1157
if ( lc($dtr_build_thread) eq 'auto' ) {
1033
if ( lc($mtr_build_thread) eq 'auto' ) {
1158
1034
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";
1035
$ENV{'MTR_BUILD_THREAD'} = $mtr_build_thread = mtr_require_unique_id_and_wait("/tmp/mysql-test-ports", 200, 299);
1036
print "got ".$mtr_build_thread."\n";
1163
$dtr_build_thread= (($dtr_build_thread * 10) % 2000) - 1000;
1039
$mtr_build_thread= (($mtr_build_thread * 10) % 2000) - 1000;
1165
1041
# Up to two masters, up to three slaves
1166
1042
# 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
1170
$opt_slave_myport= gimme_a_good_port($opt_master_myport + 2); # and 3 4
1171
$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);
1043
$opt_master_myport= $mtr_build_thread + 9000; # and 1
1044
$opt_slave_myport= $opt_master_myport + 2; # and 3 4
1175
1046
if ( $opt_master_myport < 5001 or $opt_master_myport + 10 >= 32767 )
1177
dtr_error("DTR_BUILD_THREAD number results in a port",
1048
mtr_error("MTR_BUILD_THREAD number results in a port",
1178
1049
"outside 5001 - 32767",
1179
1050
"($opt_master_myport - $opt_master_myport + 10)");
1203
1074
##############################################################################
1206
sub collect_drizzled_features () {
1077
sub collect_mysqld_features () {
1207
1078
my $found_variable_list_start= 0;
1208
1079
my $tmpdir= tempdir(CLEANUP => 0); # Directory removed by this function
1211
# Execute "drizzled --help" to get a list
1082
# Execute "mysqld --help --verbose" to get a list
1212
1083
# list of all features and settings
1214
# --no-defaults are to avoid loading
1085
# --no-defaults and --skip-grant-tables are to avoid loading
1215
1086
# system-wide configs and plugins
1217
my $list= `$exe_drizzled --no-defaults --help`;
1088
# --datadir must exist, mysqld will chdir into it
1090
my $list= `$exe_drizzled --no-defaults --datadir=$tmpdir --skip-grant-tables --verbose --help`;
1219
1092
foreach my $line (split('\n', $list))
1221
1094
# First look for version
1222
if ( !$drizzle_version_id )
1095
if ( !$mysql_version_id )
1224
1097
# Look for version
1225
1098
my $exe_name= basename($exe_drizzled);
1226
dtr_verbose("exe_name: $exe_name");
1099
mtr_verbose("exe_name: $exe_name");
1227
1100
if ( $line =~ /^\S*$exe_name\s\sVer\s([0-9]*)\.([0-9]*)\.([0-9]*)/ )
1229
1102
#print "Major: $1 Minor: $2 Build: $3\n";
1230
$drizzle_version_id= $1*10000 + $2*100 + $3;
1231
#print "drizzle_version_id: $drizzle_version_id\n";
1232
dtr_report("Drizzle Version $1.$2.$3");
1103
$mysql_version_id= $1*10000 + $2*100 + $3;
1104
#print "mysql_version_id: $mysql_version_id\n";
1105
mtr_report("MySQL Version $1.$2.$3");
1110
if (!$found_variable_list_start)
1112
# Look for start of variables list
1113
if ( $line =~ /[\-]+\s[\-]+/ )
1115
$found_variable_list_start= 1;
1120
# Put variables into hash
1121
if ( $line =~ /^([\S]+)[ \t]+(.*?)\r?$/ )
1123
# print "$1=\"$2\"\n";
1124
$mysqld_variables{$1}= $2;
1128
# The variable list is ended with a blank line
1129
if ( $line =~ /^[\s]*$/ )
1135
# Send out a warning, we should fix the variables that has no
1136
# space between variable name and it's value
1137
# or should it be fixed width column parsing? It does not
1138
# look like that in function my_print_variables in my_getopt.c
1139
mtr_warning("Could not parse variable list line : $line");
1236
1145
rmtree($tmpdir);
1237
dtr_error("Could not find version of Drizzle") unless $drizzle_version_id;
1146
mtr_error("Could not find version of MySQL") unless $mysql_version_id;
1147
mtr_error("Could not find variabes list") unless $found_variable_list_start;
1242
1152
sub run_query($$) {
1243
my ($drizzled, $query)= @_;
1153
my ($mysqld, $query)= @_;
1246
dtr_init_args(\$args);
1156
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);
1158
mtr_add_arg($args, "--no-defaults");
1159
mtr_add_arg($args, "--skip-stack-trace");
1160
mtr_add_arg($args, "--user=%s", $opt_user);
1161
mtr_add_arg($args, "--port=%d", $mysqld->{'port'});
1162
mtr_add_arg($args, "--silent"); # Tab separated output
1163
mtr_add_arg($args, "-e '%s'", $query);
1255
1165
my $cmd= "$exe_drizzle " . join(' ', @$args);
1256
dtr_verbose("cmd: $cmd");
1166
mtr_verbose("cmd: $cmd");
1261
sub collect_drizzled_features_from_running_server ()
1171
sub collect_mysqld_features_from_running_server ()
1263
my $list= run_query($master->[0], "use drizzle; SHOW VARIABLES");
1173
my $list= run_query($master->[0], "use mysql; SHOW VARIABLES");
1265
1175
foreach my $line (split('\n', $list))
1286
1196
$exe_libtool= "../libtool";
1287
1197
if ($opt_valgrind or $glob_debugger)
1289
dtr_report("Using \"$exe_libtool\" when running valgrind or debugger");
1199
mtr_report("Using \"$exe_libtool\" when running valgrind or debugger");
1203
# Look for my_print_defaults
1204
$exe_my_print_defaults=
1206
"$path_client_bindir/my_print_defaults",
1207
"$glob_basedir/extra/my_print_defaults",
1208
"$glob_builddir/extra/my_print_defaults");
1293
1210
# Look for perror
1294
1211
$exe_perror= "perror";
1296
1213
# 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");
1214
$exe_drizzlecheck= mtr_exe_exists("$path_client_bindir/drizzlecheck");
1215
$exe_drizzledump= mtr_exe_exists("$path_client_bindir/drizzledump");
1216
$exe_drizzleimport= mtr_exe_exists("$path_client_bindir/drizzleimport");
1217
$exe_drizzle= mtr_exe_exists("$path_client_bindir/drizzle");
1302
1219
if (!$opt_extern)
1304
1221
# Look for SQL scripts directory
1305
if ( $drizzle_version_id >= 50100 )
1222
if ( $mysql_version_id >= 50100 )
1307
$exe_drizzleslap= dtr_exe_exists("$path_client_bindir/drizzleslap");
1224
$exe_drizzleslap= mtr_exe_exists("$path_client_bindir/drizzleslap");
1311
# Look for schema_writer
1313
$exe_schemawriter= dtr_exe_exists("$glob_basedir/drizzled/message/schema_writer",
1314
"$glob_builddir/drizzled/message/schema_writer");
1317
1228
# Look for drizzletest executable
1319
$exe_drizzletest= dtr_exe_exists("$path_client_bindir/drizzletest");
1230
$exe_drizzletest= mtr_exe_exists("$path_client_bindir/drizzletest");
1322
1233
# Look for drizzle_client_test executable which may _not_ exist in
1323
1234
# some versions, test using it should be skipped
1325
1236
$exe_drizzle_client_test=
1326
dtr_exe_maybe_exists(
1237
mtr_exe_maybe_exists(
1327
1238
"$glob_basedir/tests/drizzle_client_test",
1328
1239
"$glob_basedir/bin/drizzle_client_test");
1371
1269
my $exe= $exe_drizzle_client_test;
1374
dtr_init_args(\$args);
1272
mtr_init_args(\$args);
1375
1273
if ( $opt_valgrind_drizzletest )
1377
1275
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'}");
1278
mtr_add_arg($args, "--no-defaults");
1279
mtr_add_arg($args, "--testcase");
1280
mtr_add_arg($args, "--user=root");
1281
mtr_add_arg($args, "--port=$master->[0]->{'port'}");
1385
if ( $opt_extern || $drizzle_version_id >= 50000 )
1283
if ( $opt_extern || $mysql_version_id >= 50000 )
1387
dtr_add_arg($args, "--vardir=$opt_vardir")
1285
mtr_add_arg($args, "--vardir=$opt_vardir")
1390
1288
if ( $opt_debug )
1393
1291
"--debug=d:t:A,$path_vardir_trace/log/drizzle_client_test.trace");
1446
1344
$ENV{'LD_LIBRARY_PATH'} ?
1447
1345
split(':', $ENV{'LD_LIBRARY_PATH'}) : (),
1448
1346
@ld_library_paths);
1449
dtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1347
mtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1451
1349
$ENV{'DYLD_LIBRARY_PATH'}= join(":", @ld_library_paths,
1452
1350
$ENV{'DYLD_LIBRARY_PATH'} ?
1453
1351
split(':', $ENV{'DYLD_LIBRARY_PATH'}) : ());
1454
dtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1352
mtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1456
1354
# The environment variable used for shared libs on AIX
1457
1355
$ENV{'SHLIB_PATH'}= join(":", @ld_library_paths,
1458
1356
$ENV{'SHLIB_PATH'} ?
1459
1357
split(':', $ENV{'SHLIB_PATH'}) : ());
1460
dtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1358
mtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1462
1360
# The environment variable used for shared libs on hp-ux
1463
1361
$ENV{'LIBPATH'}= join(":", @ld_library_paths,
1464
1362
$ENV{'LIBPATH'} ?
1465
1363
split(':', $ENV{'LIBPATH'}) : ());
1466
dtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1364
mtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1468
1366
# --------------------------------------------------------------------------
1469
1367
# Also command lines in .opt files may contain env vars
1499
1395
$ENV{'SLAVE_MYPORT'}= $slave->[0]->{'port'};
1500
1396
$ENV{'SLAVE_MYPORT1'}= $slave->[1]->{'port'};
1501
1397
$ENV{'SLAVE_MYPORT2'}= $slave->[2]->{'port'};
1502
$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;
1398
$ENV{'DRIZZLE_TCP_PORT'}= $mysqld_variables{'port'};
1400
$ENV{'MTR_BUILD_THREAD'}= $opt_mtr_build_thread;
1402
$ENV{'EXE_MYSQL'}= $exe_drizzle;
1404
# ----------------------------------------------------
1405
# Setup env so childs can execute mysqlcheck
1406
# ----------------------------------------------------
1407
my $cmdline_mysqlcheck=
1408
mtr_native_path($exe_drizzlecheck) .
1409
" --no-defaults --debug-check -uroot " .
1410
"--port=$master->[0]->{'port'} ";
1414
$cmdline_mysqlcheck .=
1415
" --debug=d:t:A,$path_vardir_trace/log/mysqlcheck.trace";
1417
$ENV{'DRIZZLE_CHECK'}= $cmdline_mysqlcheck;
1512
1419
# ----------------------------------------------------
1513
1420
# Setup env to childs can execute myqldump
1514
1421
# ----------------------------------------------------
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) .
1519
" --no-defaults -uroot " .
1520
" --port=$master->[0]->{'secondary_port'} ";
1422
my $cmdline_mysqldump= generate_cmdline_mysqldump($master->[0]);
1423
my $cmdline_mysqldumpslave= generate_cmdline_mysqldump($slave->[0]);
1522
1425
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";
1427
$cmdline_mysqldump .=
1428
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-master.trace";
1429
$cmdline_mysqldumpslave .=
1430
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-slave.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;
1536
# ----------------------------------------------------
1537
# Setup env so we can execute drizzle client
1538
# ----------------------------------------------------
1539
#my $cmdline_drizzle = generate_cmdline_drizzle($master->[0]);
1540
#$ENV{'DRIZZLE'}= $cmdline_drizzle;
1542
# ----------------------------------------------------
1543
# Setup env so childs can execute drizzleslap
1432
$ENV{'DRIZZLE_DUMP'}= $cmdline_mysqldump;
1433
$ENV{'DRIZZLE_DUMP_SLAVE'}= $cmdline_mysqldumpslave;
1435
# ----------------------------------------------------
1436
# Setup env so childs can execute mysqlslap
1544
1437
# ----------------------------------------------------
1545
1438
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) .
1440
my $cmdline_drizzleslap=
1441
mtr_native_path($exe_drizzleslap) .
1556
1443
"--port=$master->[0]->{'port'} ";
1557
my $cmdline_drizzleslap_secondary=
1558
dtr_native_path($exe_drizzleslap) .
1560
" --port=$master->[0]->{'secondary_port'} ";
1562
1445
if ( $opt_debug )
1564
1447
$cmdline_drizzleslap .=
1565
1448
" --debug=d:t:A,$path_vardir_trace/log/drizzleslap.trace";
1566
$cmdline_drizzleslap_secondary .=
1567
" --debug=d:t:A,$path_vardir_trace/log/drizzleslap.trace";
1569
1450
$ENV{'DRIZZLE_SLAP'}= $cmdline_drizzleslap;
1570
$ENV{'DRIZZLE_SLAP_SECONDARY'}= $cmdline_drizzleslap_secondary;
1575
1455
# ----------------------------------------------------
1576
# Setup env so childs can execute drizzleimport
1456
# Setup env so childs can execute mysqlimport
1577
1457
# ----------------------------------------------------
1578
my $cmdline_drizzleimport=
1579
dtr_native_path($exe_drizzleimport) .
1458
my $cmdline_mysqlimport=
1459
mtr_native_path($exe_drizzleimport) .
1460
" -uroot --debug-check " .
1581
1461
"--port=$master->[0]->{'port'} ";
1583
1463
if ( $opt_debug )
1585
$cmdline_drizzleimport .=
1586
" --debug=d:t:A,$path_vardir_trace/log/drizzleimport.trace";
1465
$cmdline_mysqlimport .=
1466
" --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) .
1596
" --no-defaults --host=localhost --user=root --password= " .
1468
$ENV{'DRIZZLE_IMPORT'}= $cmdline_mysqlimport;
1471
# ----------------------------------------------------
1472
# Setup env so childs can execute mysql
1473
# ----------------------------------------------------
1475
mtr_native_path($exe_drizzle) .
1476
" --no-defaults --debug-check --host=localhost --user=root --password= " .
1597
1477
"--port=$master->[0]->{'port'} ";
1598
my $cmdline_drizzle_secondary=
1599
dtr_native_path($exe_drizzle) .
1600
" --no-defaults --host=localhost --user=root --password= " .
1601
" --port=$master->[0]->{'secondary_port'} ";
1603
$ENV{'DRIZZLE'}= $cmdline_drizzle;
1604
$ENV{'DRIZZLE_SECONDARY'}= $cmdline_drizzle_secondary;
1479
$ENV{'MYSQL'}= $cmdline_mysql;
1606
1481
# ----------------------------------------------------
1607
1482
# Setup env so childs can execute bug25714
1617
1492
# ----------------------------------------------------
1618
# Setup env so childs can execute drizzle_fix_system_tables
1493
# Setup env so childs can execute mysql_fix_system_tables
1619
1494
# ----------------------------------------------------
1620
1495
#if ( !$opt_extern)
1623
my $cmdline_drizzle_fix_system_tables=
1498
my $cmdline_mysql_fix_system_tables=
1624
1499
"$exe_drizzle_fix_system_tables --no-defaults --host=localhost " .
1625
1500
"--user=root --password= " .
1626
1501
"--basedir=$glob_basedir --bindir=$path_client_bindir --verbose " .
1627
1502
"--port=$master->[0]->{'port'} ";
1628
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_drizzle_fix_system_tables;
1503
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_mysql_fix_system_tables;
1632
1507
# ----------------------------------------------------
1508
# Setup env so childs can execute my_print_defaults
1509
# ----------------------------------------------------
1510
$ENV{'DRIZZLE_MY_PRINT_DEFAULTS'}= mtr_native_path($exe_my_print_defaults);
1512
# ----------------------------------------------------
1633
1513
# Setup env so childs can shutdown the server
1634
1514
# ----------------------------------------------------
1635
$ENV{'DRIZZLED_SHUTDOWN'}= dtr_native_path($exe_drizzle);
1515
$ENV{'DRIZZLED_SHUTDOWN'}= mtr_native_path($exe_drizzle);
1637
1517
# ----------------------------------------------------
1638
1518
# Setup env so childs can execute perror
1639
1519
# ----------------------------------------------------
1640
$ENV{'MY_PERROR'}= dtr_native_path($exe_perror);
1520
$ENV{'MY_PERROR'}= mtr_native_path($exe_perror);
1642
1522
# ----------------------------------------------------
1643
# Add the path where drizzled will find ha_example.so
1523
# Add the path where mysqld will find ha_example.so
1644
1524
# ----------------------------------------------------
1645
1525
$ENV{'EXAMPLE_PLUGIN'}=
1646
1526
($lib_example_plugin ? basename($lib_example_plugin) : "");
1648
1528
($lib_example_plugin ? "--plugin_dir=" . dirname($lib_example_plugin) : "");
1650
1530
# ----------------------------------------------------
1531
# Setup env so childs can execute myisampack and myisamchk
1532
# ----------------------------------------------------
1533
# $ENV{'MYISAMCHK'}= mtr_native_path(mtr_exe_exists(
1534
# "$path_client_bindir/myisamchk",
1535
# "$glob_basedir/storage/myisam/myisamchk",
1536
# "$glob_basedir/myisam/myisamchk"));
1537
# $ENV{'MYISAMPACK'}= mtr_native_path(mtr_exe_exists(
1538
# "$path_client_bindir/myisampack",
1539
# "$glob_basedir/storage/myisam/myisampack",
1540
# "$glob_basedir/myisam/myisampack"));
1542
# ----------------------------------------------------
1651
1543
# We are nice and report a bit about our settings
1652
1544
# ----------------------------------------------------
1653
1545
if (!$opt_extern)
1655
print "Using DTR_BUILD_THREAD = $ENV{DTR_BUILD_THREAD}\n";
1547
print "Using MTR_BUILD_THREAD = $ENV{MTR_BUILD_THREAD}\n";
1656
1548
print "Using MASTER_MYPORT = $ENV{MASTER_MYPORT}\n";
1657
1549
print "Using MASTER_MYPORT1 = $ENV{MASTER_MYPORT1}\n";
1658
1550
print "Using SLAVE_MYPORT = $ENV{SLAVE_MYPORT}\n";
1659
1551
print "Using SLAVE_MYPORT1 = $ENV{SLAVE_MYPORT1}\n";
1660
1552
print "Using SLAVE_MYPORT2 = $ENV{SLAVE_MYPORT2}\n";
1661
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
1555
# Create an environment variable to make it possible
1731
1620
if ( $opt_mem and readlink($opt_vardir) eq $opt_mem )
1733
1622
# Remove the directory which the link points at
1734
dtr_verbose("Removing " . readlink($opt_vardir));
1735
dtr_rmtree(readlink($opt_vardir));
1623
mtr_verbose("Removing " . readlink($opt_vardir));
1624
mtr_rmtree(readlink($opt_vardir));
1737
1626
# Remove the "var" symlink
1738
dtr_verbose("unlink($opt_vardir)");
1627
mtr_verbose("unlink($opt_vardir)");
1739
1628
unlink($opt_vardir);
1741
1630
elsif ( $opt_mem )
1743
1632
# Just remove the "var" symlink
1744
dtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1633
mtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1746
dtr_verbose("unlink($opt_vardir)");
1635
mtr_verbose("unlink($opt_vardir)");
1747
1636
unlink($opt_vardir);
1751
# Some users creates a soft link in drizzle-test/var to another area
1640
# Some users creates a soft link in mysql-test/var to another area
1752
1641
# - allow it, but remove all files in it
1754
dtr_report("WARNING: Using the 'drizzle-test/var' symlink");
1643
mtr_report("WARNING: Using the 'mysql-test/var' symlink");
1756
1645
# Make sure the directory where it points exist
1757
dtr_error("The destination for symlink $opt_vardir does not exist")
1646
mtr_error("The destination for symlink $opt_vardir does not exist")
1758
1647
if ! -d readlink($opt_vardir);
1760
1649
foreach my $bin ( glob("$opt_vardir/*") )
1762
dtr_verbose("Removing bin $bin");
1651
mtr_verbose("Removing bin $bin");
1769
1658
# Remove the entire "var" dir
1770
dtr_verbose("Removing $opt_vardir/");
1771
dtr_rmtree("$opt_vardir/");
1659
mtr_verbose("Removing $opt_vardir/");
1660
mtr_rmtree("$opt_vardir/");
1774
1663
if ( $opt_mem )
1802
1691
# Create var and the directories needed in var
1804
1693
sub setup_vardir() {
1805
dtr_report("Creating Directories");
1694
mtr_report("Creating Directories");
1807
1696
if ( $opt_vardir eq $default_vardir )
1810
# Running with "var" in drizzle-test dir
1699
# Running with "var" in mysql-test dir
1812
1701
if ( -l $opt_vardir )
1814
1703
# it's a symlink
1816
1705
# Make sure the directory where it points exist
1817
dtr_error("The destination for symlink $opt_vardir does not exist")
1706
mtr_error("The destination for symlink $opt_vardir does not exist")
1818
1707
if ! -d readlink($opt_vardir);
1820
1709
elsif ( $opt_mem )
1822
1711
# Runinng with "var" as a link to some "memory" location, normally tmpfs
1823
dtr_verbose("Creating $opt_mem");
1712
mtr_verbose("Creating $opt_mem");
1824
1713
mkpath($opt_mem);
1826
dtr_report("Symlinking 'var' to '$opt_mem'");
1715
mtr_report("Symlinking 'var' to '$opt_mem'");
1827
1716
symlink($opt_mem, $opt_vardir);
1831
1720
if ( ! -d $opt_vardir )
1833
dtr_verbose("Creating $opt_vardir");
1722
mtr_verbose("Creating $opt_vardir");
1834
1723
mkpath($opt_vardir);
1837
1726
# Ensure a proper error message if vardir couldn't be created
1838
1727
unless ( -d $opt_vardir and -w $opt_vardir )
1840
dtr_error("Writable 'var' directory is needed, use the " .
1729
mtr_error("Writable 'var' directory is needed, use the " .
1841
1730
"'--vardir=<path>' option");
1943
drizzled_start($master->[0],[],[]);
1824
mysqld_start($master->[0],[],[]);
1944
1825
if ( ! $master->[0]->{'pid'} )
1946
dtr_error("Can't start the drizzled server");
1827
mtr_error("Can't start the mysqld server");
1950
dtr_init_args(\$args);
1831
mtr_init_args(\$args);
1952
dtr_add_arg($args, "--user=%s", $opt_user);
1833
mtr_add_arg($args, "--user=%s", $opt_user);
1954
1835
if ( $opt_small_bench )
1956
dtr_add_arg($args, "--small-test");
1957
dtr_add_arg($args, "--small-tables");
1837
mtr_add_arg($args, "--small-test");
1838
mtr_add_arg($args, "--small-tables");
1960
chdir($glob_drizzle_bench_dir)
1961
or dtr_error("Couldn't chdir to '$glob_drizzle_bench_dir': $!");
1841
chdir($glob_mysql_bench_dir)
1842
or mtr_error("Couldn't chdir to '$glob_mysql_bench_dir': $!");
1963
1844
if ( ! $benchmark )
1965
dtr_run("$glob_drizzle_bench_dir/run-all-tests", $args, "", "", "", "");
1846
mtr_add_arg($args, "--log");
1847
mtr_run("$glob_mysql_bench_dir/run-all-tests", $args, "", "", "", "");
1966
1848
# FIXME check result code?!
1968
1850
elsif ( -x $benchmark )
1970
dtr_run("$glob_drizzle_bench_dir/$benchmark", $args, "", "", "", "");
1852
mtr_run("$glob_mysql_bench_dir/$benchmark", $args, "", "", "", "");
1971
1853
# FIXME check result code?!
1975
dtr_error("Benchmark $benchmark not found");
1857
mtr_error("Benchmark $benchmark not found");
1978
chdir($glob_drizzle_test_dir); # Go back
1860
chdir($glob_mysql_test_dir); # Go back
1981
1863
stop_masters();
2541
2423
my $prefix= ""; # If drizzletest server arg
2543
dtr_add_arg($args, "%s--no-defaults", $prefix);
2425
mtr_add_arg($args, "%s--no-defaults", $prefix);
2427
$path_my_basedir= collapse_path($path_my_basedir);
2428
mtr_add_arg($args, "%s--basedir=%s", $prefix, $path_my_basedir);
2545
2430
if ($opt_engine)
2547
dtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2432
mtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2550
if ( $drizzle_version_id >= 50036)
2435
if ( $mysql_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);
2437
# By default, prevent the started mysqld to access files outside of vardir
2438
mtr_add_arg($args, "%s--secure-file-priv=%s", $prefix, $opt_vardir);
2556
dtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2441
mtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2558
2443
# Increase default connect_timeout to avoid intermittent
2559
2444
# disconnects when test servers are put under load
2560
2445
# 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
2446
mtr_add_arg($args, "%s--connect-timeout=60", $prefix);
2449
# When mysqld is run by a root user(euid is 0), it will fail
2565
2450
# 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);
2452
if (grep(/^--user/, @$extra_opt, @opt_extra_mysqld_opt) == 0) {
2453
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'});
2456
mtr_add_arg($args, "%s--pid-file=%s", $prefix,
2457
$mysqld->{'path_pid'});
2459
mtr_add_arg($args, "%s--port=%d", $prefix,
2462
mtr_add_arg($args, "%s--datadir=%s", $prefix,
2463
$mysqld->{'path_myddir'});
2465
my $log_base_path= "$opt_vardir/log/$mysqld->{'type'}$sidx";
2466
mtr_add_arg($args, "%s--log=%s.log", $prefix, $log_base_path);
2586
2468
# Check if "extra_opt" contains --skip-log-bin
2587
if ( $drizzled->{'type'} eq 'master' )
2469
if ( $mysqld->{'type'} eq 'master' )
2589
dtr_add_arg($args, "%s--server-id=%d", $prefix,
2471
mtr_add_arg($args, "%s--server-id=%d", $prefix,
2590
2472
$idx > 0 ? $idx + 101 : 1);
2593
"%s--innodb.data-file-path=ibdata1:20M:autoextend", $prefix);
2474
mtr_add_arg($args, "%s--loose-innodb_data_file_path=ibdata1:10M:autoextend",
2477
mtr_add_arg($args, "%s--loose-innodb-lock-wait-timeout=5", $prefix);
2479
if ( $idx > 0 or !$use_innodb)
2481
mtr_add_arg($args, "%s--loose-skip-innodb", $prefix);
2598
dtr_error("unknown drizzled type")
2599
unless $drizzled->{'type'} eq 'slave';
2486
mtr_error("unknown mysqld type")
2487
unless $mysqld->{'type'} eq 'slave';
2601
2489
# Directory where slaves find the dumps generated by "load data"
2602
2490
# on the server. The path need to have constant length otherwise
2608
2496
foreach my $arg ( @$slave_master_info )
2610
dtr_add_arg($args, "%s%s", $prefix, $arg);
2498
mtr_add_arg($args, "%s%s", $prefix, $arg);
2615
2503
my $slave_server_id= 2 + $idx;
2616
2504
my $slave_rpl_rank= $slave_server_id;
2617
dtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2505
mtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2621
2509
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);
2511
mtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/%s%s.trace",
2512
$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);
2515
mtr_add_arg($args, "%s--key_buffer_size=1M", $prefix);
2516
mtr_add_arg($args, "%s--sort_buffer=256K", $prefix);
2517
mtr_add_arg($args, "%s--max_heap_table_size=1M", $prefix);
2630
2519
if ( $opt_warnings )
2632
dtr_add_arg($args, "%s--log-warnings", $prefix);
2521
mtr_add_arg($args, "%s--log-warnings", $prefix);
2635
# Indicate to "drizzled" it will be debugged in debugger
2524
# Indicate to "mysqld" it will be debugged in debugger
2636
2525
if ( $glob_debugger )
2638
dtr_add_arg($args, "%s--gdb", $prefix);
2527
mtr_add_arg($args, "%s--gdb", $prefix);
2641
2530
my $found_skip_core= 0;
2642
foreach my $arg ( @opt_extra_drizzled_opt, @$extra_opt )
2531
foreach my $arg ( @opt_extra_mysqld_opt, @$extra_opt )
2644
2533
# Allow --skip-core-file to be set in <testname>-[master|slave].opt file
2645
2534
if ($arg eq "--skip-core-file")
2677
2566
my $wait_for_pid_file= 1;
2679
my $type= $drizzled->{'type'};
2680
my $idx= $drizzled->{'idx'};
2568
my $type= $mysqld->{'type'};
2569
my $idx= $mysqld->{'idx'};
2682
2571
if ( $type eq 'master' )
2684
$exe= $exe_master_drizzled;
2573
$exe= $exe_master_mysqld;
2686
2575
elsif ( $type eq 'slave' )
2688
$exe= $exe_slave_drizzled;
2577
$exe= $exe_slave_mysqld;
2692
dtr_error("Unknown 'type' \"$type\" passed to drizzled_start");
2581
mtr_error("Unknown 'type' \"$type\" passed to mysqld_start");
2695
dtr_init_args(\$args);
2584
mtr_init_args(\$args);
2697
if ( $opt_valgrind_drizzled )
2586
if ( $opt_valgrind_mysqld )
2699
2588
valgrind_arguments($args, \$exe);
2702
drizzled_arguments($args,$drizzled,$extra_opt,$slave_master_info);
2591
mysqld_arguments($args,$mysqld,$extra_opt,$slave_master_info);
2704
2593
if ( $opt_gdb || $opt_manual_gdb)
2737
2622
# Remove the pidfile
2738
unlink($drizzled->{'path_pid'});
2623
unlink($mysqld->{'path_pid'});
2740
2625
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'},
2627
$pid= mtr_spawn($exe, $args, "",
2628
$mysqld->{'path_myerr'},
2629
$mysqld->{'path_myerr'},
2747
2631
{ append_log_file => 1 });
2751
if ( $wait_for_pid_file && !sleep_until_file_created($drizzled->{'path_pid'},
2752
$drizzled->{'start_timeout'},
2635
if ( $wait_for_pid_file && !sleep_until_file_created($mysqld->{'path_pid'},
2636
$mysqld->{'start_timeout'},
2756
dtr_error("Failed to start drizzled $drizzled->{'type'}");
2640
mtr_error("Failed to start mysqld $mysqld->{'type'}");
2760
2644
# Remember pid of the started process
2761
$drizzled->{'pid'}= $pid;
2645
$mysqld->{'pid'}= $pid;
2763
2647
# Remember options used when starting
2764
$drizzled->{'start_opts'}= $extra_opt;
2765
$drizzled->{'start_slave_master_info'}= $slave_master_info;
2648
$mysqld->{'start_opts'}= $extra_opt;
2649
$mysqld->{'start_slave_master_info'}= $slave_master_info;
2767
dtr_verbose("drizzled pid: $pid");
2651
mtr_verbose("mysqld pid: $pid");
2772
2656
sub stop_all_servers () {
2774
dtr_report("Stopping All Servers");
2658
mtr_report("Stopping All Servers");
2776
2660
my %admin_pids; # hash of admin processes that requests shutdown
2777
2661
my @kill_pids; # list of processes to shutdown/kill
2780
2664
# Start shutdown of all started masters
2781
foreach my $drizzled (@{$slave}, @{$master})
2665
foreach my $mysqld (@{$slave}, @{$master})
2783
if ( $drizzled->{'pid'} )
2667
if ( $mysqld->{'pid'} )
2785
$pid= dtr_server_shutdown($drizzled);
2669
$pid= mtr_server_shutdown($mysqld);
2786
2670
$admin_pids{$pid}= 1;
2788
2672
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'},
2673
pid => $mysqld->{'pid'},
2674
real_pid => $mysqld->{'real_pid'},
2675
pidfile => $mysqld->{'path_pid'},
2676
sockfile => $mysqld->{'path_sock'},
2677
port => $mysqld->{'port'},
2678
errfile => $mysqld->{'path_myerr'},
2797
$drizzled->{'pid'}= 0; # Assume we are done with it
2681
$mysqld->{'pid'}= 0; # Assume we are done with it
2801
2685
# Wait blocking until all shutdown processes has completed
2802
dtr_wait_blocking(\%admin_pids);
2686
mtr_wait_blocking(\%admin_pids);
2804
2688
# Make sure that process has shutdown else try to kill them
2805
dtr_check_stop_servers(\@kill_pids);
2689
mtr_check_stop_servers(\@kill_pids);
2816
2700
if ( $tinfo->{'master_sh'} )
2818
2702
$do_restart= 1; # Always restart if script to run
2819
dtr_verbose("Restart master: Always restart if script to run");
2703
mtr_verbose("Restart master: Always restart if script to run");
2821
2705
if ( $tinfo->{'force_restart'} )
2823
2707
$do_restart= 1; # Always restart if --force-restart in -opt file
2824
dtr_verbose("Restart master: Restart forced with --force-restart");
2708
mtr_verbose("Restart master: Restart forced with --force-restart");
2826
2710
elsif( $tinfo->{'component_id'} eq 'im' )
2828
2712
$do_restart= 1;
2829
dtr_verbose("Restart master: Always restart for im tests");
2713
mtr_verbose("Restart master: Always restart for im tests");
2831
2715
elsif ( $master->[0]->{'running_master_options'} and
2832
2716
$master->[0]->{'running_master_options'}->{'timezone'} ne
2833
2717
$tinfo->{'timezone'})
2835
2719
$do_restart= 1;
2836
dtr_verbose("Restart master: Different timezone");
2720
mtr_verbose("Restart master: Different timezone");
2838
2722
# Check that running master was started with same options
2839
2723
# as the current test requires
2840
elsif (! dtr_same_opts($master->[0]->{'start_opts'},
2724
elsif (! mtr_same_opts($master->[0]->{'start_opts'},
2841
2725
$tinfo->{'master_opt'}) )
2843
2727
# Chech that diff is binlog format only
2844
my $diff_opts= dtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2728
my $diff_opts= mtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2845
2729
if (scalar(@$diff_opts) eq 2)
2847
2731
$do_restart= 1;
2936
2820
delete $master->[0]->{'running_master_options'}; # Forget history
2938
2822
# Start shutdown of all started masters
2939
foreach my $drizzled (@{$master})
2823
foreach my $mysqld (@{$master})
2941
if ( $drizzled->{'pid'} )
2825
if ( $mysqld->{'pid'} )
2943
$pid= dtr_server_shutdown($drizzled);
2827
$pid= mtr_server_shutdown($mysqld);
2945
2829
$admin_pids{$pid}= 1;
2947
2831
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'},
2832
pid => $mysqld->{'pid'},
2833
real_pid => $mysqld->{'real_pid'},
2834
pidfile => $mysqld->{'path_pid'},
2835
sockfile => $mysqld->{'path_sock'},
2836
port => $mysqld->{'port'},
2837
errfile => $mysqld->{'path_myerr'},
2956
$drizzled->{'pid'}= 0; # Assume we are done with it
2840
$mysqld->{'pid'}= 0; # Assume we are done with it
2964
2848
delete $slave->[0]->{'running_slave_options'}; # Forget history
2966
2850
# Start shutdown of all started slaves
2967
foreach my $drizzled (@{$slave})
2851
foreach my $mysqld (@{$slave})
2969
if ( $drizzled->{'pid'} )
2853
if ( $mysqld->{'pid'} )
2971
$pid= dtr_server_shutdown($drizzled);
2855
$pid= mtr_server_shutdown($mysqld);
2973
2857
$admin_pids{$pid}= 1;
2975
2859
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'},
2860
pid => $mysqld->{'pid'},
2861
real_pid => $mysqld->{'real_pid'},
2862
pidfile => $mysqld->{'path_pid'},
2863
sockfile => $mysqld->{'path_sock'},
2864
port => $mysqld->{'port'},
2865
errfile => $mysqld->{'path_myerr'},
2984
$drizzled->{'pid'}= 0; # Assume we are done with it
2868
$mysqld->{'pid'}= 0; # Assume we are done with it
3081
2965
sub run_check_testcase ($$) {
3083
2967
my $mode= shift;
3084
my $drizzled= shift;
3086
my $name= "check-" . $drizzled->{'type'} . $drizzled->{'idx'};
2970
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");
2973
mtr_init_args(\$args);
2975
mtr_add_arg($args, "--no-defaults");
2976
mtr_add_arg($args, "--silent");
2977
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
2979
mtr_add_arg($args, "--port=%d", $mysqld->{'port'});
2980
mtr_add_arg($args, "--database=test");
2981
mtr_add_arg($args, "--user=%s", $opt_user);
2982
mtr_add_arg($args, "--password=");
2984
mtr_add_arg($args, "-R");
2985
mtr_add_arg($args, "$opt_vardir/tmp/$name.result");
3103
2987
if ( $mode eq "before" )
3105
dtr_add_arg($args, "--record");
2989
mtr_add_arg($args, "--record");
3108
2992
if ( $opt_testdir )
3110
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
2994
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3113
my $res = dtr_run_test($exe_drizzletest,$args,
2997
my $res = mtr_run_test($exe_drizzletest,$args,
3114
2998
"include/check-testcase.test", "", "", "");
3116
3000
if ( $res == 1 and $mode eq "after")
3118
dtr_run("diff",["-u",
3002
mtr_run("diff",["-u",
3119
3003
"$opt_vardir/tmp/$name.result",
3120
3004
"$opt_vardir/tmp/$name.reject"],
3121
3005
"", "", "", "");
3125
dtr_error("Could not execute 'check-testcase' $mode testcase");
3009
mtr_error("Could not execute 'check-testcase' $mode testcase");
3169
3053
my $exe= $exe_drizzletest;
3172
dtr_init_args(\$args);
3056
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);
3058
mtr_add_arg($args, "--no-defaults");
3059
mtr_add_arg($args, "--silent");
3060
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3061
mtr_add_arg($args, "--logdir=%s/log", $opt_vardir);
3179
3063
# Log line number and time for each line in .test file
3180
dtr_add_arg($args, "--mark-progress")
3064
mtr_add_arg($args, "--mark-progress")
3181
3065
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=");
3068
mtr_add_arg($args, "--port=%d", $master->[0]->{'port'});
3069
mtr_add_arg($args, "--database=test");
3070
mtr_add_arg($args, "--user=%s", $opt_user);
3071
mtr_add_arg($args, "--password=");
3190
3074
if ( $opt_strace_client )
3192
3076
$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");
3077
mtr_add_arg($args, "-o");
3078
mtr_add_arg($args, "%s/log/drizzletest.strace", $opt_vardir);
3079
mtr_add_arg($args, "$exe_drizzletest");
3198
3082
if ( $opt_timer )
3200
dtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3084
mtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3203
3087
if ( $opt_compress )
3205
dtr_add_arg($args, "--compress");
3089
mtr_add_arg($args, "--compress");
3208
3092
if ( $opt_sleep )
3210
dtr_add_arg($args, "--sleep=%d", $opt_sleep);
3094
mtr_add_arg($args, "--sleep=%d", $opt_sleep);
3213
3097
if ( $opt_debug )
3215
dtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3099
mtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3216
3100
$path_vardir_trace);
3219
3103
if ( $opt_testdir )
3221
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
3105
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3238
3122
# We do this here, since we do not want to Valgrind the nested invocations
3239
3123
# of drizzletest; that would mess up the stderr output causing test failure.
3240
3124
my @args_saved = @$args;
3241
dtr_init_args(\$args);
3125
mtr_init_args(\$args);
3242
3126
valgrind_arguments($args, \$exe);
3243
dtr_add_arg($args, "%s", $_) for @args_saved;
3127
mtr_add_arg($args, "%s", $_) for @args_saved;
3246
dtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3130
mtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3248
3132
# Number of lines of resut to include in failure report
3249
dtr_add_arg($args, "--tail-lines=20");
3133
mtr_add_arg($args, "--tail-lines=20");
3251
3135
if ( defined $tinfo->{'result_file'} ) {
3252
dtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3136
mtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3255
3139
if ( $opt_record )
3257
dtr_add_arg($args, "--record");
3141
mtr_add_arg($args, "--record");
3260
3144
if ( $opt_client_gdb )
3273
3157
if ( $opt_check_testcases )
3275
foreach my $drizzled (@{$master}, @{$slave})
3159
foreach my $mysqld (@{$master}, @{$slave})
3277
if ($drizzled->{'pid'})
3161
if ($mysqld->{'pid'})
3279
run_check_testcase("before", $drizzled);
3163
run_check_testcase("before", $mysqld);
3284
my $res = dtr_run_test($exe,$args,"","",$path_timefile,"");
3168
my $res = mtr_run_test($exe,$args,"","",$path_timefile,"");
3286
3170
if ( $opt_check_testcases )
3288
foreach my $drizzled (@{$master}, @{$slave})
3172
foreach my $mysqld (@{$master}, @{$slave})
3290
if ($drizzled->{'pid'})
3174
if ($mysqld->{'pid'})
3292
if (run_check_testcase("after", $drizzled))
3176
if (run_check_testcase("after", $mysqld))
3294
3178
# Check failed, mark the test case with that info
3295
3179
$tinfo->{'check_testcase_failed'}= 1;
3306
# Modify the exe and args so that program is run in gdb in xterm
3313
# Write $args to gdb init file
3314
my $str= join(" ", @$$args);
3315
my $dbx_init_file= "$opt_tmpdir/dbxinit.$type";
3317
# Remove the old gdbinit file
3318
unlink($dbx_init_file);
3319
if ( $type eq "client" )
3321
# write init file for client
3322
dtr_tofile($dbx_init_file,
3328
# write init file for drizzled
3329
dtr_tofile($dbx_init_file,
3330
"stop in __1cIdrizzledLparse6Fpn0AHSession_pkcI_v_\n" .
3336
if ( $opt_manual_dbx )
3338
print "\nTo start dbx for $type, type in another window:\n";
3339
print "dbx -c 'source $dbx_init_file' $$exe\n";
3341
# Indicate the exe should not be started
3347
dtr_add_arg($$args, "-title");
3348
dtr_add_arg($$args, "$type");
3349
dtr_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");
3360
3191
# Modify the exe and args so that program is run in gdb in xterm
3420
dtr_add_arg($$args, "-title");
3421
dtr_add_arg($$args, "$type");
3422
dtr_add_arg($$args, "-e");
3235
mtr_add_arg($$args, "-title");
3236
mtr_add_arg($$args, "$type");
3237
mtr_add_arg($$args, "-e");
3424
3239
if ( $exe_libtool )
3426
dtr_add_arg($$args, $exe_libtool);
3427
dtr_add_arg($$args, "--mode=execute");
3241
mtr_add_arg($$args, $exe_libtool);
3242
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");
3245
mtr_add_arg($$args, "gdb");
3246
mtr_add_arg($$args, "-x");
3247
mtr_add_arg($$args, "$gdb_init_file");
3248
mtr_add_arg($$args, "$$exe");
3435
3250
$$exe= "xterm";
3546
3361
if ( $opt_callgrind)
3548
dtr_add_arg($args, "--tool=callgrind");
3552
dtr_add_arg($args, "--tool=massif");
3363
mtr_add_arg($args, "--tool=callgrind");
3364
mtr_add_arg($args, "--base=$opt_vardir/log");
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";
3368
mtr_add_arg($args, "--tool=memcheck"); # From >= 2.1.2 needs this option
3369
mtr_add_arg($args, "--alignment=8");
3370
mtr_add_arg($args, "--leak-check=yes");
3371
mtr_add_arg($args, "--num-callers=16");
3372
mtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_mysql_test_dir)
3373
if -f "$glob_mysql_test_dir/valgrind.supp";
3563
3376
# Add valgrind options, can be overriden by user
3564
dtr_add_arg($args, '%s', $_) for (@valgrind_args);
3377
mtr_add_arg($args, '%s', $_) for (@valgrind_args);
3566
dtr_add_arg($args, $$exe);
3379
mtr_add_arg($args, $$exe);
3568
3381
$$exe= $opt_valgrind_path || "valgrind";
3708
3523
client-ddd Start drizzletest client in ddd
3709
3524
client-debugger=NAME Start drizzletest in the selected debugger
3710
3525
client-gdb Start drizzletest client in gdb
3711
ddd Start drizzled in ddd
3526
ddd Start mysqld in ddd
3712
3527
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
3528
debugger=NAME Start mysqld in the selected debugger
3529
gdb Start the mysqld(s) in gdb
3530
manual-debug Let user manually start mysqld in debugger, before
3716
3531
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
3532
manual-gdb Let user manually start mysqld in gdb, before running
3534
manual-ddd Let user manually start mysqld in ddd, before running
3536
master-binary=PATH Specify the master "mysqld" to use
3537
slave-binary=PATH Specify the slave "mysqld" to use
3723
3538
strace-client Create strace output for drizzletest client
3724
3539
max-save-core Limit the number of core files saved (to avoid filling
3725
3540
up disks for heavily crashing server). Defaults to