~percona-toolkit-dev/percona-toolkit/pt-agent

« back to all changes in this revision

Viewing changes to t/lib/SlowLogWriter.t

  • Committer: Daniel Nichter
  • Date: 2011-06-24 17:22:06 UTC
  • Revision ID: daniel@percona.com-20110624172206-c7q4s4ad6r260zz6
Add lib/, t/lib/, and sandbox/.  All modules are updated and passing on MySQL 5.1.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/perl
 
2
 
 
3
BEGIN {
 
4
   die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
 
5
      unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
 
6
   unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
 
7
};
 
8
 
 
9
use strict;
 
10
use warnings FATAL => 'all';
 
11
use English qw(-no_match_vars);
 
12
use Test::More tests => 4;
 
13
 
 
14
use SlowLogParser;
 
15
use SlowLogWriter;
 
16
use MaatkitTest;
 
17
 
 
18
my $p = new SlowLogParser;
 
19
my $w = new SlowLogWriter;
 
20
 
 
21
sub __no_diff {
 
22
   my ( $filename, $expected ) = @_;
 
23
 
 
24
   # Parse and rewrite the original file.
 
25
   my $tmp_file = '/tmp/SlowLogWriter-test.txt';
 
26
   open my $rewritten_fh, '>', $tmp_file
 
27
      or die "Cannot write to $tmp_file: $OS_ERROR";
 
28
   open my $fh, "<", "$trunk/$filename"
 
29
      or die "Cannot open $trunk/$filename: $OS_ERROR";
 
30
   my %args = (
 
31
      next_event => sub { return <$fh>;    },
 
32
      tell       => sub { return tell $fh; },
 
33
   );
 
34
   while ( my $e = $p->parse_event(%args) ) {
 
35
      $w->write($rewritten_fh, $e);
 
36
   }
 
37
   close $fh;
 
38
   close $rewritten_fh;
 
39
 
 
40
   # Compare the contents of the two files.
 
41
   my $retval = system("diff $tmp_file $trunk/$expected");
 
42
   `rm -rf $tmp_file`;
 
43
   $retval = $retval >> 8;
 
44
   return !$retval;
 
45
}
 
46
 
 
47
sub write_event {
 
48
   my ( $event, $expected_output ) = @_;
 
49
   my $tmp_file = '/tmp/SlowLogWriter-output.txt';
 
50
   open my $fh, '>', $tmp_file or die "Cannot open $tmp_file: $OS_ERROR";
 
51
   $w->write($fh, $event);
 
52
   close $fh;
 
53
   my $retval = system("diff $tmp_file $trunk/$expected_output");
 
54
   `rm -rf $tmp_file`;
 
55
   $retval = $retval >> 8;
 
56
   return !$retval;
 
57
}
 
58
 
 
59
# Check that I can write a slow log in the default slow log format.
 
60
ok(
 
61
   __no_diff('t/lib/samples/slowlogs/slow001.txt', 't/lib/samples/slowlogs/slow001-rewritten.txt'),
 
62
   'slow001.txt rewritten'
 
63
);
 
64
 
 
65
# Test writing a Percona-patched slow log with Thread_id and hi-res Query_time.
 
66
ok(
 
67
   __no_diff('t/lib/samples/slowlogs/slow032.txt', 't/lib/samples/slowlogs/slow032-rewritten.txt'),
 
68
   'slow032.txt rewritten'
 
69
);
 
70
 
 
71
ok(
 
72
   write_event(
 
73
      {
 
74
         Query_time => '1',
 
75
         arg        => 'select * from foo',
 
76
         ip         => '127.0.0.1',
 
77
         port       => '12345',
 
78
      },
 
79
      't/lib/samples/slowlogs/slowlogwriter001.txt',
 
80
   ),
 
81
   'Writes Client attrib from tcpdump',
 
82
);
 
83
 
 
84
ok(
 
85
   write_event(
 
86
      {
 
87
         Query_time => '1.123456',
 
88
         Lock_time  => '0.000001',
 
89
         arg        => 'select * from foo',
 
90
      },
 
91
      't/lib/samples/slowlogs/slowlogwriter002.txt',
 
92
   ),
 
93
   'Writes microsecond times'
 
94
);
 
95
 
 
96
# #############################################################################
 
97
# Done.
 
98
# #############################################################################
 
99
diag(`rm -rf SlowLogWriter-test.txt >/dev/null 2>&1`);
 
100
exit;