]> granicus.if.org Git - postgresql/commitdiff
Fix issues with TAP tests of pg_verify_checksums
authorMichael Paquier <michael@paquier.xyz>
Tue, 20 Nov 2018 01:20:52 +0000 (10:20 +0900)
committerMichael Paquier <michael@paquier.xyz>
Tue, 20 Nov 2018 01:20:52 +0000 (10:20 +0900)
Two issues have been spotted and get fixed here:
- When checking for corrupted files, make sure that pg_verify_checksums
complains about the correct file.  In order to make the logic more
robust, all files created are immediately removed once checks on them
are done.  The error message generated by pg_verify_checksums also now
includes the file name it sees as corrupted.
- Before running corruption-related tests, empty files are generated
which used names mapping with the corrupted files, potentially leading
to conflicts.  So use different set of names for both.

Author: Michael Banck
Discussion: https://postgr.es/m/20181119181119.GC23740@nighthawk.caipicrew.dd-dns.de

src/bin/pg_verify_checksums/t/002_actions.pl

index d59970b7350ec5a40dae55c002f1887152ad545e..0e1725d9f2f70aa79ab1efe54cf2e2ff0ec8a8a8 100644 (file)
@@ -104,24 +104,28 @@ sub fail_corrupt
        my $pgdata = $node->data_dir;
 
        # Create the file with some dummy data in it.
-       append_to_file "$pgdata/global/$file", "foo";
+       my $file_name = "$pgdata/global/$file";
+       append_to_file $file_name, "foo";
 
        $node->command_checks_all([ 'pg_verify_checksums', '-D', $pgdata],
                                                  1,
                                                  [qr/^$/],
-                                                 [qr/could not read block/],
+                                                 [qr/could not read block 0 in file.*$file\":/],
                                                  "fails for corrupted data in $file");
 
+       # Remove file to prevent future lookup errors on conflicts.
+       unlink $file_name;
        return;
 }
 
 # Authorized relation files filled with corrupted data cause the
-# checksum checks to fail.
-fail_corrupt($node, "99999");
-fail_corrupt($node, "99999.123");
-fail_corrupt($node, "99999_fsm");
-fail_corrupt($node, "99999_init");
-fail_corrupt($node, "99999_vm");
-fail_corrupt($node, "99999_init.123");
-fail_corrupt($node, "99999_fsm.123");
-fail_corrupt($node, "99999_vm.123");
+# checksum checks to fail.  Make sure to use file names different
+# than the previous ones.
+fail_corrupt($node, "99990");
+fail_corrupt($node, "99990.123");
+fail_corrupt($node, "99990_fsm");
+fail_corrupt($node, "99990_init");
+fail_corrupt($node, "99990_vm");
+fail_corrupt($node, "99990_init.123");
+fail_corrupt($node, "99990_fsm.123");
+fail_corrupt($node, "99990_vm.123");