def test_backup_info_save(self, tmpdir): """ Test the save method of a BackupInfo object """ # Check the saving method. # Load a backup.info file, modify the BackupInfo object # then save it. server = build_mocked_server( main_conf={'basebackups_directory': tmpdir.strpath}, ) backup_dir = tmpdir.mkdir('fake_name') infofile = backup_dir.join('backup.info') b_info = LocalBackupInfo(server, backup_id="fake_name") b_info.status = BackupInfo.FAILED b_info.save() # read the file looking for the modified line for line in infofile.readlines(): if line.startswith("status"): assert line.strip() == "status=FAILED"
def test_backup(self, rwbb_mock, gpb_mock, backup_copy_mock, capsys, tmpdir): """ Test the execution of a backup :param rwbb_mock: mock for the remove_wal_before_backup method :param gpb_mock: mock for the get_previous_backup method :param backup_copy_mock: mock for the executor's backup_copy method :param capsys: stdout capture module :param tmpdir: pytest temp directory """ backup_manager = build_backup_manager(global_conf={ 'barman_home': tmpdir.mkdir('home').strpath, # Silence the warning for default backup strategy 'backup_options': 'exclusive_backup', }) backup_info = LocalBackupInfo(backup_manager.server, backup_id='fake_backup_id') backup_info.begin_xlog = "0/2000028" backup_info.begin_wal = "000000010000000000000002" backup_info.begin_offset = 40 backup_info.status = BackupInfo.EMPTY backup_info.copy_stats = dict(copy_time=100) gpb_mock.return_value = None rwbb_mock.return_value = ['000000010000000000000001'] # Test 1: exclusive backup backup_manager.executor.strategy = Mock() backup_manager.executor.backup(backup_info) out, err = capsys.readouterr() assert err == '' assert ( "Backup start at LSN: " "0/2000028 (000000010000000000000002, 00000028)\n" "This is the first backup for server main\n" "WAL segments preceding the current backup have been found:\n" "\t000000010000000000000001 from server main has been removed\n" "Starting backup copy via rsync/SSH for fake_backup_id\n" "Copy done (time: 1 minute, 40 seconds)") in out gpb_mock.assert_called_with(backup_info.backup_id) rwbb_mock.assert_called_with(backup_info) backup_manager.executor.strategy.start_backup.assert_called_once_with( backup_info) backup_copy_mock.assert_called_once_with(backup_info) backup_manager.executor.strategy.stop_backup.assert_called_once_with( backup_info) # Test 2: concurrent backup # change the configuration to concurrent backup backup_manager.executor.config.backup_options = [ BackupOptions.CONCURRENT_BACKUP] # reset mocks gpb_mock.reset_mock() rwbb_mock.reset_mock() backup_manager.executor.strategy.reset_mock() backup_copy_mock.reset_mock() # prepare data directory for backup_label generation backup_info.backup_label = 'test\nlabel\n' backup_manager.executor.backup(backup_info) out, err = capsys.readouterr() assert err == '' assert ( "Backup start at LSN: " "0/2000028 (000000010000000000000002, 00000028)\n" "This is the first backup for server main\n" "WAL segments preceding the current backup have been found:\n" "\t000000010000000000000001 from server main has been removed\n" "Starting backup copy via rsync/SSH for fake_backup_id\n" "Copy done (time: 1 minute, 40 seconds)") in out gpb_mock.assert_called_with(backup_info.backup_id) rwbb_mock.assert_called_with(backup_info) backup_manager.executor.strategy.start_backup.assert_called_once_with( backup_info) backup_copy_mock.assert_called_once_with(backup_info) backup_manager.executor.strategy.start_backup.assert_called_once_with( backup_info)