mariadb/mysql-test/lib/My/Test.pm

121 lines
2.9 KiB
Perl
Raw Normal View History

# -*- cperl -*-
# Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
#
# 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
#
# One test
#
package My::Test;
use strict;
use warnings;
use Carp;
BUG#43418: MTR2: does not notice a memory leak occuring at shutdown of mysqld w/ --valgrind - Fixed by implementing parsing of error log messages generated outside of test case runs (eg. during server shutdown). Also make mysql-test-run.pl not delete the error log after server restart, which looses information about which warnings were found. Finally, make multi_update2 a --big test. mysql-test/lib/My/Test.pm: Fix home-brewed (and broken) serialization in My::Test to use the standard Storable serializer. mysql-test/mysql-test-run.pl: - Stop mysqld servers gracefully rather than kill -9 when warnings are being checked. - After stopping mysqld servers, do an additional parse of the error log to check for any warnings generated during shutdown. - Fix error log parsing to be careful not to skip parsing part of the file, by keeping track of previous file position rather than relying on mark_log markers. - Workers report warnings during shutdown to the master process with a new packet 'WARNINGS' which includes a list of names of test that might have caused the problem (could be any test run since last server start). - Fail entire test suite if warnings are found. - When we remove the server data dir before server restart, preserve the error log (don't delete it between restarts), as it may contain valuable information even for test cases which don't show direct failures. mysql-test/t/multi_update2.test: Make test --big, as it takes a _long_ time to run and only tests a single bug.
2009-03-20 15:18:22 +01:00
use Storable();
use mtr_results;
sub new {
my $class= shift;
my $self= bless {
@_,
}, $class;
return $self;
}
2012-02-07 17:18:41 +01:00
sub copy {
my $self= shift;
my $copy= My::Test->new();
while (my ($key, $value) = each(%$self)) {
if (ref $value eq "ARRAY") {
$copy->{$key} = [ @$value ];
2012-02-07 17:18:41 +01:00
} else {
$copy->{$key}= $value;
}
}
$copy;
}
sub fullname {
my ($self)= @_;
2012-02-06 21:36:56 +01:00
$self->{name} . (defined $self->{combinations}
? " '" . join(',', sort @{$self->{combinations}}) . "'"
: "")
}
#
# Return a unique key that can be used to
# identify this test in a hash
#
sub key {
my ($self)= @_;
return $self->{key};
}
sub is_failed {
my ($self)= @_;
my $result= $self->{result};
croak "'is_failed' can't be called until test has been run!"
unless defined $result;
return ($result eq 'MTR_RES_FAILED');
}
my %result_names= (
'MTR_RES_PASSED' => 'pass',
'MTR_RES_FAILED' => 'fail',
'MTR_RES_SKIPPED' => 'skipped',
);
sub write_test {
my ($test, $sock, $header)= @_;
if ($::opt_resfile && defined $test->{'result'}) {
resfile_test_info("result", $result_names{$test->{'result'}});
if ($test->{'timeout'}) {
resfile_test_info("comment", "Timeout");
} elsif (defined $test->{'comment'}) {
resfile_test_info("comment", $test->{'comment'});
}
resfile_test_info("result", "warning") if defined $test->{'check'};
resfile_to_test($test);
}
# Give the test a unique key before serializing it
$test->{key}= "$test" unless defined $test->{key};
BUG#43418: MTR2: does not notice a memory leak occuring at shutdown of mysqld w/ --valgrind - Fixed by implementing parsing of error log messages generated outside of test case runs (eg. during server shutdown). Also make mysql-test-run.pl not delete the error log after server restart, which looses information about which warnings were found. Finally, make multi_update2 a --big test. mysql-test/lib/My/Test.pm: Fix home-brewed (and broken) serialization in My::Test to use the standard Storable serializer. mysql-test/mysql-test-run.pl: - Stop mysqld servers gracefully rather than kill -9 when warnings are being checked. - After stopping mysqld servers, do an additional parse of the error log to check for any warnings generated during shutdown. - Fix error log parsing to be careful not to skip parsing part of the file, by keeping track of previous file position rather than relying on mark_log markers. - Workers report warnings during shutdown to the master process with a new packet 'WARNINGS' which includes a list of names of test that might have caused the problem (could be any test run since last server start). - Fail entire test suite if warnings are found. - When we remove the server data dir before server restart, preserve the error log (don't delete it between restarts), as it may contain valuable information even for test cases which don't show direct failures. mysql-test/t/multi_update2.test: Make test --big, as it takes a _long_ time to run and only tests a single bug.
2009-03-20 15:18:22 +01:00
my $serialized= Storable::freeze($test);
$serialized =~ s/([\x0d\x0a\\])/sprintf("\\%02x", ord($1))/eg;
send $sock,$header. "\n". $serialized. "\n", 0;
}
sub read_test {
my ($sock)= @_;
BUG#43418: MTR2: does not notice a memory leak occuring at shutdown of mysqld w/ --valgrind - Fixed by implementing parsing of error log messages generated outside of test case runs (eg. during server shutdown). Also make mysql-test-run.pl not delete the error log after server restart, which looses information about which warnings were found. Finally, make multi_update2 a --big test. mysql-test/lib/My/Test.pm: Fix home-brewed (and broken) serialization in My::Test to use the standard Storable serializer. mysql-test/mysql-test-run.pl: - Stop mysqld servers gracefully rather than kill -9 when warnings are being checked. - After stopping mysqld servers, do an additional parse of the error log to check for any warnings generated during shutdown. - Fix error log parsing to be careful not to skip parsing part of the file, by keeping track of previous file position rather than relying on mark_log markers. - Workers report warnings during shutdown to the master process with a new packet 'WARNINGS' which includes a list of names of test that might have caused the problem (could be any test run since last server start). - Fail entire test suite if warnings are found. - When we remove the server data dir before server restart, preserve the error log (don't delete it between restarts), as it may contain valuable information even for test cases which don't show direct failures. mysql-test/t/multi_update2.test: Make test --big, as it takes a _long_ time to run and only tests a single bug.
2009-03-20 15:18:22 +01:00
my $serialized= <$sock>;
chomp($serialized);
$serialized =~ s/\\([0-9a-fA-F]{2})/chr(hex($1))/eg;
my $test= Storable::thaw($serialized);
2012-01-13 15:50:02 +01:00
use Data::Dumper;
2012-03-09 08:06:59 +01:00
die "wrong class (hack attempt?): ".ref($test)."\n".Dumper(\$test, $serialized)
BUG#43418: MTR2: does not notice a memory leak occuring at shutdown of mysqld w/ --valgrind - Fixed by implementing parsing of error log messages generated outside of test case runs (eg. during server shutdown). Also make mysql-test-run.pl not delete the error log after server restart, which looses information about which warnings were found. Finally, make multi_update2 a --big test. mysql-test/lib/My/Test.pm: Fix home-brewed (and broken) serialization in My::Test to use the standard Storable serializer. mysql-test/mysql-test-run.pl: - Stop mysqld servers gracefully rather than kill -9 when warnings are being checked. - After stopping mysqld servers, do an additional parse of the error log to check for any warnings generated during shutdown. - Fix error log parsing to be careful not to skip parsing part of the file, by keeping track of previous file position rather than relying on mark_log markers. - Workers report warnings during shutdown to the master process with a new packet 'WARNINGS' which includes a list of names of test that might have caused the problem (could be any test run since last server start). - Fail entire test suite if warnings are found. - When we remove the server data dir before server restart, preserve the error log (don't delete it between restarts), as it may contain valuable information even for test cases which don't show direct failures. mysql-test/t/multi_update2.test: Make test --big, as it takes a _long_ time to run and only tests a single bug.
2009-03-20 15:18:22 +01:00
unless ref($test) eq 'My::Test';
resfile_from_test($test) if $::opt_resfile;
return $test;
}
1;