From 3f619478f796eddbba6e39502fe941b285dd97b1 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 4 May 2024 20:00:34 +0200 Subject: Adding upstream version 1:10.11.6. Signed-off-by: Daniel Baumann --- mysql-test/lib/My/Config.pm | 544 ++++++++++++++++++ mysql-test/lib/My/ConfigFactory.pm | 483 ++++++++++++++++ mysql-test/lib/My/CoreDump.pm | 516 +++++++++++++++++ mysql-test/lib/My/Debugger.pm | 287 +++++++++ mysql-test/lib/My/File/Path.pm | 225 ++++++++ mysql-test/lib/My/Find.pm | 246 ++++++++ mysql-test/lib/My/Handles.pm | 71 +++ mysql-test/lib/My/Options.pm | 179 ++++++ mysql-test/lib/My/Platform.pm | 299 ++++++++++ mysql-test/lib/My/SafeProcess.pm | 640 +++++++++++++++++++++ mysql-test/lib/My/SafeProcess/Base.pm | 227 ++++++++ mysql-test/lib/My/SafeProcess/CMakeLists.txt | 50 ++ mysql-test/lib/My/SafeProcess/safe_kill_win.cc | 146 +++++ mysql-test/lib/My/SafeProcess/safe_process.cc | 364 ++++++++++++ mysql-test/lib/My/SafeProcess/safe_process_win.cc | 389 +++++++++++++ .../lib/My/SafeProcess/wsrep_check_version.c | 51 ++ mysql-test/lib/My/Suite.pm | 27 + mysql-test/lib/My/SysInfo.pm | 206 +++++++ mysql-test/lib/My/Tee.pm | 25 + mysql-test/lib/My/Test.pm | 120 ++++ 20 files changed, 5095 insertions(+) create mode 100644 mysql-test/lib/My/Config.pm create mode 100644 mysql-test/lib/My/ConfigFactory.pm create mode 100644 mysql-test/lib/My/CoreDump.pm create mode 100644 mysql-test/lib/My/Debugger.pm create mode 100644 mysql-test/lib/My/File/Path.pm create mode 100644 mysql-test/lib/My/Find.pm create mode 100644 mysql-test/lib/My/Handles.pm create mode 100644 mysql-test/lib/My/Options.pm create mode 100644 mysql-test/lib/My/Platform.pm create mode 100644 mysql-test/lib/My/SafeProcess.pm create mode 100644 mysql-test/lib/My/SafeProcess/Base.pm create mode 100644 mysql-test/lib/My/SafeProcess/CMakeLists.txt create mode 100644 mysql-test/lib/My/SafeProcess/safe_kill_win.cc create mode 100644 mysql-test/lib/My/SafeProcess/safe_process.cc create mode 100644 mysql-test/lib/My/SafeProcess/safe_process_win.cc create mode 100644 mysql-test/lib/My/SafeProcess/wsrep_check_version.c create mode 100644 mysql-test/lib/My/Suite.pm create mode 100644 mysql-test/lib/My/SysInfo.pm create mode 100644 mysql-test/lib/My/Tee.pm create mode 100644 mysql-test/lib/My/Test.pm (limited to 'mysql-test/lib/My') diff --git a/mysql-test/lib/My/Config.pm b/mysql-test/lib/My/Config.pm new file mode 100644 index 00000000..c88b1170 --- /dev/null +++ b/mysql-test/lib/My/Config.pm @@ -0,0 +1,544 @@ +# -*- cperl -*- + +# Copyright (c) 2007, 2010, Oracle and/or its affiliates +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA + +package My::Config::Option; + +use strict; +use warnings; +use Carp; + +# Define all MariaDB options that the user should be able to specify +# many times in the config file. Note that options must be written +# using '-' instead of '_' here! + +my %multipart_options= + ( + "plugin-load-add" => 1, + "optimizer-switch" => 1, +); + + +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}; +} + +sub option { + my ($self)= @_; + my $name= $self->{name}; + my $value= $self->{value}; + + my $opt= $name; + $opt= "$name=$value" if (defined $value); + $opt= "--$opt" unless ($opt =~ /^--/); + return $opt; +} + +package My::Config::Group; + +use strict; +use warnings; +use Carp; + +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 { + $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 croak; + + # 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}; +} + +sub suffix { + my ($self)= @_; + # Everything in name from the last . + my @parts= split(/\./, $self->{name}); + my $suffix= pop(@parts); + return ".$suffix"; +} + +sub after { + my ($self, $prefix)= @_; + die unless defined $prefix; + + # everything after $prefix + my $name= $self->{name}; + if ($name =~ /^\Q$prefix\E(.*)$/) + { + return $1; + } + die "Failed to extract the value after '$prefix' in $name"; +} + + +sub split { + my ($self)= @_; + # Return an array with name parts + return split(/\./, $self->{name}); +} + +# +# Return a specific option in the group +# +sub option { + my ($self, $option_name)= @_; + + return $self->{options_by_name}->{$option_name}; +} + + +# +# Return value for an option in the group, fail if it does not exist +# +sub value { + my ($self, $option_name)= @_; + my $option= $self->option($option_name); + + croak "No option named '$option_name' in group '$self->{name}'" + if ! defined($option); + + return $option->value(); +} + +# +# Return value for an option if it exist +# +sub if_exist { + my ($self, $option_name)= @_; + my $option= $self->option($option_name); + + return undef if ! defined($option); + + return $option->value(); +} + +package My::Config::Group::ENV; +our @ISA=qw(My::Config::Group); + +use strict; +use warnings; +use Carp; + +sub new { + my ($class, $group_name)= @_; + bless My::Config::Group->new($group_name), $class; +} + +# +# Return value for an option in the group, fail if it does not exist +# +sub value { + my ($self, $option_name)= @_; + my $option= $self->option($option_name); + + if (! defined($option)) { + my $value= $ENV{$option_name}; + $option= My::Config::Option->new($option_name, $value); + } + return $option->value(); +} + +package My::Config::Group::OPT; +our @ISA=qw(My::Config::Group); + +use strict; +use warnings; +use Carp; + +sub new { + my ($class, $group_name)= @_; + bless My::Config::Group->new($group_name), $class; +} + +sub options { + my ($self)= @_; + () +} + +sub value { + my ($self, $option_name)= @_; + my $option= $self->option($option_name); + + croak "No option named '$option_name' in group '$self->{name}'" + if ! defined($option); + + return $option->value()->(); +} + +package My::Config; + +use strict; +use warnings; +use Carp; +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 => [ + My::Config::Group::ENV->new('ENV'), + My::Config::Group::OPT->new('OPT'), + ] }, $class; + my $F= IO::File->new($path, "<") + or croak "Could not open '$path': $!"; + + while ( my $line= <$F> ) { + chomp($line); + # Remove any trailing CR from Windows edited files + $line=~ s/\cM$//; + + # [group] + if ( $line =~ /^\[(.*)\]/ ) { + # New group found + $group_name= $1; + #print "group: $group_name\n"; + + $self->insert($group_name, undef, undef); + } + + # Magic #! comments + elsif ( $line =~ /^(#\!\S+)(?:\s*(.*?)\s*)?$/) { + my ($magic, $arg)= ($1, $2); + croak "Found magic comment '$magic' outside of group" + unless $group_name; + + #print "$magic\n"; + $self->insert($group_name, $magic, $arg); + } + + # 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 relative to path of first config file + if (! -f $include_file_name){ + # Try to include file relativ to current dir + $include_file_name= $1; + } + croak "The include file '$include_file_name' does not exist" + unless -f $include_file_name; + + $self->append(My::Config->new($include_file_name)); + } + + #