From b454d067cb25457c27c6ed97fd0146f046553318 Mon Sep 17 00:00:00 2001 From: Magnus Svensson Date: Fri, 14 Nov 2008 09:45:32 +0100 Subject: [PATCH] WL#4189 Add full backward compatibility to mysql-test-run.pl - Add copy of mtr v1 and make it possible to run it using MTR_VERSION=1 --- mysql-test/Makefile.am | 20 +- mysql-test/lib/v1/My/Config.pm | 422 ++ mysql-test/lib/v1/mtr_cases.pl | 968 ++++ mysql-test/lib/v1/mtr_gcov.pl | 74 + mysql-test/lib/v1/mtr_gprof.pl | 64 + mysql-test/lib/v1/mtr_im.pl | 775 ++++ mysql-test/lib/v1/mtr_io.pl | 218 + mysql-test/lib/v1/mtr_match.pl | 98 + mysql-test/lib/v1/mtr_misc.pl | 312 ++ mysql-test/lib/v1/mtr_process.pl | 1142 +++++ mysql-test/lib/v1/mtr_report.pl | 598 +++ mysql-test/lib/v1/mtr_stress.pl | 191 + mysql-test/lib/v1/mtr_timer.pl | 158 + mysql-test/lib/v1/mtr_unique.pl | 178 + mysql-test/lib/v1/mysql-test-run.pl | 5393 +++++++++++++++++++++++ mysql-test/lib/v1/ndb_config_1_node.ini | 47 + mysql-test/lib/v1/ndb_config_2_node.ini | 55 + mysql-test/mysql-test-run.pl | 26 + 18 files changed, 10738 insertions(+), 1 deletion(-) create mode 100644 mysql-test/lib/v1/My/Config.pm create mode 100644 mysql-test/lib/v1/mtr_cases.pl create mode 100644 mysql-test/lib/v1/mtr_gcov.pl create mode 100644 mysql-test/lib/v1/mtr_gprof.pl create mode 100644 mysql-test/lib/v1/mtr_im.pl create mode 100644 mysql-test/lib/v1/mtr_io.pl create mode 100644 mysql-test/lib/v1/mtr_match.pl create mode 100644 mysql-test/lib/v1/mtr_misc.pl create mode 100644 mysql-test/lib/v1/mtr_process.pl create mode 100644 mysql-test/lib/v1/mtr_report.pl create mode 100644 mysql-test/lib/v1/mtr_stress.pl create mode 100644 mysql-test/lib/v1/mtr_timer.pl create mode 100644 mysql-test/lib/v1/mtr_unique.pl create mode 100755 mysql-test/lib/v1/mysql-test-run.pl create mode 100644 mysql-test/lib/v1/ndb_config_1_node.ini create mode 100644 mysql-test/lib/v1/ndb_config_2_node.ini diff --git a/mysql-test/Makefile.am b/mysql-test/Makefile.am index 616ae633eb7..0db8ba825ca 100644 --- a/mysql-test/Makefile.am +++ b/mysql-test/Makefile.am @@ -24,7 +24,25 @@ test_SCRIPTS = mtr \ mysql-test-run.pl \ mysql-stress-test.pl -nobase_test_DATA = lib/mtr_cases.pm \ +nobase_test_DATA = \ + lib/v1/mysql-test-run.pl \ + lib/v1/mtr_cases.pl \ + lib/v1/mtr_io.pl \ + lib/v1/mtr_report.pl \ + lib/v1/My/Config.pm \ + lib/v1/mtr_gcov.pl \ + lib/v1/mtr_match.pl \ + lib/v1/mtr_stress.pl \ + lib/v1/ndb_config_1_node.ini \ + lib/v1/ndb_config_2_node.ini \ + lib/v1/mtr_gprof.pl \ + lib/v1/mtr_misc.pl \ + lib/v1/mtr_timer.pl \ + lib/v1/mtr_im.pl \ + lib/v1/mtr_process.pl \ + lib/v1/mtr_unique.pl \ +\ + lib/mtr_cases.pm \ lib/mtr_gcov.pl \ lib/mtr_gprof.pl \ lib/mtr_io.pl \ diff --git a/mysql-test/lib/v1/My/Config.pm b/mysql-test/lib/v1/My/Config.pm new file mode 100644 index 00000000000..5491e341ddc --- /dev/null +++ b/mysql-test/lib/v1/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)); + } + + #