Hi hackers,
While I was going through the TAP tests to fix the formatting of command
argument lists to be less confusing, I noticed that pg_combinebackup's
002_compare_backups.pl test accidentally ran pg_dumpall twice against
the same database, thus rendering the tests useless.
Fixing that revealed that there is a difference in the dumps: the
tablespaces have different paths. pg_dumpall doesn't have an option to
map tablespace paths, so instead I used File::Compare::compare_text()
with a custom comparison function to erase the difference.
- ilmari
From d8f186e79fceb881a225c7b612e074d8956da1ec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= <ilmari@ilmari.org>
Date: Sat, 14 Dec 2024 21:08:16 +0000
Subject: [PATCH] Fix pg_combinebackup PITR comparison test
The test was creating both the dumps to compare from the same DB, so
would never detect any mismatches.
Fixing that revealed that there is a difference in the dumps: the
tablespaces have different paths. pg_dumpall doesn't have an option
to map tablespace paths, so use compare_text() with a custom
comparison function to erase the difference.
---
.../pg_combinebackup/t/002_compare_backups.pl | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/src/bin/pg_combinebackup/t/002_compare_backups.pl b/src/bin/pg_combinebackup/t/002_compare_backups.pl
index 63a0255de15..6bf48971734 100644
--- a/src/bin/pg_combinebackup/t/002_compare_backups.pl
+++ b/src/bin/pg_combinebackup/t/002_compare_backups.pl
@@ -2,7 +2,7 @@
use strict;
use warnings FATAL => 'all';
-use File::Compare;
+use File::Compare qw(compare_text);
use PostgreSQL::Test::Cluster;
use PostgreSQL::Test::Utils;
use Test::More;
@@ -175,17 +175,23 @@
$pitr1->connstr('postgres'),
],
'dump from PITR 1');
-$pitr1->command_ok(
+$pitr2->command_ok(
[
'pg_dumpall', '-f',
$dump2, '--no-sync',
'--no-unlogged-table-data', '-d',
- $pitr1->connstr('postgres'),
+ $pitr2->connstr('postgres'),
],
'dump from PITR 2');
-# Compare the two dumps, there should be no differences.
-my $compare_res = compare($dump1, $dump2);
+# Compare the two dumps, there should be no differences other than
+# the tablespace paths.
+my $compare_res = compare_text(
+ $dump1, $dump2,
+ sub {
+ s{create tablespace .* location '.*/tspitr\K[12]}{N}i for @_;
+ return $_[0] ne $_[1];
+ });
note($dump1);
note($dump2);
is($compare_res, 0, "dumps are identical");
--
2.39.5