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
483
'master_port=i' => \$opt_master_myport,
509
484
'slave_port=i' => \$opt_slave_myport,
510
485
'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,
486
'mtr-build-thread=i' => \$opt_mtr_build_thread,
515
488
# Test case authoring
516
489
'record' => \$opt_record,
517
490
'check-testcases' => \$opt_check_testcases,
518
491
'mark-progress' => \$opt_mark_progress,
520
# Extra options used when starting drizzled
521
'drizzled=s' => \@opt_extra_drizzled_opt,
493
# Extra options used when starting mysqld
494
'mysqld=s' => \@opt_extra_mysqld_opt,
522
495
'engine=s' => \$opt_engine,
524
497
# Run test on running server
638
609
# Find the absolute path to the test directory
639
610
if ( ! $opt_testdir )
641
$glob_drizzle_test_dir= cwd();
612
$glob_mysql_test_dir= cwd();
645
$glob_drizzle_test_dir= $opt_testdir;
616
$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/..";
618
$default_vardir= "$glob_mysql_test_dir/var";
651
620
if ( ! $opt_suitepath )
653
$glob_suite_path= "$glob_drizzle_test_dir/../plugin";
622
$glob_suite_path= "$glob_mysql_test_dir/../plugin";
657
626
$glob_suite_path= $opt_suitepath;
659
628
# In most cases, the base directory we find everything relative to,
660
# is the parent directory of the "drizzle-test" directory. For source
629
# is the parent directory of the "mysql-test" directory. For source
661
630
# 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;
631
$glob_basedir= dirname($glob_mysql_test_dir);
693
633
# In the RPM case, binaries and libraries are installed in the
694
634
# 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
635
# directory. And we install "/usr/share/mysql-test". Moving up one
636
# more directory relative to "mysql-test" gives us a usable base
697
637
# directory for RPM installs.
698
638
if ( ! $source_dist and ! -d "$glob_basedir/bin" )
711
651
$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();
654
# Expect mysql-bench to be located adjacent to the source tree, by default
655
$glob_mysql_bench_dir= "$glob_basedir/../mysql-bench"
656
unless defined $glob_mysql_bench_dir;
657
$glob_mysql_bench_dir= undef
658
unless -d $glob_mysql_bench_dir;
661
$source_dist ? $glob_mysql_test_dir : $glob_basedir;
663
$glob_timers= mtr_init_timers();
723
# Find the drizzled executable to be able to find the drizzled version
666
# Find the mysqld executable to be able to find the mysqld version
724
667
# number as early as possible
727
670
# Look for the client binaries directory
728
$path_client_bindir= dtr_path_exists("$glob_builddir/client",
671
$path_client_bindir= mtr_path_exists("$glob_builddir/client",
729
672
"$glob_basedir/client",
730
673
"$glob_basedir/bin");
732
675
if (!$opt_extern)
734
$exe_drizzled= dtr_exe_exists ("$glob_basedir/drizzled/drizzled",
677
$exe_drizzled= mtr_exe_exists ("$glob_basedir/drizzled/drizzled",
735
678
"$path_client_bindir/drizzled",
736
679
"$glob_basedir/libexec/drizzled",
737
680
"$glob_basedir/bin/drizzled",
738
681
"$glob_basedir/sbin/drizzled",
739
682
"$glob_builddir/drizzled/drizzled");
741
# Use the drizzled found above to find out what features are available
742
collect_drizzled_features();
684
# Use the mysqld found above to find out what features are available
685
collect_mysqld_features();
746
$drizzled_variables{'port'}= 4427;
689
$mysqld_variables{'port'}= 4427;
749
692
if (!$opt_engine)
899
824
$glob_debugger= 1;
900
825
if ( $opt_extern )
902
dtr_error("Can't use --extern when using debugger");
827
mtr_error("Can't use --extern when using debugger");
906
831
# --------------------------------------------------------------------------
907
832
# Check if special exe was selected for master or slave
908
833
# --------------------------------------------------------------------------
909
$exe_master_drizzled= $exe_master_drizzled || $exe_drizzled;
910
$exe_slave_drizzled= $exe_slave_drizzled || $exe_drizzled;
834
$exe_master_mysqld= $exe_master_mysqld || $exe_drizzled;
835
$exe_slave_mysqld= $exe_slave_mysqld || $exe_drizzled;
912
837
# --------------------------------------------------------------------------
913
838
# Check valgrind arguments
914
839
# --------------------------------------------------------------------------
915
840
if ( $opt_valgrind or $opt_valgrind_path or @valgrind_args)
917
dtr_report("Turning on valgrind for all executables");
842
mtr_report("Turning on valgrind for all executables");
918
843
$opt_valgrind= 1;
919
$opt_valgrind_drizzled= 1;
844
$opt_valgrind_mysqld= 1;
920
845
$opt_valgrind_drizzletest= 1;
921
$ENV{'VALGRIND_RUN'} = '1';
923
elsif ( $opt_valgrind_drizzled )
847
elsif ( $opt_valgrind_mysqld )
925
dtr_report("Turning on valgrind for drizzled(s) only");
849
mtr_report("Turning on valgrind for mysqld(s) only");
926
850
$opt_valgrind= 1;
928
852
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");
854
mtr_report("Turning on valgrind for drizzletest and drizzle_client_test only");
936
855
$opt_valgrind= 1;
939
858
if ( $opt_callgrind )
941
dtr_report("Turning on valgrind with callgrind for drizzled(s)");
860
mtr_report("Turning on valgrind with callgrind for mysqld(s)");
942
861
$opt_valgrind= 1;
943
$opt_valgrind_drizzled= 1;
862
$opt_valgrind_mysqld= 1;
945
864
# Set special valgrind options unless options passed on command line
946
865
push(@valgrind_args, "--trace-children=yes")
947
866
unless @valgrind_args;
952
dtr_report("Valgrind with Massif tool for drizzled(s)");
954
$opt_valgrind_drizzled= 1;
957
869
if ( $opt_valgrind )
959
871
# Set valgrind_options to default unless already defined
960
872
push(@valgrind_args, @default_valgrind_args)
961
873
unless @valgrind_args;
963
dtr_report("Running valgrind with options \"",
875
mtr_report("Running valgrind with options \"",
964
876
join(" ", @valgrind_args), "\"");
903
# On QNX, /tmp/dir/master.sock and /tmp/dir//master.sock seem to be
904
# considered different, so avoid the extra slash (/) in the socket
906
my $sockdir = $opt_tmpdir;
909
# On some operating systems, there is a limit to the length of a
910
# UNIX domain socket's path far below PATH_MAX, so try to avoid long
912
$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
919
path_myddir => "$opt_vardir/master-data",
920
path_myerr => "$opt_vardir/log/master.err",
921
path_pid => "$opt_vardir/run/master.pid",
922
path_sock => "$sockdir/master.sock",
923
port => $opt_master_myport,
924
start_timeout => 400, # enough time create innodb tables
925
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
934
path_myddir => "$opt_vardir/master1-data",
935
path_myerr => "$opt_vardir/log/master1.err",
936
path_pid => "$opt_vardir/run/master1.pid",
937
path_sock => "$sockdir/master1.sock",
938
port => $opt_master_myport + 1,
939
start_timeout => 400, # enough time create innodb tables
940
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
949
path_myddir => "$opt_vardir/slave-data",
950
path_myerr => "$opt_vardir/log/slave.err",
951
path_pid => "$opt_vardir/run/slave.pid",
952
path_sock => "$sockdir/slave.sock",
953
port => $opt_slave_myport,
954
start_timeout => 400,
956
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
965
path_myddir => "$opt_vardir/slave1-data",
966
path_myerr => "$opt_vardir/log/slave1.err",
967
path_pid => "$opt_vardir/run/slave1.pid",
968
path_sock => "$sockdir/slave1.sock",
969
port => $opt_slave_myport + 1,
970
start_timeout => 300,
971
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
980
path_myddir => "$opt_vardir/slave2-data",
981
path_myerr => "$opt_vardir/log/slave2.err",
982
path_pid => "$opt_vardir/run/slave2.pid",
983
path_sock => "$sockdir/slave2.sock",
984
port => $opt_slave_myport + 2,
985
start_timeout => 300,
986
cluster => -1, # index in clusters list
1100
1019
# When both --valgrind and --debug is selected, send
1101
1020
# all output to the trace file, making it possible to
1102
1021
# see the exact location where valgrind complains
1103
foreach my $drizzled (@{$master}, @{$slave})
1022
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;
1024
my $sidx= $mysqld->{idx} ? "$mysqld->{idx}" : "";
1025
$mysqld->{path_myerr}=
1026
"$opt_vardir/log/" . $mysqld->{type} . "$sidx.trace";
1139
1032
# To make it easier for different devs to work on the same host,
1140
1033
# an environment variable can be used to control all ports. A small
1151
1044
# But a fairly safe range seems to be 5001 - 32767
1154
sub set_dtr_build_thread_ports($) {
1155
my $dtr_build_thread= shift;
1047
sub set_mtr_build_thread_ports($) {
1048
my $mtr_build_thread= shift;
1157
if ( lc($dtr_build_thread) eq 'auto' ) {
1050
if ( lc($mtr_build_thread) eq 'auto' ) {
1158
1051
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";
1052
$ENV{'MTR_BUILD_THREAD'} = $mtr_build_thread = mtr_require_unique_id_and_wait("/tmp/mysql-test-ports", 200, 299);
1053
print "got ".$mtr_build_thread."\n";
1163
$dtr_build_thread= (($dtr_build_thread * 10) % 2000) - 1000;
1056
$mtr_build_thread= (($mtr_build_thread * 10) % 2000) - 1000;
1165
1058
# Up to two masters, up to three slaves
1166
1059
# 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);
1060
$opt_master_myport= $mtr_build_thread + 9000; # and 1
1061
$opt_slave_myport= $opt_master_myport + 2; # and 3 4
1062
$opt_memc_myport= $opt_master_myport + 10;
1175
1064
if ( $opt_master_myport < 5001 or $opt_master_myport + 10 >= 32767 )
1177
dtr_error("DTR_BUILD_THREAD number results in a port",
1066
mtr_error("MTR_BUILD_THREAD number results in a port",
1178
1067
"outside 5001 - 32767",
1179
1068
"($opt_master_myport - $opt_master_myport + 10)");
1203
1092
##############################################################################
1206
sub collect_drizzled_features () {
1095
sub collect_mysqld_features () {
1207
1096
my $found_variable_list_start= 0;
1208
1097
my $tmpdir= tempdir(CLEANUP => 0); # Directory removed by this function
1211
# Execute "drizzled --help" to get a list
1100
# Execute "mysqld --help --verbose" to get a list
1212
1101
# list of all features and settings
1214
# --no-defaults are to avoid loading
1103
# --no-defaults and --skip-grant-tables are to avoid loading
1215
1104
# system-wide configs and plugins
1217
my $list= `$exe_drizzled --no-defaults --help`;
1106
# --datadir must exist, mysqld will chdir into it
1108
my $list= `$exe_drizzled --no-defaults --datadir=$tmpdir --skip-grant-tables --verbose --help`;
1219
1110
foreach my $line (split('\n', $list))
1221
1112
# First look for version
1222
if ( !$drizzle_version_id )
1113
if ( !$mysql_version_id )
1224
1115
# Look for version
1225
1116
my $exe_name= basename($exe_drizzled);
1226
dtr_verbose("exe_name: $exe_name");
1117
mtr_verbose("exe_name: $exe_name");
1227
1118
if ( $line =~ /^\S*$exe_name\s\sVer\s([0-9]*)\.([0-9]*)\.([0-9]*)/ )
1229
1120
#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");
1121
$mysql_version_id= $1*10000 + $2*100 + $3;
1122
#print "mysql_version_id: $mysql_version_id\n";
1123
mtr_report("MySQL Version $1.$2.$3");
1128
if (!$found_variable_list_start)
1130
# Look for start of variables list
1131
if ( $line =~ /[\-]+\s[\-]+/ )
1133
$found_variable_list_start= 1;
1138
# Put variables into hash
1139
if ( $line =~ /^([\S]+)[ \t]+(.*?)\r?$/ )
1141
# print "$1=\"$2\"\n";
1142
$mysqld_variables{$1}= $2;
1146
# The variable list is ended with a blank line
1147
if ( $line =~ /^[\s]*$/ )
1153
# Send out a warning, we should fix the variables that has no
1154
# space between variable name and it's value
1155
# or should it be fixed width column parsing? It does not
1156
# look like that in function my_print_variables in my_getopt.c
1157
mtr_warning("Could not parse variable list line : $line");
1236
1163
rmtree($tmpdir);
1237
dtr_error("Could not find version of Drizzle") unless $drizzle_version_id;
1164
mtr_error("Could not find version of MySQL") unless $mysql_version_id;
1165
mtr_error("Could not find variabes list") unless $found_variable_list_start;
1242
1170
sub run_query($$) {
1243
my ($drizzled, $query)= @_;
1171
my ($mysqld, $query)= @_;
1246
dtr_init_args(\$args);
1174
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);
1176
mtr_add_arg($args, "--no-defaults");
1177
mtr_add_arg($args, "--skip-stack-trace");
1178
mtr_add_arg($args, "--user=%s", $opt_user);
1179
mtr_add_arg($args, "--port=%d", $mysqld->{'port'});
1180
mtr_add_arg($args, "--silent"); # Tab separated output
1181
mtr_add_arg($args, "-e '%s'", $query);
1255
1183
my $cmd= "$exe_drizzle " . join(' ', @$args);
1256
dtr_verbose("cmd: $cmd");
1184
mtr_verbose("cmd: $cmd");
1261
sub collect_drizzled_features_from_running_server ()
1189
sub collect_mysqld_features_from_running_server ()
1263
my $list= run_query($master->[0], "use drizzle; SHOW VARIABLES");
1191
my $list= run_query($master->[0], "use mysql; SHOW VARIABLES");
1265
1193
foreach my $line (split('\n', $list))
1286
1214
$exe_libtool= "../libtool";
1287
1215
if ($opt_valgrind or $glob_debugger)
1289
dtr_report("Using \"$exe_libtool\" when running valgrind or debugger");
1217
mtr_report("Using \"$exe_libtool\" when running valgrind or debugger");
1221
# Look for my_print_defaults
1222
$exe_my_print_defaults=
1224
"$path_client_bindir/my_print_defaults",
1225
"$glob_basedir/extra/my_print_defaults",
1226
"$glob_builddir/extra/my_print_defaults");
1293
1228
# Look for perror
1294
1229
$exe_perror= "perror";
1296
1231
# 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");
1232
$exe_drizzledump= mtr_exe_exists("$path_client_bindir/drizzledump");
1233
$exe_drizzleimport= mtr_exe_exists("$path_client_bindir/drizzleimport");
1234
$exe_drizzle= mtr_exe_exists("$path_client_bindir/drizzle");
1302
1236
if (!$opt_extern)
1304
1238
# Look for SQL scripts directory
1305
if ( $drizzle_version_id >= 50100 )
1239
if ( $mysql_version_id >= 50100 )
1307
$exe_drizzleslap= dtr_exe_exists("$path_client_bindir/drizzleslap");
1241
$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
1245
# Look for drizzletest executable
1319
$exe_drizzletest= dtr_exe_exists("$path_client_bindir/drizzletest");
1247
$exe_drizzletest= mtr_exe_exists("$path_client_bindir/drizzletest");
1322
1250
# Look for drizzle_client_test executable which may _not_ exist in
1323
1251
# some versions, test using it should be skipped
1325
1253
$exe_drizzle_client_test=
1326
dtr_exe_maybe_exists(
1254
mtr_exe_maybe_exists(
1327
1255
"$glob_basedir/tests/drizzle_client_test",
1328
1256
"$glob_basedir/bin/drizzle_client_test");
1371
1286
my $exe= $exe_drizzle_client_test;
1374
dtr_init_args(\$args);
1289
mtr_init_args(\$args);
1375
1290
if ( $opt_valgrind_drizzletest )
1377
1292
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'}");
1295
mtr_add_arg($args, "--no-defaults");
1296
mtr_add_arg($args, "--testcase");
1297
mtr_add_arg($args, "--user=root");
1298
mtr_add_arg($args, "--port=$master->[0]->{'port'}");
1385
if ( $opt_extern || $drizzle_version_id >= 50000 )
1300
if ( $opt_extern || $mysql_version_id >= 50000 )
1387
dtr_add_arg($args, "--vardir=$opt_vardir")
1302
mtr_add_arg($args, "--vardir=$opt_vardir")
1390
1305
if ( $opt_debug )
1393
1308
"--debug=d:t:A,$path_vardir_trace/log/drizzle_client_test.trace");
1446
1361
$ENV{'LD_LIBRARY_PATH'} ?
1447
1362
split(':', $ENV{'LD_LIBRARY_PATH'}) : (),
1448
1363
@ld_library_paths);
1449
dtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1364
mtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1451
1366
$ENV{'DYLD_LIBRARY_PATH'}= join(":", @ld_library_paths,
1452
1367
$ENV{'DYLD_LIBRARY_PATH'} ?
1453
1368
split(':', $ENV{'DYLD_LIBRARY_PATH'}) : ());
1454
dtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1369
mtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1456
1371
# The environment variable used for shared libs on AIX
1457
1372
$ENV{'SHLIB_PATH'}= join(":", @ld_library_paths,
1458
1373
$ENV{'SHLIB_PATH'} ?
1459
1374
split(':', $ENV{'SHLIB_PATH'}) : ());
1460
dtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1375
mtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1462
1377
# The environment variable used for shared libs on hp-ux
1463
1378
$ENV{'LIBPATH'}= join(":", @ld_library_paths,
1464
1379
$ENV{'LIBPATH'} ?
1465
1380
split(':', $ENV{'LIBPATH'}) : ());
1466
dtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1381
mtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1468
1383
# --------------------------------------------------------------------------
1469
1384
# Also command lines in .opt files may contain env vars
1500
1413
$ENV{'SLAVE_MYPORT1'}= $slave->[1]->{'port'};
1501
1414
$ENV{'SLAVE_MYPORT2'}= $slave->[2]->{'port'};
1502
1415
$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;
1416
$ENV{'DRIZZLE_TCP_PORT'}= $mysqld_variables{'port'};
1418
$ENV{'MTR_BUILD_THREAD'}= $opt_mtr_build_thread;
1420
$ENV{'EXE_MYSQL'}= $exe_drizzle;
1512
1423
# ----------------------------------------------------
1513
1424
# Setup env to childs can execute myqldump
1514
1425
# ----------------------------------------------------
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'} ";
1426
my $cmdline_mysqldump= generate_cmdline_mysqldump($master->[0]);
1427
my $cmdline_mysqldumpslave= generate_cmdline_mysqldump($slave->[0]);
1522
1429
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";
1431
$cmdline_mysqldump .=
1432
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-master.trace";
1433
$cmdline_mysqldumpslave .=
1434
" --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
1436
$ENV{'DRIZZLE_DUMP'}= $cmdline_mysqldump;
1437
$ENV{'DRIZZLE_DUMP_SLAVE'}= $cmdline_mysqldumpslave;
1439
# ----------------------------------------------------
1440
# Setup env so childs can execute mysqlslap
1544
1441
# ----------------------------------------------------
1545
1442
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) .
1444
my $cmdline_drizzleslap=
1445
mtr_native_path($exe_drizzleslap) .
1556
1447
"--port=$master->[0]->{'port'} ";
1557
my $cmdline_drizzleslap_secondary=
1558
dtr_native_path($exe_drizzleslap) .
1560
" --port=$master->[0]->{'secondary_port'} ";
1562
1449
if ( $opt_debug )
1564
1451
$cmdline_drizzleslap .=
1565
1452
" --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
1454
$ENV{'DRIZZLE_SLAP'}= $cmdline_drizzleslap;
1570
$ENV{'DRIZZLE_SLAP_SECONDARY'}= $cmdline_drizzleslap_secondary;
1575
1459
# ----------------------------------------------------
1576
# Setup env so childs can execute drizzleimport
1460
# Setup env so childs can execute mysqlimport
1577
1461
# ----------------------------------------------------
1578
my $cmdline_drizzleimport=
1579
dtr_native_path($exe_drizzleimport) .
1462
my $cmdline_mysqlimport=
1463
mtr_native_path($exe_drizzleimport) .
1581
1465
"--port=$master->[0]->{'port'} ";
1583
1467
if ( $opt_debug )
1585
$cmdline_drizzleimport .=
1586
" --debug=d:t:A,$path_vardir_trace/log/drizzleimport.trace";
1469
$cmdline_mysqlimport .=
1470
" --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) .
1472
$ENV{'DRIZZLE_IMPORT'}= $cmdline_mysqlimport;
1475
# ----------------------------------------------------
1476
# Setup env so childs can execute mysql
1477
# ----------------------------------------------------
1479
mtr_native_path($exe_drizzle) .
1596
1480
" --no-defaults --host=localhost --user=root --password= " .
1597
1481
"--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;
1483
$ENV{'MYSQL'}= $cmdline_mysql;
1606
1485
# ----------------------------------------------------
1607
1486
# Setup env so childs can execute bug25714
1617
1496
# ----------------------------------------------------
1618
# Setup env so childs can execute drizzle_fix_system_tables
1497
# Setup env so childs can execute mysql_fix_system_tables
1619
1498
# ----------------------------------------------------
1620
1499
#if ( !$opt_extern)
1623
my $cmdline_drizzle_fix_system_tables=
1502
my $cmdline_mysql_fix_system_tables=
1624
1503
"$exe_drizzle_fix_system_tables --no-defaults --host=localhost " .
1625
1504
"--user=root --password= " .
1626
1505
"--basedir=$glob_basedir --bindir=$path_client_bindir --verbose " .
1627
1506
"--port=$master->[0]->{'port'} ";
1628
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_drizzle_fix_system_tables;
1507
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_mysql_fix_system_tables;
1632
1511
# ----------------------------------------------------
1512
# Setup env so childs can execute my_print_defaults
1513
# ----------------------------------------------------
1514
$ENV{'DRIZZLE_MY_PRINT_DEFAULTS'}= mtr_native_path($exe_my_print_defaults);
1516
# ----------------------------------------------------
1633
1517
# Setup env so childs can shutdown the server
1634
1518
# ----------------------------------------------------
1635
$ENV{'DRIZZLED_SHUTDOWN'}= dtr_native_path($exe_drizzle);
1519
$ENV{'DRIZZLED_SHUTDOWN'}= mtr_native_path($exe_drizzle);
1637
1521
# ----------------------------------------------------
1638
1522
# Setup env so childs can execute perror
1639
1523
# ----------------------------------------------------
1640
$ENV{'MY_PERROR'}= dtr_native_path($exe_perror);
1524
$ENV{'MY_PERROR'}= mtr_native_path($exe_perror);
1642
1526
# ----------------------------------------------------
1643
# Add the path where drizzled will find ha_example.so
1527
# Add the path where mysqld will find ha_example.so
1644
1528
# ----------------------------------------------------
1645
1529
$ENV{'EXAMPLE_PLUGIN'}=
1646
1530
($lib_example_plugin ? basename($lib_example_plugin) : "");
1648
1532
($lib_example_plugin ? "--plugin_dir=" . dirname($lib_example_plugin) : "");
1650
1534
# ----------------------------------------------------
1535
# Setup env so childs can execute myisampack and myisamchk
1536
# ----------------------------------------------------
1537
# $ENV{'MYISAMCHK'}= mtr_native_path(mtr_exe_exists(
1538
# "$path_client_bindir/myisamchk",
1539
# "$glob_basedir/storage/myisam/myisamchk",
1540
# "$glob_basedir/myisam/myisamchk"));
1541
# $ENV{'MYISAMPACK'}= mtr_native_path(mtr_exe_exists(
1542
# "$path_client_bindir/myisampack",
1543
# "$glob_basedir/storage/myisam/myisampack",
1544
# "$glob_basedir/myisam/myisampack"));
1546
# ----------------------------------------------------
1651
1547
# We are nice and report a bit about our settings
1652
1548
# ----------------------------------------------------
1653
1549
if (!$opt_extern)
1655
print "Using DTR_BUILD_THREAD = $ENV{DTR_BUILD_THREAD}\n";
1551
print "Using MTR_BUILD_THREAD = $ENV{MTR_BUILD_THREAD}\n";
1656
1552
print "Using MASTER_MYPORT = $ENV{MASTER_MYPORT}\n";
1657
1553
print "Using MASTER_MYPORT1 = $ENV{MASTER_MYPORT1}\n";
1658
1554
print "Using SLAVE_MYPORT = $ENV{SLAVE_MYPORT}\n";
1659
1555
print "Using SLAVE_MYPORT1 = $ENV{SLAVE_MYPORT1}\n";
1660
1556
print "Using SLAVE_MYPORT2 = $ENV{SLAVE_MYPORT2}\n";
1661
1557
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
1560
# Create an environment variable to make it possible
1731
1625
if ( $opt_mem and readlink($opt_vardir) eq $opt_mem )
1733
1627
# Remove the directory which the link points at
1734
dtr_verbose("Removing " . readlink($opt_vardir));
1735
dtr_rmtree(readlink($opt_vardir));
1628
mtr_verbose("Removing " . readlink($opt_vardir));
1629
mtr_rmtree(readlink($opt_vardir));
1737
1631
# Remove the "var" symlink
1738
dtr_verbose("unlink($opt_vardir)");
1632
mtr_verbose("unlink($opt_vardir)");
1739
1633
unlink($opt_vardir);
1741
1635
elsif ( $opt_mem )
1743
1637
# Just remove the "var" symlink
1744
dtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1638
mtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1746
dtr_verbose("unlink($opt_vardir)");
1640
mtr_verbose("unlink($opt_vardir)");
1747
1641
unlink($opt_vardir);
1751
# Some users creates a soft link in drizzle-test/var to another area
1645
# Some users creates a soft link in mysql-test/var to another area
1752
1646
# - allow it, but remove all files in it
1754
dtr_report("WARNING: Using the 'drizzle-test/var' symlink");
1648
mtr_report("WARNING: Using the 'mysql-test/var' symlink");
1756
1650
# Make sure the directory where it points exist
1757
dtr_error("The destination for symlink $opt_vardir does not exist")
1651
mtr_error("The destination for symlink $opt_vardir does not exist")
1758
1652
if ! -d readlink($opt_vardir);
1760
1654
foreach my $bin ( glob("$opt_vardir/*") )
1762
dtr_verbose("Removing bin $bin");
1656
mtr_verbose("Removing bin $bin");
1769
1663
# Remove the entire "var" dir
1770
dtr_verbose("Removing $opt_vardir/");
1771
dtr_rmtree("$opt_vardir/");
1664
mtr_verbose("Removing $opt_vardir/");
1665
mtr_rmtree("$opt_vardir/");
1774
1668
if ( $opt_mem )
1802
1696
# Create var and the directories needed in var
1804
1698
sub setup_vardir() {
1805
dtr_report("Creating Directories");
1699
mtr_report("Creating Directories");
1807
1701
if ( $opt_vardir eq $default_vardir )
1810
# Running with "var" in drizzle-test dir
1704
# Running with "var" in mysql-test dir
1812
1706
if ( -l $opt_vardir )
1814
1708
# it's a symlink
1816
1710
# Make sure the directory where it points exist
1817
dtr_error("The destination for symlink $opt_vardir does not exist")
1711
mtr_error("The destination for symlink $opt_vardir does not exist")
1818
1712
if ! -d readlink($opt_vardir);
1820
1714
elsif ( $opt_mem )
1822
1716
# Runinng with "var" as a link to some "memory" location, normally tmpfs
1823
dtr_verbose("Creating $opt_mem");
1717
mtr_verbose("Creating $opt_mem");
1824
1718
mkpath($opt_mem);
1826
dtr_report("Symlinking 'var' to '$opt_mem'");
1720
mtr_report("Symlinking 'var' to '$opt_mem'");
1827
1721
symlink($opt_mem, $opt_vardir);
1831
1725
if ( ! -d $opt_vardir )
1833
dtr_verbose("Creating $opt_vardir");
1727
mtr_verbose("Creating $opt_vardir");
1834
1728
mkpath($opt_vardir);
1837
1731
# Ensure a proper error message if vardir couldn't be created
1838
1732
unless ( -d $opt_vardir and -w $opt_vardir )
1840
dtr_error("Writable 'var' directory is needed, use the " .
1734
mtr_error("Writable 'var' directory is needed, use the " .
1841
1735
"'--vardir=<path>' option");
1943
drizzled_start($master->[0],[],[]);
1829
mysqld_start($master->[0],[],[]);
1944
1830
if ( ! $master->[0]->{'pid'} )
1946
dtr_error("Can't start the drizzled server");
1832
mtr_error("Can't start the mysqld server");
1950
dtr_init_args(\$args);
1836
mtr_init_args(\$args);
1952
dtr_add_arg($args, "--user=%s", $opt_user);
1838
mtr_add_arg($args, "--user=%s", $opt_user);
1954
1840
if ( $opt_small_bench )
1956
dtr_add_arg($args, "--small-test");
1957
dtr_add_arg($args, "--small-tables");
1842
mtr_add_arg($args, "--small-test");
1843
mtr_add_arg($args, "--small-tables");
1960
chdir($glob_drizzle_bench_dir)
1961
or dtr_error("Couldn't chdir to '$glob_drizzle_bench_dir': $!");
1846
chdir($glob_mysql_bench_dir)
1847
or mtr_error("Couldn't chdir to '$glob_mysql_bench_dir': $!");
1963
1849
if ( ! $benchmark )
1965
dtr_run("$glob_drizzle_bench_dir/run-all-tests", $args, "", "", "", "");
1851
mtr_run("$glob_mysql_bench_dir/run-all-tests", $args, "", "", "", "");
1966
1852
# FIXME check result code?!
1968
1854
elsif ( -x $benchmark )
1970
dtr_run("$glob_drizzle_bench_dir/$benchmark", $args, "", "", "", "");
1856
mtr_run("$glob_mysql_bench_dir/$benchmark", $args, "", "", "", "");
1971
1857
# FIXME check result code?!
1975
dtr_error("Benchmark $benchmark not found");
1861
mtr_error("Benchmark $benchmark not found");
1978
chdir($glob_drizzle_test_dir); # Go back
1864
chdir($glob_mysql_test_dir); # Go back
1981
1867
stop_masters();
2541
2427
my $prefix= ""; # If drizzletest server arg
2543
dtr_add_arg($args, "%s--no-defaults", $prefix);
2429
mtr_add_arg($args, "%s--no-defaults", $prefix);
2431
$path_my_basedir= collapse_path($path_my_basedir);
2432
mtr_add_arg($args, "%s--basedir=%s", $prefix, $path_my_basedir);
2545
2434
if ($opt_engine)
2547
dtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2436
mtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2550
if ( $drizzle_version_id >= 50036)
2439
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);
2441
# By default, prevent the started mysqld to access files outside of vardir
2442
mtr_add_arg($args, "%s--secure-file-priv=%s", $prefix, $opt_vardir);
2556
dtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2445
mtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2558
2447
# Increase default connect_timeout to avoid intermittent
2559
2448
# disconnects when test servers are put under load
2560
2449
# 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
2450
mtr_add_arg($args, "%s--drizzle-protocol-connect-timeout=60", $prefix);
2453
# When mysqld is run by a root user(euid is 0), it will fail
2565
2454
# 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);
2456
if (grep(/^--user/, @$extra_opt, @opt_extra_mysqld_opt) == 0) {
2457
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'});
2460
mtr_add_arg($args, "%s--pid-file=%s", $prefix,
2461
$mysqld->{'path_pid'});
2463
mtr_add_arg($args, "%s--drizzle-protocol-port=%d", $prefix,
2466
mtr_add_arg($args, "%s--mysql-protocol-port=%d", $prefix,
2467
$mysqld->{'port'} + 50);
2469
mtr_add_arg($args, "%s--datadir=%s", $prefix,
2470
$mysqld->{'path_myddir'});
2586
2472
# Check if "extra_opt" contains --skip-log-bin
2587
if ( $drizzled->{'type'} eq 'master' )
2473
if ( $mysqld->{'type'} eq 'master' )
2589
dtr_add_arg($args, "%s--server-id=%d", $prefix,
2475
mtr_add_arg($args, "%s--server-id=%d", $prefix,
2590
2476
$idx > 0 ? $idx + 101 : 1);
2593
"%s--innodb.data-file-path=ibdata1:20M:autoextend", $prefix);
2478
mtr_add_arg($args, "%s--loose-innodb_data_file_path=ibdata1:10M:autoextend",
2481
mtr_add_arg($args, "%s--loose-innodb-lock-wait-timeout=5", $prefix);
2483
if ( $idx > 0 or !$use_innodb)
2485
mtr_add_arg($args, "%s--loose-skip-innodb", $prefix);
2598
dtr_error("unknown drizzled type")
2599
unless $drizzled->{'type'} eq 'slave';
2490
mtr_error("unknown mysqld type")
2491
unless $mysqld->{'type'} eq 'slave';
2601
2493
# Directory where slaves find the dumps generated by "load data"
2602
2494
# on the server. The path need to have constant length otherwise
2608
2500
foreach my $arg ( @$slave_master_info )
2610
dtr_add_arg($args, "%s%s", $prefix, $arg);
2502
mtr_add_arg($args, "%s%s", $prefix, $arg);
2615
2507
my $slave_server_id= 2 + $idx;
2616
2508
my $slave_rpl_rank= $slave_server_id;
2617
dtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2509
mtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2621
2513
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);
2515
mtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/%s%s.trace",
2516
$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);
2519
mtr_add_arg($args, "%s--key_buffer_size=1M", $prefix);
2520
mtr_add_arg($args, "%s--sort_buffer=256K", $prefix);
2521
mtr_add_arg($args, "%s--max_heap_table_size=1M", $prefix);
2630
2523
if ( $opt_warnings )
2632
dtr_add_arg($args, "%s--log-warnings", $prefix);
2525
mtr_add_arg($args, "%s--log-warnings", $prefix);
2635
# Indicate to "drizzled" it will be debugged in debugger
2528
# Indicate to "mysqld" it will be debugged in debugger
2636
2529
if ( $glob_debugger )
2638
dtr_add_arg($args, "%s--gdb", $prefix);
2531
mtr_add_arg($args, "%s--gdb", $prefix);
2641
2534
my $found_skip_core= 0;
2642
foreach my $arg ( @opt_extra_drizzled_opt, @$extra_opt )
2535
foreach my $arg ( @opt_extra_mysqld_opt, @$extra_opt )
2644
2537
# Allow --skip-core-file to be set in <testname>-[master|slave].opt file
2645
2538
if ($arg eq "--skip-core-file")
2677
2570
my $wait_for_pid_file= 1;
2679
my $type= $drizzled->{'type'};
2680
my $idx= $drizzled->{'idx'};
2572
my $type= $mysqld->{'type'};
2573
my $idx= $mysqld->{'idx'};
2682
2575
if ( $type eq 'master' )
2684
$exe= $exe_master_drizzled;
2577
$exe= $exe_master_mysqld;
2686
2579
elsif ( $type eq 'slave' )
2688
$exe= $exe_slave_drizzled;
2581
$exe= $exe_slave_mysqld;
2692
dtr_error("Unknown 'type' \"$type\" passed to drizzled_start");
2585
mtr_error("Unknown 'type' \"$type\" passed to mysqld_start");
2695
dtr_init_args(\$args);
2588
mtr_init_args(\$args);
2697
if ( $opt_valgrind_drizzled )
2590
if ( $opt_valgrind_mysqld )
2699
2592
valgrind_arguments($args, \$exe);
2702
drizzled_arguments($args,$drizzled,$extra_opt,$slave_master_info);
2595
mysqld_arguments($args,$mysqld,$extra_opt,$slave_master_info);
2704
2597
if ( $opt_gdb || $opt_manual_gdb)
2737
2630
# Remove the pidfile
2738
unlink($drizzled->{'path_pid'});
2631
unlink($mysqld->{'path_pid'});
2740
2633
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'},
2635
$pid= mtr_spawn($exe, $args, "",
2636
$mysqld->{'path_myerr'},
2637
$mysqld->{'path_myerr'},
2747
2639
{ append_log_file => 1 });
2751
if ( $wait_for_pid_file && !sleep_until_file_created($drizzled->{'path_pid'},
2752
$drizzled->{'start_timeout'},
2643
if ( $wait_for_pid_file && !sleep_until_file_created($mysqld->{'path_pid'},
2644
$mysqld->{'start_timeout'},
2756
dtr_error("Failed to start drizzled $drizzled->{'type'}");
2648
mtr_error("Failed to start mysqld $mysqld->{'type'}");
2760
2652
# Remember pid of the started process
2761
$drizzled->{'pid'}= $pid;
2653
$mysqld->{'pid'}= $pid;
2763
2655
# Remember options used when starting
2764
$drizzled->{'start_opts'}= $extra_opt;
2765
$drizzled->{'start_slave_master_info'}= $slave_master_info;
2656
$mysqld->{'start_opts'}= $extra_opt;
2657
$mysqld->{'start_slave_master_info'}= $slave_master_info;
2767
dtr_verbose("drizzled pid: $pid");
2659
mtr_verbose("mysqld pid: $pid");
2772
2664
sub stop_all_servers () {
2774
dtr_report("Stopping All Servers");
2666
mtr_report("Stopping All Servers");
2776
2668
my %admin_pids; # hash of admin processes that requests shutdown
2777
2669
my @kill_pids; # list of processes to shutdown/kill
2780
2672
# Start shutdown of all started masters
2781
foreach my $drizzled (@{$slave}, @{$master})
2673
foreach my $mysqld (@{$slave}, @{$master})
2783
if ( $drizzled->{'pid'} )
2675
if ( $mysqld->{'pid'} )
2785
$pid= dtr_server_shutdown($drizzled);
2677
$pid= mtr_server_shutdown($mysqld);
2786
2678
$admin_pids{$pid}= 1;
2788
2680
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'},
2681
pid => $mysqld->{'pid'},
2682
real_pid => $mysqld->{'real_pid'},
2683
pidfile => $mysqld->{'path_pid'},
2684
sockfile => $mysqld->{'path_sock'},
2685
port => $mysqld->{'port'},
2686
errfile => $mysqld->{'path_myerr'},
2797
$drizzled->{'pid'}= 0; # Assume we are done with it
2689
$mysqld->{'pid'}= 0; # Assume we are done with it
2801
2693
# Wait blocking until all shutdown processes has completed
2802
dtr_wait_blocking(\%admin_pids);
2694
mtr_wait_blocking(\%admin_pids);
2804
2696
# Make sure that process has shutdown else try to kill them
2805
dtr_check_stop_servers(\@kill_pids);
2697
mtr_check_stop_servers(\@kill_pids);
2816
2708
if ( $tinfo->{'master_sh'} )
2818
2710
$do_restart= 1; # Always restart if script to run
2819
dtr_verbose("Restart master: Always restart if script to run");
2711
mtr_verbose("Restart master: Always restart if script to run");
2821
2713
if ( $tinfo->{'force_restart'} )
2823
2715
$do_restart= 1; # Always restart if --force-restart in -opt file
2824
dtr_verbose("Restart master: Restart forced with --force-restart");
2716
mtr_verbose("Restart master: Restart forced with --force-restart");
2826
2718
elsif( $tinfo->{'component_id'} eq 'im' )
2828
2720
$do_restart= 1;
2829
dtr_verbose("Restart master: Always restart for im tests");
2721
mtr_verbose("Restart master: Always restart for im tests");
2831
2723
elsif ( $master->[0]->{'running_master_options'} and
2832
2724
$master->[0]->{'running_master_options'}->{'timezone'} ne
2833
2725
$tinfo->{'timezone'})
2835
2727
$do_restart= 1;
2836
dtr_verbose("Restart master: Different timezone");
2728
mtr_verbose("Restart master: Different timezone");
2838
2730
# Check that running master was started with same options
2839
2731
# as the current test requires
2840
elsif (! dtr_same_opts($master->[0]->{'start_opts'},
2732
elsif (! mtr_same_opts($master->[0]->{'start_opts'},
2841
2733
$tinfo->{'master_opt'}) )
2843
2735
# Chech that diff is binlog format only
2844
my $diff_opts= dtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2736
my $diff_opts= mtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2845
2737
if (scalar(@$diff_opts) eq 2)
2847
2739
$do_restart= 1;
2936
2828
delete $master->[0]->{'running_master_options'}; # Forget history
2938
2830
# Start shutdown of all started masters
2939
foreach my $drizzled (@{$master})
2831
foreach my $mysqld (@{$master})
2941
if ( $drizzled->{'pid'} )
2833
if ( $mysqld->{'pid'} )
2943
$pid= dtr_server_shutdown($drizzled);
2835
$pid= mtr_server_shutdown($mysqld);
2945
2837
$admin_pids{$pid}= 1;
2947
2839
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'},
2840
pid => $mysqld->{'pid'},
2841
real_pid => $mysqld->{'real_pid'},
2842
pidfile => $mysqld->{'path_pid'},
2843
sockfile => $mysqld->{'path_sock'},
2844
port => $mysqld->{'port'},
2845
errfile => $mysqld->{'path_myerr'},
2956
$drizzled->{'pid'}= 0; # Assume we are done with it
2848
$mysqld->{'pid'}= 0; # Assume we are done with it
2964
2856
delete $slave->[0]->{'running_slave_options'}; # Forget history
2966
2858
# Start shutdown of all started slaves
2967
foreach my $drizzled (@{$slave})
2859
foreach my $mysqld (@{$slave})
2969
if ( $drizzled->{'pid'} )
2861
if ( $mysqld->{'pid'} )
2971
$pid= dtr_server_shutdown($drizzled);
2863
$pid= mtr_server_shutdown($mysqld);
2973
2865
$admin_pids{$pid}= 1;
2975
2867
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'},
2868
pid => $mysqld->{'pid'},
2869
real_pid => $mysqld->{'real_pid'},
2870
pidfile => $mysqld->{'path_pid'},
2871
sockfile => $mysqld->{'path_sock'},
2872
port => $mysqld->{'port'},
2873
errfile => $mysqld->{'path_myerr'},
2984
$drizzled->{'pid'}= 0; # Assume we are done with it
2876
$mysqld->{'pid'}= 0; # Assume we are done with it
3081
2973
sub run_check_testcase ($$) {
3083
2975
my $mode= shift;
3084
my $drizzled= shift;
3086
my $name= "check-" . $drizzled->{'type'} . $drizzled->{'idx'};
2978
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");
2981
mtr_init_args(\$args);
2983
mtr_add_arg($args, "--no-defaults");
2984
mtr_add_arg($args, "--silent");
2985
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
2987
mtr_add_arg($args, "--port=%d", $mysqld->{'port'});
2988
mtr_add_arg($args, "--database=test");
2989
mtr_add_arg($args, "--user=%s", $opt_user);
2990
mtr_add_arg($args, "--password=");
2992
mtr_add_arg($args, "-R");
2993
mtr_add_arg($args, "$opt_vardir/tmp/$name.result");
3103
2995
if ( $mode eq "before" )
3105
dtr_add_arg($args, "--record");
2997
mtr_add_arg($args, "--record");
3108
3000
if ( $opt_testdir )
3110
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
3002
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3113
my $res = dtr_run_test($exe_drizzletest,$args,
3005
my $res = mtr_run_test($exe_drizzletest,$args,
3114
3006
"include/check-testcase.test", "", "", "");
3116
3008
if ( $res == 1 and $mode eq "after")
3118
dtr_run("diff",["-u",
3010
mtr_run("diff",["-u",
3119
3011
"$opt_vardir/tmp/$name.result",
3120
3012
"$opt_vardir/tmp/$name.reject"],
3121
3013
"", "", "", "");
3125
dtr_error("Could not execute 'check-testcase' $mode testcase");
3017
mtr_error("Could not execute 'check-testcase' $mode testcase");
3169
3061
my $exe= $exe_drizzletest;
3172
dtr_init_args(\$args);
3064
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);
3066
mtr_add_arg($args, "--no-defaults");
3067
mtr_add_arg($args, "--silent");
3068
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3069
mtr_add_arg($args, "--logdir=%s/log", $opt_vardir);
3179
3071
# Log line number and time for each line in .test file
3180
dtr_add_arg($args, "--mark-progress")
3072
mtr_add_arg($args, "--mark-progress")
3181
3073
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=");
3076
mtr_add_arg($args, "--port=%d", $master->[0]->{'port'});
3077
mtr_add_arg($args, "--database=test");
3078
mtr_add_arg($args, "--user=%s", $opt_user);
3079
mtr_add_arg($args, "--password=");
3190
3082
if ( $opt_strace_client )
3192
3084
$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");
3085
mtr_add_arg($args, "-o");
3086
mtr_add_arg($args, "%s/log/drizzletest.strace", $opt_vardir);
3087
mtr_add_arg($args, "$exe_drizzletest");
3198
3090
if ( $opt_timer )
3200
dtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3092
mtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3203
3095
if ( $opt_compress )
3205
dtr_add_arg($args, "--compress");
3097
mtr_add_arg($args, "--compress");
3208
3100
if ( $opt_sleep )
3210
dtr_add_arg($args, "--sleep=%d", $opt_sleep);
3102
mtr_add_arg($args, "--sleep=%d", $opt_sleep);
3213
3105
if ( $opt_debug )
3215
dtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3107
mtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3216
3108
$path_vardir_trace);
3219
3111
if ( $opt_testdir )
3221
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
3113
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3238
3130
# We do this here, since we do not want to Valgrind the nested invocations
3239
3131
# of drizzletest; that would mess up the stderr output causing test failure.
3240
3132
my @args_saved = @$args;
3241
dtr_init_args(\$args);
3133
mtr_init_args(\$args);
3242
3134
valgrind_arguments($args, \$exe);
3243
dtr_add_arg($args, "%s", $_) for @args_saved;
3135
mtr_add_arg($args, "%s", $_) for @args_saved;
3246
dtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3138
mtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3248
3140
# Number of lines of resut to include in failure report
3249
dtr_add_arg($args, "--tail-lines=20");
3141
mtr_add_arg($args, "--tail-lines=20");
3251
3143
if ( defined $tinfo->{'result_file'} ) {
3252
dtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3144
mtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3255
3147
if ( $opt_record )
3257
dtr_add_arg($args, "--record");
3149
mtr_add_arg($args, "--record");
3260
3152
if ( $opt_client_gdb )
3273
3165
if ( $opt_check_testcases )
3275
foreach my $drizzled (@{$master}, @{$slave})
3167
foreach my $mysqld (@{$master}, @{$slave})
3277
if ($drizzled->{'pid'})
3169
if ($mysqld->{'pid'})
3279
run_check_testcase("before", $drizzled);
3171
run_check_testcase("before", $mysqld);
3284
my $res = dtr_run_test($exe,$args,"","",$path_timefile,"");
3176
my $res = mtr_run_test($exe,$args,"","",$path_timefile,"");
3286
3178
if ( $opt_check_testcases )
3288
foreach my $drizzled (@{$master}, @{$slave})
3180
foreach my $mysqld (@{$master}, @{$slave})
3290
if ($drizzled->{'pid'})
3182
if ($mysqld->{'pid'})
3292
if (run_check_testcase("after", $drizzled))
3184
if (run_check_testcase("after", $mysqld))
3294
3186
# Check failed, mark the test case with that info
3295
3187
$tinfo->{'check_testcase_failed'}= 1;
3347
dtr_add_arg($$args, "-title");
3348
dtr_add_arg($$args, "$type");
3349
dtr_add_arg($$args, "-e");
3239
mtr_add_arg($$args, "-title");
3240
mtr_add_arg($$args, "$type");
3241
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");
3243
mtr_add_arg($$args, "dbx");
3244
mtr_add_arg($$args, "-c");
3245
mtr_add_arg($$args, "source $dbx_init_file");
3246
mtr_add_arg($$args, "$$exe");
3356
3248
$$exe= "xterm";
3420
dtr_add_arg($$args, "-title");
3421
dtr_add_arg($$args, "$type");
3422
dtr_add_arg($$args, "-e");
3296
mtr_add_arg($$args, "-title");
3297
mtr_add_arg($$args, "$type");
3298
mtr_add_arg($$args, "-e");
3424
3300
if ( $exe_libtool )
3426
dtr_add_arg($$args, $exe_libtool);
3427
dtr_add_arg($$args, "--mode=execute");
3302
mtr_add_arg($$args, $exe_libtool);
3303
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");
3306
mtr_add_arg($$args, "gdb");
3307
mtr_add_arg($$args, "-x");
3308
mtr_add_arg($$args, "$gdb_init_file");
3309
mtr_add_arg($$args, "$$exe");
3435
3311
$$exe= "xterm";
3546
3422
if ( $opt_callgrind)
3548
dtr_add_arg($args, "--tool=callgrind");
3552
dtr_add_arg($args, "--tool=massif");
3424
mtr_add_arg($args, "--tool=callgrind");
3425
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";
3429
mtr_add_arg($args, "--tool=memcheck"); # From >= 2.1.2 needs this option
3430
mtr_add_arg($args, "--leak-check=yes");
3431
mtr_add_arg($args, "--num-callers=16");
3432
mtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_mysql_test_dir)
3433
if -f "$glob_mysql_test_dir/valgrind.supp";
3563
3436
# Add valgrind options, can be overriden by user
3564
dtr_add_arg($args, '%s', $_) for (@valgrind_args);
3437
mtr_add_arg($args, '%s', $_) for (@valgrind_args);
3566
dtr_add_arg($args, $$exe);
3439
mtr_add_arg($args, $$exe);
3568
3441
$$exe= $opt_valgrind_path || "valgrind";
3708
3581
client-ddd Start drizzletest client in ddd
3709
3582
client-debugger=NAME Start drizzletest in the selected debugger
3710
3583
client-gdb Start drizzletest client in gdb
3711
ddd Start drizzled in ddd
3584
ddd Start mysqld in ddd
3712
3585
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
3586
debugger=NAME Start mysqld in the selected debugger
3587
gdb Start the mysqld(s) in gdb
3588
manual-debug Let user manually start mysqld in debugger, before
3716
3589
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
3590
manual-gdb Let user manually start mysqld in gdb, before running
3592
manual-ddd Let user manually start mysqld in ddd, before running
3594
master-binary=PATH Specify the master "mysqld" to use
3595
slave-binary=PATH Specify the slave "mysqld" to use
3723
3596
strace-client Create strace output for drizzletest client
3724
3597
max-save-core Limit the number of core files saved (to avoid filling
3725
3598
up disks for heavily crashing server). Defaults to
3731
3604
gprof See online documentation on how to use it.
3732
valgrind Run the "drizzletest" and "drizzled" executables using
3605
valgrind Run the "drizzletest" and "mysqld" executables using
3733
3606
valgrind with default options
3734
3607
valgrind-all Synonym for --valgrind
3735
valgrind-drizzleslap Run "drizzleslap" with valgrind.
3736
valgrind-drizzletest Run the "drizzletest" and "drizzle_client_test" executable
3608
valgrind-drizzletest Run the "drizzletest" and "drizzle_client_test" executable
3738
valgrind-drizzled Run the "drizzled" executable with valgrind
3610
valgrind-mysqld Run the "mysqld" executable with valgrind
3739
3611
valgrind-options=ARGS Deprecated, use --valgrind-option
3740
3612
valgrind-option=ARGS Option to give valgrind, replaces default option(s),
3741
3613
can be specified more then once
3742
3614
valgrind-path=[EXE] Path to the valgrind executable
3743
3615
callgrind Instruct valgrind to use callgrind
3744
massif Instruct valgrind to use massif