Files
percona-toolkit/t/pt-upgrade/basics.t
2012-02-02 09:07:18 -07:00

146 lines
4.3 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-upgrade";
# This runs immediately if the server is already running, else it starts it.
diag(`$trunk/sandbox/start-sandbox master 12347 >/dev/null`);
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $dbh1 = $sb->get_dbh_for('master');
my $dbh2 = $sb->get_dbh_for('slave2');
if ( !$dbh1 ) {
plan skip_all => 'Cannot connect to sandbox master';
}
elsif ( !$dbh2 ) {
plan skip_all => 'Cannot connect to second sandbox master';
}
else {
plan tests => 10;
}
$sb->load_file('master', 't/pt-upgrade/samples/001/tables.sql');
$sb->load_file('slave2', 't/pt-upgrade/samples/001/tables.sql');
my $cmd = "$trunk/bin/pt-upgrade h=127.1,P=12345,u=msandbox,p=msandbox P=12347 --compare results,warnings --zero-query-times";
my @args = ('--compare', 'results,warnings', '--zero-query-times');
my $sample = "$trunk/t/pt-upgrade/samples/";
ok(
no_diff(
"$cmd $trunk/t/pt-upgrade/samples/001/select-one.log",
't/pt-upgrade/samples/001/select-one.txt'
),
'Report for a single query (checksum method)'
);
ok(
no_diff(
"$cmd $trunk/t/pt-upgrade/samples/001/select-everyone.log",
't/pt-upgrade/samples/001/select-everyone.txt'
),
'Report for multiple queries (checksum method)'
);
ok(
no_diff(
"$cmd $trunk/t/pt-upgrade/samples/001/select-one.log --compare-results-method rows",
't/pt-upgrade/samples/001/select-one-rows.txt'
),
'Report for a single query (rows method)'
);
ok(
no_diff(
"$cmd $trunk/t/pt-upgrade/samples/001/select-everyone.log --compare-results-method rows",
't/pt-upgrade/samples/001/select-everyone-rows.txt'
),
'Report for multiple queries (rows method)'
);
ok(
no_diff(
"$cmd --reports queries,differences,errors $trunk/t/pt-upgrade/samples/001/select-everyone.log",
't/pt-upgrade/samples/001/select-everyone-no-stats.txt'
),
'Report without statistics'
);
ok(
no_diff(
"$cmd --reports differences,errors,statistics $trunk/t/pt-upgrade/samples/001/select-everyone.log",
't/pt-upgrade/samples/001/select-everyone-no-queries.txt'
),
'Report without per-query reports'
);
# #############################################################################
# Issue 951: mk-upgrade "I need a db argument" error with
# compare-results-method=rows
# #############################################################################
$sb->load_file('master', 't/pt-upgrade/samples/002/tables.sql');
$sb->load_file('slave2', 't/pt-upgrade/samples/002/tables.sql');
# Make a difference so diff_rows() is called.
$dbh1->do('insert into test.t values (5)');
ok(
no_diff(
sub { pt_upgrade::main(@args,
'h=127.1,P=12345,u=msandbox,p=msandbox,D=test', 'P=12347,D=test',
"$sample/002/no-db.log",
qw(--compare-results-method rows --temp-database test)) },
't/pt-upgrade/samples/002/report-01.txt',
),
'No db, compare results row, DSN D, --temp-database (issue 951)'
);
$sb->load_file('master', 't/pt-upgrade/samples/002/tables.sql');
$sb->load_file('slave2', 't/pt-upgrade/samples/002/tables.sql');
$dbh1->do('insert into test.t values (5)');
ok(
no_diff(
sub { pt_upgrade::main(@args,
'h=127.1,P=12345,u=msandbox,p=msandbox,D=test', 'P=12347,D=test',
"$sample/002/no-db.log",
qw(--compare-results-method rows --temp-database tmp_db)) },
't/pt-upgrade/samples/002/report-01.txt',
),
'No db, compare results row, DSN D'
);
is_deeply(
$dbh1->selectall_arrayref('show tables from `test`'),
[['t']],
"Didn't create temp table in event's db"
);
is_deeply(
$dbh1->selectall_arrayref('show tables from `tmp_db`'),
[['mk_upgrade_left']],
"Createed temp table in --temp-database"
);
# #############################################################################
# Done.
# #############################################################################
diag(`rm /tmp/left-outfile.txt /tmp/right-outfile.txt 2>/dev/null`);
$sb->wipe_clean($dbh1);
$sb->wipe_clean($dbh2);
exit;