From 59574a6e601d6725492d9283a3d386df16eace32 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 23 Nov 2007 13:29:31 +0100 Subject: [PATCH] WL#3949 Test should set binlog format dnamically - Reorganize collect a little to make it easier to apply optimizations and settings to collected test cases. - Add suite/rpl/combination file - Rename include/set_binlog_format_x.inc to .sql since thay are run by "mysql" mysql-test/include/set_binlog_format_mixed.sql: Rename: mysql-test/include/set_binlog_format_mixed.inc -> mysql-test/include/set_binlog_format_mixed.sql mysql-test/include/set_binlog_format_row.sql: Rename: mysql-test/include/set_binlog_format_row.inc -> mysql-test/include/set_binlog_format_row.sql mysql-test/include/set_binlog_format_statement.sql: Rename: mysql-test/include/set_binlog_format_statement.inc -> mysql-test/include/set_binlog_format_statement.sql mysql-test/lib/mtr_cases.pl: Reorganize code to - collect a suite - multiply the tests in the suite with any combinations the suite has - optimize the suite by skipping test not supported with current settings Use My::Config to read combinations file in my.cnf file format, this allowas a "short name" to be used for the combination instead of the full name wich is set to the extra arguments the combination applies Add function 'print_testcase' that can be used to print the testcases during different stages of the collect phase mysql-test/lib/mtr_report.pl: Print '' if combination is set mysql-test/mysql-test-run.pl: Add comments, fix indentation Rename .in to .sql files Only set binlog format dynamicall for master, slav is always restarted mysql-test/lib/My/Config.pm: New BitKeeper file ``mysql-test/lib/My/Config.pm'' mysql-test/suite/rpl/combinations: New BitKeeper file ``mysql-test/suite/rpl/combinations'' --- ..._mixed.inc => set_binlog_format_mixed.sql} | 0 ...rmat_row.inc => set_binlog_format_row.sql} | 0 ...nt.inc => set_binlog_format_statement.sql} | 0 mysql-test/lib/My/Config.pm | 422 ++++++++++++++++++ mysql-test/lib/mtr_cases.pl | 327 +++++++------- mysql-test/lib/mtr_report.pl | 8 +- mysql-test/mysql-test-run.pl | 42 +- mysql-test/suite/rpl/combinations | 8 + 8 files changed, 633 insertions(+), 174 deletions(-) rename mysql-test/include/{set_binlog_format_mixed.inc => set_binlog_format_mixed.sql} (100%) rename mysql-test/include/{set_binlog_format_row.inc => set_binlog_format_row.sql} (100%) rename mysql-test/include/{set_binlog_format_statement.inc => set_binlog_format_statement.sql} (100%) create mode 100644 mysql-test/lib/My/Config.pm create mode 100644 mysql-test/suite/rpl/combinations diff --git a/mysql-test/include/set_binlog_format_mixed.inc b/mysql-test/include/set_binlog_format_mixed.sql similarity index 100% rename from mysql-test/include/set_binlog_format_mixed.inc rename to mysql-test/include/set_binlog_format_mixed.sql diff --git a/mysql-test/include/set_binlog_format_row.inc b/mysql-test/include/set_binlog_format_row.sql similarity index 100% rename from mysql-test/include/set_binlog_format_row.inc rename to mysql-test/include/set_binlog_format_row.sql diff --git a/mysql-test/include/set_binlog_format_statement.inc b/mysql-test/include/set_binlog_format_statement.sql similarity index 100% rename from mysql-test/include/set_binlog_format_statement.inc rename to mysql-test/include/set_binlog_format_statement.sql diff --git a/mysql-test/lib/My/Config.pm b/mysql-test/lib/My/Config.pm new file mode 100644 index 00000000000..5491e341ddc --- /dev/null +++ b/mysql-test/lib/My/Config.pm @@ -0,0 +1,422 @@ +# -*- cperl -*- + +package My::Config::Option; + +use strict; +use warnings; + + +sub new { + my ($class, $option_name, $option_value)= @_; + my $self= bless { name => $option_name, + value => $option_value + }, $class; + return $self; +} + + +sub name { + my ($self)= @_; + return $self->{name}; +} + + +sub value { + my ($self)= @_; + return $self->{value}; +} + + +package My::Config::Group; + +use strict; +use warnings; + + +sub new { + my ($class, $group_name)= @_; + my $self= bless { name => $group_name, + options => [], + options_by_name => {}, + }, $class; + return $self; +} + + +sub insert { + my ($self, $option_name, $value, $if_not_exist)= @_; + my $option= $self->option($option_name); + if (defined($option) and !$if_not_exist) { + $option->{value}= $value; + } + else { + my $option= My::Config::Option->new($option_name, $value); + # Insert option in list + push(@{$self->{options}}, $option); + # Insert option in hash + $self->{options_by_name}->{$option_name}= $option; + } + return $option; +} + +sub remove { + my ($self, $option_name)= @_; + + # Check that option exists + my $option= $self->option($option_name); + + return undef unless defined $option; + + # Remove from the hash + delete($self->{options_by_name}->{$option_name}) or die; + + # Remove from the array + @{$self->{options}}= grep { $_->name ne $option_name } @{$self->{options}}; + + return $option; +} + + +sub options { + my ($self)= @_; + return @{$self->{options}}; +} + + +sub name { + my ($self)= @_; + return $self->{name}; +} + + +# +# Return a specific option in the group +# +sub option { + my ($self, $option_name)= @_; + + return $self->{options_by_name}->{$option_name}; +} + + +# +# Return a specific value for an option in the group +# +sub value { + my ($self, $option_name)= @_; + my $option= $self->option($option_name); + + die "No option named '$option_name' in this group" + if ! defined($option); + + return $option->value(); +} + + +package My::Config; + +use strict; +use warnings; +use IO::File; +use File::Basename; + +# +# Constructor for My::Config +# - represents a my.cnf config file +# +# Array of arrays +# +sub new { + my ($class, $path)= @_; + my $group_name= undef; + + my $self= bless { groups => [] }, $class; + my $F= IO::File->new($path, "<") + or die "Could not open '$path': $!"; + + while ( my $line= <$F> ) { + chomp($line); + + # [group] + if ( $line =~ /\[(.*)\]/ ) { + # New group found + $group_name= $1; + #print "group: $group_name\n"; + + $self->insert($group_name, undef, undef); + } + + # Magic #! comments + elsif ( $line =~ /^#\!/) { + my $magic= $line; + die "Found magic comment '$magic' outside of group" + unless $group_name; + + #print "$magic\n"; + $self->insert($group_name, $magic, undef); + } + + # Comments + elsif ( $line =~ /^#/ || $line =~ /^;/) { + # Skip comment + next; + } + + # Empty lines + elsif ( $line =~ /^$/ ) { + # Skip empty lines + next; + } + + # !include + elsif ( $line =~ /^\!include\s*(.*?)\s*$/ ) { + my $include_file_name= dirname($path)."/".$1; + # Check that the file exists + die "The include file '$include_file_name' does not exist" + unless -f $include_file_name; + + $self->append(My::Config->new($include_file_name)); + } + + #