8 lines
2.2 KiB
PHP
8 lines
2.2 KiB
PHP
<?php
|
|
require __DIR__.'/sgf-bank-proof-bootstrap.php';$dir=$s['root'].'/bank-concurrency';if(!is_dir($dir))mkdir($dir,0700,true);$file=$dir.'/progress.json';$mode=$argv[1]??'';
|
|
if($mode==='prepare'){if(is_file($file))throw new LogicException('Reuse preparation');[$p]=$bankCommand(13,$bankInput('import',0,$importData));$a=$bankPreview(14,$bankInput('review_statement',1,['decision'=>'reviewed']));$b2=$bankPreview(14,$bankInput('review_statement',1,['decision'=>'reviewed']));file_put_contents($file,json_encode(['cuts'=>[1=>$a['preview'],2=>$b2['preview']],'before'=>$host->table('br_events')->count()]));}
|
|
elseif($mode==='first'){$p=json_decode(file_get_contents($file),true);$selectBank(14);$host->beginTransaction();try{$out=$bank->confirm(14,$p['cuts'][1]);file_put_contents($dir.'/locked','Host 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);$selectBank(14);request()->request->replace(['preview'=>$p['cuts'][2]]);$start=microtime(true);$r=app(App\Modules\Finance\Http\BankReconciliationController::class)->confirm(request(),$bank);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);$selectBank(14);$reject(fn()=>$bank->confirm(14,$p['cuts'][2]),409,'second review stale after release');$a=$bank->confirm(14,$p['cuts'][1]);$ok($a['replayed']&&$host->table('br_events')->count()===$p['before']+1,'one reviewed header without duplicate');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,'origin_simulated_in_harness'=>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;
|