aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bin/pg_combinebackup/t/002_compare_backups.pl19
-rw-r--r--src/bin/pg_upgrade/t/002_pg_upgrade.pl22
-rw-r--r--src/test/perl/PostgreSQL/Test/Utils.pm41
-rw-r--r--src/test/recovery/t/027_stream_regress.pl14
4 files changed, 53 insertions, 43 deletions
diff --git a/src/bin/pg_combinebackup/t/002_compare_backups.pl b/src/bin/pg_combinebackup/t/002_compare_backups.pl
index ebd68bfb850..2c7ca89b92f 100644
--- a/src/bin/pg_combinebackup/t/002_compare_backups.pl
+++ b/src/bin/pg_combinebackup/t/002_compare_backups.pl
@@ -192,27 +192,12 @@ $pitr2->command_ok(
# Compare the two dumps, there should be no differences other than
# the tablespace paths.
-my $compare_res = compare_text(
+compare_files(
$dump1, $dump2,
+ "contents of dumps match for both PITRs",
sub {
s{create tablespace .* location .*\btspitr\K[12]}{N}i for @_;
return $_[0] ne $_[1];
});
-note($dump1);
-note($dump2);
-is($compare_res, 0, "dumps are identical");
-
-# Provide more context if the dumps do not match.
-if ($compare_res != 0)
-{
- my ($stdout, $stderr) =
- run_command([ 'diff', '-u', $dump1, $dump2 ]);
- print "=== diff of $dump1 and $dump2\n";
- print "=== stdout ===\n";
- print $stdout;
- print "=== stderr ===\n";
- print $stderr;
- print "=== EOF ===\n";
-}
done_testing();
diff --git a/src/bin/pg_upgrade/t/002_pg_upgrade.pl b/src/bin/pg_upgrade/t/002_pg_upgrade.pl
index e49bff6454a..68516fa486a 100644
--- a/src/bin/pg_upgrade/t/002_pg_upgrade.pl
+++ b/src/bin/pg_upgrade/t/002_pg_upgrade.pl
@@ -6,9 +6,8 @@ use warnings FATAL => 'all';
use Cwd qw(abs_path);
use File::Basename qw(dirname);
-use File::Compare;
-use File::Find qw(find);
-use File::Path qw(rmtree);
+use File::Find qw(find);
+use File::Path qw(rmtree);
use PostgreSQL::Test::Cluster;
use PostgreSQL::Test::Utils;
@@ -515,20 +514,7 @@ my $dump1_filtered = filter_dump(1, $oldnode->pg_version, $dump1_file);
my $dump2_filtered = filter_dump(0, $oldnode->pg_version, $dump2_file);
# Compare the two dumps, there should be no differences.
-my $compare_res = compare($dump1_filtered, $dump2_filtered);
-is($compare_res, 0, 'old and new dumps match after pg_upgrade');
-
-# Provide more context if the dumps do not match.
-if ($compare_res != 0)
-{
- my ($stdout, $stderr) =
- run_command([ 'diff', '-u', $dump1_filtered, $dump2_filtered ]);
- print "=== diff of $dump1_filtered and $dump2_filtered\n";
- print "=== stdout ===\n";
- print $stdout;
- print "=== stderr ===\n";
- print $stderr;
- print "=== EOF ===\n";
-}
+compare_files($dump1_filtered, $dump2_filtered,
+ 'old and new dumps match after pg_upgrade');
done_testing();
diff --git a/src/test/perl/PostgreSQL/Test/Utils.pm b/src/test/perl/PostgreSQL/Test/Utils.pm
index 9c83d93f79f..efe0321a4ef 100644
--- a/src/test/perl/PostgreSQL/Test/Utils.pm
+++ b/src/test/perl/PostgreSQL/Test/Utils.pm
@@ -50,6 +50,7 @@ use Cwd;
use Exporter 'import';
use Fcntl qw(:mode :seek);
use File::Basename;
+use File::Compare;
use File::Find;
use File::Spec;
use File::stat qw(stat);
@@ -70,6 +71,7 @@ our @EXPORT = qw(
check_mode_recursive
chmod_recursive
check_pg_config
+ compare_files
dir_symlink
scan_server_header
system_or_bail
@@ -773,6 +775,45 @@ sub check_pg_config
=pod
+=item compare_files(file1, file2, testname)
+
+Check that two files match, printing the difference if any.
+
+C<line_comp_function> is an optional CODE reference to a line comparison
+function, passed down as-is to File::Compare::compare_text.
+
+=cut
+
+sub compare_files
+{
+ my ($file1, $file2, $testname, $line_comp_function) = @_;
+
+ # If nothing is given, all lines should be equal.
+ $line_comp_function = sub { $_[0] ne $_[1] }
+ unless defined $line_comp_function;
+
+ my $compare_res =
+ File::Compare::compare_text($file1, $file2, $line_comp_function);
+ is($compare_res, 0, $testname);
+
+ # Provide more context if the files do not match.
+ if ($compare_res != 0)
+ {
+ my ($stdout, $stderr) =
+ run_command([ 'diff', '-u', $file1, $file2 ]);
+ print "=== diff of $file1 and $file2\n";
+ print "=== stdout ===\n";
+ print $stdout;
+ print "=== stderr ===\n";
+ print $stderr;
+ print "=== EOF ===\n";
+ }
+
+ return;
+}
+
+=pod
+
=item dir_symlink(oldname, newname)
Portably create a symlink for a directory. On Windows this creates a junction
diff --git a/src/test/recovery/t/027_stream_regress.pl b/src/test/recovery/t/027_stream_regress.pl
index bab7b28084b..0eac8f66a9c 100644
--- a/src/test/recovery/t/027_stream_regress.pl
+++ b/src/test/recovery/t/027_stream_regress.pl
@@ -120,8 +120,9 @@ command_ok(
'--port' => $node_standby_1->port,
],
'dump standby server');
-command_ok(
- [ 'diff', $outputdir . '/primary.dump', $outputdir . '/standby.dump', ],
+compare_files(
+ $outputdir . '/primary.dump',
+ $outputdir . '/standby.dump',
'compare primary and standby dumps');
# Likewise for the catalogs of the regression database, after disabling
@@ -150,12 +151,9 @@ command_ok(
'regression',
],
'dump catalogs of standby server');
-command_ok(
- [
- 'diff',
- $outputdir . '/catalogs_primary.dump',
- $outputdir . '/catalogs_standby.dump',
- ],
+compare_files(
+ $outputdir . '/catalogs_primary.dump',
+ $outputdir . '/catalogs_standby.dump',
'compare primary and standby catalog dumps');
# Check some data from pg_stat_statements.