@@ -3968,6 +3968,71 @@ def test_validate_missing_page_header_map(self):
39683968 # Clean after yourself
39693969 self .del_test_dir (module_name , fname )
39703970
3971+ # @unittest.expectedFailure
3972+ # @unittest.skip("skip")
3973+ def test_no_validate_tablespace_map (self ):
3974+ """
3975+ Check that --no-validate is propagated to tablespace_map
3976+ """
3977+ fname = self .id ().split ('.' )[3 ]
3978+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
3979+ node = self .make_simple_node (
3980+ base_dir = os .path .join (module_name , fname , 'node' ),
3981+ set_replication = True ,
3982+ initdb_params = ['--data-checksums' ])
3983+
3984+ self .init_pb (backup_dir )
3985+ self .add_instance (backup_dir , 'node' , node )
3986+ node .slow_start ()
3987+
3988+ self .create_tblspace_in_node (node , 'external_dir' )
3989+
3990+ node .safe_psql (
3991+ 'postgres' ,
3992+ 'CREATE TABLE t_heap(a int) TABLESPACE "external_dir"' )
3993+
3994+ tblspace_new = self .get_tblspace_path (node , 'external_dir_new' )
3995+
3996+ oid = node .safe_psql (
3997+ 'postgres' ,
3998+ "select oid from pg_tablespace where spcname = 'external_dir'" ).decode ('utf-8' ).rstrip ()
3999+
4000+ # FULL backup
4001+ backup_id = self .backup_node (
4002+ backup_dir , 'node' , node , options = ['--stream' ])
4003+
4004+ pgdata = self .pgdata_content (node .data_dir )
4005+
4006+ tablespace_map = os .path .join (
4007+ backup_dir , 'backups' , 'node' ,
4008+ backup_id , 'database' , 'tablespace_map' )
4009+
4010+ # overwrite tablespace_map file
4011+ with open (tablespace_map , "w" ) as f :
4012+ f .write ("{0} {1}" .format (oid , tblspace_new ))
4013+ f .close
4014+
4015+ node .cleanup ()
4016+
4017+ self .restore_node (backup_dir , 'node' , node , options = ['--no-validate' ])
4018+
4019+ pgdata_restored = self .pgdata_content (node .data_dir )
4020+ self .compare_pgdata (pgdata , pgdata_restored )
4021+
4022+ # check that tablespace restore as symlink
4023+ tablespace_link = os .path .join (node .data_dir , 'pg_tblspc' , oid )
4024+ self .assertTrue (
4025+ os .path .islink (tablespace_link ),
4026+ "'%s' is not a symlink" % tablespace_link )
4027+
4028+ self .assertEqual (
4029+ os .readlink (tablespace_link ),
4030+ tblspace_new ,
4031+ "Symlink '{0}' do not points to '{1}'" .format (tablespace_link , tblspace_new ))
4032+
4033+ # Clean after yourself
4034+ self .del_test_dir (module_name , fname )
4035+
39714036# validate empty backup list
39724037# page from future during validate
39734038# page from future during backup
0 commit comments