feat: add onebox backup restore scenarios
This commit is contained in:
@@ -270,6 +270,45 @@ const main = async () => {
|
||||
await waitForDockerServiceRunning(dockerServiceName);
|
||||
await waitForCloudlyWorkerBootstrapRoute();
|
||||
|
||||
const deployedServiceRecord = onebox.services.getService(serviceName);
|
||||
if (!deployedServiceRecord?.id) {
|
||||
throw new Error(`Cloudly service missing after deploy: ${JSON.stringify(deployedServiceRecord)}`);
|
||||
}
|
||||
|
||||
const platformResources = await onebox.platformServices.getResourcesForService(deployedServiceRecord.id);
|
||||
const platformResourceTypes = platformResources.map((resourceArg) => resourceArg.platformService.type).sort();
|
||||
if (platformResourceTypes.join(',') !== 'minio,mongodb') {
|
||||
throw new Error(`Unexpected Cloudly platform resources: ${JSON.stringify(platformResourceTypes)}`);
|
||||
}
|
||||
|
||||
console.log(`[${scenarioName}] Creating Cloudly platform-resource backup for ${serviceName}`);
|
||||
onebox.database.updateService(deployedServiceRecord.id, { includeImageInBackup: false });
|
||||
const backupResult = await onebox.backupManager.createBackup(serviceName);
|
||||
const backupId = backupResult.backup.id;
|
||||
if (!backupId || !backupResult.snapshotId || !backupResult.backup.snapshotId) {
|
||||
throw new Error(`Cloudly backup did not produce a ContainerArchive snapshot: ${JSON.stringify(backupResult)}`);
|
||||
}
|
||||
if (backupResult.backup.includesImage) {
|
||||
throw new Error(`Cloudly backup unexpectedly included the large app image: ${JSON.stringify(backupResult.backup)}`);
|
||||
}
|
||||
if (backupResult.backup.platformResources.sort().join(',') !== 'minio,mongodb') {
|
||||
throw new Error(`Cloudly backup missing platform resources: ${JSON.stringify(backupResult.backup)}`);
|
||||
}
|
||||
|
||||
console.log(`[${scenarioName}] Restoring Cloudly platform-resource backup for ${serviceName}`);
|
||||
const restoreResult = await onebox.backupManager.restoreBackup(backupId, {
|
||||
mode: 'restore',
|
||||
overwriteExisting: true,
|
||||
});
|
||||
if (restoreResult.service.name !== serviceName) {
|
||||
throw new Error(`Cloudly restore returned unexpected service: ${JSON.stringify(restoreResult.service)}`);
|
||||
}
|
||||
if (restoreResult.platformResourcesRestored !== 2 || restoreResult.warnings.length > 0) {
|
||||
throw new Error(`Cloudly restore failed platform resource validation: ${JSON.stringify(restoreResult)}`);
|
||||
}
|
||||
|
||||
await waitForCloudlyWorkerBootstrapRoute();
|
||||
|
||||
console.log(`[${scenarioName}] Scenario passed`);
|
||||
} finally {
|
||||
if (onebox) {
|
||||
|
||||
Reference in New Issue
Block a user