@@ -3391,6 +3391,46 @@ def test_validation_after_backup(self):
33913391# Clean after yourself
33923392self .del_test_dir (module_name ,fname )
33933393
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+
33943434# validate empty backup list
33953435# page from future during validate
33963436# page from future during backup