summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2010-08-25 22:22:33 +0200
committerSergei Golubchik <sergii@pisem.net>2010-08-25 22:22:33 +0200
commit9bc9855c16f815e71223398ef17cd6052becc44e (patch)
tree89f63ff036ddfcf76bcdc342ec71e0129ba42c89 /mysql-test
parent1aa3b02c51f00c142fb89c809e6228d6f99288d9 (diff)
downloadmariadb-git-9bc9855c16f815e71223398ef17cd6052becc44e.tar.gz
mtr changes:
* expanding unknown env variable does not abort mtr * have_archive, blackhole, innodb - preload the corresponding engine * all options from .opt files get equal treatment, all are searched for special options, not only -{master,slave}.opt as before (which ignored suite.opt and --mysqld=...) * --plugin-load gets special treatment too - all instances are merged into one * federated test fixed to preload federated
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/README.suites15
-rw-r--r--mysql-test/include/have_archive.inc9
-rw-r--r--mysql-test/include/have_archive.opt2
-rw-r--r--mysql-test/include/have_blackhole.opt2
-rw-r--r--mysql-test/include/have_innodb.opt1
-rw-r--r--mysql-test/include/have_pbxt.inc9
-rw-r--r--mysql-test/lib/mtr_cases.pm133
-rwxr-xr-xmysql-test/mysql-test-run.pl22
-rw-r--r--mysql-test/suite/federated/federated_innodb-slave.opt1
-rw-r--r--mysql-test/suite/federated/federated_transactions-slave.opt1
-rw-r--r--mysql-test/suite/federated/my.cnf2
-rw-r--r--mysql-test/suite/federated/suite.opt2
-rw-r--r--mysql-test/t/mysqltest_ps.test2
13 files changed, 107 insertions, 94 deletions
diff --git a/mysql-test/README.suites b/mysql-test/README.suites
index 99155f37485..076fc216a0e 100644
--- a/mysql-test/README.suites
+++ b/mysql-test/README.suites
@@ -20,11 +20,18 @@ subdirectories under the suitedir or directly in the suitedir
(that is suitedir/t/*.test or suitedir/*.test, same for *.result))
==========================
-A suite can contain a suite.opt file - at the same location where .test
-files are. As usual, the .opt file can use $-substitutions for the
-environment variables.
+A suite can contain a suite.opt file - at the same location where .test files
+are or in the suite directory. As usual, the .opt file can use $-substitutions
+for the environment variables.
Usually, using my.cnf template (see below) is preferrable.
+
+But command line options (.opt files and combinations file) get special
+treatment - they can have special options that affect mtr behavior. cnf
+files cannot. Special options are
+ --timezone, --plugin-load, --result-file, --config-file-template,
+ --default-time-zone, --force-restart
+
==========================
A suite can have suite.pm file in the suitedir. It must declare a
package that inherits from My::Suite.
@@ -108,8 +115,8 @@ Most probably a suite my.cnf will need to start from
!include include/default_my.cnf
and then modify the configuration as necessary.
-==========================
+==========================
A suite can have combinations file in the suitedir. It uses my.cnf syntax
but it cannot use @-substitutions. Instead, it can use $-substitutions for
the environment variables. Because the combination options will not be
diff --git a/mysql-test/include/have_archive.inc b/mysql-test/include/have_archive.inc
index 82399ca4c6c..0fd85fa576f 100644
--- a/mysql-test/include/have_archive.inc
+++ b/mysql-test/include/have_archive.inc
@@ -1,4 +1,5 @@
---disable_query_log
---require r/true.require
-select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'archive';
---enable_query_log
+if (!`SELECT count(*) FROM information_schema.engines WHERE
+ (support = 'YES' OR support = 'DEFAULT') AND
+ engine = 'archive'`){
+ skip Need archive engine;
+}
diff --git a/mysql-test/include/have_archive.opt b/mysql-test/include/have_archive.opt
new file mode 100644
index 00000000000..cf9309d9fb0
--- /dev/null
+++ b/mysql-test/include/have_archive.opt
@@ -0,0 +1,2 @@
+--loose-archive
+--plugin-load=$HA_ARCHIVE_SO
diff --git a/mysql-test/include/have_blackhole.opt b/mysql-test/include/have_blackhole.opt
new file mode 100644
index 00000000000..b600b468390
--- /dev/null
+++ b/mysql-test/include/have_blackhole.opt
@@ -0,0 +1,2 @@
+--loose-blackhole
+--plugin-load=$HA_BLACKHOLE_SO
diff --git a/mysql-test/include/have_innodb.opt b/mysql-test/include/have_innodb.opt
index 48457b17309..4fb96229a7b 100644
--- a/mysql-test/include/have_innodb.opt
+++ b/mysql-test/include/have_innodb.opt
@@ -1 +1,2 @@
--loose-innodb
+--plugin-load=$HA_XTRADB_SO
diff --git a/mysql-test/include/have_pbxt.inc b/mysql-test/include/have_pbxt.inc
index a8afc2c8324..b11aee2617f 100644
--- a/mysql-test/include/have_pbxt.inc
+++ b/mysql-test/include/have_pbxt.inc
@@ -1,4 +1,5 @@
-disable_query_log;
---require r/true.require
-select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'pbxt';
-enable_query_log;
+if (!`SELECT count(*) FROM information_schema.engines WHERE
+ (support = 'YES' OR support = 'DEFAULT') AND
+ engine = 'pbxt'`){
+ skip Need PBXT engine;
+}
diff --git a/mysql-test/lib/mtr_cases.pm b/mysql-test/lib/mtr_cases.pm
index f9c0c762753..f7794d1964d 100644
--- a/mysql-test/lib/mtr_cases.pm
+++ b/mysql-test/lib/mtr_cases.pm
@@ -325,12 +325,8 @@ sub collect_one_suite
}
# Read suite.opt file
- my $suite_opt_file= "$testdir/suite.opt";
- my $suite_opts= [];
- if ( -f $suite_opt_file )
- {
- $suite_opts= opts_from_file($suite_opt_file);
- }
+ my $suite_opts= [ opts_from_file("$testdir/suite.opt") ];
+ $suite_opts = [ opts_from_file("$suitedir/suite.opt") ] unless @$suite_opts;
if ( @$opt_cases )
{
@@ -618,67 +614,78 @@ sub optimize_cases {
# Read options from the given opt file and append them as an array
# to $tinfo->{$opt_name}
#
-sub process_opts_file {
- my ($tinfo, $opt_file, $opt_name)= @_;
+sub process_opts {
+ my ($tinfo, $opt_name)= @_;
+
+ my @opts= @{$tinfo->{$opt_name}};
+ $tinfo->{$opt_name} = [];
+
+ my @plugins;
- if ( -f $opt_file )
+ foreach my $opt (@opts)
{
- my $opts= opts_from_file($opt_file);
+ my $value;
- foreach my $opt ( @$opts )
+ # The opt file is used both to send special options to the mysqld
+ # as well as pass special test case specific options to this
+ # script
+
+ $value= mtr_match_prefix($opt, "--timezone=");
+ if ( defined $value )
{
- my $value;
+ $tinfo->{'timezone'}= $value;
+ next;
+ }
- # The opt file is used both to send special options to the mysqld
- # as well as pass special test case specific options to this
- # script
+ $value= mtr_match_prefix($opt, "--plugin-load=");
+ if (defined $value)
+ {
+ push @plugins, $value;
+ next;
+ }
- $value= mtr_match_prefix($opt, "--timezone=");
- if ( defined $value )
- {
- $tinfo->{'timezone'}= $value;
- next;
- }
+ $value= mtr_match_prefix($opt, "--result-file=");
+ if ( defined $value )
+ {
+ # Specifies the file mysqltest should compare
+ # output against
+ $tinfo->{'result_file'}= "r/$value.result";
+ next;
+ }
- $value= mtr_match_prefix($opt, "--result-file=");
- if ( defined $value )
- {
- # Specifies the file mysqltest should compare
- # output against
- $tinfo->{'result_file'}= "r/$value.result";
- next;
- }
+ $value= mtr_match_prefix($opt, "--config-file-template=");
+ if ( defined $value)
+ {
+ # Specifies the configuration file to use for this test
+ $tinfo->{'template_path'}= dirname($tinfo->{path})."/$value";
+ next;
+ }
- $value= mtr_match_prefix($opt, "--config-file-template=");
- if ( defined $value)
- {
- # Specifies the configuration file to use for this test
- $tinfo->{'template_path'}= dirname($tinfo->{path})."/$value";
- next;
- }
+ # If we set default time zone, remove the one we have
+ $value= mtr_match_prefix($opt, "--default-time-zone=");
+ if ( defined $value )
+ {
+ # Set timezone for this test case to something different
+ $tinfo->{'timezone'}= "GMT-8";
+ # Fallthrough, add the --default-time-zone option
+ }
- # If we set default time zone, remove the one we have
- $value= mtr_match_prefix($opt, "--default-time-zone=");
- if ( defined $value )
- {
- # Set timezone for this test case to something different
- $tinfo->{'timezone'}= "GMT-8";
- # Fallthrough, add the --default-time-zone option
- }
+ # The --restart option forces a restart even if no special
+ # option is set. If the options are the same as next testcase
+ # there is no need to restart after the testcase
+ # has completed
+ if ( $opt eq "--force-restart" )
+ {
+ $tinfo->{'force_restart'}= 1;
+ next;
+ }
- # The --restart option forces a restart even if no special
- # option is set. If the options are the same as next testcase
- # there is no need to restart after the testcase
- # has completed
- if ( $opt eq "--force-restart" )
- {
- $tinfo->{'force_restart'}= 1;
- next;
- }
+ # Ok, this was a real option, add it
+ push(@{$tinfo->{$opt_name}}, $opt);
+ }
- # Ok, this was a real option, add it
- push(@{$tinfo->{$opt_name}}, $opt);
- }
+ if (@plugins) {
+ push @{$tinfo->{$opt_name}}, "--plugin-load=" . join(':', @plugins);
}
}
@@ -1009,15 +1016,17 @@ sub collect_one_test_case {
# ----------------------------------------------------------------------
for (@source_files) {
s/\.\w+$//;
- process_opts_file($tinfo, "$_.opt", 'master_opt');
- process_opts_file($tinfo, "$_.opt", 'slave_opt');
- process_opts_file($tinfo, "$_-master.opt", 'master_opt');
- process_opts_file($tinfo, "$_-slave.opt", 'slave_opt');
+ push @{$tinfo->{master_opt}}, opts_from_file("$_.opt");
+ push @{$tinfo->{slave_opt}}, opts_from_file("$_.opt");
+ push @{$tinfo->{master_opt}}, opts_from_file("$_-master.opt");
+ push @{$tinfo->{slave_opt}}, opts_from_file("$_-slave.opt");
}
push(@{$tinfo->{'master_opt'}}, @::opt_extra_mysqld_opt);
push(@{$tinfo->{'slave_opt'}}, @::opt_extra_mysqld_opt);
+ process_opts($tinfo, 'master_opt');
+ process_opts($tinfo, 'slave_opt');
return $tinfo;
}
@@ -1103,6 +1112,8 @@ sub opts_from_file ($) {
my $file= shift;
local $_;
+ return () unless -f $file;
+
open(FILE,"<",$file) or mtr_error("can't open file \"$file\": $!");
my @args;
while ( <FILE> )
@@ -1143,7 +1154,7 @@ sub opts_from_file ($) {
}
}
close FILE;
- return \@args;
+ return @args;
}
sub print_testcases {
diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl
index 25b881488db..98e116b4217 100755
--- a/mysql-test/mysql-test-run.pl
+++ b/mysql-test/mysql-test-run.pl
@@ -3564,8 +3564,9 @@ sub timezone {
my ($tinfo)= @_;
local $_ = $tinfo->{timezone};
return 'DEFAULT' unless defined $_;
- s/\$\{(\w+)\}/envsubst($1)/ge;
- s/\$(\w+)/envsubst($1)/ge;
+ no warnings 'uninitialized';
+ s/\$\{(\w+)\}/$ENV{$1}/ge;
+ s/\$(\w+)/$ENV{$1}/ge;
$_;
}
@@ -5071,18 +5072,6 @@ sub started { return grep(defined $_, map($_->{proc}, @_)); }
sub stopped { return grep(!defined $_, map($_->{proc}, @_)); }
-sub envsubst {
- my $string= shift;
-
- if ( ! defined $ENV{$string} )
- {
- mtr_error(".opt file references '$string' which is not set");
- }
-
- return $ENV{$string};
-}
-
-
sub get_extra_opts {
my ($mysqld, $tinfo)= @_;
@@ -5093,8 +5082,9 @@ sub get_extra_opts {
# Expand environment variables
foreach my $opt ( @$opts )
{
- $opt =~ s/\$\{(\w+)\}/envsubst($1)/ge;
- $opt =~ s/\$(\w+)/envsubst($1)/ge;
+ no warnings 'uninitialized';
+ $opt =~ s/\$\{(\w+)\}/$ENV{$1}/ge;
+ $opt =~ s/\$(\w+)/$ENV{$1}/ge;
}
return $opts;
}
diff --git a/mysql-test/suite/federated/federated_innodb-slave.opt b/mysql-test/suite/federated/federated_innodb-slave.opt
deleted file mode 100644
index 48457b17309..00000000000
--- a/mysql-test/suite/federated/federated_innodb-slave.opt
+++ /dev/null
@@ -1 +0,0 @@
---loose-innodb
diff --git a/mysql-test/suite/federated/federated_transactions-slave.opt b/mysql-test/suite/federated/federated_transactions-slave.opt
deleted file mode 100644
index 48457b17309..00000000000
--- a/mysql-test/suite/federated/federated_transactions-slave.opt
+++ /dev/null
@@ -1 +0,0 @@
---loose-innodb
diff --git a/mysql-test/suite/federated/my.cnf b/mysql-test/suite/federated/my.cnf
index 7556abad300..3962c2aca77 100644
--- a/mysql-test/suite/federated/my.cnf
+++ b/mysql-test/suite/federated/my.cnf
@@ -3,10 +3,8 @@
[mysqld.1]
log-bin= master-bin
-loose-federated
[mysqld.2]
-loose-federated
[ENV]
MASTER_MYPORT= @mysqld.1.port
diff --git a/mysql-test/suite/federated/suite.opt b/mysql-test/suite/federated/suite.opt
new file mode 100644
index 00000000000..2cce1887441
--- /dev/null
+++ b/mysql-test/suite/federated/suite.opt
@@ -0,0 +1,2 @@
+--federated
+--plugin-load=$HA_FEDERATEDX_SO
diff --git a/mysql-test/t/mysqltest_ps.test b/mysql-test/t/mysqltest_ps.test
index c91f6dcb409..c5a332f691f 100644
--- a/mysql-test/t/mysqltest_ps.test
+++ b/mysql-test/t/mysqltest_ps.test
@@ -4,7 +4,7 @@
if (`SELECT $PS_PROTOCOL = 0`)
{
- --skip Need prepared statement protocol
+ --skip Need ps-protocol
}
#