1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
#!/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 File::Basename;
$ENV{PERCONA_TOOLKIT_TEST_USE_DSN_NAMES} = 1;
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 12348 >/dev/null`);
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $dbh1 = $sb->get_dbh_for('host1');
my $dbh2 = $sb->get_dbh_for('host2');
if ( !$dbh1 ) {
plan skip_all => 'Cannot connect to sandbox host1';
}
elsif ( !$dbh2 ) {
plan skip_all => 'Cannot connect to sandbox host2';
}
my $host1_dsn = $sb->dsn_for('host1');
my $host2_dsn = $sb->dsn_for('host2');
my $sample = "t/pt-upgrade/samples";
my $samples_dir = "$trunk/t/pt-upgrade/samples";
opendir(my $dh, $samples_dir) or die "Cannot open $samples_dir: $OS_ERROR";
sub load_sample_sql_files {
my ($sampleno) = @_;
if ( -f "$samples_dir/$sampleno/tables.sql" ) {
$sb->load_file('host1', "$sample/$sampleno/tables.sql", undef, no_wait => 1);
$sb->load_file('host2', "$sample/$sampleno/tables.sql", undef, no_wait => 1);
}
if ( -f "$samples_dir/$sampleno/host1.sql" ) {
$sb->load_file('host1', "$sample/$sampleno/host1.sql", undef, no_wait => 1);
}
if ( -f "$samples_dir/$sampleno/host2.sql" ) {
$sb->load_file('host2', "$sample/$sampleno/host2.sql", undef, no_wait => 1);
}
}
# default 5.7 mode "STRICT_TRANS_TABLES" converts truncation warnings to errors
# as this is simply a change in category of difference, we disable it for
# test to work.
use SqlModes;
my $modes_host1 = new SqlModes($dbh1, global=>1);
my $modes_host2 = new SqlModes($dbh2, global=>1);
$modes_host1->del('STRICT_TRANS_TABLES');
$modes_host2->del('STRICT_TRANS_TABLES');
my @dirs = sort readdir($dh);
foreach my $sampleno (@dirs) {
next unless $sampleno =~ m/^\d+$/;
my $conf = "$samples_dir/$sampleno/conf";
load_sample_sql_files($sampleno);
foreach my $log ( glob("$samples_dir/$sampleno/*.log") ) {
(my $basename = basename($log)) =~ s/\.\S+$//;
my $sed;
if ( -f "$samples_dir/$sampleno/$basename.sed" ) {
chomp($sed = `cat $samples_dir/$sampleno/$basename.sed`);
}
my $output = output(
sub { pt_upgrade::main(
(-f $conf ? ('--config', $conf) : ()),
$log,
$host1_dsn,
$host2_dsn,
) },
stderr => 1,
);
if ( -f "$samples_dir/$sampleno/$basename.txt" ) {
ok(
no_diff(
$output,
"$sample/$sampleno/$basename.txt",
cmd_output => 1,
sed => [
q{'s/File: .*/File: .../'},
q{'s/ hostname: .*/ hostname: .../'},
q{'s/ MySQL: .*/ MySQL: .../'},
($sed ? $sed : ()),
],
),
"$sampleno: $basename.txt"
) or diag("\n\n---- DIFF ----\n\n", $test_diff,
"\n\n---- OUTPUT ----\n\n", $output);
}
}
}
close $dh;
$modes_host1->restore_original_modes();
$modes_host2->restore_original_modes();
# #############################################################################
# Done.
# #############################################################################
#$sb->wipe_clean($dbh2);
$sb->wipe_clean($dbh1);
diag(`$trunk/sandbox/stop-sandbox 12348 >/dev/null`);
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
done_testing;
|