20 lines
1.8 KiB
Python
20 lines
1.8 KiB
Python
"""Reconstruct exact source candidate and run only synthetic/real-artifact tests."""
|
|
import argparse,hashlib,json,os,subprocess,sys,tempfile
|
|
from pathlib import Path
|
|
p=argparse.ArgumentParser();p.add_argument('--owner-root',type=Path,default=Path('/home/worsch/net-kingdom'));p.add_argument('--warden-root',type=Path,default=Path('/home/worsch/ops-warden'));p.add_argument('--checker-binary',type=Path,default=Path('/tmp/nk-checker-artifact-next-r3/keycape'));args=p.parse_args()
|
|
packet=Path(__file__).resolve().parent;manifest=json.loads((packet/'manifest.json').read_text());sha=lambda data:'sha256:'+hashlib.sha256(data).hexdigest()
|
|
if sha(args.checker_binary.read_bytes())!=manifest['checker_artifact']:raise SystemExit('checker artifact drift')
|
|
with tempfile.TemporaryDirectory(prefix='nk-checker-environment-review-') as directory:
|
|
root=Path(directory)
|
|
for rel,expected in manifest['fixture_dependencies'].items():
|
|
data=(args.owner_root/rel).read_bytes()
|
|
if sha(data)!=expected:raise SystemExit('dependency drift '+rel)
|
|
dest=root/rel;dest.parent.mkdir(parents=True,exist_ok=True);dest.write_bytes(data)
|
|
for rel,expected in manifest['postimages'].items():
|
|
data=(packet/'postimages'/rel).read_bytes()
|
|
if sha(data)!=expected:raise SystemExit('candidate drift '+rel)
|
|
dest=root/rel;dest.parent.mkdir(parents=True,exist_ok=True);dest.write_bytes(data)
|
|
env={'PATH':'/usr/bin:/bin','PYTHONPATH':str(args.warden_root/'src'),'NETKINGDOM_FIXTURE_ROOT':str(root),'KEYCAPE_TEST_CHECKER_BINARY':str(args.checker_binary.resolve()),'KEYCAPE_TEST_CHECKER_SHA256':manifest['checker_artifact']}
|
|
for command in ([sys.executable,'-m','unittest','discover','-s',str(root/'sso-mfa/k8s/keycape'),'-p','test_keycape*.py','-v'],[sys.executable,str(packet/'test_real_checker_adapter.py')]):
|
|
result=subprocess.run(command,env=env)
|
|
if result.returncode:raise SystemExit(result.returncode)
|