@@ -3391,6 +3391,46 @@ def test_validation_after_backup(self):
3391
3391
# Clean after yourself
3392
3392
self .del_test_dir (module_name , fname )
3393
3393
3394
+ # @unittest.expectedFailure
3395
+ # @unittest.skip("skip")
3396
+ def test_validate_corrupt_tablespace_map (self ):
3397
+ """
3398
+ Check that corruption in tablespace_map is detected
3399
+ """
3400
+ fname = self .id ().split ('.' )[3 ]
3401
+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
3402
+ node = self .make_simple_node (
3403
+ base_dir = os .path .join (module_name , fname , 'node' ),
3404
+ set_replication = True ,
3405
+ initdb_params = ['--data-checksums' ])
3406
+
3407
+ self .init_pb (backup_dir )
3408
+ self .add_instance (backup_dir , 'node' , node )
3409
+ node .slow_start ()
3410
+
3411
+ self .create_tblspace_in_node (node , 'external_dir' )
3412
+
3413
+ node .safe_psql (
3414
+ 'postgres' ,
3415
+ 'CREATE TABLE t_heap(a int) TABLESPACE "external_dir"' )
3416
+
3417
+ # FULL backup
3418
+ backup_id = self .backup_node (
3419
+ backup_dir , 'node' , node , options = ['--stream' ])
3420
+
3421
+ tablespace_map = os .path .join (
3422
+ backup_dir , 'backups' , 'node' ,
3423
+ backup_id , 'database' , 'tablespace_map' )
3424
+
3425
+ # Corrupt tablespace_map file in FULL backup
3426
+ with open (tablespace_map , "rb+" , 0 ) as f :
3427
+ f .seek (84 )
3428
+ f .write (b"blah" )
3429
+ f .flush ()
3430
+ f .close
3431
+
3432
+ self .validate_pb (backup_dir , 'node' , backup_id = backup_id )
3433
+
3394
3434
# validate empty backup list
3395
3435
# page from future during validate
3396
3436
# page from future during backup
0 commit comments