Commit c3987707 authored by Sergei Golubchik's avatar Sergei Golubchik

overlay support for mysql-test-run and mysqltest

mysql-test-run auto-disables all optional plugins.


mysql-test/include/default_client.cnf:
  no @OPT.plugindir anymore
mysql-test/include/default_mysqld.cnf:
  don't disable plugins manually - mtr can do it better
mysql-test/suite/innodb/t/innodb_bug47167.test:
  mtr now uses suite-dir as an include path
mysql-test/suite/innodb/t/innodb_file_format.test:
  mtr now uses suite-dir as an include path
mysql-test/t/partition_binlog.test:
  this test uses partitions
storage/example/mysql-test/mtr/t/source.result:
  update results. as mysqltest includes the correct overlayed include
storage/innobase/handler/ha_innodb.cc:
  the assert is wrong
parent ae0a7cfd
This diff is collapsed.
...@@ -133,7 +133,6 @@ and values - with templating extensions. They are ...@@ -133,7 +133,6 @@ and values - with templating extensions. They are
to values in the [ENV] group of my.cnf file. to values in the [ENV] group of my.cnf file.
Via the OPT group one can refer to special values: Via the OPT group one can refer to special values:
@OPT.plugindir - a path to plugindir
@OPT.vardir - a path to vardir @OPT.vardir - a path to vardir
@OPT.port - a new port number is reserved out of the pool. It will not @OPT.port - a new port number is reserved out of the pool. It will not
match any other port number used by this test run. match any other port number used by this test run.
......
# Check if ipv6 is available. # Check if ipv6 is available.
# #
# The real test is done in the mysql-test-run.pl # The real check is done in the suite.pm
# (it has to be done *before* mysqld is started) # (it has to be done *before* mysqld is started)
# This file only signals mysql-test-run.pl that ipv6 support is needed
# #
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# #
[client] [client]
plugin-dir=@OPT.plugindir plugin-dir=@mysqld.1.plugin-dir
[mysql] [mysql]
default-character-set=latin1 default-character-set=latin1
......
...@@ -23,21 +23,19 @@ character-set-server= latin1 ...@@ -23,21 +23,19 @@ character-set-server= latin1
# disconnects when test servers are put under load see BUG#28359 # disconnects when test servers are put under load see BUG#28359
connect-timeout= 60 connect-timeout= 60
plugin-dir=@OPT.plugindir
secure-file-priv= @OPT.vardir secure-file-priv= @OPT.vardir
log-basename=mysqld log-basename=mysqld
debug-no-sync debug-no-sync
# Retry bind as this may fail on busy server
port-open-timeout=10
log-bin-trust-function-creators=1 log-bin-trust-function-creators=1
key_buffer_size= 1M key_buffer_size= 1M
sort_buffer= 256K sort_buffer= 256K
max_heap_table_size= 1M max_heap_table_size= 1M
loose-skip-innodb
loose-skip-pbxt
loose-skip-federated
loose-skip-feedback
loose-feedback-user-info= mysql-test loose-feedback-user-info= mysql-test
loose-innodb_data_file_path= ibdata1:10M:autoextend loose-innodb_data_file_path= ibdata1:10M:autoextend
...@@ -61,3 +59,20 @@ loose-performance-schema-max-table-instances=500 ...@@ -61,3 +59,20 @@ loose-performance-schema-max-table-instances=500
loose-performance-schema-max-table-handles=1000 loose-performance-schema-max-table-handles=1000
binlog-direct-non-transactional-updates binlog-direct-non-transactional-updates
# here, at the end of [mysqld] group mtr will automatically disable
# all optional plugins.
[embedded]
# mtr automatically adds [embedded] group at the end and copies [mysqld]
# and [mysqld.1] groups into it.
# but we want [server] group to be after [mysqld] (and its copies).
# create a non-empty [embedded] group here, to force it before [server]
local-infile
[server]
# Aria is optional, but it must be enabled if it's used for temporary
# tables. Let's enable it in the [server] group, because this group
# is read after [mysqld] and [embedded]
loose-aria
#
# suite.pm will make sure that all tests including this file
# will be skipped unless this is a debug build.
#
# The test below is redundant
-- require r/have_debug.require -- require r/have_debug.require
disable_query_log; disable_query_log;
select (version() like '%debug%') as debug; select (version() like '%debug%') as debug;
......
...@@ -2,11 +2,17 @@ ...@@ -2,11 +2,17 @@
ignore-builtin-innodb ignore-builtin-innodb
plugin-load=$HA_INNODB_SO plugin-load=$HA_INNODB_SO
innodb innodb
innodb-cmpmem
innodb-trx
[xtradb_plugin] [xtradb_plugin]
ignore-builtin-innodb ignore-builtin-innodb
plugin-load=$HA_XTRADB_SO plugin-load=$HA_XTRADB_SO
innodb innodb
innodb-cmpmem
innodb-trx
[xtradb] [xtradb]
innodb innodb
innodb-cmpmem
innodb-trx
#
# suite.pm will make sure that all tests including this file
# will be skipped unless innodb or xtradb is enabled
#
# The test below is redundant
if (`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.ENGINES WHERE engine = 'innodb' AND support IN ('YES', 'DEFAULT', 'ENABLED')`) if (`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.ENGINES WHERE engine = 'innodb' AND support IN ('YES', 'DEFAULT', 'ENABLED')`)
{ {
--skip Test requires InnoDB. --skip Test requires InnoDB.
......
...@@ -74,5 +74,8 @@ BEGIN ...@@ -74,5 +74,8 @@ BEGIN
mysql.time_zone_transition_type, mysql.time_zone_transition_type,
mysql.user; mysql.user;
-- verify that no plugin changed its disabled/enabled state
SELECT * FROM INFORMATION_SCHEMA.PLUGINS;
END|| END||
#
# suite.pm will make sure that all tests including this file
# will be skipped unless this is an embedded test run
#
# The test below is redundant
-- require r/not_embedded.require -- require r/not_embedded.require
disable_query_log; disable_query_log;
select version() like '%embedded%' as 'have_embedded'; select version() like '%embedded%' as 'have_embedded';
......
...@@ -164,9 +164,6 @@ sub value { ...@@ -164,9 +164,6 @@ sub value {
return $option->value(); return $option->value();
} }
sub auto { 0 };
# #
# Return value for an option if it exist # Return value for an option if it exist
# #
...@@ -191,8 +188,6 @@ sub new { ...@@ -191,8 +188,6 @@ sub new {
bless My::Config::Group->new($group_name), $class; bless My::Config::Group->new($group_name), $class;
} }
sub auto { 1 };
# #
# Return value for an option in the group, fail if it does not exist # Return value for an option in the group, fail if it does not exist
# #
...@@ -218,8 +213,6 @@ use strict; ...@@ -218,8 +213,6 @@ use strict;
use warnings; use warnings;
use Carp; use Carp;
sub auto { 1 };
sub new { sub new {
my ($class, $group_name)= @_; my ($class, $group_name)= @_;
bless My::Config::Group->new($group_name), $class; bless My::Config::Group->new($group_name), $class;
...@@ -442,6 +435,17 @@ sub groups { ...@@ -442,6 +435,17 @@ sub groups {
} }
#
# Return a list with "real" groups in config, those
# that should be written to a my.cnf file, those that contain options.
# Same as groups() but without auto-generated groups like ENV or OPT.
#
sub option_groups {
my ($self)= @_;
return ( grep { ref $_ eq 'My::Config::Group' } @{$self->{groups}} );
}
# #
# Return a list of all the groups in config # Return a list of all the groups in config
# starting with the given string # starting with the given string
......
...@@ -31,8 +31,19 @@ use File::Basename; ...@@ -31,8 +31,19 @@ use File::Basename;
# #
# Rules to run first of all # Rules to run first of all
# #
sub add_opt_values {
my ($self, $config)= @_;
# add auto-options
$config->insert('OPT', 'port' => sub { fix_port($self, $config) });
$config->insert('OPT', 'vardir' => sub { $self->{ARGS}->{vardir} });
$config->insert('mysqld', "loose-skip-$_" => undef) for (@::optional_plugins);
}
my @pre_rules= my @pre_rules=
( (
\&add_opt_values,
); );
...@@ -230,9 +241,10 @@ my @mysqld_rules= ...@@ -230,9 +241,10 @@ my @mysqld_rules=
{ 'port' => \&fix_port }, { 'port' => \&fix_port },
{ 'socket' => \&fix_socket }, { 'socket' => \&fix_socket },
{ '#log-error' => \&fix_log_error }, { '#log-error' => \&fix_log_error },
{ 'general-log' => sub { return 1; } }, { 'general-log' => 1 },
{ 'plugin-dir' => sub { $::plugindir } },
{ 'general-log-file' => \&fix_log }, { 'general-log-file' => \&fix_log },
{ 'slow-query-log' => sub { return 1; } }, { 'slow-query-log' => 1 },
{ 'slow-query-log-file' => \&fix_log_slow_queries }, { 'slow-query-log-file' => \&fix_log_slow_queries },
{ '#user' => sub { return shift->{ARGS}->{user} || ""; } }, { '#user' => sub { return shift->{ARGS}->{user} || ""; } },
{ '#password' => sub { return shift->{ARGS}->{password} || ""; } }, { '#password' => sub { return shift->{ARGS}->{password} || ""; } },
...@@ -432,7 +444,7 @@ sub post_check_embedded_group { ...@@ -432,7 +444,7 @@ sub post_check_embedded_group {
my $first_mysqld= $config->first_like('mysqld.') or my $first_mysqld= $config->first_like('mysqld.') or
croak "Can't run with embedded, config has no mysqld"; croak "Can't run with embedded, config has no mysqld";
my @no_copy = my %no_copy = map { $_ => 1 }
( (
'#log-error', # Embedded server writes stderr to mysqltest's log file '#log-error', # Embedded server writes stderr to mysqltest's log file
'slave-net-timeout', # Embedded server are not build with replication 'slave-net-timeout', # Embedded server are not build with replication
...@@ -441,7 +453,7 @@ sub post_check_embedded_group { ...@@ -441,7 +453,7 @@ sub post_check_embedded_group {
foreach my $option ( $mysqld->options(), $first_mysqld->options() ) { foreach my $option ( $mysqld->options(), $first_mysqld->options() ) {
# Don't copy options whose name is in "no_copy" list # Don't copy options whose name is in "no_copy" list
next if grep ( $option->name() eq $_, @no_copy); next if $no_copy{$option->name()};
$config->insert('embedded', $option->name(), $option->value()) $config->insert('embedded', $option->name(), $option->value())
} }
...@@ -632,19 +644,11 @@ sub new_config { ...@@ -632,19 +644,11 @@ sub new_config {
testname => $args->{testname}, testname => $args->{testname},
}, $class; }, $class;
# add auto-options # Run pre rules
$config->insert('OPT', 'port' => sub { fix_port($self, $config) }); foreach my $rule ( @pre_rules ) {
$config->insert('OPT', 'vardir' => sub { $self->{ARGS}->{vardir} }); &$rule($self, $config);
$config->insert('OPT', 'plugindir' => sub { $::plugindir });
{
# Run pre rules
foreach my $rule ( @pre_rules ) {
&$rule($self, $config);
}
} }
$self->run_section_rules($config, $self->run_section_rules($config,
'cluster_config\.\w*$', 'cluster_config\.\w*$',
@cluster_config_rules); @cluster_config_rules);
......
...@@ -64,7 +64,7 @@ sub my_find_bin { ...@@ -64,7 +64,7 @@ sub my_find_bin {
# ------------------------------------------------------- # -------------------------------------------------------
# Find and return the first executable # Find and return the first executable
# ------------------------------------------------------- # -------------------------------------------------------
foreach my $path (my_find_paths($base, $paths, $names, $bin_extension)) { foreach my $path (my_build_path_list($base, $paths, $names, $bin_extension)) {
return $path if ( -x $path or (IS_WINDOWS and -f $path) ); return $path if ( -x $path or (IS_WINDOWS and -f $path) );
} }
if (defined $required and $required == NOT_REQUIRED){ if (defined $required and $required == NOT_REQUIRED){
...@@ -98,7 +98,7 @@ sub my_find_file { ...@@ -98,7 +98,7 @@ sub my_find_file {
# ------------------------------------------------------- # -------------------------------------------------------
# Find and return the first executable # Find and return the first executable
# ------------------------------------------------------- # -------------------------------------------------------
foreach my $path (my_find_paths($base, $paths, $names, $bin_extension)) { foreach my $path (my_build_path_list($base, $paths, $names, $bin_extension)) {
return $path if ( -f $path ); return $path if ( -f $path );
} }
if (defined $required and $required == NOT_REQUIRED){ if (defined $required and $required == NOT_REQUIRED){
...@@ -110,8 +110,9 @@ sub my_find_file { ...@@ -110,8 +110,9 @@ sub my_find_file {
# #
# my_find_dir - find the first existing directory in one of # my_find_dir - find the existing directories in one of
# the given paths # the given paths. Returns the first found in the scalar context
# and all of them in the list context.
# #
# Example: # Example:
# my $charset_set= my_find_dir($basedir, # my $charset_set= my_find_dir($basedir,
...@@ -127,20 +128,22 @@ sub my_find_file { ...@@ -127,20 +128,22 @@ sub my_find_file {
# #
sub my_find_dir { sub my_find_dir {
my ($base, $paths, $dirs, $required)= @_; my ($base, $paths, $dirs, $required)= @_;
croak "usage: my_find_dir(<base>, <paths>[, <dirs>])" croak "usage: my_find_dir(<base>, <paths>[, <dirs>[, <required>]])"
unless (@_ == 3 or @_ == 2); unless (@_ >= 2 and @_ <= 4);
# ------------------------------------------------------- my @all;
# Find and return the first directory foreach my $path (my_build_path_list($base, $paths, $dirs)) {
# ------------------------------------------------------- next unless -d $path;
foreach my $path (my_find_paths($base, $paths, $dirs)) { return $path unless wantarray;
return $path if ( -d $path ); push @all, $path;
} }
return @all if @all;
return wantarray ? () : "" if defined $required and $required == NOT_REQUIRED;
find_error($base, $paths, $dirs); find_error($base, $paths, $dirs);
} }
sub my_find_paths { sub my_build_path_list {
my ($base, $paths, $names, $extension)= @_; my ($base, $paths, $names, $extension)= @_;
# Convert the arguments into two normal arrays to ease # Convert the arguments into two normal arrays to ease
...@@ -237,7 +240,7 @@ sub find_error { ...@@ -237,7 +240,7 @@ sub find_error {
croak "** ERROR: Could not find ", croak "** ERROR: Could not find ",
commify(fnuttify(@names)), " in ", commify(fnuttify(@names)), " in ",
commify(fnuttify(my_find_paths($base, $paths, $names))), "\n"; commify(fnuttify(my_build_path_list($base, $paths, $names))), "\n";
} }
1; 1;
...@@ -7,9 +7,11 @@ sub config_files { () } ...@@ -7,9 +7,11 @@ sub config_files { () }
sub servers { () } sub servers { () }
sub skip_combinations { () } sub skip_combinations { () }
sub new { bless { } }
sub list_cases { sub list_cases {
my ($self, $testdir) = @_; my ($self, $testdir) = @_;
opendir(TESTDIR, $testdir) or mtr_error("Can't open dir \"$testdir\": $!"); opendir(TESTDIR, $testdir) or return ();
my (@cases) = grep { s/\.test$// } readdir TESTDIR; my (@cases) = grep { s/\.test$// } readdir TESTDIR;
closedir TESTDIR; closedir TESTDIR;
@cases; @cases;
......
...@@ -40,7 +40,7 @@ sub copy { ...@@ -40,7 +40,7 @@ sub copy {
my $copy= My::Test->new(); my $copy= My::Test->new();
while (my ($key, $value) = each(%$self)) { while (my ($key, $value) = each(%$self)) {
if (ref $value eq "ARRAY") { if (ref $value eq "ARRAY") {
push(@{$copy->{$key}}, @$value); $copy->{$key} = [ @$value ];
} else { } else {
$copy->{$key}= $value; $copy->{$key}= $value;
} }
......
This diff is collapsed.
This diff is collapsed.
...@@ -366,7 +366,7 @@ $dollar ...@@ -366,7 +366,7 @@ $dollar
drop table t1; drop table t1;
mysqltest: At line 1: query 'let $var2= `failing query`' failed: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'failing query' at line 1 mysqltest: At line 1: query 'let $var2= `failing query`' failed: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'failing query' at line 1
mysqltest: At line 1: Missing required argument 'filename' to command 'source' mysqltest: At line 1: Missing required argument 'filename' to command 'source'
mysqltest: At line 1: Could not open './non_existingFile' for reading, errno: 2 mysqltest: At line 1: Could not open 'non_existingFile' for reading, errno: 2
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/recursive.sql": mysqltest: In included file "MYSQLTEST_VARDIR/tmp/recursive.sql":
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1: included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1: included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
......
--- r/plugin_innodb.result 2011-10-21 23:35:26.000000000 +0200
+++ r/plugin_innodb.reject 2012-02-08 13:59:19.000000000 +0100
@@ -4,6 +4,9 @@
alter table mysql.plugin engine=innodb;
restart
create table t1(a int) engine=example;
+Warnings:
+Warning 1286 Unknown storage engine 'example'
+Warning 1266 Using storage engine MyISAM for table 't1'
select * from t1;
a
drop table t1;
This diff is collapsed.
...@@ -5,12 +5,31 @@ package My::Suite::Main; ...@@ -5,12 +5,31 @@ package My::Suite::Main;
sub skip_combinations { sub skip_combinations {
my @combinations; my @combinations;
# disable innodb/xtradb combinatons for configurations that were not built
push @combinations, 'innodb_plugin' unless $ENV{HA_INNODB_SO}; push @combinations, 'innodb_plugin' unless $ENV{HA_INNODB_SO};
push @combinations, 'xtradb_plugin' unless $ENV{HA_XTRADB_SO}; push @combinations, 'xtradb_plugin' unless $ENV{HA_XTRADB_SO};
push @combinations, 'xtradb' unless $::mysqld_variables{'innodb'} eq "ON"; push @combinations, 'xtradb' unless $::mysqld_variables{'innodb'} eq "ON";
( 'include/have_innodb.combinations' => [ @combinations ] ) my %skip = ( 'include/have_innodb.combinations' => [ @combinations ]);
# as a special case, disable certain include files as a whole
$skip{'include/not_embedded.inc'} = 'Not run for embedded server'
if $::opt_embedded_server;
$skip{'include/have_debug.inc'} = 'Requires debug build'
unless defined $::mysqld_variables{'debug-dbug'};
$skip{'include/not_windows.inc'} = 'Requires not Windows' if IS_WINDOWS;
# disable tests that use ipv6, if unsupported
use Socket;
$skip{'include/check_ipv6.inc'} = 'No IPv6'
unless socket SOCK, PF_INET6, SOCK_STREAM, getprotobyname('tcp');
close SOCK;
%skip;
} }
bless { }; bless { };
[old] [old]
--federated plugin-load=$HA_FEDERATED_SO
--plugin-load=$HA_FEDERATED_SO
[X] [X]
--federated plugin-load=$HA_FEDERATEDX_SO
--plugin-load=$HA_FEDERATEDX_SO
--plugin-load=$HA_FEDERATEDX_SO --plugin-load=$HA_FEDERATEDX_SO --federated
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
!include include/default_client.cnf !include include/default_client.cnf
[mysqld.1] [mysqld.1]
federated
#log-bin= master-bin #log-bin= master-bin
[mysqld.2] [mysqld.2]
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
# 2008-06-06 mleich Create this variant for the embedded server # 2008-06-06 mleich Create this variant for the embedded server
# #
--source include/have_innodb.inc
--source include/have_xtradb.inc --source include/have_xtradb.inc
if (`SELECT VERSION() NOT LIKE '%embedded%'`) if (`SELECT VERSION() NOT LIKE '%embedded%'`)
......
...@@ -3,12 +3,13 @@ ...@@ -3,12 +3,13 @@
# #
# this file deletes old innodb files and restarts mysqld # this file deletes old innodb files and restarts mysqld
# #
source include/not_embedded.inc;
let $_server_id= `SELECT @@server_id`; let $_server_id= `SELECT @@server_id`;
let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.$_server_id.expect; let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.$_server_id.expect;
let $datadir= `SELECT @@datadir`; let $datadir= `SELECT @@datadir`;
exec echo "wait" > $_expect_file_name; exec echo "wait" > $_expect_file_name;
shutdown_server 10; # give it 10 seconds to die shutdown_server;
remove_file $datadir/ib_logfile0; remove_file $datadir/ib_logfile0;
remove_file $datadir/ib_logfile1; remove_file $datadir/ib_logfile1;
remove_file $datadir/ibdata1; remove_file $datadir/ibdata1;
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# originally "innodb_file_format_check") with a user-Defined Variable. # originally "innodb_file_format_check") with a user-Defined Variable.
--source include/not_embedded.inc --source include/not_embedded.inc
--source suite/innodb/include/restart_and_reinit.inc --source include/restart_and_reinit.inc
# Save the value (Antelope) in 'innodb_file_format_max' to # Save the value (Antelope) in 'innodb_file_format_max' to
# 'old_innodb_file_format_max' # 'old_innodb_file_format_max'
......
--source include/have_innodb.inc --source include/have_innodb.inc
--source suite/innodb/include/restart_and_reinit.inc --source include/restart_and_reinit.inc
let $innodb_file_format_orig=`select @@innodb_file_format`; let $innodb_file_format_orig=`select @@innodb_file_format`;
......
[c1]
allow-suspicious-udfs
[c2]
disable-local-infile
#
# this tests how mtr handles a test that has no combinations in the
# parent suite and one combination in the overlay.
#
select 1;
select "proxy";
source combs.inc;
#
# Test file that includes itself. See self.test in the example overlay
#
eval select "<$a>";
--- suite/mtr/t/simple.result 2012-02-04 12:13:41.000000000 +0100
+++ suite/mtr/t/simple,infile,verbose.reject 2012-02-04 12:16:10.000000000 +0100
@@ -3,7 +3,7 @@
proxy
select @@local_infile;
@@local_infile
-1
+0
select @@old;
@@old
0
--- suite/mtr/t/simple,old.result 2012-02-04 12:13:25.000000000 +0100
+++ suite/mtr/t/simple,old,infile.reject 2012-02-04 12:13:59.000000000 +0100
@@ -3,7 +3,7 @@
proxy
select @@local_infile;
@@local_infile
-1
+0
select @@old;
@@old
1
select "proxy";
proxy
proxy
select @@local_infile;
@@local_infile
1
select @@old;
@@old
1
select "proxy";
proxy
proxy
select @@local_infile;
@@local_infile
1
select @@old;
@@old
0
#
# This tests the following:
# simple.test has two combinations (in simple.combinations).
# it includes combs.inc (indirectly, via proxy.inc) with two more combinations
# thus it should run 4 times
#
# combs.combinations is overlayed in the example overlay, adding one more
# combination. Thus simple.test must run two more times in the mtr-example.
#
# Note that neither simple.test nor proxy.inc are touched by the overlay,
# mtr needs to propagate "affected by the overlay" flag up the
# inclusion chain.
#
source proxy.inc;
select @@old;
#
# the test is present in the mtr suite and is not affected by the example
# overlay. It should run only once.
#
select 1;
#
# The inc.inc file is overlayed in the example overlay. mtr should correctly
# detect that this test needs to run for mtr-example. And mysqltest
# needs to use the correct version of inc.inc depending on whether it
# runs the parent suite or the overlay.
#
source inc.inc;
eval select $a;
select @@local_infile;
select @@max_error_count;
@@max_error_count
64
#
# This test has two combinations in the mtr suite (from combs.combinations)
# and one combination from mtr-example (overlayed combs.combinations).
# But it also has test2.opt file in the overlay. Thus it will run
# two times in the parent suite, and three times in the overlay.
#
--disable_result_log
source combs.inc;
--enable_result_log
select @@max_error_count;
#
# There is testsh-master.sh in the example overlay. That makes the test
# "affected by the overlay" and it will run twice: for the parent suite and
# for the overlay.
#
select 1;
#
# this suite is overlayed in heap and myisam.
# mtr2-heap has my.cnf, mtr2-myisam has suite.opt
# it means that all tests from the mtr2 suite will run
# three times - once for the parent suite, and once for each overlay.
# even if the test files are not overlayed.
#
select 1;
--source include/big_test.inc --source include/big_test.inc
--source include/have_innodb.inc --source include/have_xtradb.inc
drop table if exists t1; drop table if exists t1;
# #
......
...@@ -2,7 +2,12 @@ package My::Suite::Plugins; ...@@ -2,7 +2,12 @@ package My::Suite::Plugins;
@ISA = qw(My::Suite); @ISA = qw(My::Suite);
$ENV{PAM_SETUP_FOR_MTR}=1 if -e '/etc/pam.d/mariadb_mtr'; sub skip_combinations {
my %skip;
$skip{'t/pam.test'} = 'No pam setup for mtr'
unless -e '/etc/pam.d/mariadb_mtr';
%skip;
}
bless { }; bless { };
...@@ -5,10 +5,6 @@ if (!$AUTH_PAM_SO) { ...@@ -5,10 +5,6 @@ if (!$AUTH_PAM_SO) {
skip No pam auth plugin; skip No pam auth plugin;
} }
if (!$PAM_SETUP_FOR_MTR) {
skip No pam setup for mtr;
}
eval install plugin pam soname '$AUTH_PAM_SO'; eval install plugin pam soname '$AUTH_PAM_SO';
create user test_pam identified via pam using 'mariadb_mtr'; create user test_pam identified via pam using 'mariadb_mtr';
create user pam_test; create user pam_test;
......
...@@ -10,8 +10,6 @@ ...@@ -10,8 +10,6 @@
--source include/not_embedded.inc --source include/not_embedded.inc
--source include/have_log_bin.inc --source include/have_log_bin.inc
# Dynamic loading of Example does not work on Windows currently.
--source include/not_windows.inc
--source include/have_example_plugin.inc --source include/have_example_plugin.inc
# Initialize replication. # Initialize replication.
...@@ -21,7 +19,8 @@ SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE'; ...@@ -21,7 +19,8 @@ SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE';
--echo Get binlog position before install plugin. --echo Get binlog position before install plugin.
let $before_pos = query_get_value("SHOW MASTER STATUS", Position, 1); let $before_pos = query_get_value("SHOW MASTER STATUS", Position, 1);
--echo Install example engine. --echo Install example engine.
INSTALL PLUGIN example SONAME 'ha_example.so'; --replace_regex /\.dll/.so/
eval INSTALL PLUGIN example SONAME '$HA_EXAMPLE_SO';
--echo Get binlog position after install plugin. --echo Get binlog position after install plugin.
let $after_pos = query_get_value("SHOW MASTER STATUS", Position, 1); let $after_pos = query_get_value("SHOW MASTER STATUS", Position, 1);
--echo Compute the difference of the binlog positions. --echo Compute the difference of the binlog positions.
......
...@@ -19,6 +19,10 @@ call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received w ...@@ -19,6 +19,10 @@ call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received w
enable_query_log; enable_query_log;
connection master; connection master;
# wait for dying connections (if any) to disappear
let $wait_condition= select count(*) = 0 from information_schema.processlist where command='killed';
--source include/wait_condition.inc
# After fix of BUG#45848, semi-sync slave should not create any extra # After fix of BUG#45848, semi-sync slave should not create any extra
# connections on master, save the count of connections before start # connections on master, save the count of connections before start
# semi-sync slave for comparison below. # semi-sync slave for comparison below.
...@@ -166,8 +170,7 @@ show status like 'Rpl_semi_sync_master_yes_tx'; ...@@ -166,8 +170,7 @@ show status like 'Rpl_semi_sync_master_yes_tx';
# After fix of BUG#45848, semi-sync slave should not create any extra # After fix of BUG#45848, semi-sync slave should not create any extra
# connections on master. # connections on master.
let $_connections_semisync_slave= query_get_value(SHOW STATUS LIKE 'Threads_connected', Value, 1); let $_connections_semisync_slave= query_get_value(SHOW STATUS LIKE 'Threads_connected', Value, 1);
replace_result $_connections_semisync_slave CONNECTIONS_SEMISYNC_SLAVE; replace_result $_connections_normal_slave CONNECTIONS_NORMAL_SLAVE $_connections_semisync_slave CONNECTIONS_SEMISYNC_SLAVE;
replace_result $_connections_normal_slave CONNECTIONS_NORMAL_SLAVE;
eval select $_connections_semisync_slave - $_connections_normal_slave as 'Should be 0'; eval select $_connections_semisync_slave - $_connections_normal_slave as 'Should be 0';
let $i=300; let $i=300;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
[source src1] [source src1]
type = xmlpipe2 type = xmlpipe2
xmlpipe_command = cat suite/sphinx/testdata.xml xmlpipe_command = cat @ENV.MTR_SUITE_DIR/testdata.xml
[index test1] [index test1]
source = src1 source = src1
......
--plugin-load=$HA_SPHINX_SO --plugin-load=$HA_SPHINX_SO --sphinx
if (!$HA_ARCHIVE_SO) { if (!$HA_ARCHIVE_SO) {
--skip Need example plugin --skip Need archive plugin
} }
CREATE TABLE t1(a int) ENGINE=ARCHIVE; CREATE TABLE t1(a int) ENGINE=ARCHIVE;
......
# This test uses grants, which can't get tested for embedded server # This test uses grants, which can't get tested for embedded server
-- source include/big_test.inc -- source include/big_test.inc
-- source include/not_embedded.inc -- source include/not_embedded.inc
-- source include/have_xtradb.inc
# check that CSV engine was compiled in, as the result of the test depends # check that CSV engine was compiled in, as the result of the test depends
# on the presence of the log tables (which are CSV-based). # on the presence of the log tables (which are CSV-based).
......
--source include/have_log_bin.inc --source include/have_log_bin.inc
--source include/have_partition.inc
--disable_warnings --disable_warnings
DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t1;
......
...@@ -61,7 +61,7 @@ CREATE TABLE time_zone_leap_second ( Transition_time bigint signed NOT NULL, ...@@ -61,7 +61,7 @@ CREATE TABLE time_zone_leap_second ( Transition_time bigint signed NOT NULL,
# Run the mysql_fix_privilege_tables.sql using "mysql --force" # Run the mysql_fix_privilege_tables.sql using "mysql --force"
--exec $MYSQL --force test < $MYSQL_FIX_PRIVILEGE_TABLES > $MYSQLTEST_VARDIR/log/system_mysql_db_fix40123.log 2>&1 --exec $MYSQL --force test < $MYSQL_FIX_PRIVILEGE_TABLES
-- enable_query_log -- enable_query_log
-- enable_result_log -- enable_result_log
......
...@@ -67,7 +67,7 @@ CREATE TABLE servers ( Server_name char(64) NOT NULL DEFAULT '', Host char(64) N ...@@ -67,7 +67,7 @@ CREATE TABLE servers ( Server_name char(64) NOT NULL DEFAULT '', Host char(64) N
INSERT INTO servers VALUES ('test','localhost','test','root','', 0,'','mysql','root'); INSERT INTO servers VALUES ('test','localhost','test','root','', 0,'','mysql','root');
# Run the mysql_fix_privilege_tables.sql using "mysql --force" # Run the mysql_fix_privilege_tables.sql using "mysql --force"
--exec $MYSQL --force test < $MYSQL_FIX_PRIVILEGE_TABLES > $MYSQLTEST_VARDIR/log/system_mysql_db_fix50030.log 2>&1 --exec $MYSQL --force test < $MYSQL_FIX_PRIVILEGE_TABLES
-- enable_query_log -- enable_query_log
-- enable_result_log -- enable_result_log
......
...@@ -86,7 +86,7 @@ CREATE TABLE IF NOT EXISTS event ( db char(64) CHARACTER SET utf8 COLLATE utf8_b ...@@ -86,7 +86,7 @@ CREATE TABLE IF NOT EXISTS event ( db char(64) CHARACTER SET utf8 COLLATE utf8_b
CREATE TABLE IF NOT EXISTS ndb_binlog_index (Position BIGINT UNSIGNED NOT NULL, File VARCHAR(255) NOT NULL, epoch BIGINT UNSIGNED NOT NULL, inserts BIGINT UNSIGNED NOT NULL, updates BIGINT UNSIGNED NOT NULL, deletes BIGINT UNSIGNED NOT NULL, schemaops BIGINT UNSIGNED NOT NULL, PRIMARY KEY(epoch)) ENGINE=MYISAM; CREATE TABLE IF NOT EXISTS ndb_binlog_index (Position BIGINT UNSIGNED NOT NULL, File VARCHAR(255) NOT NULL, epoch BIGINT UNSIGNED NOT NULL, inserts BIGINT UNSIGNED NOT NULL, updates BIGINT UNSIGNED NOT NULL, deletes BIGINT UNSIGNED NOT NULL, schemaops BIGINT UNSIGNED NOT NULL, PRIMARY KEY(epoch)) ENGINE=MYISAM;
# Run the mysql_fix_privilege_tables.sql using "mysql --force" # Run the mysql_fix_privilege_tables.sql using "mysql --force"
--exec $MYSQL --force test < $MYSQL_FIX_PRIVILEGE_TABLES > $MYSQLTEST_VARDIR/log/system_mysql_db_fix50117.log 2>&1 --exec $MYSQL --force test < $MYSQL_FIX_PRIVILEGE_TABLES
-- enable_query_log -- enable_query_log
-- enable_result_log -- enable_result_log
......
...@@ -155,7 +155,7 @@ plugin_ref ha_resolve_by_name(THD *thd, const LEX_STRING *name) ...@@ -155,7 +155,7 @@ plugin_ref ha_resolve_by_name(THD *thd, const LEX_STRING *name)
if ((plugin= my_plugin_lock_by_name(thd, name, MYSQL_STORAGE_ENGINE_PLUGIN))) if ((plugin= my_plugin_lock_by_name(thd, name, MYSQL_STORAGE_ENGINE_PLUGIN)))
{ {
handlerton *hton= plugin_data(plugin, handlerton *); handlerton *hton= plugin_data(plugin, handlerton *);
if (!(hton->flags & HTON_NOT_USER_SELECTABLE)) if (hton && !(hton->flags & HTON_NOT_USER_SELECTABLE))
return plugin; return plugin;
/* /*
......
These tests don't have anything to do with the EXAMPLE engine itself,
but they show how mysql-test handles overlays
select @@local_infile;
select 1;
1
1
#
# This test exists only in the overlay. It will run only for the overlay
# and not for the parent suite.
#
--disable_result_log
source suite/mtr/t/combs.inc;
--enable_result_log
select 1;
select "<1>";
<1>
<1>
select "<2>";
<2>
<2>
#
# A test that includes itself. But really it includes the
# self.test from the parent suite, not itself.
#
let $a=1;
source self.test;
let $a=2;
source self.test;
select @@local_infile;
select @@max_error_count;
@@max_error_count
32
--- /usr/home/serg/Abk/mysql/5.1/mysql-test/suite/mtr/t/test2.result 2012-02-04 21:15:14.000000000 +0100
+++ /usr/home/serg/Abk/mysql/5.1/mysql-test/suite/mtr/t/test2.reject 2012-02-04 21:31:45.000000000 +0100
@@ -1,4 +1,4 @@
select @@local_infile;
select @@max_error_count;
@@max_error_count
-64
+32
These tests don't have anything to do with the engine itself,
but they test how mysql-test handles overlays
!include include/default_my.cnf
...@@ -7553,7 +7553,6 @@ ha_innobase::records_in_range( ...@@ -7553,7 +7553,6 @@ ha_innobase::records_in_range(
mem_heap_t* heap; mem_heap_t* heap;
DBUG_ENTER("records_in_range"); DBUG_ENTER("records_in_range");
DBUG_ASSERT(min_key || max_key);
ut_a(prebuilt->trx == thd_to_trx(ha_thd())); ut_a(prebuilt->trx == thd_to_trx(ha_thd()));
......
These tests don't have anything to do with the engine itself,
but they test how mysql-test handles overlays
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment