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,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))
|
||||
Reference in New Issue
Block a user