from run import *
from tools.stream_benchmark_metrics import summarize
cfg=load_config(NEW);rt=Runtime(cfg,R);plan=read('plan.json');final=read('final.json')
assert final['error'] is None
states=rt.states();rows=plan['rows'];original=[r for r in rows if r['original']]
stages=[];metadata={}
for n in (4,8,12,16):
    summary=json.loads((R/f'ascent/summary-{n}.json').read_text());stages.append(summary)
    values=json.loads((R/f'ascent/metadata-{n}-private.json').read_text())
    evidence=[]
    for sid,frames in values.items():
        for frame in frames:
            for o in frame['objects']:
                assert math.isfinite(o['confidence'])
                for result in o.get('scenarioResults',[]):
                    assert result['scenario']=='INTRUSION' and result['confidence']==.5
                    if result['state']=='INTRUSION':
                        assert result['inside'] and result['eventId'] in o['eventIds'] and o['color']=='#FF3030'
                        assert o['trackId'] is not None
                        evidence.append((sid,frame['frameSeq']))
    metadata[str(n)]=dict(intrusion_object_observations=len(evidence),channels_with_intrusion=len({s for s,f in evidence}))
extra_pids=[]
for row in rows:
    sid=row['stream_id'];q=states[sid];setting=rt.settings(sid)
    assert setting==read('prepared.json')['settings'][sid]
    assert setting['tracking']['enabled'] and setting['intrusion']['enabled']
    if row['original']:
        assert q['state']=='running' and q['metadata_path']['performance']['detail'] is False
        assert q['publisher_metrics']['profile']['enabled'] is False
    else:
        c=q['last_cleanup'];assert q['state']=='stopped' and not q.get('child_pid')
        assert c['generation']==q['run_generation'] and c['completed'] and c['child_reaped'] and c['writer_released'] and not c['forced']
        extra_pids.append(next(x['pid'] for x in stages[-1]['rows'] if x['stream_id']==sid))
assert json.loads(rt.command(['docker','exec',rt.container,'python3','-c',
    'import json,pathlib,sys;print(json.dumps([p for p in sys.argv[1:] if pathlib.Path("/proc",p).exists()]))',*map(str,extra_pids)]))==[]
pids=[states[r['stream_id']]['child_pid'] for r in original]
blas=json.loads(rt.command(['docker','exec',rt.container,'python3','-c',
    'import json,pathlib,sys;print(json.dumps({p:[x.decode() for x in pathlib.Path("/proc",p,"environ").read_bytes().split(b"\\0") if x.startswith(b"OPENBLAS_NUM_THREADS=")] for p in sys.argv[1:]}))',*map(str,pids)]))
assert all(v==['OPENBLAS_NUM_THREADS=1'] for v in blas.values())
a=rt.sample(original);time.sleep(5);b=rt.sample(original)
after_sender=json.loads(cmd(['python3',str(REPO/'tools/rtsp_test.py'),'list']))
stable=('name','executionId','state','mode','uri','video','transport','anchor')
assert [{k:s[k] for k in stable} for s in after_sender]==[{k:s[k] for k in stable} for s in plan['sender']]
assert json.loads(cmd(['docker','inspect','contextra-redis-1']))[0]['Id']==plan['redis_id']
save('readback.json',dict(metadata=metadata,recovery=summarize([a,b],True),extra_pids_absent=extra_pids,
    openblas=blas,presets_preserved=final['presets_preserved'],sender_redis_preserved=True,diagnostics_off=True,
    settings_persistent=True,profile_limitations=['FIFO wait','active/lost/raw candidates']))
print('Readback PASS: original3 On running; additional13 reaped; detail Off; BLAS1; intrusion payload observed')
