def test_set_pitr_targets(self, tmpdir): """ Evaluate targets for point in time recovery """ # Build basic folder/files structure tempdir = tmpdir.mkdir("temp_dir") dest = tmpdir.mkdir("dest") wal_dest = tmpdir.mkdir("wal_dest") recovery_info = { "configuration_files": ["postgresql.conf", "postgresql.auto.conf"], "tempdir": tempdir.strpath, "results": {"changes": [], "warnings": []}, "is_pitr": False, "wal_dest": wal_dest.strpath, "get_wal": False, } backup_info = testing_helpers.build_test_backup_info() backup_manager = testing_helpers.build_backup_manager() # Build a recovery executor executor = RecoveryExecutor(backup_manager) executor._set_pitr_targets(recovery_info, backup_info, dest.strpath, "", "", "", "") # Test with empty values (no PITR) assert recovery_info["target_epoch"] is None assert recovery_info["target_datetime"] is None assert recovery_info["wal_dest"] == wal_dest.strpath # Test for PITR targets executor._set_pitr_targets( recovery_info, backup_info, dest.strpath, "target_name", "2015-06-03 16:11:03.71038+02", "2", None ) target_datetime = dateutil.parser.parse("2015-06-03 16:11:03.710380+02:00") target_epoch = time.mktime(target_datetime.timetuple()) + (target_datetime.microsecond / 1000000.0) assert recovery_info["target_datetime"] == target_datetime assert recovery_info["target_epoch"] == target_epoch assert recovery_info["wal_dest"] == dest.join("barman_xlog").strpath
def test_set_pitr_targets(self, tmpdir): """ Evaluate targets for point in time recovery """ # Build basic folder/files structure tempdir = tmpdir.mkdir('temp_dir') dest = tmpdir.mkdir('dest') wal_dest = tmpdir.mkdir('wal_dest') recovery_info = { 'configuration_files': ['postgresql.conf', 'postgresql.auto.conf'], 'tempdir': tempdir.strpath, 'results': { 'changes': [], 'warnings': [] }, 'is_pitr': False, 'wal_dest': wal_dest.strpath, 'get_wal': False, } backup_info = testing_helpers.build_test_backup_info() backup_manager = testing_helpers.build_backup_manager() # Build a recovery executor executor = RecoveryExecutor(backup_manager) executor._set_pitr_targets(recovery_info, backup_info, dest.strpath, '', '', '', '') # Test with empty values (no PITR) assert recovery_info['target_epoch'] is None assert recovery_info['target_datetime'] is None assert recovery_info['wal_dest'] == wal_dest.strpath # Test for PITR targets executor._set_pitr_targets( recovery_info, backup_info, dest.strpath, 'target_name', '2015-06-03 16:11:03.71038+02', '2', None, ) target_datetime = dateutil.parser.parse( '2015-06-03 16:11:03.710380+02:00') target_epoch = (time.mktime(target_datetime.timetuple()) + (target_datetime.microsecond / 1000000.)) assert recovery_info['target_datetime'] == target_datetime assert recovery_info['target_epoch'] == target_epoch assert recovery_info['wal_dest'] == dest.join('barman_xlog').strpath
def test_set_pitr_targets(self, tmpdir): """ Evaluate targets for point in time recovery """ # Build basic folder/files structure tempdir = tmpdir.mkdir('temp_dir') dest = tmpdir.mkdir('dest') wal_dest = tmpdir.mkdir('wal_dest') recovery_info = { 'configuration_files': ['postgresql.conf', 'postgresql.auto.conf'], 'tempdir': tempdir.strpath, 'results': {'changes': [], 'warnings': []}, 'is_pitr': False, 'wal_dest': wal_dest.strpath, 'get_wal': False, } backup_info = testing_helpers.build_test_backup_info( end_time=dateutil.parser.parse('2015-06-03 16:11:01.71038+02')) backup_manager = testing_helpers.build_backup_manager() # Build a recovery executor executor = RecoveryExecutor(backup_manager) executor._set_pitr_targets(recovery_info, backup_info, dest.strpath, '', '', '', '', '', False, None) # Test with empty values (no PITR) assert recovery_info['target_epoch'] is None assert recovery_info['target_datetime'] is None assert recovery_info['wal_dest'] == wal_dest.strpath # Test for PITR targets executor._set_pitr_targets(recovery_info, backup_info, dest.strpath, 'target_name', '2015-06-03 16:11:03.71038+02', '2', None, '', False, None) target_datetime = dateutil.parser.parse( '2015-06-03 16:11:03.710380+02:00') target_epoch = ( time.mktime(target_datetime.timetuple()) + ( target_datetime.microsecond / 1000000.)) assert recovery_info['target_datetime'] == target_datetime assert recovery_info['target_epoch'] == target_epoch assert recovery_info['wal_dest'] == dest.join('barman_wal').strpath # Test for too early PITR target with pytest.raises(RecoveryInvalidTargetException) as exc_info: executor._set_pitr_targets(recovery_info, backup_info, dest.strpath, None, '2015-06-03 16:11:00.71038+02', None, None, None, False, None) assert str(exc_info.value) == \ "The requested target time " \ "2015-06-03 16:11:00.710380+02:00 " \ "is before the backup end time " \ "2015-06-03 16:11:01.710380+02:00" # Tests for PostgreSQL < 9.1 backup_info.version = 90000 with pytest.raises(RecoveryTargetActionException) as exc_info: executor._set_pitr_targets(recovery_info, backup_info, dest.strpath, 'target_name', '2015-06-03 16:11:03.71038+02', '2', None, None, False, 'pause') assert str(exc_info.value) == "Illegal target action 'pause' " \ "for this version of PostgreSQL" # Tests for PostgreSQL between 9.1 and 9.4 included backup_info.version = 90100 executor._set_pitr_targets(recovery_info, backup_info, dest.strpath, 'target_name', '2015-06-03 16:11:03.71038+02', '2', None, None, False, None) assert 'pause_at_recovery_target' not in recovery_info executor._set_pitr_targets(recovery_info, backup_info, dest.strpath, 'target_name', '2015-06-03 16:11:03.71038+02', '2', None, None, False, 'pause') assert recovery_info['pause_at_recovery_target'] == "on" del recovery_info['pause_at_recovery_target'] with pytest.raises(RecoveryTargetActionException) as exc_info: executor._set_pitr_targets(recovery_info, backup_info, dest.strpath, 'target_name', '2015-06-03 16:11:03.71038+02', '2', None, None, False, 'promote') assert str(exc_info.value) == "Illegal target action 'promote' " \ "for this version of PostgreSQL" # Tests for PostgreSQL >= 9.5 backup_info.version = 90500 executor._set_pitr_targets(recovery_info, backup_info, dest.strpath, 'target_name', '2015-06-03 16:11:03.71038+02', '2', None, None, False, 'pause') assert recovery_info['recovery_target_action'] == "pause" executor._set_pitr_targets(recovery_info, backup_info, dest.strpath, 'target_name', '2015-06-03 16:11:03.71038+02', '2', None, None, False, 'promote') assert recovery_info['recovery_target_action'] == "promote" with pytest.raises(RecoveryTargetActionException) as exc_info: executor._set_pitr_targets(recovery_info, backup_info, dest.strpath, 'target_name', '2015-06-03 16:11:03.71038+02', '2', None, None, False, 'unavailable') assert str(exc_info.value) == "Illegal target action 'unavailable' " \ "for this version of PostgreSQL" # Recovery target action should not be available is PITR is not # enabled backup_info.version = 90500 with pytest.raises(RecoveryTargetActionException) as exc_info: executor._set_pitr_targets(recovery_info, backup_info, dest.strpath, None, None, None, None, None, False, 'pause') assert str(exc_info.value) == "Can't enable recovery target action " \ "when PITR is not required" # Test that we are not using target_lsn with a version < 10 backup_info.version = 90500 with pytest.raises(RecoveryInvalidTargetException) as exc_info: executor._set_pitr_targets(recovery_info, backup_info, dest.strpath, None, None, None, None, 10000, False, 'pause') assert str(exc_info.value) == "Illegal use of recovery_target_lsn " \ "'10000' for this version " \ "of PostgreSQL " \ "(version 10 minimum required)" # Test that we are not using target_immediate with a version < 9.4 backup_info.version = 90300 with pytest.raises(RecoveryInvalidTargetException) as exc_info: executor._set_pitr_targets(recovery_info, backup_info, dest.strpath, None, None, None, None, None, True, 'pause') assert str(exc_info.value) == "Illegal use of " \ "recovery_target_immediate " \ "for this version " \ "of PostgreSQL " \ "(version 9.4 minimum required)"
def test_set_pitr_targets(self, tmpdir): """ Evaluate targets for point in time recovery """ # Build basic folder/files structure tempdir = tmpdir.mkdir("temp_dir") dest = tmpdir.mkdir("dest") wal_dest = tmpdir.mkdir("wal_dest") recovery_info = { "configuration_files": ["postgresql.conf", "postgresql.auto.conf"], "tempdir": tempdir.strpath, "results": {"changes": [], "warnings": []}, "is_pitr": False, "wal_dest": wal_dest.strpath, "get_wal": False, } backup_info = testing_helpers.build_test_backup_info( end_time=dateutil.parser.parse("2015-06-03 16:11:01.71038+02") ) backup_manager = testing_helpers.build_backup_manager() # Build a recovery executor executor = RecoveryExecutor(backup_manager) executor._set_pitr_targets( recovery_info, backup_info, dest.strpath, "", "", "", "", "", False, None ) # Test with empty values (no PITR) assert recovery_info["target_epoch"] is None assert recovery_info["target_datetime"] is None assert recovery_info["wal_dest"] == wal_dest.strpath # Test for PITR targets executor._set_pitr_targets( recovery_info, backup_info, dest.strpath, "target_name", "2015-06-03 16:11:03.71038+02", "2", None, "", False, None, ) target_datetime = dateutil.parser.parse("2015-06-03 16:11:03.710380+02:00") target_epoch = time.mktime(target_datetime.timetuple()) + ( target_datetime.microsecond / 1000000.0 ) assert recovery_info["target_datetime"] == target_datetime assert recovery_info["target_epoch"] == target_epoch assert recovery_info["wal_dest"] == dest.join("barman_wal").strpath # Test for too early PITR target with pytest.raises(RecoveryInvalidTargetException) as exc_info: executor._set_pitr_targets( recovery_info, backup_info, dest.strpath, None, "2015-06-03 16:11:00.71038+02", None, None, None, False, None, ) assert ( str(exc_info.value) == "The requested target time " "2015-06-03 16:11:00.710380+02:00 " "is before the backup end time " "2015-06-03 16:11:01.710380+02:00" ) # Tests for PostgreSQL < 9.1 backup_info.version = 90000 with pytest.raises(RecoveryTargetActionException) as exc_info: executor._set_pitr_targets( recovery_info, backup_info, dest.strpath, "target_name", "2015-06-03 16:11:03.71038+02", "2", None, None, False, "pause", ) assert ( str(exc_info.value) == "Illegal target action 'pause' " "for this version of PostgreSQL" ) # Tests for PostgreSQL between 9.1 and 9.4 included backup_info.version = 90100 executor._set_pitr_targets( recovery_info, backup_info, dest.strpath, "target_name", "2015-06-03 16:11:03.71038+02", "2", None, None, False, None, ) assert "pause_at_recovery_target" not in recovery_info executor._set_pitr_targets( recovery_info, backup_info, dest.strpath, "target_name", "2015-06-03 16:11:03.71038+02", "2", None, None, False, "pause", ) assert recovery_info["pause_at_recovery_target"] == "on" del recovery_info["pause_at_recovery_target"] with pytest.raises(RecoveryTargetActionException) as exc_info: executor._set_pitr_targets( recovery_info, backup_info, dest.strpath, "target_name", "2015-06-03 16:11:03.71038+02", "2", None, None, False, "promote", ) assert ( str(exc_info.value) == "Illegal target action 'promote' " "for this version of PostgreSQL" ) # Tests for PostgreSQL >= 9.5 backup_info.version = 90500 executor._set_pitr_targets( recovery_info, backup_info, dest.strpath, "target_name", "2015-06-03 16:11:03.71038+02", "2", None, None, False, "pause", ) assert recovery_info["recovery_target_action"] == "pause" executor._set_pitr_targets( recovery_info, backup_info, dest.strpath, "target_name", "2015-06-03 16:11:03.71038+02", "2", None, None, False, "promote", ) assert recovery_info["recovery_target_action"] == "promote" with pytest.raises(RecoveryTargetActionException) as exc_info: executor._set_pitr_targets( recovery_info, backup_info, dest.strpath, "target_name", "2015-06-03 16:11:03.71038+02", "2", None, None, False, "unavailable", ) assert ( str(exc_info.value) == "Illegal target action 'unavailable' " "for this version of PostgreSQL" ) # Recovery target action should not be available is PITR is not # enabled backup_info.version = 90500 with pytest.raises(RecoveryTargetActionException) as exc_info: executor._set_pitr_targets( recovery_info, backup_info, dest.strpath, None, None, None, None, None, False, "pause", ) assert ( str(exc_info.value) == "Can't enable recovery target action " "when PITR is not required" ) # Test that we are not using target_lsn with a version < 10 backup_info.version = 90500 with pytest.raises(RecoveryInvalidTargetException) as exc_info: executor._set_pitr_targets( recovery_info, backup_info, dest.strpath, None, None, None, None, 10000, False, "pause", ) assert ( str(exc_info.value) == "Illegal use of recovery_target_lsn " "'10000' for this version " "of PostgreSQL " "(version 10 minimum required)" ) # Test that we are not using target_immediate with a version < 9.4 backup_info.version = 90300 with pytest.raises(RecoveryInvalidTargetException) as exc_info: executor._set_pitr_targets( recovery_info, backup_info, dest.strpath, None, None, None, None, None, True, "pause", ) assert ( str(exc_info.value) == "Illegal use of " "recovery_target_immediate " "for this version " "of PostgreSQL " "(version 9.4 minimum required)" )