def test_recover_backup_copy(self, copy_controller_mock, tmpdir): """ Test the copy of a content of a backup during a recovery """ # Build basic folder/files structure dest = tmpdir.mkdir("destination") server = testing_helpers.build_real_server() backup_info = testing_helpers.build_test_backup_info( server=server, tablespaces=[("tbs1", 16387, "/fake/location")] ) # Build a executor executor = RecoveryExecutor(server.backup_manager) executor.config.tablespace_bandwidth_limit = {"tbs1": ""} executor.config.bandwidth_limit = 10 executor._backup_copy(backup_info, dest.strpath, tablespaces=None) # Check the calls assert copy_controller_mock.mock_calls == [ mock.call( network_compression=False, path=None, safe_horizon=None, ssh_command=None, retry_sleep=30, retry_times=0, workers=1, ), mock.call().add_directory( bwlimit="", dst="/fake/location", item_class=copy_controller_mock.return_value.TABLESPACE_CLASS, label="tbs1", src=backup_info.get_data_directory(16387) + "/", ), mock.call().add_directory( bwlimit=10, dst=dest.strpath, exclude=[ "/pg_log/*", "/log/*", "/pg_xlog/*", "/pg_wal/*", "/postmaster.pid", "/recovery.conf", "/tablespace_map", ], exclude_and_protect=["/pg_tblspc/16387"], item_class=copy_controller_mock.return_value.PGDATA_CLASS, label="pgdata", src=backup_info.get_data_directory() + "/", ), mock.call().copy(), ]
def test_recover_standby_mode(self, tmpdir): backup_info = testing_helpers.build_test_backup_info() backup_manager = testing_helpers.build_backup_manager() executor = RecoveryExecutor(backup_manager) backup_info.version = 90300 destination = tmpdir.mkdir('destination').strpath # If standby mode is not enabled, recovery.conf is not generated executor._prepare_tablespaces = MagicMock() executor._backup_copy = MagicMock() executor._xlog_copy = MagicMock() executor._generate_recovery_conf = MagicMock() with closing(executor): executor.recover(backup_info, destination, standby_mode=None) executor._generate_recovery_conf.assert_not_called() # If standby mode is enabled, recovery.conf is generated executor._prepare_tablespaces.reset_mock() executor._backup_copy.reset_mock() executor._xlog_copy.reset_mock() executor._generate_recovery_conf.reset_mock() with closing(executor): executor.recover(backup_info, destination, standby_mode=True) executor._generate_recovery_conf.assert_called() # If standby mode is passed but PostgreSQL is older than 9.0, # we must raise an exception backup_info.version = 80000 with pytest.raises(RecoveryStandbyModeException): with closing(executor): executor.recover(backup_info, destination, standby_mode=True)
def test_recover_backup_copy(self, copy_controller_mock, tmpdir): """ Test the copy of a content of a backup during a recovery """ # Build basic folder/files structure dest = tmpdir.mkdir("destination") server = testing_helpers.build_real_server() backup_info = testing_helpers.build_test_backup_info( server=server, tablespaces=[("tbs1", 16387, "/fake/location")] ) # Build a executor executor = RecoveryExecutor(server.backup_manager) executor.config.tablespace_bandwidth_limit = {"tbs1": ""} executor.config.bandwidth_limit = 10 executor._backup_copy(backup_info, dest.strpath, tablespaces=None) # Check the calls assert copy_controller_mock.mock_calls == [ mock.call( network_compression=False, path=None, safe_horizon=None, ssh_command=None, retry_sleep=30, retry_times=0 ), mock.call().add_directory( bwlimit="", dst="/fake/location", item_class=copy_controller_mock.return_value.TABLESPACE_CLASS, label="tbs1", src=backup_info.get_data_directory(16387) + "/", ), mock.call().add_directory( bwlimit=10, dst=dest.strpath, exclude=["/pg_xlog/*", "/pg_log/*", "/recovery.conf", "/postmaster.pid"], exclude_and_protect=["/pg_tblspc/16387"], item_class=copy_controller_mock.return_value.PGDATA_CLASS, label="pgdata", src=backup_info.get_data_directory() + "/", ), mock.call().copy(), ]