Files
percona-toolkit/t/pt-deadlock-logger/bugs.t
2013-10-10 14:36:42 -07:00

161 lines
4.8 KiB
Perl

#!/usr/bin/env perl
BEGIN {
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
};
use strict;
use warnings FATAL => 'all';
use English qw(-no_match_vars);
use Test::More;
use PerconaTest;
use Sandbox;
require "$trunk/bin/pt-deadlock-logger";
use Data::Dumper;
# #############################################################################
# https://bugs.launchpad.net/percona-toolkit/+bug/903443
# pt-deadlock-logger crashes on MySQL 5.5
# #############################################################################
my $innodb_status_sample = load_file("t/pt-deadlock-logger/samples/bug_903443.txt");
is_deeply(
pt_deadlock_logger::parse_deadlocks($innodb_status_sample),
{
'1' => {
db => 'test',
hostname => 'localhost',
id => 1,
idx => 'PRIMARY',
ip => '',
lock_mode => 'X',
lock_type => 'RECORD',
query => 'update a set movie_id=96 where id =2',
server => '',
tbl => 'a',
thread => '19',
ts => '2011-12-12T22:52:42',
txn_id => 0,
txn_time => '161',
user => 'root',
victim => 0,
wait_hold => 'w'
},
'2' => {
db => 'test',
hostname => 'localhost',
id => 2,
idx => 'PRIMARY',
ip => '',
lock_mode => 'X',
lock_type => 'RECORD',
query => 'update a set movie_id=98 where id =4',
server => '',
tbl => 'a',
thread => '18',
ts => '2011-12-12T22:52:42',
txn_id => 0,
txn_time => '1026',
user => 'root',
victim => 1,
wait_hold => 'w'
}
},
"Bug 903443: pt-deadlock-logger parses the thread id incorrectly for MySQL 5.5",
);
# #############################################################################
# https://bugs.launchpad.net/percona-toolkit/+bug/1082104
# pt-deadlock-logger problem when the user have a dash in the name
# #############################################################################
$innodb_status_sample = load_file("t/pt-deadlock-logger/samples/bug_1082104.txt");
is_deeply(
pt_deadlock_logger::parse_deadlocks($innodb_status_sample),
{
'1' => {
db => 'test',
hostname => 'localhost',
id => 1,
idx => 'PRIMARY',
ip => '',
lock_mode => 'X',
lock_type => 'RECORD',
query => 'update a set movie_id=96 where id =2',
server => '',
tbl => 'a',
thread => '19',
ts => '2011-12-12T22:52:42',
txn_id => 0,
txn_time => '161',
user => 'ro-ot',
victim => 0,
wait_hold => 'w'
},
'2' => {
db => 'test',
hostname => 'localhost',
id => 2,
idx => 'PRIMARY',
ip => '',
lock_mode => 'X',
lock_type => 'RECORD',
query => 'update a set movie_id=98 where id =4',
server => '',
tbl => 'a',
thread => '18',
ts => '2011-12-12T22:52:42',
txn_id => 0,
txn_time => '1026',
user => 'ro-ot',
victim => 1,
wait_hold => 'w'
}
},
"Bug 1082104: pt-deadlock-logger shows host as user when the username has a dash in the name",
);
# #############################################################################
# https://bugs.launchpad.net/percona-toolkit/+bug/1195034
# pt-deadlock-logger error: Use of uninitialized value $ts in pattern match
# #############################################################################
$innodb_status_sample = load_file("t/pt-deadlock-logger/samples/bug_1195034.txt");
my $deadlocks = pt_deadlock_logger::parse_deadlocks($innodb_status_sample);
is_deeply(
$deadlocks,
{
},
"Bug 1195034: TOO DEEP OR LONG SEARCH IN THE LOCK TABLE WAITS-FOR GRAPH"
) or diag(Dumper($deadlocks));
# #############################################################################
# pt-deadlock-logger 2.2 requires a DSN
# https://bugs.launchpad.net/percona-toolkit/+bug/1206728
# #############################################################################
my $config = "/tmp/pt-deadlock-logger-test.conf.$PID";
`cp $trunk/t/pt-deadlock-logger/samples/pt-deadlock-logger-test.conf $config`;
my $output = `$trunk/bin/pt-deadlock-logger --config $config --iteration 1 2>&1`;
is(
$CHILD_ERROR,
0,
"Does not require explicit DSN (bug 1206728)"
) or diag($output);
diag(`rm -rf $config`);
# #############################################################################
# Done.
# #############################################################################
done_testing;