3 lines
1.9 KiB
JavaScript
3 lines
1.9 KiB
JavaScript
import fs from 'node:fs';import assert from 'node:assert/strict';import {spawn} from 'node:child_process';
|
|
const root=JSON.parse(fs.readFileSync('C:/laragon/data/sgf-tempo/run/modular-regression-current.json')).root+'/private/receipt-composition-b4093c6f6707',directory=root+'/statements-concurrency-'+Date.now();fs.mkdirSync(directory);const start=mode=>{const child=spawn('C:/laragon/tools/sgf-tempo/php-8.4.27/php.exe',['scripts/sgf-statements-concurrency.php',mode,directory],{windowsHide:true});let output='';child.stdout.on('data',v=>output+=v);child.stderr.on('data',v=>output+=v);return{child,done:new Promise(resolve=>child.on('close',code=>resolve({code,output})))};};let result=await start('prepare').done;assert.equal(result.code,0,result.output);const first=start('first');try{const end=Date.now()+8000;while(!fs.existsSync(directory+'/locked.json')&&Date.now()<end)await new Promise(r=>setTimeout(r,30));assert(fs.existsSync(directory+'/locked.json'));const waiting=start('second');await new Promise(r=>setTimeout(r,900));const inspected=await start('inspect').done;assert.equal(inspected.code,0,inspected.output);const second=await waiting.done;assert.equal(second.code,0,second.output);const busy=JSON.parse(fs.readFileSync(directory+'/second.json'));assert.equal(busy.status,503);fs.writeFileSync(directory+'/release','1');result=await first.done;assert.equal(result.code,0,result.output);result=await start('recover').done;assert.equal(result.code,0,result.output);const recovery=JSON.parse(fs.readFileSync(directory+'/recovery.json'));assert(recovery.passed,result.output);const blocking=JSON.parse(fs.readFileSync(directory+'/blocking.json'));assert(blocking.waiters.some(w=>w.wait_event_type==='Lock'));const proof=directory+'/result.json';fs.writeFileSync(proof,JSON.stringify({...recovery,during_lock:503,seconds_waiting:busy.seconds,blocking},null,2));console.log(JSON.stringify({passed:true,proof}));}finally{fs.writeFileSync(directory+'/release','1');await first.done;}
|