'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});