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.
508
480
'master_port=i' => \$opt_master_myport,
509
481
'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,
482
'mtr-build-thread=i' => \$opt_mtr_build_thread,
515
484
# Test case authoring
516
485
'record' => \$opt_record,
517
486
'check-testcases' => \$opt_check_testcases,
518
487
'mark-progress' => \$opt_mark_progress,
520
# Extra options used when starting drizzled
521
'drizzled=s' => \@opt_extra_drizzled_opt,
489
# Extra options used when starting mysqld
490
'mysqld=s' => \@opt_extra_mysqld_opt,
522
491
'engine=s' => \$opt_engine,
524
493
# Run test on running server
638
604
# Find the absolute path to the test directory
639
605
if ( ! $opt_testdir )
641
$glob_drizzle_test_dir= cwd();
607
$glob_mysql_test_dir= cwd();
645
$glob_drizzle_test_dir= $opt_testdir;
611
$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/..";
613
$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
615
# In most cases, the base directory we find everything relative to,
660
# is the parent directory of the "drizzle-test" directory. For source
616
# is the parent directory of the "mysql-test" directory. For source
661
617
# 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;
618
$glob_basedir= dirname($glob_mysql_test_dir);
693
620
# In the RPM case, binaries and libraries are installed in the
694
621
# 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
622
# directory. And we install "/usr/share/mysql-test". Moving up one
623
# more directory relative to "mysql-test" gives us a usable base
697
624
# directory for RPM installs.
698
625
if ( ! $source_dist and ! -d "$glob_basedir/bin" )
711
638
$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();
641
# Expect mysql-bench to be located adjacent to the source tree, by default
642
$glob_mysql_bench_dir= "$glob_basedir/../mysql-bench"
643
unless defined $glob_mysql_bench_dir;
644
$glob_mysql_bench_dir= undef
645
unless -d $glob_mysql_bench_dir;
648
$source_dist ? $glob_mysql_test_dir : $glob_basedir;
650
$glob_timers= mtr_init_timers();
723
# Find the drizzled executable to be able to find the drizzled version
653
# Find the mysqld executable to be able to find the mysqld version
724
654
# number as early as possible
727
657
# Look for the client binaries directory
728
$path_client_bindir= dtr_path_exists("$glob_builddir/client",
658
$path_client_bindir= mtr_path_exists("$glob_builddir/client",
729
659
"$glob_basedir/client",
730
660
"$glob_basedir/bin");
732
662
if (!$opt_extern)
734
$exe_drizzled= dtr_exe_exists ("$glob_basedir/drizzled/drizzled",
664
$exe_drizzled= mtr_exe_exists ("$glob_basedir/drizzled/drizzled",
735
665
"$path_client_bindir/drizzled",
736
666
"$glob_basedir/libexec/drizzled",
737
667
"$glob_basedir/bin/drizzled",
738
668
"$glob_basedir/sbin/drizzled",
739
669
"$glob_builddir/drizzled/drizzled");
741
# Use the drizzled found above to find out what features are available
742
collect_drizzled_features();
671
# Use the mysqld found above to find out what features are available
672
collect_mysqld_features();
746
$drizzled_variables{'port'}= 4427;
676
$mysqld_variables{'port'}= 4427;
749
679
if (!$opt_engine)
899
811
$glob_debugger= 1;
900
812
if ( $opt_extern )
902
dtr_error("Can't use --extern when using debugger");
814
mtr_error("Can't use --extern when using debugger");
906
818
# --------------------------------------------------------------------------
907
819
# Check if special exe was selected for master or slave
908
820
# --------------------------------------------------------------------------
909
$exe_master_drizzled= $exe_master_drizzled || $exe_drizzled;
910
$exe_slave_drizzled= $exe_slave_drizzled || $exe_drizzled;
821
$exe_master_mysqld= $exe_master_mysqld || $exe_drizzled;
822
$exe_slave_mysqld= $exe_slave_mysqld || $exe_drizzled;
912
824
# --------------------------------------------------------------------------
913
825
# Check valgrind arguments
914
826
# --------------------------------------------------------------------------
915
827
if ( $opt_valgrind or $opt_valgrind_path or @valgrind_args)
917
dtr_report("Turning on valgrind for all executables");
829
mtr_report("Turning on valgrind for all executables");
918
830
$opt_valgrind= 1;
919
$opt_valgrind_drizzled= 1;
831
$opt_valgrind_mysqld= 1;
920
832
$opt_valgrind_drizzletest= 1;
921
$ENV{'VALGRIND_RUN'} = '1';
923
elsif ( $opt_valgrind_drizzled )
834
elsif ( $opt_valgrind_mysqld )
925
dtr_report("Turning on valgrind for drizzled(s) only");
836
mtr_report("Turning on valgrind for mysqld(s) only");
926
837
$opt_valgrind= 1;
928
839
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");
841
mtr_report("Turning on valgrind for drizzletest and drizzle_client_test only");
936
842
$opt_valgrind= 1;
939
845
if ( $opt_callgrind )
941
dtr_report("Turning on valgrind with callgrind for drizzled(s)");
847
mtr_report("Turning on valgrind with callgrind for mysqld(s)");
942
848
$opt_valgrind= 1;
943
$opt_valgrind_drizzled= 1;
849
$opt_valgrind_mysqld= 1;
945
851
# Set special valgrind options unless options passed on command line
946
852
push(@valgrind_args, "--trace-children=yes")
947
853
unless @valgrind_args;
952
dtr_report("Valgrind with Massif tool for drizzled(s)");
954
$opt_valgrind_drizzled= 1;
957
856
if ( $opt_valgrind )
959
858
# Set valgrind_options to default unless already defined
960
859
push(@valgrind_args, @default_valgrind_args)
961
860
unless @valgrind_args;
963
dtr_report("Running valgrind with options \"",
862
mtr_report("Running valgrind with options \"",
964
863
join(" ", @valgrind_args), "\"");
890
# On QNX, /tmp/dir/master.sock and /tmp/dir//master.sock seem to be
891
# considered different, so avoid the extra slash (/) in the socket
893
my $sockdir = $opt_tmpdir;
896
# On some operating systems, there is a limit to the length of a
897
# UNIX domain socket's path far below PATH_MAX, so try to avoid long
899
$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
906
path_myddir => "$opt_vardir/master-data",
907
path_myerr => "$opt_vardir/log/master.err",
908
path_pid => "$opt_vardir/run/master.pid",
909
path_sock => "$sockdir/master.sock",
910
port => $opt_master_myport,
911
start_timeout => 400, # enough time create innodb tables
912
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
921
path_myddir => "$opt_vardir/master1-data",
922
path_myerr => "$opt_vardir/log/master1.err",
923
path_pid => "$opt_vardir/run/master1.pid",
924
path_sock => "$sockdir/master1.sock",
925
port => $opt_master_myport + 1,
926
start_timeout => 400, # enough time create innodb tables
927
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
936
path_myddir => "$opt_vardir/slave-data",
937
path_myerr => "$opt_vardir/log/slave.err",
938
path_pid => "$opt_vardir/run/slave.pid",
939
path_sock => "$sockdir/slave.sock",
940
port => $opt_slave_myport,
941
start_timeout => 400,
943
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
952
path_myddir => "$opt_vardir/slave1-data",
953
path_myerr => "$opt_vardir/log/slave1.err",
954
path_pid => "$opt_vardir/run/slave1.pid",
955
path_sock => "$sockdir/slave1.sock",
956
port => $opt_slave_myport + 1,
957
start_timeout => 300,
958
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
967
path_myddir => "$opt_vardir/slave2-data",
968
path_myerr => "$opt_vardir/log/slave2.err",
969
path_pid => "$opt_vardir/run/slave2.pid",
970
path_sock => "$sockdir/slave2.sock",
971
port => $opt_slave_myport + 2,
972
start_timeout => 300,
973
cluster => -1, # index in clusters list
1100
1006
# When both --valgrind and --debug is selected, send
1101
1007
# all output to the trace file, making it possible to
1102
1008
# see the exact location where valgrind complains
1103
foreach my $drizzled (@{$master}, @{$slave})
1009
foreach my $mysqld (@{$master}, @{$slave})
1105
my $sidx= $drizzled->{idx} ? "$drizzled->{idx}" : "";
1106
$drizzled->{path_myerr}=
1107
"$opt_vardir/log/" . $drizzled->{type} . "$sidx.trace";
1112
sub gimme_a_good_port($)
1114
my $port_to_test= shift;
1115
if ($port_to_test == 8000)
1117
$port_to_test = 8001;
1120
while ($is_port_bad) {
1121
my $sock = new IO::Socket::INET( PeerAddr => 'localhost',
1122
PeerPort => $port_to_test,
1127
if ($port_to_test >= 32767) {
1128
$port_to_test = 5001;
1135
return $port_to_test;
1011
my $sidx= $mysqld->{idx} ? "$mysqld->{idx}" : "";
1012
$mysqld->{path_myerr}=
1013
"$opt_vardir/log/" . $mysqld->{type} . "$sidx.trace";
1139
1019
# To make it easier for different devs to work on the same host,
1140
1020
# an environment variable can be used to control all ports. A small
1151
1031
# But a fairly safe range seems to be 5001 - 32767
1154
sub set_dtr_build_thread_ports($) {
1155
my $dtr_build_thread= shift;
1034
sub set_mtr_build_thread_ports($) {
1035
my $mtr_build_thread= shift;
1157
if ( lc($dtr_build_thread) eq 'auto' ) {
1037
if ( lc($mtr_build_thread) eq 'auto' ) {
1158
1038
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";
1039
$ENV{'MTR_BUILD_THREAD'} = $mtr_build_thread = mtr_require_unique_id_and_wait("/tmp/mysql-test-ports", 200, 299);
1040
print "got ".$mtr_build_thread."\n";
1163
$dtr_build_thread= (($dtr_build_thread * 10) % 2000) - 1000;
1043
$mtr_build_thread= (($mtr_build_thread * 10) % 2000) - 1000;
1165
1045
# Up to two masters, up to three slaves
1166
1046
# 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);
1047
$opt_master_myport= $mtr_build_thread + 9000; # and 1
1048
$opt_slave_myport= $opt_master_myport + 2; # and 3 4
1175
1050
if ( $opt_master_myport < 5001 or $opt_master_myport + 10 >= 32767 )
1177
dtr_error("DTR_BUILD_THREAD number results in a port",
1052
mtr_error("MTR_BUILD_THREAD number results in a port",
1178
1053
"outside 5001 - 32767",
1179
1054
"($opt_master_myport - $opt_master_myport + 10)");
1203
1078
##############################################################################
1206
sub collect_drizzled_features () {
1081
sub collect_mysqld_features () {
1207
1082
my $found_variable_list_start= 0;
1208
1083
my $tmpdir= tempdir(CLEANUP => 0); # Directory removed by this function
1211
# Execute "drizzled --help" to get a list
1086
# Execute "mysqld --help --verbose" to get a list
1212
1087
# list of all features and settings
1214
# --no-defaults are to avoid loading
1089
# --no-defaults and --skip-grant-tables are to avoid loading
1215
1090
# system-wide configs and plugins
1217
my $list= `$exe_drizzled --no-defaults --help`;
1092
# --datadir must exist, mysqld will chdir into it
1094
my $list= `$exe_drizzled --no-defaults --datadir=$tmpdir --skip-grant-tables --verbose --help`;
1219
1096
foreach my $line (split('\n', $list))
1221
1098
# First look for version
1222
if ( !$drizzle_version_id )
1099
if ( !$mysql_version_id )
1224
1101
# Look for version
1225
1102
my $exe_name= basename($exe_drizzled);
1226
dtr_verbose("exe_name: $exe_name");
1103
mtr_verbose("exe_name: $exe_name");
1227
1104
if ( $line =~ /^\S*$exe_name\s\sVer\s([0-9]*)\.([0-9]*)\.([0-9]*)/ )
1229
1106
#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");
1107
$mysql_version_id= $1*10000 + $2*100 + $3;
1108
#print "mysql_version_id: $mysql_version_id\n";
1109
mtr_report("MySQL Version $1.$2.$3");
1114
if (!$found_variable_list_start)
1116
# Look for start of variables list
1117
if ( $line =~ /[\-]+\s[\-]+/ )
1119
$found_variable_list_start= 1;
1124
# Put variables into hash
1125
if ( $line =~ /^([\S]+)[ \t]+(.*?)\r?$/ )
1127
# print "$1=\"$2\"\n";
1128
$mysqld_variables{$1}= $2;
1132
# The variable list is ended with a blank line
1133
if ( $line =~ /^[\s]*$/ )
1139
# Send out a warning, we should fix the variables that has no
1140
# space between variable name and it's value
1141
# or should it be fixed width column parsing? It does not
1142
# look like that in function my_print_variables in my_getopt.c
1143
mtr_warning("Could not parse variable list line : $line");
1236
1149
rmtree($tmpdir);
1237
dtr_error("Could not find version of Drizzle") unless $drizzle_version_id;
1150
mtr_error("Could not find version of MySQL") unless $mysql_version_id;
1151
mtr_error("Could not find variabes list") unless $found_variable_list_start;
1242
1156
sub run_query($$) {
1243
my ($drizzled, $query)= @_;
1157
my ($mysqld, $query)= @_;
1246
dtr_init_args(\$args);
1160
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);
1162
mtr_add_arg($args, "--no-defaults");
1163
mtr_add_arg($args, "--skip-stack-trace");
1164
mtr_add_arg($args, "--user=%s", $opt_user);
1165
mtr_add_arg($args, "--port=%d", $mysqld->{'port'});
1166
mtr_add_arg($args, "--silent"); # Tab separated output
1167
mtr_add_arg($args, "-e '%s'", $query);
1255
1169
my $cmd= "$exe_drizzle " . join(' ', @$args);
1256
dtr_verbose("cmd: $cmd");
1170
mtr_verbose("cmd: $cmd");
1261
sub collect_drizzled_features_from_running_server ()
1175
sub collect_mysqld_features_from_running_server ()
1263
my $list= run_query($master->[0], "use drizzle; SHOW VARIABLES");
1177
my $list= run_query($master->[0], "use mysql; SHOW VARIABLES");
1265
1179
foreach my $line (split('\n', $list))
1286
1200
$exe_libtool= "../libtool";
1287
1201
if ($opt_valgrind or $glob_debugger)
1289
dtr_report("Using \"$exe_libtool\" when running valgrind or debugger");
1203
mtr_report("Using \"$exe_libtool\" when running valgrind or debugger");
1207
# Look for my_print_defaults
1208
$exe_my_print_defaults=
1210
"$path_client_bindir/my_print_defaults",
1211
"$glob_basedir/extra/my_print_defaults",
1212
"$glob_builddir/extra/my_print_defaults");
1293
1214
# Look for perror
1294
1215
$exe_perror= "perror";
1296
1217
# 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");
1218
$exe_drizzledump= mtr_exe_exists("$path_client_bindir/drizzledump");
1219
$exe_drizzleimport= mtr_exe_exists("$path_client_bindir/drizzleimport");
1220
$exe_drizzle= mtr_exe_exists("$path_client_bindir/drizzle");
1302
1222
if (!$opt_extern)
1304
1224
# Look for SQL scripts directory
1305
if ( $drizzle_version_id >= 50100 )
1225
if ( $mysql_version_id >= 50100 )
1307
$exe_drizzleslap= dtr_exe_exists("$path_client_bindir/drizzleslap");
1227
$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
1231
# Look for drizzletest executable
1319
$exe_drizzletest= dtr_exe_exists("$path_client_bindir/drizzletest");
1233
$exe_drizzletest= mtr_exe_exists("$path_client_bindir/drizzletest");
1322
1236
# Look for drizzle_client_test executable which may _not_ exist in
1323
1237
# some versions, test using it should be skipped
1325
1239
$exe_drizzle_client_test=
1326
dtr_exe_maybe_exists(
1240
mtr_exe_maybe_exists(
1327
1241
"$glob_basedir/tests/drizzle_client_test",
1328
1242
"$glob_basedir/bin/drizzle_client_test");
1331
1245
# Look for bug25714 executable which may _not_ exist in
1332
1246
# some versions, test using it should be skipped
1334
dtr_exe_maybe_exists(
1248
mtr_exe_maybe_exists(
1335
1249
"$glob_basedir/tests/bug25714");
1340
sub generate_cmdline_drizzledump ($) {
1343
dtr_native_path($exe_drizzledump) .
1344
" --no-defaults -uroot " .
1345
"--port=$drizzled->{'port'} ";
1348
sub generate_cmdline_drizzle ($) {
1351
dtr_native_path($exe_drizzle) .
1352
" -uroot --port=$drizzled->{'port'} ";
1355
sub generate_cmdline_drizzleadmin ($) {
1358
dtr_native_path($exe_drizzleadmin) .
1359
" -uroot --port=$drizzled->{'port'} ";
1254
sub generate_cmdline_mysqldump ($) {
1257
mtr_native_path($exe_drizzledump) .
1258
" --no-defaults -uroot --debug-check " .
1259
"--port=$mysqld->{'port'} ";
1362
1263
##############################################################################
1371
1272
my $exe= $exe_drizzle_client_test;
1374
dtr_init_args(\$args);
1275
mtr_init_args(\$args);
1375
1276
if ( $opt_valgrind_drizzletest )
1377
1278
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'}");
1281
mtr_add_arg($args, "--no-defaults");
1282
mtr_add_arg($args, "--testcase");
1283
mtr_add_arg($args, "--user=root");
1284
mtr_add_arg($args, "--port=$master->[0]->{'port'}");
1385
if ( $opt_extern || $drizzle_version_id >= 50000 )
1286
if ( $opt_extern || $mysql_version_id >= 50000 )
1387
dtr_add_arg($args, "--vardir=$opt_vardir")
1288
mtr_add_arg($args, "--vardir=$opt_vardir")
1390
1291
if ( $opt_debug )
1393
1294
"--debug=d:t:A,$path_vardir_trace/log/drizzle_client_test.trace");
1446
1347
$ENV{'LD_LIBRARY_PATH'} ?
1447
1348
split(':', $ENV{'LD_LIBRARY_PATH'}) : (),
1448
1349
@ld_library_paths);
1449
dtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1350
mtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1451
1352
$ENV{'DYLD_LIBRARY_PATH'}= join(":", @ld_library_paths,
1452
1353
$ENV{'DYLD_LIBRARY_PATH'} ?
1453
1354
split(':', $ENV{'DYLD_LIBRARY_PATH'}) : ());
1454
dtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1355
mtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1456
1357
# The environment variable used for shared libs on AIX
1457
1358
$ENV{'SHLIB_PATH'}= join(":", @ld_library_paths,
1458
1359
$ENV{'SHLIB_PATH'} ?
1459
1360
split(':', $ENV{'SHLIB_PATH'}) : ());
1460
dtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1361
mtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1462
1363
# The environment variable used for shared libs on hp-ux
1463
1364
$ENV{'LIBPATH'}= join(":", @ld_library_paths,
1464
1365
$ENV{'LIBPATH'} ?
1465
1366
split(':', $ENV{'LIBPATH'}) : ());
1466
dtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1367
mtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1468
1369
# --------------------------------------------------------------------------
1469
1370
# Also command lines in .opt files may contain env vars
1499
1398
$ENV{'SLAVE_MYPORT'}= $slave->[0]->{'port'};
1500
1399
$ENV{'SLAVE_MYPORT1'}= $slave->[1]->{'port'};
1501
1400
$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;
1401
$ENV{'DRIZZLE_TCP_PORT'}= $mysqld_variables{'port'};
1403
$ENV{'MTR_BUILD_THREAD'}= $opt_mtr_build_thread;
1405
$ENV{'EXE_MYSQL'}= $exe_drizzle;
1512
1408
# ----------------------------------------------------
1513
1409
# Setup env to childs can execute myqldump
1514
1410
# ----------------------------------------------------
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'} ";
1411
my $cmdline_mysqldump= generate_cmdline_mysqldump($master->[0]);
1412
my $cmdline_mysqldumpslave= generate_cmdline_mysqldump($slave->[0]);
1522
1414
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";
1416
$cmdline_mysqldump .=
1417
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-master.trace";
1418
$cmdline_mysqldumpslave .=
1419
" --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
1421
$ENV{'DRIZZLE_DUMP'}= $cmdline_mysqldump;
1422
$ENV{'DRIZZLE_DUMP_SLAVE'}= $cmdline_mysqldumpslave;
1424
# ----------------------------------------------------
1425
# Setup env so childs can execute mysqlslap
1544
1426
# ----------------------------------------------------
1545
1427
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) .
1429
my $cmdline_drizzleslap=
1430
mtr_native_path($exe_drizzleslap) .
1556
1432
"--port=$master->[0]->{'port'} ";
1557
my $cmdline_drizzleslap_secondary=
1558
dtr_native_path($exe_drizzleslap) .
1560
" --port=$master->[0]->{'secondary_port'} ";
1562
1434
if ( $opt_debug )
1564
1436
$cmdline_drizzleslap .=
1565
1437
" --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
1439
$ENV{'DRIZZLE_SLAP'}= $cmdline_drizzleslap;
1570
$ENV{'DRIZZLE_SLAP_SECONDARY'}= $cmdline_drizzleslap_secondary;
1575
1444
# ----------------------------------------------------
1576
# Setup env so childs can execute drizzleimport
1445
# Setup env so childs can execute mysqlimport
1577
1446
# ----------------------------------------------------
1578
my $cmdline_drizzleimport=
1579
dtr_native_path($exe_drizzleimport) .
1447
my $cmdline_mysqlimport=
1448
mtr_native_path($exe_drizzleimport) .
1449
" -uroot --debug-check " .
1581
1450
"--port=$master->[0]->{'port'} ";
1583
1452
if ( $opt_debug )
1585
$cmdline_drizzleimport .=
1586
" --debug=d:t:A,$path_vardir_trace/log/drizzleimport.trace";
1454
$cmdline_mysqlimport .=
1455
" --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= " .
1457
$ENV{'DRIZZLE_IMPORT'}= $cmdline_mysqlimport;
1460
# ----------------------------------------------------
1461
# Setup env so childs can execute mysql
1462
# ----------------------------------------------------
1464
mtr_native_path($exe_drizzle) .
1465
" --no-defaults --debug-check --host=localhost --user=root --password= " .
1597
1466
"--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;
1468
$ENV{'MYSQL'}= $cmdline_mysql;
1606
1470
# ----------------------------------------------------
1607
1471
# Setup env so childs can execute bug25714
1617
1481
# ----------------------------------------------------
1618
# Setup env so childs can execute drizzle_fix_system_tables
1482
# Setup env so childs can execute mysql_fix_system_tables
1619
1483
# ----------------------------------------------------
1620
1484
#if ( !$opt_extern)
1623
my $cmdline_drizzle_fix_system_tables=
1487
my $cmdline_mysql_fix_system_tables=
1624
1488
"$exe_drizzle_fix_system_tables --no-defaults --host=localhost " .
1625
1489
"--user=root --password= " .
1626
1490
"--basedir=$glob_basedir --bindir=$path_client_bindir --verbose " .
1627
1491
"--port=$master->[0]->{'port'} ";
1628
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_drizzle_fix_system_tables;
1492
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_mysql_fix_system_tables;
1632
1496
# ----------------------------------------------------
1497
# Setup env so childs can execute my_print_defaults
1498
# ----------------------------------------------------
1499
$ENV{'DRIZZLE_MY_PRINT_DEFAULTS'}= mtr_native_path($exe_my_print_defaults);
1501
# ----------------------------------------------------
1633
1502
# Setup env so childs can shutdown the server
1634
1503
# ----------------------------------------------------
1635
$ENV{'DRIZZLED_SHUTDOWN'}= dtr_native_path($exe_drizzle);
1504
$ENV{'DRIZZLED_SHUTDOWN'}= mtr_native_path($exe_drizzle);
1637
1506
# ----------------------------------------------------
1638
1507
# Setup env so childs can execute perror
1639
1508
# ----------------------------------------------------
1640
$ENV{'MY_PERROR'}= dtr_native_path($exe_perror);
1509
$ENV{'MY_PERROR'}= mtr_native_path($exe_perror);
1642
1511
# ----------------------------------------------------
1643
# Add the path where drizzled will find ha_example.so
1512
# Add the path where mysqld will find ha_example.so
1644
1513
# ----------------------------------------------------
1645
1514
$ENV{'EXAMPLE_PLUGIN'}=
1646
1515
($lib_example_plugin ? basename($lib_example_plugin) : "");
1648
1517
($lib_example_plugin ? "--plugin_dir=" . dirname($lib_example_plugin) : "");
1650
1519
# ----------------------------------------------------
1520
# Setup env so childs can execute myisampack and myisamchk
1521
# ----------------------------------------------------
1522
# $ENV{'MYISAMCHK'}= mtr_native_path(mtr_exe_exists(
1523
# "$path_client_bindir/myisamchk",
1524
# "$glob_basedir/storage/myisam/myisamchk",
1525
# "$glob_basedir/myisam/myisamchk"));
1526
# $ENV{'MYISAMPACK'}= mtr_native_path(mtr_exe_exists(
1527
# "$path_client_bindir/myisampack",
1528
# "$glob_basedir/storage/myisam/myisampack",
1529
# "$glob_basedir/myisam/myisampack"));
1531
# ----------------------------------------------------
1651
1532
# We are nice and report a bit about our settings
1652
1533
# ----------------------------------------------------
1653
1534
if (!$opt_extern)
1655
print "Using DTR_BUILD_THREAD = $ENV{DTR_BUILD_THREAD}\n";
1536
print "Using MTR_BUILD_THREAD = $ENV{MTR_BUILD_THREAD}\n";
1656
1537
print "Using MASTER_MYPORT = $ENV{MASTER_MYPORT}\n";
1657
1538
print "Using MASTER_MYPORT1 = $ENV{MASTER_MYPORT1}\n";
1658
1539
print "Using SLAVE_MYPORT = $ENV{SLAVE_MYPORT}\n";
1659
1540
print "Using SLAVE_MYPORT1 = $ENV{SLAVE_MYPORT1}\n";
1660
1541
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
1544
# Create an environment variable to make it possible
1731
1609
if ( $opt_mem and readlink($opt_vardir) eq $opt_mem )
1733
1611
# Remove the directory which the link points at
1734
dtr_verbose("Removing " . readlink($opt_vardir));
1735
dtr_rmtree(readlink($opt_vardir));
1612
mtr_verbose("Removing " . readlink($opt_vardir));
1613
mtr_rmtree(readlink($opt_vardir));
1737
1615
# Remove the "var" symlink
1738
dtr_verbose("unlink($opt_vardir)");
1616
mtr_verbose("unlink($opt_vardir)");
1739
1617
unlink($opt_vardir);
1741
1619
elsif ( $opt_mem )
1743
1621
# Just remove the "var" symlink
1744
dtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1622
mtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1746
dtr_verbose("unlink($opt_vardir)");
1624
mtr_verbose("unlink($opt_vardir)");
1747
1625
unlink($opt_vardir);
1751
# Some users creates a soft link in drizzle-test/var to another area
1629
# Some users creates a soft link in mysql-test/var to another area
1752
1630
# - allow it, but remove all files in it
1754
dtr_report("WARNING: Using the 'drizzle-test/var' symlink");
1632
mtr_report("WARNING: Using the 'mysql-test/var' symlink");
1756
1634
# Make sure the directory where it points exist
1757
dtr_error("The destination for symlink $opt_vardir does not exist")
1635
mtr_error("The destination for symlink $opt_vardir does not exist")
1758
1636
if ! -d readlink($opt_vardir);
1760
1638
foreach my $bin ( glob("$opt_vardir/*") )
1762
dtr_verbose("Removing bin $bin");
1640
mtr_verbose("Removing bin $bin");
1769
1647
# Remove the entire "var" dir
1770
dtr_verbose("Removing $opt_vardir/");
1771
dtr_rmtree("$opt_vardir/");
1648
mtr_verbose("Removing $opt_vardir/");
1649
mtr_rmtree("$opt_vardir/");
1774
1652
if ( $opt_mem )
1802
1680
# Create var and the directories needed in var
1804
1682
sub setup_vardir() {
1805
dtr_report("Creating Directories");
1683
mtr_report("Creating Directories");
1807
1685
if ( $opt_vardir eq $default_vardir )
1810
# Running with "var" in drizzle-test dir
1688
# Running with "var" in mysql-test dir
1812
1690
if ( -l $opt_vardir )
1814
1692
# it's a symlink
1816
1694
# Make sure the directory where it points exist
1817
dtr_error("The destination for symlink $opt_vardir does not exist")
1695
mtr_error("The destination for symlink $opt_vardir does not exist")
1818
1696
if ! -d readlink($opt_vardir);
1820
1698
elsif ( $opt_mem )
1822
1700
# Runinng with "var" as a link to some "memory" location, normally tmpfs
1823
dtr_verbose("Creating $opt_mem");
1701
mtr_verbose("Creating $opt_mem");
1824
1702
mkpath($opt_mem);
1826
dtr_report("Symlinking 'var' to '$opt_mem'");
1704
mtr_report("Symlinking 'var' to '$opt_mem'");
1827
1705
symlink($opt_mem, $opt_vardir);
1831
1709
if ( ! -d $opt_vardir )
1833
dtr_verbose("Creating $opt_vardir");
1711
mtr_verbose("Creating $opt_vardir");
1834
1712
mkpath($opt_vardir);
1837
1715
# Ensure a proper error message if vardir couldn't be created
1838
1716
unless ( -d $opt_vardir and -w $opt_vardir )
1840
dtr_error("Writable 'var' directory is needed, use the " .
1718
mtr_error("Writable 'var' directory is needed, use the " .
1841
1719
"'--vardir=<path>' option");
1943
drizzled_start($master->[0],[],[]);
1813
mysqld_start($master->[0],[],[]);
1944
1814
if ( ! $master->[0]->{'pid'} )
1946
dtr_error("Can't start the drizzled server");
1816
mtr_error("Can't start the mysqld server");
1950
dtr_init_args(\$args);
1820
mtr_init_args(\$args);
1952
dtr_add_arg($args, "--user=%s", $opt_user);
1822
mtr_add_arg($args, "--user=%s", $opt_user);
1954
1824
if ( $opt_small_bench )
1956
dtr_add_arg($args, "--small-test");
1957
dtr_add_arg($args, "--small-tables");
1826
mtr_add_arg($args, "--small-test");
1827
mtr_add_arg($args, "--small-tables");
1960
chdir($glob_drizzle_bench_dir)
1961
or dtr_error("Couldn't chdir to '$glob_drizzle_bench_dir': $!");
1830
chdir($glob_mysql_bench_dir)
1831
or mtr_error("Couldn't chdir to '$glob_mysql_bench_dir': $!");
1963
1833
if ( ! $benchmark )
1965
dtr_run("$glob_drizzle_bench_dir/run-all-tests", $args, "", "", "", "");
1835
mtr_run("$glob_mysql_bench_dir/run-all-tests", $args, "", "", "", "");
1966
1836
# FIXME check result code?!
1968
1838
elsif ( -x $benchmark )
1970
dtr_run("$glob_drizzle_bench_dir/$benchmark", $args, "", "", "", "");
1840
mtr_run("$glob_mysql_bench_dir/$benchmark", $args, "", "", "", "");
1971
1841
# FIXME check result code?!
1975
dtr_error("Benchmark $benchmark not found");
1845
mtr_error("Benchmark $benchmark not found");
1978
chdir($glob_drizzle_test_dir); # Go back
1848
chdir($glob_mysql_test_dir); # Go back
1981
1851
stop_masters();
2541
2411
my $prefix= ""; # If drizzletest server arg
2543
dtr_add_arg($args, "%s--no-defaults", $prefix);
2413
mtr_add_arg($args, "%s--no-defaults", $prefix);
2415
$path_my_basedir= collapse_path($path_my_basedir);
2416
mtr_add_arg($args, "%s--basedir=%s", $prefix, $path_my_basedir);
2545
2418
if ($opt_engine)
2547
dtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2420
mtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2550
if ( $drizzle_version_id >= 50036)
2423
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);
2425
# By default, prevent the started mysqld to access files outside of vardir
2426
mtr_add_arg($args, "%s--secure-file-priv=%s", $prefix, $opt_vardir);
2556
dtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2429
mtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2558
2431
# Increase default connect_timeout to avoid intermittent
2559
2432
# disconnects when test servers are put under load
2560
2433
# 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
2434
mtr_add_arg($args, "%s--oldlibdrizzle-connect-timeout=60", $prefix);
2437
# When mysqld is run by a root user(euid is 0), it will fail
2565
2438
# 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);
2440
if (grep(/^--user/, @$extra_opt, @opt_extra_mysqld_opt) == 0) {
2441
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'});
2444
mtr_add_arg($args, "%s--pid-file=%s", $prefix,
2445
$mysqld->{'path_pid'});
2447
mtr_add_arg($args, "%s--port=%d", $prefix,
2450
mtr_add_arg($args, "%s--datadir=%s", $prefix,
2451
$mysqld->{'path_myddir'});
2586
2453
# Check if "extra_opt" contains --skip-log-bin
2587
if ( $drizzled->{'type'} eq 'master' )
2454
if ( $mysqld->{'type'} eq 'master' )
2589
dtr_add_arg($args, "%s--server-id=%d", $prefix,
2456
mtr_add_arg($args, "%s--server-id=%d", $prefix,
2590
2457
$idx > 0 ? $idx + 101 : 1);
2593
"%s--innodb.data-file-path=ibdata1:20M:autoextend", $prefix);
2459
mtr_add_arg($args, "%s--loose-innodb_data_file_path=ibdata1:10M:autoextend",
2462
mtr_add_arg($args, "%s--loose-innodb-lock-wait-timeout=5", $prefix);
2464
if ( $idx > 0 or !$use_innodb)
2466
mtr_add_arg($args, "%s--loose-skip-innodb", $prefix);
2598
dtr_error("unknown drizzled type")
2599
unless $drizzled->{'type'} eq 'slave';
2471
mtr_error("unknown mysqld type")
2472
unless $mysqld->{'type'} eq 'slave';
2601
2474
# Directory where slaves find the dumps generated by "load data"
2602
2475
# on the server. The path need to have constant length otherwise
2608
2481
foreach my $arg ( @$slave_master_info )
2610
dtr_add_arg($args, "%s%s", $prefix, $arg);
2483
mtr_add_arg($args, "%s%s", $prefix, $arg);
2615
2488
my $slave_server_id= 2 + $idx;
2616
2489
my $slave_rpl_rank= $slave_server_id;
2617
dtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2490
mtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2621
2494
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);
2496
mtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/%s%s.trace",
2497
$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);
2500
mtr_add_arg($args, "%s--key_buffer_size=1M", $prefix);
2501
mtr_add_arg($args, "%s--sort_buffer=256K", $prefix);
2502
mtr_add_arg($args, "%s--max_heap_table_size=1M", $prefix);
2630
2504
if ( $opt_warnings )
2632
dtr_add_arg($args, "%s--log-warnings", $prefix);
2506
mtr_add_arg($args, "%s--log-warnings", $prefix);
2635
# Indicate to "drizzled" it will be debugged in debugger
2509
# Indicate to "mysqld" it will be debugged in debugger
2636
2510
if ( $glob_debugger )
2638
dtr_add_arg($args, "%s--gdb", $prefix);
2512
mtr_add_arg($args, "%s--gdb", $prefix);
2641
2515
my $found_skip_core= 0;
2642
foreach my $arg ( @opt_extra_drizzled_opt, @$extra_opt )
2516
foreach my $arg ( @opt_extra_mysqld_opt, @$extra_opt )
2644
2518
# Allow --skip-core-file to be set in <testname>-[master|slave].opt file
2645
2519
if ($arg eq "--skip-core-file")
2677
2551
my $wait_for_pid_file= 1;
2679
my $type= $drizzled->{'type'};
2680
my $idx= $drizzled->{'idx'};
2553
my $type= $mysqld->{'type'};
2554
my $idx= $mysqld->{'idx'};
2682
2556
if ( $type eq 'master' )
2684
$exe= $exe_master_drizzled;
2558
$exe= $exe_master_mysqld;
2686
2560
elsif ( $type eq 'slave' )
2688
$exe= $exe_slave_drizzled;
2562
$exe= $exe_slave_mysqld;
2692
dtr_error("Unknown 'type' \"$type\" passed to drizzled_start");
2566
mtr_error("Unknown 'type' \"$type\" passed to mysqld_start");
2695
dtr_init_args(\$args);
2569
mtr_init_args(\$args);
2697
if ( $opt_valgrind_drizzled )
2571
if ( $opt_valgrind_mysqld )
2699
2573
valgrind_arguments($args, \$exe);
2702
drizzled_arguments($args,$drizzled,$extra_opt,$slave_master_info);
2576
mysqld_arguments($args,$mysqld,$extra_opt,$slave_master_info);
2704
2578
if ( $opt_gdb || $opt_manual_gdb)
2737
2611
# Remove the pidfile
2738
unlink($drizzled->{'path_pid'});
2612
unlink($mysqld->{'path_pid'});
2740
2614
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'},
2616
$pid= mtr_spawn($exe, $args, "",
2617
$mysqld->{'path_myerr'},
2618
$mysqld->{'path_myerr'},
2747
2620
{ append_log_file => 1 });
2751
if ( $wait_for_pid_file && !sleep_until_file_created($drizzled->{'path_pid'},
2752
$drizzled->{'start_timeout'},
2624
if ( $wait_for_pid_file && !sleep_until_file_created($mysqld->{'path_pid'},
2625
$mysqld->{'start_timeout'},
2756
dtr_error("Failed to start drizzled $drizzled->{'type'}");
2629
mtr_error("Failed to start mysqld $mysqld->{'type'}");
2760
2633
# Remember pid of the started process
2761
$drizzled->{'pid'}= $pid;
2634
$mysqld->{'pid'}= $pid;
2763
2636
# Remember options used when starting
2764
$drizzled->{'start_opts'}= $extra_opt;
2765
$drizzled->{'start_slave_master_info'}= $slave_master_info;
2637
$mysqld->{'start_opts'}= $extra_opt;
2638
$mysqld->{'start_slave_master_info'}= $slave_master_info;
2767
dtr_verbose("drizzled pid: $pid");
2640
mtr_verbose("mysqld pid: $pid");
2772
2645
sub stop_all_servers () {
2774
dtr_report("Stopping All Servers");
2647
mtr_report("Stopping All Servers");
2776
2649
my %admin_pids; # hash of admin processes that requests shutdown
2777
2650
my @kill_pids; # list of processes to shutdown/kill
2780
2653
# Start shutdown of all started masters
2781
foreach my $drizzled (@{$slave}, @{$master})
2654
foreach my $mysqld (@{$slave}, @{$master})
2783
if ( $drizzled->{'pid'} )
2656
if ( $mysqld->{'pid'} )
2785
$pid= dtr_server_shutdown($drizzled);
2658
$pid= mtr_server_shutdown($mysqld);
2786
2659
$admin_pids{$pid}= 1;
2788
2661
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'},
2662
pid => $mysqld->{'pid'},
2663
real_pid => $mysqld->{'real_pid'},
2664
pidfile => $mysqld->{'path_pid'},
2665
sockfile => $mysqld->{'path_sock'},
2666
port => $mysqld->{'port'},
2667
errfile => $mysqld->{'path_myerr'},
2797
$drizzled->{'pid'}= 0; # Assume we are done with it
2670
$mysqld->{'pid'}= 0; # Assume we are done with it
2801
2674
# Wait blocking until all shutdown processes has completed
2802
dtr_wait_blocking(\%admin_pids);
2675
mtr_wait_blocking(\%admin_pids);
2804
2677
# Make sure that process has shutdown else try to kill them
2805
dtr_check_stop_servers(\@kill_pids);
2678
mtr_check_stop_servers(\@kill_pids);
2816
2689
if ( $tinfo->{'master_sh'} )
2818
2691
$do_restart= 1; # Always restart if script to run
2819
dtr_verbose("Restart master: Always restart if script to run");
2692
mtr_verbose("Restart master: Always restart if script to run");
2821
2694
if ( $tinfo->{'force_restart'} )
2823
2696
$do_restart= 1; # Always restart if --force-restart in -opt file
2824
dtr_verbose("Restart master: Restart forced with --force-restart");
2697
mtr_verbose("Restart master: Restart forced with --force-restart");
2826
2699
elsif( $tinfo->{'component_id'} eq 'im' )
2828
2701
$do_restart= 1;
2829
dtr_verbose("Restart master: Always restart for im tests");
2702
mtr_verbose("Restart master: Always restart for im tests");
2831
2704
elsif ( $master->[0]->{'running_master_options'} and
2832
2705
$master->[0]->{'running_master_options'}->{'timezone'} ne
2833
2706
$tinfo->{'timezone'})
2835
2708
$do_restart= 1;
2836
dtr_verbose("Restart master: Different timezone");
2709
mtr_verbose("Restart master: Different timezone");
2838
2711
# Check that running master was started with same options
2839
2712
# as the current test requires
2840
elsif (! dtr_same_opts($master->[0]->{'start_opts'},
2713
elsif (! mtr_same_opts($master->[0]->{'start_opts'},
2841
2714
$tinfo->{'master_opt'}) )
2843
2716
# Chech that diff is binlog format only
2844
my $diff_opts= dtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2717
my $diff_opts= mtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2845
2718
if (scalar(@$diff_opts) eq 2)
2847
2720
$do_restart= 1;
2936
2809
delete $master->[0]->{'running_master_options'}; # Forget history
2938
2811
# Start shutdown of all started masters
2939
foreach my $drizzled (@{$master})
2812
foreach my $mysqld (@{$master})
2941
if ( $drizzled->{'pid'} )
2814
if ( $mysqld->{'pid'} )
2943
$pid= dtr_server_shutdown($drizzled);
2816
$pid= mtr_server_shutdown($mysqld);
2945
2818
$admin_pids{$pid}= 1;
2947
2820
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'},
2821
pid => $mysqld->{'pid'},
2822
real_pid => $mysqld->{'real_pid'},
2823
pidfile => $mysqld->{'path_pid'},
2824
sockfile => $mysqld->{'path_sock'},
2825
port => $mysqld->{'port'},
2826
errfile => $mysqld->{'path_myerr'},
2956
$drizzled->{'pid'}= 0; # Assume we are done with it
2829
$mysqld->{'pid'}= 0; # Assume we are done with it
2964
2837
delete $slave->[0]->{'running_slave_options'}; # Forget history
2966
2839
# Start shutdown of all started slaves
2967
foreach my $drizzled (@{$slave})
2840
foreach my $mysqld (@{$slave})
2969
if ( $drizzled->{'pid'} )
2842
if ( $mysqld->{'pid'} )
2971
$pid= dtr_server_shutdown($drizzled);
2844
$pid= mtr_server_shutdown($mysqld);
2973
2846
$admin_pids{$pid}= 1;
2975
2848
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'},
2849
pid => $mysqld->{'pid'},
2850
real_pid => $mysqld->{'real_pid'},
2851
pidfile => $mysqld->{'path_pid'},
2852
sockfile => $mysqld->{'path_sock'},
2853
port => $mysqld->{'port'},
2854
errfile => $mysqld->{'path_myerr'},
2984
$drizzled->{'pid'}= 0; # Assume we are done with it
2857
$mysqld->{'pid'}= 0; # Assume we are done with it
3081
2954
sub run_check_testcase ($$) {
3083
2956
my $mode= shift;
3084
my $drizzled= shift;
3086
my $name= "check-" . $drizzled->{'type'} . $drizzled->{'idx'};
2959
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");
2962
mtr_init_args(\$args);
2964
mtr_add_arg($args, "--no-defaults");
2965
mtr_add_arg($args, "--silent");
2966
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
2968
mtr_add_arg($args, "--port=%d", $mysqld->{'port'});
2969
mtr_add_arg($args, "--database=test");
2970
mtr_add_arg($args, "--user=%s", $opt_user);
2971
mtr_add_arg($args, "--password=");
2973
mtr_add_arg($args, "-R");
2974
mtr_add_arg($args, "$opt_vardir/tmp/$name.result");
3103
2976
if ( $mode eq "before" )
3105
dtr_add_arg($args, "--record");
2978
mtr_add_arg($args, "--record");
3108
2981
if ( $opt_testdir )
3110
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
2983
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3113
my $res = dtr_run_test($exe_drizzletest,$args,
2986
my $res = mtr_run_test($exe_drizzletest,$args,
3114
2987
"include/check-testcase.test", "", "", "");
3116
2989
if ( $res == 1 and $mode eq "after")
3118
dtr_run("diff",["-u",
2991
mtr_run("diff",["-u",
3119
2992
"$opt_vardir/tmp/$name.result",
3120
2993
"$opt_vardir/tmp/$name.reject"],
3121
2994
"", "", "", "");
3125
dtr_error("Could not execute 'check-testcase' $mode testcase");
2998
mtr_error("Could not execute 'check-testcase' $mode testcase");
3169
3042
my $exe= $exe_drizzletest;
3172
dtr_init_args(\$args);
3045
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);
3047
mtr_add_arg($args, "--no-defaults");
3048
mtr_add_arg($args, "--silent");
3049
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3050
mtr_add_arg($args, "--logdir=%s/log", $opt_vardir);
3179
3052
# Log line number and time for each line in .test file
3180
dtr_add_arg($args, "--mark-progress")
3053
mtr_add_arg($args, "--mark-progress")
3181
3054
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=");
3057
mtr_add_arg($args, "--port=%d", $master->[0]->{'port'});
3058
mtr_add_arg($args, "--database=test");
3059
mtr_add_arg($args, "--user=%s", $opt_user);
3060
mtr_add_arg($args, "--password=");
3190
3063
if ( $opt_strace_client )
3192
3065
$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");
3066
mtr_add_arg($args, "-o");
3067
mtr_add_arg($args, "%s/log/drizzletest.strace", $opt_vardir);
3068
mtr_add_arg($args, "$exe_drizzletest");
3198
3071
if ( $opt_timer )
3200
dtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3073
mtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3203
3076
if ( $opt_compress )
3205
dtr_add_arg($args, "--compress");
3078
mtr_add_arg($args, "--compress");
3208
3081
if ( $opt_sleep )
3210
dtr_add_arg($args, "--sleep=%d", $opt_sleep);
3083
mtr_add_arg($args, "--sleep=%d", $opt_sleep);
3213
3086
if ( $opt_debug )
3215
dtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3088
mtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3216
3089
$path_vardir_trace);
3219
3092
if ( $opt_testdir )
3221
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
3094
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3238
3111
# We do this here, since we do not want to Valgrind the nested invocations
3239
3112
# of drizzletest; that would mess up the stderr output causing test failure.
3240
3113
my @args_saved = @$args;
3241
dtr_init_args(\$args);
3114
mtr_init_args(\$args);
3242
3115
valgrind_arguments($args, \$exe);
3243
dtr_add_arg($args, "%s", $_) for @args_saved;
3116
mtr_add_arg($args, "%s", $_) for @args_saved;
3246
dtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3119
mtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3248
3121
# Number of lines of resut to include in failure report
3249
dtr_add_arg($args, "--tail-lines=20");
3122
mtr_add_arg($args, "--tail-lines=20");
3251
3124
if ( defined $tinfo->{'result_file'} ) {
3252
dtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3125
mtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3255
3128
if ( $opt_record )
3257
dtr_add_arg($args, "--record");
3130
mtr_add_arg($args, "--record");
3260
3133
if ( $opt_client_gdb )
3273
3146
if ( $opt_check_testcases )
3275
foreach my $drizzled (@{$master}, @{$slave})
3148
foreach my $mysqld (@{$master}, @{$slave})
3277
if ($drizzled->{'pid'})
3150
if ($mysqld->{'pid'})
3279
run_check_testcase("before", $drizzled);
3152
run_check_testcase("before", $mysqld);
3284
my $res = dtr_run_test($exe,$args,"","",$path_timefile,"");
3157
my $res = mtr_run_test($exe,$args,"","",$path_timefile,"");
3286
3159
if ( $opt_check_testcases )
3288
foreach my $drizzled (@{$master}, @{$slave})
3161
foreach my $mysqld (@{$master}, @{$slave})
3290
if ($drizzled->{'pid'})
3163
if ($mysqld->{'pid'})
3292
if (run_check_testcase("after", $drizzled))
3165
if (run_check_testcase("after", $mysqld))
3294
3167
# Check failed, mark the test case with that info
3295
3168
$tinfo->{'check_testcase_failed'}= 1;
3347
dtr_add_arg($$args, "-title");
3348
dtr_add_arg($$args, "$type");
3349
dtr_add_arg($$args, "-e");
3220
mtr_add_arg($$args, "-title");
3221
mtr_add_arg($$args, "$type");
3222
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");
3224
mtr_add_arg($$args, "dbx");
3225
mtr_add_arg($$args, "-c");
3226
mtr_add_arg($$args, "source $dbx_init_file");
3227
mtr_add_arg($$args, "$$exe");
3356
3229
$$exe= "xterm";
3420
dtr_add_arg($$args, "-title");
3421
dtr_add_arg($$args, "$type");
3422
dtr_add_arg($$args, "-e");
3277
mtr_add_arg($$args, "-title");
3278
mtr_add_arg($$args, "$type");
3279
mtr_add_arg($$args, "-e");
3424
3281
if ( $exe_libtool )
3426
dtr_add_arg($$args, $exe_libtool);
3427
dtr_add_arg($$args, "--mode=execute");
3283
mtr_add_arg($$args, $exe_libtool);
3284
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");
3287
mtr_add_arg($$args, "gdb");
3288
mtr_add_arg($$args, "-x");
3289
mtr_add_arg($$args, "$gdb_init_file");
3290
mtr_add_arg($$args, "$$exe");
3435
3292
$$exe= "xterm";
3546
3403
if ( $opt_callgrind)
3548
dtr_add_arg($args, "--tool=callgrind");
3552
dtr_add_arg($args, "--tool=massif");
3405
mtr_add_arg($args, "--tool=callgrind");
3406
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";
3410
mtr_add_arg($args, "--tool=memcheck"); # From >= 2.1.2 needs this option
3411
mtr_add_arg($args, "--leak-check=yes");
3412
mtr_add_arg($args, "--num-callers=16");
3413
mtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_mysql_test_dir)
3414
if -f "$glob_mysql_test_dir/valgrind.supp";
3563
3417
# Add valgrind options, can be overriden by user
3564
dtr_add_arg($args, '%s', $_) for (@valgrind_args);
3418
mtr_add_arg($args, '%s', $_) for (@valgrind_args);
3566
dtr_add_arg($args, $$exe);
3420
mtr_add_arg($args, $$exe);
3568
3422
$$exe= $opt_valgrind_path || "valgrind";
3708
3562
client-ddd Start drizzletest client in ddd
3709
3563
client-debugger=NAME Start drizzletest in the selected debugger
3710
3564
client-gdb Start drizzletest client in gdb
3711
ddd Start drizzled in ddd
3565
ddd Start mysqld in ddd
3712
3566
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
3567
debugger=NAME Start mysqld in the selected debugger
3568
gdb Start the mysqld(s) in gdb
3569
manual-debug Let user manually start mysqld in debugger, before
3716
3570
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
3571
manual-gdb Let user manually start mysqld in gdb, before running
3573
manual-ddd Let user manually start mysqld in ddd, before running
3575
master-binary=PATH Specify the master "mysqld" to use
3576
slave-binary=PATH Specify the slave "mysqld" to use
3723
3577
strace-client Create strace output for drizzletest client
3724
3578
max-save-core Limit the number of core files saved (to avoid filling
3725
3579
up disks for heavily crashing server). Defaults to
3731
3585
gprof See online documentation on how to use it.
3732
valgrind Run the "drizzletest" and "drizzled" executables using
3586
valgrind Run the "drizzletest" and "mysqld" executables using
3733
3587
valgrind with default options
3734
3588
valgrind-all Synonym for --valgrind
3735
valgrind-drizzleslap Run "drizzleslap" with valgrind.
3736
valgrind-drizzletest Run the "drizzletest" and "drizzle_client_test" executable
3589
valgrind-drizzletest Run the "drizzletest" and "drizzle_client_test" executable
3738
valgrind-drizzled Run the "drizzled" executable with valgrind
3591
valgrind-mysqld Run the "mysqld" executable with valgrind
3739
3592
valgrind-options=ARGS Deprecated, use --valgrind-option
3740
3593
valgrind-option=ARGS Option to give valgrind, replaces default option(s),
3741
3594
can be specified more then once
3742
3595
valgrind-path=[EXE] Path to the valgrind executable
3743
3596
callgrind Instruct valgrind to use callgrind
3744
massif Instruct valgrind to use massif