~percona-toolkit-dev/percona-toolkit/fix-password-comma-bug-886077

« back to all changes in this revision

Viewing changes to t/pt-table-checksum/create_replicate_table.t

  • Committer: Daniel Nichter
  • Date: 2012-02-07 20:10:11 UTC
  • mfrom: (174 2.0)
  • mto: This revision was merged to the branch mainline in revision 189.
  • Revision ID: daniel@percona.com-20120207201011-sok2c1f2ay9qr3gm
Merge trunk r174.

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
 
14
14
use PerconaTest;
15
15
use Sandbox;
 
16
shift @INC;  # our unshift (above)
 
17
shift @INC;  # PerconaTest's unshift
16
18
require "$trunk/bin/pt-table-checksum";
17
19
 
18
20
my $dp = new DSNParser(opts=>$dsn_opts);
28
30
   plan skip_all => 'Cannot connect to sandbox slave';
29
31
}
30
32
else {
31
 
   plan tests => 5;
 
33
   plan tests => 4;
32
34
}
33
35
 
 
36
# The sandbox servers run with lock_wait_timeout=3 and it's not dynamic
 
37
# so we need to specify --lock-wait-timeout=3 else the tool will die.
 
38
# And --max-load "" prevents waiting for status variables.
 
39
my $master_dsn = 'h=127.1,P=12345,u=msandbox,p=msandbox';
 
40
my @args       = ($master_dsn, qw(--lock-wait-timeout 3), '--max-load', ''); 
 
41
 
34
42
my $output;
35
 
my $cnf='/tmp/12345/my.sandbox.cnf';
36
 
my $cmd = "$trunk/bin/pt-table-checksum -F $cnf 127.0.0.1";
 
43
my $row;
37
44
 
38
45
$sb->wipe_clean($master_dbh);
39
 
$sb->create_dbs($master_dbh, [qw(test)]);
40
 
 
41
 
# #############################################################################
42
 
# Issue 77: mk-table-checksum should be able to create the --replicate table
43
 
# #############################################################################
44
 
 
45
 
is_deeply(
46
 
   $master_dbh->selectall_arrayref('show tables from test'),
47
 
   [],
48
 
   "Checksum table does not exist on master"
49
 
);
50
 
 
51
 
is_deeply(
52
 
   $slave_dbh->selectall_arrayref('show tables from test'),
53
 
   [],
54
 
   "Checksum table does not exist on slave"
55
 
);
56
 
 
57
 
# First check that, like a Klingon, it dies with honor.
58
 
$output = `$cmd --replicate test.checksum 2>&1`;
 
46
#$sb->create_dbs($master_dbh, [qw(test)]);
 
47
 
 
48
# Most other tests implicitly test that --create-replicate-table is on
 
49
# by default because they use that functionality.  So here we need to
 
50
# test that we can turn it off, that it doesn't blow up if the repl table
 
51
# already exists, etc.
 
52
 
 
53
eval {
 
54
   pt_table_checksum::main(@args, '--no-create-replicate-table');
 
55
};
 
56
like(
 
57
   $EVAL_ERROR,
 
58
   qr/--replicate database percona does not exist/,
 
59
   "--no-create-replicate-table dies if db doesn't exist"
 
60
);
 
61
 
 
62
$master_dbh->do('create database percona');
 
63
$master_dbh->do('use percona');
 
64
eval {
 
65
   pt_table_checksum::main(@args, '--no-create-replicate-table');
 
66
};
 
67
like(
 
68
   $EVAL_ERROR,
 
69
   qr/--replicate table `percona`.`checksums` does not exist/,
 
70
   "--no-create-replicate-table dies if table doesn't exist"
 
71
);
 
72
 
 
73
my $create_repl_table =
 
74
"CREATE TABLE `checksums` (
 
75
  db             char(64)     NOT NULL,
 
76
  tbl            char(64)     NOT NULL,
 
77
  chunk          int          NOT NULL,
 
78
  chunk_time     float            NULL,
 
