26 lines
1.8 KiB
JavaScript
26 lines
1.8 KiB
JavaScript
'use strict';
|
|
const assert=require('assert/strict');
|
|
const fs=require('fs');
|
|
const fsp=fs.promises;
|
|
const os=require('os');
|
|
const path=require('path');
|
|
const {createWorldBackup,verifyWorldBackup,restoreWorldBackup}=require('../server/world-backup');
|
|
|
|
(async()=>{
|
|
const root=await fsp.mkdtemp(path.join(os.tmpdir(),'linkfield-backup-')),world=path.join(root,'world'),backups=path.join(root,'backups');
|
|
try{
|
|
await fsp.mkdir(path.join(world,'shared-world.boards'),{recursive:true});
|
|
const board={meta:{id:'B0'},state:{solved:false}},record={revision:3,global:{worldGeneration:'test'},boardVersions:{B0:3}};
|
|
await fsp.writeFile(path.join(world,'shared-world.json'),JSON.stringify(record));
|
|
await fsp.writeFile(path.join(world,'shared-world.boards','B0.3.json'),JSON.stringify(board));
|
|
await fsp.writeFile(path.join(world,`${'a'.repeat(24)}.json`),JSON.stringify({playerId:'a'.repeat(24)}));
|
|
const created=await createWorldBackup(world,backups,{retain:2,appVersion:'test'});assert.equal(created.manifest.worldRevision,3);assert.equal(created.manifest.fileCount,3);
|
|
const verified=await verifyWorldBackup(backups,created.name);assert.equal(verified.manifest.app,'LinkField');
|
|
await fsp.writeFile(path.join(world,'shared-world.json'),JSON.stringify({...record,revision:4}));
|
|
const restored=await restoreWorldBackup(world,backups,created.name);assert(fs.existsSync(restored.previous));
|
|
assert.equal(JSON.parse(await fsp.readFile(path.join(world,'shared-world.json'),'utf8')).revision,3);
|
|
assert.deepEqual(JSON.parse(await fsp.readFile(path.join(world,'shared-world.boards','B0.3.json'),'utf8')),board);
|
|
console.log('Server backup checksum and recoverable restore test passed');
|
|
}finally{await fsp.rm(root,{recursive:true,force:true})}
|
|
})().catch(error=>{console.error(error);process.exitCode=1});
|
|
|