31 lines
1.8 KiB
Python
31 lines
1.8 KiB
Python
from pathlib import Path
|
|
import http.client,json,os,socket,subprocess,time
|
|
root=Path(__file__).resolve().parent
|
|
proof=json.loads((root/'extraction-check.json').read_text(encoding='utf-8'))
|
|
prior=json.loads((root/'native-model-oracle/result.json').read_text(encoding='utf-8'))
|
|
run=root/'model-warnings';run.mkdir(exist_ok=False)
|
|
exe=Path(proof['bundle'])/'arcadia-server.exe'
|
|
env=os.environ.copy();system=os.environ['SystemRoot'];env['PATH']=system+'/System32;'+system
|
|
for k in list(env):
|
|
if k.startswith(('CARGO_','RUST','LLVM','WGPU','ARCADIA_')):del env[k]
|
|
with socket.socket() as s:s.bind(('127.0.0.1',0));port=s.getsockname()[1]
|
|
cmd=[str(exe),'--bind',f'127.0.0.1:{port}','--data-dir',str(root/'native-model-oracle/store')]
|
|
records=[]
|
|
with (run/'stdout.log').open('xb') as out,(run/'stderr.log').open('xb') as err:
|
|
p=subprocess.Popen(cmd,cwd=run,env=env,stdout=out,stderr=err,creationflags=subprocess.CREATE_NO_WINDOW)
|
|
try:
|
|
for _ in range(100):
|
|
assert p.poll() is None
|
|
try:
|
|
with socket.create_connection(('127.0.0.1',port),timeout=.1):break
|
|
except OSError:time.sleep(.1)
|
|
for label,rid in zip(['pristine','saved'],prior['resource_ids']):
|
|
path='/api/v1/projects/'+rid+'/validation'
|
|
c=http.client.HTTPConnection('127.0.0.1',port,timeout=10);c.request('GET',path,headers={'Connection':'close'})
|
|
r=c.getresponse();data=r.read();assert r.status==200;c.close()
|
|
(run/(label+'.json')).write_bytes(data)
|
|
records.append({'label':label,'path':path,'response':json.loads(data)})
|
|
finally:p.terminate();code=p.wait(timeout=15)
|
|
(run/'result.json').write_text(json.dumps({'command':cmd,'pid':p.pid,'exit':code,'records':records},indent=2)+'\n',encoding='utf-8')
|
|
print(json.dumps(records,indent=2,ensure_ascii=True))
|