79
  chunk_index    varchar(200)     NULL,
 
80
  lower_boundary text             NULL,
 
81
  upper_boundary text             NULL,
 
82
  this_crc       char(40)     NOT NULL,
 
83
  this_cnt       int          NOT NULL,
 
84
  master_crc     char(40)         NULL,
 
85
  master_cnt     int              NULL,
 
86
  ts             timestamp    NOT NULL,
 
87
  PRIMARY KEY (db, tbl, chunk)
 
88
) ENGINE=InnoDB;";
 
89
 
 
90
$master_dbh->do($create_repl_table);
 
91
 
 
92
$output = output(
 
93
   sub { pt_table_checksum::main(@args, '--no-create-replicate-table',
 
94
      qw(-t sakila.country)) },
 
95
);
59
96
like(
60
97
   $output,
61
 
   qr/replicate table .+ does not exist/,
62
 
   'Dies with honor when replication table does not exist'
63
 
);
64
 
 
65
 
output(
66
 
   sub { pt_table_checksum::main('-F', $cnf,
67
 
      qw(--create-replicate-table --replicate test.checksum 127.1)) },
68
 
   stderr => 0,
69
 
);
70
 
 
71
 
# In 5.0 "on" in "on update" is lowercase, in 5.1 it's uppercase.
72
 
my $create_tbl = lc("CREATE TABLE `checksum` (
73
 
  `db` char(64) NOT NULL,
74
 
  `tbl` char(64) NOT NULL,
75
 
  `chunk` int(11) NOT NULL,
76
 
  `boundaries` char(100) NOT NULL,
77
 
  `this_crc` char(40) NOT NULL,
78
 
  `this_cnt` int(11) NOT NULL,
79
 
  `master_crc` char(40) default NULL,
80
 
  `master_cnt` int(11) default NULL,
81
 
  `ts` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
82
 
  PRIMARY KEY  (`db`,`tbl`,`chunk`)
83
 
) ENGINE=MyISAM DEFAULT CHARSET=latin1");
84
 
 
85
 
# In 5.0 there's 2 spaces, in 5.1 there 1.
86
 
if ( $vp->version_ge($master_dbh, '5.1.0') ) {
87
 
   $create_tbl =~ s/primary key  /primary key /;
88
 
}
89
 
 
90
 
is(
91
 
   lc($master_dbh->selectrow_hashref('show create table test.checksum')->{'create table'}),
92
 
   $create_tbl,
93
 
   'Creates the replicate table'
 
98
   qr/^\S+\s+0\s+0\s+109\s+1\s+0\s+\S+\s+sakila.country$/m,
 
99
   "Uses pre-created replicate table"
94
100
);
95
101
 
96
102
# ############################################################################
97
103
# Issue 1318: mk-tabke-checksum --create-replicate-table doesn't replicate
98
104
# ############################################################################
99
 
is(
100
 
   lc($slave_dbh->selectrow_hashref('show create table test.checksum')->{'create table'}),
101
 
   $create_tbl,
102
 
   'Creates the replicate table replicates (issue 1318)'
 
105
 
 
106
$sb->wipe_clean($master_dbh);
 
107
 
 
108
# Wait until the slave no longer has the percona db.
 
109
PerconaTest::wait_until(
 
110
   sub {
 
111
      eval { $slave_dbh->do("use percona") };
 
112
      return 1 if $EVAL_ERROR;
 
113
      return 0;
 
114
   },
 
115
);
 
116
 
 
117
pt_table_checksum::main(@args, qw(-t sakila.country --quiet));
 
118
 
 
119
# Wait until the repl table replicates, or timeout.
 
120
PerconaTest::wait_for_table($slave_dbh, 'percona.checksums');
 
121
 
 
122
$row = $slave_dbh->selectrow_arrayref("show tables from percona");
 
123
is_deeply(
 
124
   $row,
 
125
   ['checksums'],
 
126
   'Auto-created replicate table replicates (issue 1318)'
103
127
);
104
128
 
105
129
# #############################################################################