79 lines
2.6 KiB
Python
79 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
"""Run read-view smoke tests for the first available objects of selected kinds."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import base64
|
|
import json
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
def load_json(path: Path) -> dict:
|
|
return json.loads(path.read_text(encoding="utf-8-sig"))
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description="Smoke-test read_1c_object_view by object kind.")
|
|
parser.add_argument("--summary", type=Path, required=True)
|
|
parser.add_argument("--validation", type=Path, required=True)
|
|
parser.add_argument("--route-index", type=Path, required=True)
|
|
parser.add_argument("--output-dir", type=Path, required=True)
|
|
parser.add_argument("--kind", action="append", required=True)
|
|
parser.add_argument("--top", type=int, default=5)
|
|
args = parser.parse_args()
|
|
|
|
summary = load_json(args.summary)
|
|
runs = []
|
|
for kind in args.kind:
|
|
candidates = [
|
|
row
|
|
for row in summary.get("outputs") or []
|
|
if row.get("kind") == kind
|
|
and (row.get("storage_route_summary") or {}).get("metadata_items_with_routes", 0) > 0
|
|
]
|
|
if not candidates:
|
|
runs.append({"kind": kind, "status": "no_candidate"})
|
|
continue
|
|
row = candidates[0]
|
|
name = row["name"]
|
|
encoded = base64.b64encode(name.encode("utf-8")).decode("ascii")
|
|
command = [
|
|
sys.executable,
|
|
"scripts/read_1c_object_view.py",
|
|
"--kind",
|
|
kind,
|
|
"--name-b64",
|
|
encoded,
|
|
"--top",
|
|
str(args.top),
|
|
"--summary",
|
|
str(args.summary),
|
|
"--validation",
|
|
str(args.validation),
|
|
"--route-index",
|
|
str(args.route_index),
|
|
"--output-dir",
|
|
str(args.output_dir),
|
|
]
|
|
completed = subprocess.run(command, text=True, capture_output=True, env=os.environ.copy())
|
|
runs.append(
|
|
{
|
|
"kind": kind,
|
|
"name": name,
|
|
"status": "ok" if completed.returncode == 0 else "failed",
|
|
"returncode": completed.returncode,
|
|
"stdout_tail": completed.stdout[-4000:],
|
|
"stderr_tail": completed.stderr[-4000:],
|
|
}
|
|
)
|
|
print(json.dumps({"schema": "onec_read_view_kind_smoke.v1", "runs": runs}, ensure_ascii=True, indent=2))
|
|
return 0 if all(row["status"] in {"ok", "no_candidate"} for row in runs) else 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|