@@ -3497,6 +3497,65 @@ def test_validate_target_lsn(self):
34973497'--recovery-target-timeline=2' ,
34983498'--recovery-target-lsn={0}' .format (target_lsn )])
34993499
3500+ # @unittest.expectedFailure
3501+ # @unittest.skip("skip")
3502+ def test_recovery_target_backup_victim (self ):
3503+ """
3504+ Check that for validation to recovery target
3505+ probackup chooses valid backup
3506+ https://github.com/postgrespro/pg_probackup/issues/104
3507+ """
3508+ fname = self .id ().split ('.' )[3 ]
3509+ backup_dir = os .path .join (self .tmp_path ,module_name ,fname ,'backup' )
3510+ node = self .make_simple_node (
3511+ base_dir = os .path .join (module_name ,fname ,'node' ),
3512+ set_replication = True ,
3513+ initdb_params = ['--data-checksums' ])
3514+
3515+ self .init_pb (backup_dir )
3516+ self .add_instance (backup_dir ,'node' ,node )
3517+ self .set_archiving (backup_dir ,'node' ,node )
3518+ node .slow_start ()
3519+
3520+ # FULL backup
3521+ self .backup_node (backup_dir ,'node' ,node )
3522+
3523+ node .safe_psql (
3524+ "postgres" ,
3525+ "create table t_heap as select 1 as id, md5(i::text) as text, "
3526+ "md5(repeat(i::text,10))::tsvector as tsvector "
3527+ "from generate_series(0,10000) i" )
3528+
3529+ target_time = node .safe_psql (
3530+ "postgres" ,
3531+ "select now()" ).rstrip ()
3532+
3533+ node .safe_psql (
3534+ "postgres" ,
3535+ "create table t_heap1 as select 1 as id, md5(i::text) as text, "
3536+ "md5(repeat(i::text,10))::tsvector as tsvector "
3537+ "from generate_series(0,100) i" )
3538+
3539+ gdb = self .backup_node (backup_dir ,'node' ,node ,gdb = True )
3540+
3541+ gdb .set_breakpoint ('pg_stop_backup' )
3542+ gdb .run_until_break ()
3543+ gdb .remove_all_breakpoints ()
3544+ gdb ._execute ('signal SIGINT' )
3545+ gdb .continue_execution_until_error ()
3546+
3547+ backup_id = self .show_pb (backup_dir ,'node' )[1 ]['id' ]
3548+
3549+ self .assertEqual (
3550+ 'ERROR' ,
3551+ self .show_pb (backup_dir ,'node' ,backup_id )['status' ],
3552+ 'Backup STATUS should be "ERROR"' )
3553+
3554+ self .validate_pb (
3555+ backup_dir ,'node' ,
3556+ options = ['--recovery-target-time={0}' .format (target_time )])
3557+
3558+
35003559# validate empty backup list
35013560# page from future during validate
35023561# page from future during backup