backups: add backup multiple targets

This commit is contained in:
Girish Ramakrishnan
2025-07-24 19:02:02 +02:00
parent 100bea981d
commit 3aafbd2ccb
25 changed files with 744 additions and 535 deletions

View File

@@ -13,7 +13,6 @@ const archives = require('../archives.js'),
common = require('./common.js'),
expect = require('expect.js'),
moment = require('moment'),
settings = require('../settings.js'),
tasks = require('../tasks.js'),
timers = require('timers/promises');
@@ -127,6 +126,8 @@ describe('backup cleaner', function () {
});
describe('task', function () {
let target;
const BACKUP_0_BOX = {
id: null,
remotePath: 'backup-box-0',
@@ -226,17 +227,17 @@ describe('backup cleaner', function () {
};
before(async function () {
await settings._set(settings.BACKUP_STORAGE_KEY, JSON.stringify({
target = await backupTargets._getDefault();
await backupTargets.setConfig(target, {
provider: 'filesystem',
password: 'supersecret',
backupFolder: '/tmp/someplace',
format: 'tgz'
}));
await backupTargets.setPolicy({ retention: { keepWithinSecs: 1 }, schedule: '00 00 23 * * *' });
});
await backupTargets.setRetention(target, { keepWithinSecs: 1 });
await backupTargets.setSchedule(target, '00 00 23 * * *');
});
async function cleanupBackups() {
const taskId = await backupTargets.startCleanupTask({ username: 'test' });
async function cleanupBackups(target) {
const taskId = await backupTargets.startCleanupTask(target, { username: 'test' });
console.log('started task', taskId);
@@ -253,7 +254,7 @@ describe('backup cleaner', function () {
}
it('succeeds without backups', async function () {
await cleanupBackups();
await cleanupBackups(target);
});
it('add the backups', async function () {
@@ -274,7 +275,7 @@ describe('backup cleaner', function () {
});
it('succeeds with box backups, keeps latest', async function () {
await cleanupBackups();
await cleanupBackups(target);
const results = await backupListing.getByTypePaged(backupListing.BACKUP_TYPE_BOX, 1, 1000);
expect(results.length).to.equal(1);
@@ -286,7 +287,7 @@ describe('backup cleaner', function () {
});
it('does not remove expired backups if only one left', async function () {
await cleanupBackups();
await cleanupBackups(target);
const results = await backupListing.getByTypePaged(backupListing.BACKUP_TYPE_BOX, 1, 1000);
expect(results[0].id).to.equal(BACKUP_1_BOX.id);
@@ -304,7 +305,7 @@ describe('backup cleaner', function () {
await timers.setTimeout(2000); // wait for expiration
await cleanupBackups();
await cleanupBackups(target);
let result = await backupListing.getByTypePaged(backupListing.BACKUP_TYPE_APP, 1, 1000);
expect(result.length).to.equal(4);