Updated the tests to use the new VersionParser

This commit is contained in:
Brian Fraser
2012-07-11 15:21:47 -03:00
parent f9a29fed37
commit 8179b1f1a1
28 changed files with 103 additions and 79 deletions

View File

@@ -17,7 +17,6 @@ use DSNParser;
use QueryParser;
use TableSyncer;
use TableChecksum;
use VersionParser;
use TableSyncGroupBy;
use MockSyncStream;
use MockSth;
@@ -48,22 +47,19 @@ else {
Transformers->import(qw(make_checksum));
my $vp = new VersionParser();
my $q = new Quoter();
my $qp = new QueryParser();
my $tp = new TableParser(Quoter => $q);
my $tc = new TableChecksum(Quoter => $q, VersionParser => $vp);
my $tc = new TableChecksum(Quoter => $q);
my $of = new Outfile();
my $rr = new Retry();
my $ts = new TableSyncer(
Quoter => $q,
VersionParser => $vp,
TableChecksum => $tc,
Retry => $rr,
MasterSlave => 1,
);
my %modules = (
VersionParser => $vp,
Quoter => $q,
TableParser => $tp,
TableSyncer => $ts,

View File

@@ -11,6 +11,7 @@ use warnings FATAL => 'all';
use English qw(-no_match_vars);
use Test::More tests => 38;
use VersionParser;
use DuplicateKeyFinder;
use Quoter;
use TableParser;
@@ -26,7 +27,7 @@ my $callback = sub {
push @$dupes, $_[0];
};
my $opt = { version => '004001000' };
my $opt = { mysql_version => VersionParser->new('4.1.0') };
my $ddl;
my $tbl;

View File

@@ -20,8 +20,7 @@ use Cxn;
use Sandbox;
use PerconaTest;
my $vp = new VersionParser();
my $ms = new MasterSlave(VersionParser => $vp);
my $ms = new MasterSlave();
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);

View File

@@ -78,11 +78,9 @@ is_deeply(
# Test online stuff, e.g. get_cols_and_struct().
# #############################################################################
use DSNParser;
use VersionParser;
use Sandbox;
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $vp = new VersionParser;
my $dbh = $sb->get_dbh_for('master');
SKIP: {

View File

@@ -11,8 +11,8 @@ use warnings FATAL => 'all';
use English qw(-no_match_vars);
use Test::More;
use TableChecksum;
use VersionParser;
use TableChecksum;
use TableParser;
use Quoter;
use DSNParser;
@@ -34,8 +34,7 @@ $sb->create_dbs($dbh, ['test']);
my $q = new Quoter();
my $tp = new TableParser(Quoter => $q);
my $vp = new VersionParser();
my $c = new TableChecksum(Quoter=>$q, VersionParser=>$vp);
my $c = new TableChecksum(Quoter=>$q);
my $t;
@@ -48,13 +47,6 @@ throws_ok (
'Algorithm=foo',
);
# Inject the VersionParser with some bogus versions. Later I'll just pass the
# string version number instead of a real DBH, so the version parsing will
# return the value I want.
foreach my $ver( qw(4.0.0 4.1.1) ) {
$vp->{$ver} = $vp->parse($ver);
}
is (
$c->best_algorithm(
algorithm => 'CHECKSUM',

View File

@@ -46,16 +46,14 @@ diag(`$mysql < $trunk/t/lib/samples/before-TableSyncChunk.sql`);
my $q = new Quoter();
my $tp = new TableParser(Quoter => $q);
my $vp = new VersionParser();
my $ms = new MasterSlave();
my $rr = new Retry();
my $chunker = new TableChunker( Quoter => $q, TableParser => $tp );
my $checksum = new TableChecksum( Quoter => $q, VersionParser => $vp );
my $checksum = new TableChecksum( Quoter => $q );
my $syncer = new TableSyncer(
MasterSlave => $ms,
TableChecksum => $checksum,
Quoter => $q,
VersionParser => $vp,
Retry => $rr,
);

View File

@@ -42,7 +42,6 @@ my $mysql = $sb->_use_for('master');
my $q = new Quoter();
my $ms = new MasterSlave();
my $tp = new TableParser(Quoter=>$q);
my $vp = new VersionParser();
my $rr = new Retry();
my $nibbler = new TableNibbler(
@@ -51,7 +50,6 @@ my $nibbler = new TableNibbler(
);
my $checksum = new TableChecksum(
Quoter => $q,
VersionParser => $vp,
);
my $chunker = new TableChunker(
TableParser => $tp,
@@ -62,7 +60,6 @@ my $t = new TableSyncNibble(
TableParser => $tp,
TableChunker => $chunker,
Quoter => $q,
VersionParser => $vp,
);
my @rows;
@@ -81,7 +78,6 @@ my $syncer = new TableSyncer(
MasterSlave => $ms,
TableChecksum => $checksum,
Quoter => $q,
VersionParser => $vp,
Retry => $rr,
);

View File

@@ -50,7 +50,7 @@ elsif ( !$dst_dbh ) {
plan skip_all => 'Cannot connect to sandbox slave';
}
else {
plan tests => 62;
plan tests => 61;
}
$sb->create_dbs($dbh, ['test']);
@@ -74,28 +74,20 @@ throws_ok(
);
throws_ok(
sub { new TableSyncer(MasterSlave=>1, Quoter=>1) },
qr/I need a VersionParser/,
'VersionParser required'
);
throws_ok(
sub { new TableSyncer(MasterSlave=>1, Quoter=>1, VersionParser=>1) },
qr/I need a TableChecksum/,
'TableChecksum required'
);
my $rd = new RowDiff(dbh=>$src_dbh);
my $ms = new MasterSlave();
my $vp = new VersionParser();
my $rt = new Retry();
my $checksum = new TableChecksum(
Quoter => $q,
VersionParser => $vp,
);
my $syncer = new TableSyncer(
MasterSlave => $ms,
Quoter => $q,
TableChecksum => $checksum,
VersionParser => $vp,
DSNParser => $dp,
Retry => $rt,
);

View File

@@ -13,6 +13,7 @@ use Test::More tests => 83;
use PodParser;
use AdvisorRules;
use VersionParser;
use VariableAdvisorRules;
use Advisor;
use PerconaTest;
@@ -343,27 +344,27 @@ my @cases = (
advice => [qw(tmp_table_size)],
},
{ name => "end-of-life mysql version",
mysql_version => '005000087',
mysql_version => VersionParser->new('5.0.87'),
advice => ['end-of-life mysql version'],
},
{ name => "old mysql version 3.22.00",
mysql_version => '00302200',
mysql_version => VersionParser->new('3.22.00'),
advice => ['old mysql version', 'end-of-life mysql version'],
},
{ name => "old mysql version 4.1.1",
mysql_version => '004001001',
mysql_version => VersionParser->new('4.1.1'),
advice => ['old mysql version', 'end-of-life mysql version'],
},
{ name => "old mysql version 5.0.36",
mysql_version => '005000036',
mysql_version => VersionParser->new('5.0.36'),
advice => ['old mysql version', 'end-of-life mysql version'],
},
{ name => "old mysql version 5.1.29",
mysql_version => '005001029',
mysql_version => VersionParser->new('5.1.29'),
advice => ['old mysql version'],
},
{ name => "old mysql version 5.5.0",
mysql_version => '005005000',
mysql_version => VersionParser->new('5.5.0'),
advice => [],
},
);

View File

@@ -9,25 +9,83 @@ BEGIN {
use strict;
use warnings FATAL => 'all';
use English qw(-no_match_vars);
use Test::More tests => 5;
use Test::More tests => 27;
use VersionParser;
use PerconaTest;
my $vp = new VersionParser;
my $v1 = new_ok "VersionParser", [ "4.1" ], "new from string works";
is(
$vp->parse('5.0.38-Ubuntu_0ubuntu1.1-log'),
'005000038',
"$v1",
"4.1",
"object from string stringifies as expected"
);
is(
$v1->innodb_version,
'NO',
'default ->innodb_version is NO'
);
my $v2;
$v2 = new_ok "VersionParser", [ qw( major 5 minor 5 revision 5 ) ], "new from parts works";
is( "$v2", "5.5.5" );
$v2 = new_ok "VersionParser", [ { qw( major 5 minor 5 revision 5 ) } ], "new from hashref works";
is( "$v2", "5.5.5" );
for my $test (
[ "5.0.1", "lt", "5.0.2" ],
[ "5.0", "eq", "5.0.2" ],
[ "5.1.0", "gt", "5.0.99" ],
[ "6", "gt", "5.9.9" ],
[ "4", "ne", "5.0.2" ],
[ "5.0.1", "ne", "5.0.2" ],
[ "5.0.1", "eq", "5.0.1" ],
[ "5.0.1", "eq", "5" ],
[ "5.0.1", "lt", "6" ],
[ "5.0.1", "gt", "5.0.09" ],
# TODO: Should these actually happen?
# [ "5.0.1" eq "5.0.10" ]
# [ "5.0.10" lt "5.0.3" ]
) {
my ($v, $cmp, $against, $test) = @$test;
cmp_ok( VersionParser->new($v), $cmp, $against, "$v $cmp $against" );
}
my $c = VersionParser->new("5.5.1");
is(
$c->comment("SET NAMES utf8"),
"/*!50501 SET NAMES utf8 */",
"->comment works as expected"
);
is(
$c->comment('@@hostname,'),
'/*!50501 @@hostname, */',
);
is(
VersionParser->new('5.0.38-Ubuntu_0ubuntu1.1-log')->normalized_version,
'50038',
'Parser works on ordinary version',
);
is(
$vp->parse('5.5'),
'005005000',
VersionParser->new('5.5')->normalized_version,
'50500',
'Parser works on a simplified version',
);
is(
VersionParser->new('5.0.08')->revision,
'0.8',
'In 5.0.08, the revsion is 0.8',
);
# Open a connection to MySQL, or skip the rest of the tests.
use DSNParser;
use Sandbox;
@@ -36,13 +94,23 @@ my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $dbh = $sb->get_dbh_for('master');
SKIP: {
skip 'Cannot connect to MySQL', 2 unless $dbh;
ok($vp->version_ge($dbh, '3.23.00'), 'Version is > 3.23');
my $vp = new_ok "VersionParser", [ $dbh ], "new from dbh works";
cmp_ok($vp, "ge", '3.23.00', 'Version is > 3.23');
unlike(
$vp->innodb_version($dbh),
$vp->innodb_version(),
qr/DISABLED/,
"InnoDB version"
);
my ($ver) = $dbh->selectrow_array("SELECT VERSION()");
$ver =~ s/(\d+\.\d+\.\d+).*/$1/;
is(
"$vp",
$ver,
"object from dbh stringifies as expected"
);
}
# #############################################################################

View File

@@ -13,7 +13,6 @@ use Test::More;
use Sandbox;
use PerconaTest;
use VersionParser;
# See 101_slowlog_analyses.t for why we shift.
shift @INC; # our unshift (above)
shift @INC; # PerconaTest's unshift
@@ -22,7 +21,6 @@ shift @INC; # Sandbox
require "$trunk/bin/pt-query-digest";
my $dp = new DSNParser(opts=>$dsn_opts);
my $vp = new VersionParser();
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $dbh = $sb->get_dbh_for('master');

View File

@@ -13,7 +13,6 @@ use Test::More;
use Sandbox;
use PerconaTest;
use VersionParser;
# See 101_slowlog_analyses.t for why we shift.
shift @INC; # our unshift (above)
shift @INC; # PerconaTest's unshift
@@ -22,7 +21,6 @@ shift @INC; # Sandbox
require "$trunk/bin/pt-query-digest";
my $dp = new DSNParser(opts=>$dsn_opts);
my $vp = new VersionParser();
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $dbh = $sb->get_dbh_for('master');

View File

@@ -17,14 +17,13 @@ use VersionParser;
use Sandbox;
my $dp = new DSNParser(opts=>$dsn_opts);
my $vp = new VersionParser();
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $dbh = $sb->get_dbh_for('master');
if ( !$dbh ) {
plan skip_all => 'Cannot connect to sandbox master';
}
elsif ( !$vp->version_ge($dbh, '5.1.0') ) {
elsif ( VersionParser->new($dbh) < '5.1' ) {
plan skip_all => 'Sandbox master version not >= 5.1';
}
else {

View File

@@ -107,23 +107,25 @@ my $innodb_re = qr/InnoDB version\s+(.*)/;
my (@innodb_versions) = $result =~ /$innodb_re/g;
$result =~ s/$innodb_re/InnoDB version BUILTIN/g;
my $vp = new VersionParser;
my $master_version = VersionParser->new($master_dbh);
my $slave_version = VersionParser->new($slave_dbh);
my $slave2_version = VersionParser->new($slave_2_dbh);
is(
$innodb_versions[0],
$vp->innodb_version($master_dbh),
$master_version->innodb_version(),
"pt-slave-find gets the right InnoDB version for the master"
);
is(
$innodb_versions[1],
$vp->innodb_version($slave_dbh),
$slave_version->innodb_version(),
"...and for the first slave"
);
is(
$innodb_versions[2],
$vp->innodb_version($slave_2_dbh),
$slave2_version->innodb_version(),
"...and for the first slave"
);

View File

@@ -18,7 +18,6 @@ shift @INC; # PerconaTest's unshift
require "$trunk/bin/pt-table-checksum";
my $dp = new DSNParser(opts=>$dsn_opts);
my $vp = new VersionParser();
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $master_dbh = $sb->get_dbh_for('master');
my $slave_dbh = $sb->get_dbh_for('slave1');

View File

@@ -18,7 +18,6 @@ shift @INC; # our unshift (above)
shift @INC; # PerconaTest's unshift
require "$trunk/bin/pt-table-checksum";
my $vp = new VersionParser();
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $dbh = $sb->get_dbh_for('master');

View File

@@ -20,7 +20,6 @@ $Data::Dumper::Indent = 0;
$Data::Dumper::Sortkeys = 1;
$Data::Dumper::Quotekeys = 0;
my $vp = new VersionParser();
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $c1_dbh = $sb->get_dbh_for('master');

View File

@@ -17,7 +17,6 @@ use Sandbox;
require "$trunk/bin/pt-table-sync";
my $output;
my $vp = new VersionParser();
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $master_dbh = $sb->get_dbh_for('master');
@@ -29,8 +28,8 @@ if ( !$master_dbh ) {
elsif ( !$slave_dbh ) {
plan skip_all => 'Cannot connect to sandbox slave';
}
elsif ( !$vp->version_ge($master_dbh, '5.1.5') ) {
plan skip_all => 'Requires MySQL 5.1 or newer';
elsif ( VersionParser->new($master_dbh) < '5.1.5' ) {
plan skip_all => 'Requires MySQL 5.1.5 or newer';
}
else {
plan tests => 7;

View File

@@ -16,7 +16,6 @@ use Sandbox;
require "$trunk/bin/pt-table-sync";
my $vp = new VersionParser();
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $master_dbh = $sb->get_dbh_for('master');

View File

@@ -16,7 +16,6 @@ use Sandbox;
require "$trunk/bin/pt-table-sync";
my $output;
my $vp = new VersionParser();
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $master_dbh = $sb->get_dbh_for('master');

View File

@@ -16,7 +16,6 @@ use PerconaTest;
use Sandbox;
require "$trunk/bin/pt-table-sync";
my $vp = new VersionParser();
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $master_dbh = $sb->get_dbh_for('master');

View File

@@ -16,7 +16,6 @@ use Sandbox;
require "$trunk/bin/pt-table-sync";
my $output;
my $vp = new VersionParser();
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $master_dbh = $sb->get_dbh_for('master');

View File

@@ -16,7 +16,6 @@ use Sandbox;
require "$trunk/bin/pt-table-sync";
my $output;
my $vp = new VersionParser();
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $master_dbh = $sb->get_dbh_for('master');

View File

@@ -16,13 +16,12 @@ use Sandbox;
require "$trunk/bin/pt-table-sync";
my $output;
my $vp = new VersionParser();
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $master_dbh = $sb->get_dbh_for('master');
my $slave_dbh = $sb->get_dbh_for('slave1');
if ( $vp->version_le($master_dbh, '5.5') ) {
if ( VersionParser->new($master_dbh) < '5.5' ) {
plan skip_all => "This functionality doesn't work correctly on MySQLs earlier than 5.5";
}
if ( !$master_dbh ) {

View File

@@ -16,7 +16,6 @@ use Sandbox;
require "$trunk/bin/pt-table-sync";
my $output;
my $vp = new VersionParser();
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $master_dbh = $sb->get_dbh_for('master');

View File

@@ -16,7 +16,6 @@ use Sandbox;
require "$trunk/bin/pt-table-sync";
my $output;
my $vp = new VersionParser();
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $master_dbh = $sb->get_dbh_for('master');

View File

@@ -16,7 +16,6 @@ use Sandbox;
require "$trunk/bin/pt-table-sync";
my $output;
my $vp = new VersionParser();
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $master_dbh = $sb->get_dbh_for('master');

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env perl
// #!/usr/bin/env perl
BEGIN {
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
@@ -16,7 +16,6 @@ use Sandbox;
require "$trunk/bin/pt-table-sync";
my $output;
my $vp = new VersionParser();
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $master_dbh = $sb->get_dbh_for('master');
@@ -28,7 +27,7 @@ if ( !$master_dbh ) {
elsif ( !$slave_dbh ) {
plan skip_all => 'Cannot connect to sandbox slave';
}
elsif ( !$vp->version_ge($master_dbh, '5.0.2') ) {
elsif ( VersionParser->new($master_dbh) < '5.0.2' ) {
plan skip_all => 'Sever does not support triggers (< 5.0.2)';
}
else {