1
0
mirror of https://github.com/MariaDB/server.git synced 2025-04-26 11:49:09 +03:00
unknown 8193c32743 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

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;