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:
2026-07-18 04:26:48 +03:00
commit 6033967e6a
509 changed files with 464404 additions and 0 deletions
@@ -0,0 +1,57 @@
"""Live gateway probe: every pack operation must be handled (no 5xx / 501)."""
from __future__ import annotations
import os
import urllib.request
import pytest
from app.openstack.surface_probe import format_report, probe_series
pytestmark = pytest.mark.integration
def _pick_host() -> str:
candidates = [
os.environ.get("OS_PROBE_HOST"),
os.environ.get("OS_HOST"),
"http://127.0.0.1:5000",
"http://api-gateway:5000",
"http://localhost:5000",
]
for host in candidates:
if not host:
continue
try:
with urllib.request.urlopen(f"{host.rstrip('/')}/health/live", timeout=3) as res:
if res.status == 200:
return host.rstrip("/")
except Exception:
continue
return ""
HOST = _pick_host()
@pytest.fixture(scope="module", autouse=True)
def _require_gateway():
if not HOST:
pytest.skip("OpenStack gateway unreachable")
@pytest.mark.parametrize("series", ["yoga", "antelope", "caracal", "dalmatian"])
def test_all_get_collections_live(series: str) -> None:
report = probe_series(series, host=HOST, collections_only=True)
assert report.results, series
if report.failures:
pytest.fail(format_report(report))
@pytest.mark.parametrize("series", ["yoga", "antelope", "caracal", "dalmatian"])
def test_all_operations_live(series: str) -> None:
report = probe_series(series, host=HOST)
assert len(report.results) >= 900
if report.failures:
pytest.fail(format_report(report))