PhillNet_Recall / scripts /http_smoke_v12.py
ayjays132's picture
Upload 121 files
3b3b2bd verified
Raw History Blame Contribute Delete
2.86 kB
"""Actual localhost HTTP, including SDK requests and database restart."""
from pathlib import Path
import json,os,secrets,socket,subprocess,sys,tempfile,time,urllib.request,urllib.error
ROOT=Path(__file__).resolve().parents[1];sys.path.insert(0,str(ROOT))
from phillnet_recall import RecallClient
def main():
with tempfile.TemporaryDirectory() as tmp:
key=secrets.token_urlsafe(40)
with socket.socket() as s:s.bind(('127.0.0.1',0));port=s.getsockname()[1]
url=f'http://127.0.0.1:{port}';env=dict(os.environ,PHILLNET_RECALL_API_KEY=key,PYTHONPATH=str(ROOT))
def start():
proc=subprocess.Popen([sys.executable,'-m','phillnet_recall','--db',str(Path(tmp)/'recall.db'),'serve','--port',str(port)],env=env,cwd=ROOT,stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL)
for _ in range(120):
if proc.poll() is not None:raise RuntimeError('server exited')
try:
with urllib.request.urlopen(url+'/health',timeout=1):return proc
except (OSError,urllib.error.URLError):time.sleep(.05)
proc.terminate();proc.wait(10);raise RuntimeError('startup timeout')
proc=start();client=RecallClient(url,api_key=key)
try:
client.remember_bridge('amber docket','incident register',source='synthetic:glossary')
client.remember('Nova incident register: Mira',source='synthetic:note')
assert client.grounded('Nova amber docket')['status']=='retrieved'
assert client.grounded_context('Nova amber docket')['dependency_complete']
for p,v in [('region','west'),('owner','Mira')]:
client.remember(f'Beacon {p} {v}',source='synthetic',entity='Beacon',predicate=p,value=v)
plan={'where':[{'entity':'?s','predicate':'region','value':'west'},{'entity':'?s','predicate':'owner','value':'Mira'}],'select':['?s']}
assert client.query(plan)['rows']==[{'?s':'Beacon'}]
assert client.query_context(plan)['dependency_complete']
finally:proc.terminate();proc.wait(10)
proc=start()
try:
assert client.query(plan)['rows']==[{'?s':'Beacon'}]
assert client.grounded('Nova amber docket')['status']=='retrieved'
finally:proc.terminate();proc.wait(10)
report={'transport':'actual localhost HTTP, not TestClient','client':'standard-library RecallClient',
'glossary_write':True,'grounded_search':True,'bridge_dependencies_packed':True,
'conjunctive_query':True,'query_dependencies_packed':True,'restart_persistence':True,
'server_left_running':False,'publicly_exposed':False,'docker_built':False}
(ROOT/'reports/http_v12.json').write_text(json.dumps(report,indent=2)+'\n')
print(json.dumps(report,indent=2))
if __name__=='__main__':main()