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?= <ilm...@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

Reply via email to