the-custodian/docs/changes/2026-11-01-scanner-json-digest/native-r4/run_image_tests.py

13 lines
1.2 KiB
Python

from pathlib import Path
import subprocess,json,time
p=Path(__file__).resolve().parent
image='code.forgejo.org/forgejo/forgejo@sha256:691657c7e64af7730a2e885e6d022cf16ae60724931c5392bd61838afadcaeba'
prefix=['docker','run','--rm','--network=none','--user=1000:1000','--read-only','--cap-drop=ALL','--security-opt=no-new-privileges:true','--tmpfs','/tmp:rw,size=64m,uid=1000,gid=1000','--tmpfs','/data:rw,size=64m,uid=1000,gid=1000','--mount','type=bind,src='+str(p)+',dst=/scripts,readonly','--mount','type=bind,src='+str(p.parent/'native-r2')+',dst=/original,readonly','--entrypoint=/bin/sh',image,'/scripts/test_image.sh']
results=[]
for case in ['old-counterexample','roundtrip','complete-scope-refusal','partial-failure','symlink-refusal','fsgroup-modes','mode-drift','hash-drift']:
q=subprocess.run(prefix+[case],capture_output=True,timeout=60)
results.append({'case':case,'returncode':q.returncode})
(p/'image-tests.json').write_text(json.dumps({'image':image,'result':'passed' if len(results)==8 and all(x['returncode']==0 for x in results) else 'unverified','cases':results,'native_mutation':False},indent=2)+'\n')
print(json.dumps(results[-1]),flush=True)
if q.returncode:
print('test failed; raw output withheld');raise SystemExit(1)