39 lines
1.7 KiB
Python
39 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
"""Reconstruct isolated source candidate and exercise synthetic fixtures only."""
|
|
import argparse
|
|
import hashlib
|
|
import json
|
|
import os
|
|
from pathlib import Path
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
|
|
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'))
|
|
args = p.parse_args()
|
|
packet = Path(__file__).resolve().parent
|
|
manifest = json.loads((packet / 'manifest.json').read_text())
|
|
with tempfile.TemporaryDirectory(prefix='nk-registration-review-') as directory:
|
|
candidate = Path(directory)
|
|
for relative, expected in manifest['fixture_dependencies'].items():
|
|
source = args.owner_root / relative
|
|
data = source.read_bytes()
|
|
if 'sha256:' + hashlib.sha256(data).hexdigest() != expected:
|
|
raise SystemExit('fixture dependency drift: ' + relative)
|
|
target = candidate / relative
|
|
target.parent.mkdir(parents=True, exist_ok=True)
|
|
target.write_bytes(data)
|
|
for relative, expected in manifest['postimages'].items():
|
|
data = (packet / 'postimages' / relative).read_bytes()
|
|
if 'sha256:' + hashlib.sha256(data).hexdigest() != expected:
|
|
raise SystemExit('candidate source drift: ' + relative)
|
|
target = candidate / relative
|
|
target.parent.mkdir(parents=True, exist_ok=True)
|
|
target.write_bytes(data)
|
|
result = subprocess.run([sys.executable, '-m', 'unittest', 'discover', '-s',
|
|
str(candidate / 'sso-mfa/k8s/keycape'), '-p', 'test_keycape*.py', '-v'],
|
|
env=dict(os.environ, PYTHONPATH=str(args.warden_root / 'src')))
|
|
raise SystemExit(result.returncode)
|