backups: split config and policy
keeping them together makes the test/validation quite complicated. for example, when policy is changed, we test the storage backends part of #817
This commit is contained in:
@@ -35,28 +35,28 @@ describe('backup cleaner', function () {
|
||||
preserveSecs: 0
|
||||
};
|
||||
|
||||
describe('retention policy', function () {
|
||||
describe('retention', function () {
|
||||
it('keeps latest', function () {
|
||||
const backup = Object.assign({}, backupTemplate, { creationTime: moment().subtract(5, 's').toDate(), state: backups.BACKUP_STATE_NORMAL });
|
||||
backupCleaner._applyBackupRetentionPolicy([backup], { keepWithinSecs: 1, keepLatest: true }, []);
|
||||
backupCleaner._applyBackupRetention([backup], { keepWithinSecs: 1, keepLatest: true }, []);
|
||||
expect(backup.keepReason).to.be('latest');
|
||||
});
|
||||
|
||||
it('does not keep latest', function () {
|
||||
let backup = { creationTime: moment().subtract(5, 's').toDate(), state: backups.BACKUP_STATE_NORMAL };
|
||||
backupCleaner._applyBackupRetentionPolicy([backup], { keepWithinSecs: 1, keepLatest: false }, []);
|
||||
backupCleaner._applyBackupRetention([backup], { keepWithinSecs: 1, keepLatest: false }, []);
|
||||
expect(backup.keepReason).to.be(undefined);
|
||||
});
|
||||
|
||||
it('always keeps forever policy', function () {
|
||||
let backup = { creationTime: new Date() };
|
||||
backupCleaner._applyBackupRetentionPolicy([backup], { keepWithinSecs: -1, keepLatest: true }, []);
|
||||
backupCleaner._applyBackupRetention([backup], { keepWithinSecs: -1, keepLatest: true }, []);
|
||||
expect(backup.keepReason).to.be('keepWithinSecs');
|
||||
});
|
||||
|
||||
it('preserveSecs takes precedence', function () {
|
||||
let backup = { creationTime: new Date(), preserveSecs: 3000 };
|
||||
backupCleaner._applyBackupRetentionPolicy([backup], { keepWithinSecs: 1, keepLatest: true }, []);
|
||||
backupCleaner._applyBackupRetention([backup], { keepWithinSecs: 1, keepLatest: true }, []);
|
||||
expect(backup.keepReason).to.be('preserveSecs');
|
||||
});
|
||||
|
||||
@@ -68,7 +68,7 @@ describe('backup cleaner', function () {
|
||||
{ id: '3', state: backups.BACKUP_STATE_NORMAL, creationTime: moment().subtract(20, 'h').toDate() },
|
||||
{ id: '4', state: backups.BACKUP_STATE_NORMAL, creationTime: moment().subtract(5, 'd').toDate() }
|
||||
];
|
||||
backupCleaner._applyBackupRetentionPolicy(b, { keepDaily: 1, keepLatest: true }, []);
|
||||
backupCleaner._applyBackupRetention(b, { keepDaily: 1, keepLatest: true }, []);
|
||||
expect(b[0].keepReason).to.be('keepDaily');
|
||||
expect(b[1].keepReason).to.be(undefined);
|
||||
expect(b[2].keepReason).to.be(undefined);
|
||||
@@ -87,7 +87,7 @@ describe('backup cleaner', function () {
|
||||
{ id: '5', state: backups.BACKUP_STATE_CREATING, creationTime: moment().subtract(50, 'h').toDate() },
|
||||
{ id: '6', state: backups.BACKUP_STATE_NORMAL, creationTime: moment().subtract(5, 'd').toDate() }
|
||||
];
|
||||
backupCleaner._applyBackupRetentionPolicy(b, { keepDaily: 2, keepWeekly: 1, keepLatest: false }, []);
|
||||
backupCleaner._applyBackupRetention(b, { keepDaily: 2, keepWeekly: 1, keepLatest: false }, []);
|
||||
expect(b[0].keepReason).to.be('keepDaily'); // today
|
||||
expect(b[1].keepReason).to.be('keepWeekly'); // today
|
||||
expect(b[2].keepReason).to.be(undefined);
|
||||
@@ -110,7 +110,7 @@ describe('backup cleaner', function () {
|
||||
{ id: '8', state: backups.BACKUP_STATE_NORMAL, creationTime: moment().subtract(84, 'd').toDate() },
|
||||
{ id: '9', state: backups.BACKUP_STATE_NORMAL, creationTime: moment().subtract(97, 'd').toDate() },
|
||||
];
|
||||
backupCleaner._applyBackupRetentionPolicy(b, { keepDaily: 2, keepMonthly: 3, keepYearly: 1, keepLatest: true }, []);
|
||||
backupCleaner._applyBackupRetention(b, { keepDaily: 2, keepMonthly: 3, keepYearly: 1, keepLatest: true }, []);
|
||||
expect(b[0].keepReason).to.be('creating');
|
||||
expect(b[1].discardReason).to.be('error'); // errored
|
||||
expect(b[2].keepReason).to.be('keepDaily');
|
||||
@@ -214,9 +214,9 @@ describe('backup cleaner', function () {
|
||||
provider: 'filesystem',
|
||||
password: 'supersecret',
|
||||
backupFolder: '/tmp/someplace',
|
||||
retentionPolicy: { keepWithinSecs: 1 },
|
||||
format: 'tgz'
|
||||
}));
|
||||
await settings.setBackupPolicy({ retention: { keepWithinSecs: 1 }, schedule: '00 00 23 * * *' });
|
||||
});
|
||||
|
||||
async function cleanupBackups() {
|
||||
|
||||
@@ -29,8 +29,6 @@ describe('backuptask', function () {
|
||||
provider: 'filesystem',
|
||||
backupFolder: path.join(os.tmpdir(), 'backupstask-test-filesystem'),
|
||||
format: 'tgz',
|
||||
retentionPolicy: { keepWithinSecs: 10000 },
|
||||
schedulePattern: '00 00 23 * * *'
|
||||
};
|
||||
|
||||
before(async function () {
|
||||
|
||||
@@ -53,17 +53,23 @@ describe('Settings', function () {
|
||||
expect(newBackupConfig.backupFolder).to.be('/tmp/backups');
|
||||
});
|
||||
|
||||
it('cannot set backup config with invalid schedulePattern', async function () {
|
||||
let backupConfig = await settings.getBackupConfig();
|
||||
backupConfig.schedulePattern = '';
|
||||
const [error] = await safe(settings.setBackupConfig(backupConfig));
|
||||
it('cannot set backup policy with invalid schedule', async function () {
|
||||
const [error] = await safe(settings.setBackupPolicy({ schedule: '', retention: { keepWithinSecs: 1 }}));
|
||||
expect(error.reason).to.be(BoxError.BAD_FIELD);
|
||||
});
|
||||
|
||||
it('can set backup config with valid schedulePattern', async function () {
|
||||
let backupConfig = await settings.getBackupConfig();
|
||||
backupConfig.schedulePattern = '00 00 2,23 * * 0,1,2';
|
||||
await settings.setBackupConfig(backupConfig);
|
||||
it('cannot set backup policy with missing retention', async function () {
|
||||
const [error] = await safe(settings.setBackupPolicy({ schedule: '00 * * * * *'}));
|
||||
expect(error.reason).to.be(BoxError.BAD_FIELD);
|
||||
});
|
||||
|
||||
it('cannot set backup policy with invalid retention', async function () {
|
||||
const [error] = await safe(settings.setBackupPolicy({ schedule: '00 * * * * *', retention: { keepWhenever: 4 }}));
|
||||
expect(error.reason).to.be(BoxError.BAD_FIELD);
|
||||
});
|
||||
|
||||
it('can set valid backup policy', async function () {
|
||||
await settings.setBackupPolicy({ schedule: '00 00 2,23 * * 0,1,2', retention: { keepWithinSecs: 1 }});
|
||||
});
|
||||
|
||||
it('can get default unstable apps setting', async function () {
|
||||
|
||||
@@ -38,8 +38,6 @@ describe('Storage', function () {
|
||||
key: 'key',
|
||||
backupFolder: null,
|
||||
format: 'tgz',
|
||||
retentionPolicy: { keepWithinSecs: 10000 },
|
||||
schedulePattern: '00 00 23 * * *'
|
||||
};
|
||||
|
||||
before(function (done) {
|
||||
|
||||
Reference in New Issue
Block a user