13 lines
2.4 KiB
PHP
13 lines
2.4 KiB
PHP
<?php
|
|
use App\Modules\Services\FiscalAssessment;
|
|
require __DIR__.'/sgf-iva-proof-bootstrap.php';$dir=$s['root'].'/iva-concurrency-validated';if(!is_dir($dir))mkdir($dir,0700,true);$mode=$argv[1]??'';$file=$dir.'/progress.json';
|
|
if($mode==='prepare'){
|
|
if(is_file($file))throw new LogicException('Reuse existing preparation');$version=(int)$host->table('fx_versions')->where('kind','assessment')->max('version');[$prepared]=$command(13,$input('assessment','prepare',$version));$a=$preview(14,$input('assessment','review',$prepared['version']));$b2=$preview(14,$input('assessment','review',$prepared['version']));file_put_contents($file,json_encode(['cuts'=>[1=>$a['preview'],2=>$b2['preview']],'before'=>$host->table('fx_versions')->count()]));
|
|
}elseif($mode==='first'){
|
|
$p=json_decode(file_get_contents($file),true);$selectFiscal(14);$host->beginTransaction();try{$out=$w->confirm(14,$p['cuts'][1]);file_put_contents($dir.'/locked','QA company lock held');$end=microtime(true)+25;while(!is_file($dir.'/release')&µtime(true)<$end)usleep(50000);if(!is_file($dir.'/release'))throw new LogicException('Release missing');$host->commit();file_put_contents($dir.'/first.json',json_encode($out));}finally{while($host->transactionLevel()>0)$host->rollBack();}
|
|
}elseif($mode==='second'){
|
|
$p=json_decode(file_get_contents($file),true);$selectFiscal(14);request()->setMethod('POST');request()->request->replace(['preview'=>$p['cuts'][2]]);$start=microtime(true);$r=app(App\Modules\Services\Http\FiscalAssessmentController::class)->confirm(request(),$w);file_put_contents($dir.'/second.json',json_encode(['status'=>$r->getStatusCode(),'retry_after'=>$r->headers->get('Retry-After'),'elapsed_seconds'=>microtime(true)-$start]));
|
|
}elseif($mode==='recover'){
|
|
$p=json_decode(file_get_contents($file),true);$selectFiscal(14);$reject(fn()=>$w->confirm(14,$p['cuts'][2]),409,'stale second review refused after release');$out=$w->confirm(14,$p['cuts'][1]);$ok($out['replayed']&&$host->table('fx_versions')->count()===$p['before']+1,'single reviewed version and replayed result');file_put_contents($dir.'/result.json',json_encode(['passed'=>true,'during_lock'=>json_decode(file_get_contents($dir.'/second.json'),true),'after_release'=>409,'one_review'=>true,'first_key_replayed'=>true,'regression_only'=>true],JSON_PRETTY_PRINT));
|
|
}else throw new LogicException('Unknown mode');echo json_encode(['passed'=>true,'phase'=>$mode,'proof'=>$dir.'/result.json']).PHP_EOL;
|