Initial commit: stateful OpenStack API laboratory simulator.
Ship Keystone auth, multi-service handlers (Yoga→Dalmatian), Compose/Helm packaging, API contract packs, and pytest/Pulumi coverage labs.
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Probe every pack operation for Yoga → Dalmatian against the live gateway."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import sys
|
||||
|
||||
# Allow `python examples/python/openstack_surface_probe.py` from repo / container.
|
||||
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")))
|
||||
|
||||
from app.openstack.surface_probe import format_report, probe_series # noqa: E402
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--host", default=os.environ.get("OS_HOST", "http://127.0.0.1:5000"))
|
||||
parser.add_argument(
|
||||
"--series",
|
||||
action="append",
|
||||
help="Limit to series (repeatable). Default: all four.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--collections-only",
|
||||
action="store_true",
|
||||
help="Only GET endpoints without path parameters (faster smoke).",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--no-lifecycle",
|
||||
action="store_true",
|
||||
help="Random-UUID shallow probe (accepts 404) instead of create→CRUD lifecycle.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--methods",
|
||||
default="",
|
||||
help="Comma-separated methods filter (e.g. GET,POST)",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
series_list = args.series or ["yoga", "antelope", "caracal", "dalmatian"]
|
||||
methods = frozenset(m.strip().upper() for m in args.methods.split(",") if m.strip()) or None
|
||||
failed = 0
|
||||
for series in series_list:
|
||||
report = probe_series(
|
||||
series,
|
||||
host=args.host,
|
||||
methods=methods,
|
||||
collections_only=args.collections_only,
|
||||
lifecycle=not args.no_lifecycle and not args.collections_only,
|
||||
)
|
||||
print(format_report(report))
|
||||
failed += len(report.failures)
|
||||
if failed:
|
||||
print(f"FAILED total={failed}")
|
||||
return 1
|
||||
print("OK all probed operations returned acceptable statuses")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user