mirror of
https://github.com/MariaDB/server.git
synced 2025-04-26 11:49:09 +03:00
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.
69 lines
1.1 KiB
Perl
69 lines
1.1 KiB
Perl
# -*- cperl -*-
|
|
|
|
|
|
#
|
|
# One test
|
|
#
|
|
package My::Test;
|
|
|
|
use strict;
|
|
use warnings;
|
|
use Carp;
|
|
use Storable();
|
|
|
|
|
|
sub new {
|
|
my $class= shift;
|
|
my $self= bless {
|
|
@_,
|
|
}, $class;
|
|
return $self;
|
|
}
|
|
|
|
|
|
#
|
|
# 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');
|
|
}
|
|
|
|
|
|
sub write_test {
|
|
my ($test, $sock, $header)= @_;
|
|
|
|
# Give the test a unique key before serializing it
|
|
$test->{key}= "$test" unless defined $test->{key};
|
|
|
|
my $serialized= Storable::freeze($test);
|
|
$serialized =~ s/([\x0d\x0a\\])/sprintf("\\%02x", ord($1))/eg;
|
|
print $sock $header, "\n", $serialized, "\n";
|
|
}
|
|
|
|
|
|
sub read_test {
|
|
my ($sock)= @_;
|
|
my $serialized= <$sock>;
|
|
chomp($serialized);
|
|
$serialized =~ s/\\([0-9a-fA-F]{2})/chr(hex($1))/eg;
|
|
my $test= Storable::thaw($serialized);
|
|
die "wrong class (hack attempt?)"
|
|
unless ref($test) eq 'My::Test';
|
|
return $test;
|
|
}
|
|
|
|
|
|
1;
|