diff options
author | Sergei Golubchik <sergii@pisem.net> | 2012-02-07 18:53:33 +0100 |
---|---|---|
committer | Sergei Golubchik <sergii@pisem.net> | 2012-02-07 18:53:33 +0100 |
commit | ae0a7cfd5f75d80b4b0540258daa0e2ed051cd1b (patch) | |
tree | 7c61e347ce6da1158d76c1e25296534849e72ae2 | |
parent | 98ae512014880ed4613e8f43551be51a274e3058 (diff) | |
download | mariadb-git-ae0a7cfd5f75d80b4b0540258daa0e2ed051cd1b.tar.gz |
making more use of My::Suite object
-rw-r--r-- | mysql-test/README.suites | 3 | ||||
-rw-r--r-- | mysql-test/lib/mtr_cases.pm | 194 | ||||
-rw-r--r-- | mysql-test/suite/funcs_2/suite.opt (renamed from mysql-test/suite/funcs_2/t/suite.opt) | 0 |
3 files changed, 93 insertions, 104 deletions
diff --git a/mysql-test/README.suites b/mysql-test/README.suites index 1acfee4426f..a78134e44c3 100644 --- a/mysql-test/README.suites +++ b/mysql-test/README.suites @@ -29,8 +29,7 @@ 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 + --timezone, --plugin-load, --default-time-zone, In particular, all --plugin-load instances on the command line (on the combined command line, assembled from different .opt and combinations diff --git a/mysql-test/lib/mtr_cases.pm b/mysql-test/lib/mtr_cases.pm index 10768d8edaa..c412ad08da3 100644 --- a/mysql-test/lib/mtr_cases.pm +++ b/mysql-test/lib/mtr_cases.pm @@ -57,6 +57,7 @@ use My::Config; use My::Platform; use My::Test; use My::Find; +use My::Suite; require "mtr_misc.pl"; @@ -65,7 +66,6 @@ my $do_test_reg; my $skip_test_reg; my %suites; -my $default_suite_object = do 'My/Suite.pm'; sub init_pattern { my ($from, $what)= @_; @@ -100,6 +100,8 @@ sub collect_test_cases ($$$$) { $do_test_reg= init_pattern($do_test, "--do-test"); $skip_test_reg= init_pattern($skip_test, "--skip-test"); + parse_disabled($_) for @$opt_skip_test_list; + # If not reordering, we also shouldn't group by suites, unless # no test cases were named. # This also effects some logic in the loop following this. @@ -212,26 +214,37 @@ sub split_testname { mtr_error("Illegal format of test name: $test_name"); } -my %suite_combinations; my %skip_combinations; my %file_combinations; sub load_suite_object { - my ($suite, $suitedir) = @_; - unless ($suites{$suite}) { + my ($suitename, $suitedir) = @_; + my $suite; + unless (defined $suites{$suitename}) { if (-f "$suitedir/suite.pm") { - $suites{$suite} = do "$suitedir/suite.pm"; - return unless ref $suites{$suite}; + $suite= do "$suitedir/suite.pm"; + unless (ref $suite) { + my $comment = $suite; + $suite = do 'My/Suite.pm'; + $suite->{skip} = $comment; + } } else { - $suites{$suite} = $default_suite_object; + $suite = do 'My/Suite.pm'; } - my %suite_skiplist = $suites{$suite}->skip_combinations(); + + $suites{$suitename} = $suite; + + # add suite skiplist to a global hash, so that we can check it + # with only one lookup + my %suite_skiplist = $suite->skip_combinations(); while (my ($file, $skiplist) = each %suite_skiplist) { $skip_combinations{"$suitedir/$file => $_"} = 1 for (@$skiplist); } } + return $suites{$suitename}; } + # returns a pair of (suite, suitedir) sub find_suite_of_file($) { my ($file) = @_; @@ -247,7 +260,9 @@ sub combinations_from_file($) my ($filename) = @_; return () if @::opt_combinations or not -f $filename; - load_suite_object(find_suite_of_file($filename)); + # check the suite object, and load its %skip_combinations + my $suite = load_suite_object(find_suite_of_file($filename)); + return () if $suite->{skip}; # XXX # Read combinations file in my.cnf format mtr_verbose("Read combinations file"); @@ -256,7 +271,7 @@ sub combinations_from_file($) foreach my $group ($config->groups()) { next if $group->auto(); my $comb= { name => $group->name() }; - next if $skip_combinations{"$filename => $comb->{name}"}; + next if $skip_combinations{"$filename => $comb->{name}"}; # XXX foreach my $option ( $group->options() ) { push(@{$comb->{comb_opt}}, $option->option()); } @@ -265,22 +280,40 @@ sub combinations_from_file($) @combs; } +our %disabled; +sub parse_disabled { + my ($filename, $suitename) = @_; + + if (open(DISABLED, $filename)) { + while (<DISABLED>) { + chomp; + next if /^\s*#/ or /^\s*$/; + mtr_error("Syntax error in $filename line $.") + unless /^\s*(?:([-0-9A-Za-z_]+)\.)?([-0-9A-Za-z_]+)\s*:\s*(.*?)\s*$/; + mtr_error("Wrong suite name in $filename line $.") + if defined $1 and defined $suitename and $1 ne $suitename; + $disabled{($1 || $suitename || '') . ".$2"} = $3; + } + close DISABLED; + } +} + sub collect_one_suite { - my $suite= shift; # Test suite name + my $suitename= shift; # Test suite name my $opt_cases= shift; my $opt_skip_test_list= shift; my @cases; # Array of hash - mtr_verbose("Collecting: $suite"); + mtr_verbose("Collecting: $suitename"); my $suitedir= "$::glob_mysql_test_dir"; # Default - if ( $suite ne "main" ) + if ( $suitename ne "main" ) { - # Allow suite to be path to "some dir" if $suite has at least + # Allow suite to be path to "some dir" if $suitename has at least # one directory part - if ( -d $suite and splitdir($suite) > 1 ){ - $suitedir= $suite; + if ( -d $suitename and splitdir($suitename) > 1 ){ + $suitedir= $suitename; mtr_report(" - from '$suitedir'"); } @@ -294,9 +327,9 @@ sub collect_one_suite # Look in storage engine specific suite dirs "storage/*/mtr", # Look in plugin specific suite dir - "plugin/$suite/tests", + "plugin/$suitename/tests", ], - [$suite, "mtr"]); + [$suitename]); } mtr_verbose("suitedir: $suitedir"); } @@ -330,35 +363,20 @@ sub collect_one_suite mtr_verbose("testdir: $testdir"); mtr_verbose("resdir: $resdir"); - load_suite_object($suite, $suitedir); + my $suite = load_suite_object($suitename, $suitedir); - # ---------------------------------------------------------------------- - # Build a hash of disabled testcases for this suite - # ---------------------------------------------------------------------- - my %disabled; - my @disabled_collection= @{$opt_skip_test_list} if defined @{$opt_skip_test_list}; - push (@disabled_collection, "$testdir/disabled.def"); - for my $skip (@disabled_collection) - { - if ( open(DISABLED, $skip ) ) - { - while ( <DISABLED> ) - { - chomp; - next if /^\s*#/ or /^\s*$/; - mtr_error("Syntax error in $skip line $.") - unless /^\s*([-0-9A-Za-z_]+\.)?([-0-9A-Za-z_]+)\s*:\s*(.*?)\s*$/; - next if defined $1 and $1 ne "$suite."; - $disabled{$2}= $3; - } - close DISABLED; - } - } + # + # Read suite config files, unless it was done aleady + # + unless (defined $suite->{dir}) { + $suite->{dir} = $suitedir; + $suite->{tdir} = $testdir; + $suite->{rdir} = $resdir; - # ---------------------------------------------------------------------- - # Read combinations for this suite - # ---------------------------------------------------------------------- - { + # disabled.def + parse_disabled("$testdir/disabled.def", $suitename); + + # combinations if (@::opt_combinations) { # take the combination from command-line @@ -367,27 +385,21 @@ sub collect_one_suite my $comb= {}; $comb->{name}= $combination; push(@{$comb->{comb_opt}}, $combination); - push @{$suite_combinations{$suite}}, $comb; + push @{$suite->{combinations}}, $comb; } } else { my @combs = combinations_from_file("$suitedir/combinations"); - $suite_combinations{$suite} = [ @combs ]; + $suite->{combinations} = [ @combs ]; } - } - - # Read suite.opt file - my $suite_opts= [ opts_from_file("$testdir/suite.opt") ]; - $suite_opts = [ opts_from_file("$suitedir/suite.opt") ] unless @$suite_opts; - my @case_names; - { - my $s= $suites{$suite}; - $s = 'My::Suite' unless ref $s; - @case_names= $s->list_cases($testdir); + # suite.opt + $suite->{opts} = [ opts_from_file("$suitedir/suite.opt") ]; } + my @case_names= $suite->list_cases($testdir); + if ( @$opt_cases ) { my (%case_names)= map { $_ => 1 } @case_names; @@ -399,10 +411,9 @@ sub collect_one_suite my ($sname, $tname)= split_testname($test_name_spec); # Check correct suite if suitename is defined - next if (defined $sname and $suite ne $sname); + next if (defined $sname and $suitename ne $sname); - # Extension was specified, check if the test exists - if ( ! $case_names{$tname}) + if (not $case_names{$tname}) { # This is only an error if suite was specified, otherwise it # could exist in another suite @@ -420,8 +431,7 @@ sub collect_one_suite # Skip tests that do not match the --do-test= filter next if ($do_test_reg and not $_ =~ /$do_test_reg/o); - push(@cases, collect_one_test_case($suitedir, $testdir, $resdir, - $suite, $_, \%disabled, $suite_opts)); + push @cases, collect_one_test_case($suitename, $_); } # Return empty list if no testcases found @@ -582,34 +592,32 @@ sub make_combinations($@) ############################################################################## sub collect_one_test_case { - my $suitedir= shift; - my $testdir= shift; - my $resdir= shift; my $suitename= shift; my $tname= shift; - my $disabled= shift; - my $suite_opts= shift; - my $local_default_storage_engine= $default_storage_engine; - my $filename= "$testdir/$tname.test"; + my $name = "$suitename.$tname"; + my $suite = $suites{$suitename}; + my $suitedir = $suite->{dir}; + my $testdir = $suite->{tdir}; + my $resdir = $suite->{rdir}; + my $filename = "$testdir/${tname}.test"; # ---------------------------------------------------------------------- # Set defaults # ---------------------------------------------------------------------- my $tinfo= My::Test->new ( - name => "$suitename.$tname", + name => $name, shortname => $tname, path => $filename, - suite => $suites{$suitename}, - master_opt => [ @$suite_opts ], - slave_opt => [ @$suite_opts ], + suite => $suite, + master_opt => [ @{$suite->{opts}} ], + slave_opt => [ @{$suite->{opts}} ], ); # ---------------------------------------------------------------------- # Skip some tests but include in list, just mark them as skipped # ---------------------------------------------------------------------- - my $name= $suitename . ".$tname"; if ( $skip_test_reg and ($tname =~ /$skip_test_reg/o || $name =~ /$skip_test/o)) { @@ -620,9 +628,10 @@ sub collect_one_test_case { # ---------------------------------------------------------------------- # Check for disabled tests # ---------------------------------------------------------------------- - if ($disabled->{$tname}) + my $disable = $disabled{".$tname"} || $disabled{$name}; + if ($disable) { - $tinfo->{'comment'}= $disabled->{$tname}; + $tinfo->{comment}= $disable; if ( $enable_disabled ) { # User has selected to run all disabled tests @@ -637,6 +646,12 @@ sub collect_one_test_case { } } + if ($suite->{skip}) { + $tinfo->{skip}= 1; + $tinfo->{comment}= $suite->{skip}; + return $tinfo; + } + # ---------------------------------------------------------------------- # Check for test specific config file # ---------------------------------------------------------------------- @@ -685,23 +700,6 @@ sub collect_one_test_case { my ($master_opts, $slave_opts)= tags_from_test_file($tinfo, $filename, $suitedir); - # Get default storage engine from suite.opt file - - if (defined $suite_opts && - "@$suite_opts" =~ "default-storage-engine=\s*([^\s]*)") - { - $local_default_storage_engine= $1; - } - - if ( defined $local_default_storage_engine ) - { - # Different default engine is used - # tag test to require that engine - $tinfo->{'ndb_test'}= 1 - if ( $local_default_storage_engine =~ /^ndb/i ); - - } - if ( $tinfo->{'big_test'} and ! $::opt_big_test ) { $tinfo->{'skip'}= 1; @@ -802,13 +800,6 @@ sub collect_one_test_case { $tinfo->{template_path}= $config; } - if (not ref $suites{$suitename}) - { - $tinfo->{'skip'}= 1; - $tinfo->{'comment'}= $suites{$suitename}; - return $tinfo; - } - # ---------------------------------------------------------------------- # Append mysqld extra options to master and slave, as appropriate # ---------------------------------------------------------------------- @@ -819,8 +810,7 @@ sub collect_one_test_case { process_opts($tinfo, 'slave_opt'); my @cases = ($tinfo); - for my $comb ($suite_combinations{$suitename}, - @{$file_combinations{$filename}}) + for my $comb ($suite->{combinations}, @{$file_combinations{$filename}}) { @cases = map make_combinations($_, @{$comb}), @cases; } diff --git a/mysql-test/suite/funcs_2/t/suite.opt b/mysql-test/suite/funcs_2/suite.opt index 9b22c677b83..9b22c677b83 100644 --- a/mysql-test/suite/funcs_2/t/suite.opt +++ b/mysql-test/suite/funcs_2/suite.opt |