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

« back to all changes in this revision

Viewing changes to t/lib/TableSyncGroupBy.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 => 5;
 
13
 
 
14
use TableSyncGroupBy;
 
15
use Quoter;
 
16
use MockSth;
 
17
use RowDiff;
 
18
use ChangeHandler;
 
19
use MaatkitTest;
 
20
 
 
21
my $q = new Quoter();
 
22
my $tbl_struct = { is_col => {} };  # fake tbl_struct
 
23
my @rows;
 
24
 
 
25
throws_ok(
 
26
   sub { new TableSyncGroupBy() },
 
27
   qr/I need a Quoter/,
 
28
   'Quoter required'
 
29
);
 
30
my $t = new TableSyncGroupBy(
 
31
   Quoter => $q,
 
32
);
 
33
 
 
34
my $ch = new ChangeHandler(
 
35
   Quoter    => $q,
 
36
   right_db  => 'test',
 
37
   right_tbl => 'foo',
 
38
   left_db   => 'test',
 
39
   left_tbl  => 'foo',
 
40
   replace   => 0,
 
41
   actions   => [ sub { push @rows, $_[0] }, ],
 
42
   queue     => 0,
 
43
);
 
44
 
 
45
$t->prepare_to_sync(
 
46
   ChangeHandler => $ch,
 
47
   cols          => [qw(a b c)],
 
48
   tbl_struct    => $tbl_struct,
 
49
   buffer_in_mysql => 1,
 
50
);
 
51
is(
 
52
   $t->get_sql(
 
53
      where    => 'foo=1',
 
54
      database => 'test',
 
55
      table    => 'foo',
 
56
   ),
 
57
   'SELECT SQL_BUFFER_RESULT `a`, `b`, `c`, COUNT(*) AS __maatkit_count FROM `test`.`foo` '
 
58
      . 'WHERE foo=1 GROUP BY `a`, `b`, `c` ORDER BY `a`, `b`, `c`',
 
59
   'Got SQL with SQL_BUFFER_RESULT',
 
60
);
 
61
 
 
62
$t->prepare_to_sync(
 
63
   ChangeHandler => $ch,
 
64
   cols          => [qw(a b c)],
 
65
   tbl_struct    => $tbl_struct,
 
66
);
 
67
is(
 
68
   $t->get_sql(
 
69
      where    => 'foo=1',
 
70
      database => 'test',
 
71
      table    => 'foo',
 
72
   ),
 
73
   'SELECT `a`, `b`, `c`, COUNT(*) AS __maatkit_count FROM `test`.`foo` '
 
74
      . 'WHERE foo=1 GROUP BY `a`, `b`, `c` ORDER BY `a`, `b`, `c`',
 
75
   'Got SQL OK',
 
76
);
 
77
 
 
78
# Changed from undef to 0 due to r4802.
 
79
is( $t->done, 0, 'Not done yet' );
 
80
 
 
81
my $d = new RowDiff( dbh => 1 );
 
82
$d->compare_sets(
 
83
   left_sth => new MockSth(
 
84
      { a => 1, b => 2, c => 3, __maatkit_count => 4 },
 
85
      { a => 2, b => 2, c => 3, __maatkit_count => 4 },
 
86
      { a => 3, b => 2, c => 3, __maatkit_count => 2 },
 
87
      # { a => 4, b => 2, c => 3, __maatkit_count => 2 },
 
88
   ),
 
89
   right_sth => new MockSth(
 
90
      { a => 1, b => 2, c => 3, __maatkit_count => 3 },
 
91
      { a => 2, b => 2, c => 3, __maatkit_count => 6 },
 
92
      # { a => 3, b => 2, c => 3, __maatkit_count => 2 },
 
93
      { a => 4, b => 2, c => 3, __maatkit_count => 1 },
 
94
   ),
 
95
   syncer     => $t,
 
96
   tbl_struct => {},
 
97
);
 
98
 
 
99
is_deeply(
 
100
   \@rows,
 
101
   [
 
102
   "INSERT INTO `test`.`foo`(`a`, `b`, `c`) VALUES ('1', '2', '3')",
 
103
   "DELETE FROM `test`.`foo` WHERE `a`='2' AND `b`='2' AND `c`='3' LIMIT 1",
 
104
   "DELETE FROM `test`.`foo` WHERE `a`='2' AND `b`='2' AND `c`='3' LIMIT 1",
 
105
   "INSERT INTO `test`.`foo`(`a`, `b`, `c`) VALUES ('3', '2', '3')",
 
106
   "INSERT INTO `test`.`foo`(`a`, `b`, `c`) VALUES ('3', '2', '3')",
 
107
   "DELETE FROM `test`.`foo` WHERE `a`='4' AND `b`='2' AND `c`='3' LIMIT 1",
 
108
   ],
 
109
   'rows from handler',
 
110
);