mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-12-21 02:00:45 +08:00
Start testing --save-results. Let $cmd be a file in PerconaTest.pm. Remove 'at ... line N' from EventExecutor.pm errors.
This commit is contained in:
@@ -5332,10 +5332,10 @@ sub exec_event {
|
|||||||
$results->{sth} = $sth;
|
$results->{sth} = $sth;
|
||||||
$results->{warnings} = $self->get_warnings(dbh => $host->dbh);
|
$results->{warnings} = $self->get_warnings(dbh => $host->dbh);
|
||||||
};
|
};
|
||||||
if ( $EVAL_ERROR ) {
|
if ( my $e = $EVAL_ERROR ) {
|
||||||
PTDEBUG && _d($EVAL_ERROR);
|
PTDEBUG && _d($e);
|
||||||
chomp($EVAL_ERROR);
|
$e =~ s/ at \S+ line \d+, \S+ line \d+\.$//;
|
||||||
$results->{error} = $EVAL_ERROR;
|
$results->{error} = $e;
|
||||||
}
|
}
|
||||||
PTDEBUG && _d('Result on', $host->name, Dumper($results));
|
PTDEBUG && _d('Result on', $host->name, Dumper($results));
|
||||||
return $results;
|
return $results;
|
||||||
@@ -6355,6 +6355,12 @@ sub main {
|
|||||||
host => $host1,
|
host => $host1,
|
||||||
results_dir => $results_dir,
|
results_dir => $results_dir,
|
||||||
upgrade_table => $o->get('upgrade-table'),
|
upgrade_table => $o->get('upgrade-table'),
|
||||||
|
# Optional
|
||||||
|
database => $o->get('database'),
|
||||||
|
filter => $o->get('filter'),
|
||||||
|
ignore_warnings => $o->get('ignore-warnings'),
|
||||||
|
read_only => $o->get('read-only') ? 1 : 0,
|
||||||
|
read_timeout => $o->get('read-timeout'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
elsif ( $results_dir && $host2 ) {
|
elsif ( $results_dir && $host2 ) {
|
||||||
|
|||||||
@@ -84,10 +84,10 @@ sub exec_event {
|
|||||||
$results->{sth} = $sth;
|
$results->{sth} = $sth;
|
||||||
$results->{warnings} = $self->get_warnings(dbh => $host->dbh);
|
$results->{warnings} = $self->get_warnings(dbh => $host->dbh);
|
||||||
};
|
};
|
||||||
if ( $EVAL_ERROR ) {
|
if ( my $e = $EVAL_ERROR ) {
|
||||||
PTDEBUG && _d($EVAL_ERROR);
|
PTDEBUG && _d($e);
|
||||||
chomp($EVAL_ERROR);
|
$e =~ s/ at \S+ line \d+, \S+ line \d+\.$//;
|
||||||
$results->{error} = $EVAL_ERROR;
|
$results->{error} = $e;
|
||||||
}
|
}
|
||||||
PTDEBUG && _d('Result on', $host->name, Dumper($results));
|
PTDEBUG && _d('Result on', $host->name, Dumper($results));
|
||||||
return $results;
|
return $results;
|
||||||
|
|||||||
@@ -561,8 +561,13 @@ sub no_diff {
|
|||||||
die "I need a cmd argument" unless $cmd;
|
die "I need a cmd argument" unless $cmd;
|
||||||
die "I need an expected_output argument" unless $expected_output;
|
die "I need an expected_output argument" unless $expected_output;
|
||||||
|
|
||||||
|
if ( $args{full_path} ) {
|
||||||
|
die "$expected_output does not exist" unless -f $expected_output;
|
||||||
|
}
|
||||||
|
else {
|
||||||
die "$expected_output does not exist" unless -f "$trunk/$expected_output";
|
die "$expected_output does not exist" unless -f "$trunk/$expected_output";
|
||||||
$expected_output = "$trunk/$expected_output";
|
$expected_output = "$trunk/$expected_output";
|
||||||
|
}
|
||||||
|
|
||||||
my $tmp_file = '/tmp/percona-toolkit-test-output.txt';
|
my $tmp_file = '/tmp/percona-toolkit-test-output.txt';
|
||||||
my $tmp_file_orig = '/tmp/percona-toolkit-test-output-original.txt';
|
my $tmp_file_orig = '/tmp/percona-toolkit-test-output-original.txt';
|
||||||
@@ -582,6 +587,9 @@ sub no_diff {
|
|||||||
print $tmp_fh $cmd;
|
print $tmp_fh $cmd;
|
||||||
close $tmp_fh;
|
close $tmp_fh;
|
||||||
}
|
}
|
||||||
|
elsif ( -f $cmd ) {
|
||||||
|
`cp $cmd $tmp_file`;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
`$cmd > $tmp_file`;
|
`$cmd > $tmp_file`;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ BEGIN {
|
|||||||
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
||||||
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
||||||
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
||||||
$ENV{PERCONA_TOOLKIT_TEST_USE_DSN_NAMES} = 1;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
@@ -13,6 +12,8 @@ use English qw(-no_match_vars);
|
|||||||
use Test::More;
|
use Test::More;
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
|
|
||||||
|
$ENV{PERCONA_TOOLKIT_TEST_USE_DSN_NAMES} = 1;
|
||||||
|
|
||||||
use PerconaTest;
|
use PerconaTest;
|
||||||
use Sandbox;
|
use Sandbox;
|
||||||
require "$trunk/bin/pt-upgrade";
|
require "$trunk/bin/pt-upgrade";
|
||||||
@@ -40,8 +41,9 @@ my $samples_dir = "$trunk/t/pt-upgrade/samples";
|
|||||||
|
|
||||||
opendir(my $dh, $samples_dir) or die "Cannot open $samples_dir: $OS_ERROR";
|
opendir(my $dh, $samples_dir) or die "Cannot open $samples_dir: $OS_ERROR";
|
||||||
|
|
||||||
while ( my $sampleno = readdir $dh ) {
|
sub load_sample_sql_files {
|
||||||
next unless $sampleno =~ m/^\d+$/;
|
my ($sampleno) = @_;
|
||||||
|
|
||||||
if ( -f "$samples_dir/$sampleno/tables.sql" ) {
|
if ( -f "$samples_dir/$sampleno/tables.sql" ) {
|
||||||
$sb->load_file('host1', "$sample/$sampleno/tables.sql", undef, no_wait => 1);
|
$sb->load_file('host1', "$sample/$sampleno/tables.sql", undef, no_wait => 1);
|
||||||
$sb->load_file('host2', "$sample/$sampleno/tables.sql", undef, no_wait => 1);
|
$sb->load_file('host2', "$sample/$sampleno/tables.sql", undef, no_wait => 1);
|
||||||
@@ -52,10 +54,17 @@ while ( my $sampleno = readdir $dh ) {
|
|||||||
if ( -f "$samples_dir/$sampleno/host2.sql" ) {
|
if ( -f "$samples_dir/$sampleno/host2.sql" ) {
|
||||||
$sb->load_file('host2', "$sample/$sampleno/host2.sql", undef, no_wait => 1);
|
$sb->load_file('host2', "$sample/$sampleno/host2.sql", undef, no_wait => 1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while ( my $sampleno = readdir $dh ) {
|
||||||
|
next unless $sampleno =~ m/^\d+$/;
|
||||||
|
|
||||||
my $conf = "$samples_dir/$sampleno/conf";
|
my $conf = "$samples_dir/$sampleno/conf";
|
||||||
|
|
||||||
|
load_sample_sql_files($sampleno);
|
||||||
|
|
||||||
foreach my $log ( glob("$samples_dir/$sampleno/*.log") ) {
|
foreach my $log ( glob("$samples_dir/$sampleno/*.log") ) {
|
||||||
|
|
||||||
(my $basename = basename($log)) =~ s/\.\S+$//;
|
(my $basename = basename($log)) =~ s/\.\S+$//;
|
||||||
my $sed;
|
my $sed;
|
||||||
if ( -f "$samples_dir/$sampleno/$basename.sed" ) {
|
if ( -f "$samples_dir/$sampleno/$basename.sed" ) {
|
||||||
@@ -81,7 +90,8 @@ while ( my $sampleno = readdir $dh ) {
|
|||||||
($sed ? (sed => [ $sed ]) : ()),
|
($sed ? (sed => [ $sed ]) : ()),
|
||||||
),
|
),
|
||||||
"$sampleno: $basename.txt"
|
"$sampleno: $basename.txt"
|
||||||
) or diag("diff:\n", $test_diff, "\noutput:\n", $output);
|
) or diag("\n\n---- DIFF ----\n\n", $test_diff,
|
||||||
|
"\n\n---- OUTPUT ----\n\n", $output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
0
t/pt-upgrade/samples/001/insert_results/meta
Normal file
0
t/pt-upgrade/samples/001/insert_results/meta
Normal file
0
t/pt-upgrade/samples/001/insert_results/query
Normal file
0
t/pt-upgrade/samples/001/insert_results/query
Normal file
0
t/pt-upgrade/samples/001/insert_results/results
Normal file
0
t/pt-upgrade/samples/001/insert_results/results
Normal file
7
t/pt-upgrade/samples/001/select_results/meta
Normal file
7
t/pt-upgrade/samples/001/select_results/meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
$meta = {
|
||||||
|
error => undef,
|
||||||
|
query_time => '0',
|
||||||
|
warnings => {}
|
||||||
|
};
|
||||||
|
|
||||||
|
##
|
||||||
2
t/pt-upgrade/samples/001/select_results/query
Normal file
2
t/pt-upgrade/samples/001/select_results/query
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
select * from test.t order by id
|
||||||
|
##
|
||||||
34
t/pt-upgrade/samples/001/select_results/results
Normal file
34
t/pt-upgrade/samples/001/select_results/results
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
$results = [
|
||||||
|
[
|
||||||
|
'1',
|
||||||
|
'a',
|
||||||
|
'2013-01-01 00:00:01'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'2',
|
||||||
|
'b',
|
||||||
|
'2013-01-01 00:00:02'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'3',
|
||||||
|
'c',
|
||||||
|
'2013-01-01 00:00:03'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'4',
|
||||||
|
'd',
|
||||||
|
'2013-01-01 00:00:04'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'5',
|
||||||
|
'e',
|
||||||
|
'2013-01-01 00:00:05'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'6',
|
||||||
|
'f',
|
||||||
|
'2013-01-01 00:00:06'
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
##
|
||||||
101
t/pt-upgrade/save_results.t
Normal file
101
t/pt-upgrade/save_results.t
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
#!/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;
|
||||||
|
use File::Temp qw(tempdir);
|
||||||
|
|
||||||
|
$ENV{PERCONA_TOOLKIT_TEST_USE_DSN_NAMES} = 1;
|
||||||
|
$ENV{PRETTY_RESULTS} = 1;
|
||||||
|
|
||||||
|
use PerconaTest;
|
||||||
|
use Sandbox;
|
||||||
|
require "$trunk/bin/pt-upgrade";
|
||||||
|
|
||||||
|
my $dp = new DSNParser(opts=>$dsn_opts);
|
||||||
|
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
|
||||||
|
my $dbh1 = $sb->get_dbh_for('host1');
|
||||||
|
|
||||||
|
if ( !$dbh1 ) {
|
||||||
|
plan skip_all => 'Cannot connect to sandbox host1';
|
||||||
|
}
|
||||||
|
|
||||||
|
my $host1_dsn = $sb->dsn_for('host1');
|
||||||
|
|
||||||
|
my $tmpdir = tempdir("/tmp/pt-upgrade.$PID.XXXXXX", CLEANUP => 1);
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while ( my $sampleno = readdir $dh ) {
|
||||||
|
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 $results_dir = "$samples_dir/$sampleno/${basename}_results";
|
||||||
|
if ( -d $results_dir ) {
|
||||||
|
diag(`rm -rf $tmpdir/*`);
|
||||||
|
|
||||||
|
my $output = output(
|
||||||
|
sub { pt_upgrade::main(
|
||||||
|
(-f $conf ? ('--config', $conf) : ()),
|
||||||
|
$log,
|
||||||
|
$host1_dsn,
|
||||||
|
'--save-results', $tmpdir
|
||||||
|
) },
|
||||||
|
stderr => 1,
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach my $file ( glob("$results_dir/*") ) {
|
||||||
|
my $result = basename($file);
|
||||||
|
ok(
|
||||||
|
no_diff(
|
||||||
|
"$tmpdir/$result",
|
||||||
|
$file,
|
||||||
|
full_path => 1,
|
||||||
|
sed => [
|
||||||
|
q{"s/query_time => '[0-9.]*'/query_time => '0'/"},
|
||||||
|
],
|
||||||
|
),
|
||||||
|
"$sampleno: results: $result"
|
||||||
|
) or diag($test_diff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
close $dh;
|
||||||
|
|
||||||
|
# #############################################################################
|
||||||
|
# Done.
|
||||||
|
# #############################################################################
|
||||||
|
#$sb->wipe_clean($dbh1);
|
||||||
|
#ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
|
||||||
|
done_testing;
|
||||||
Reference in New Issue
Block a user