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,73 @@
|
||||
"""Compare simulator packs with published OpenStack 2024.2 API surface expectations."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from app.openstack.contract_loader import contracts_root, load_series_pack
|
||||
|
||||
# Services listed on https://docs.openstack.org/2024.2/api/index.html
|
||||
DALMATIAN_API_INDEX_SERVICES = {
|
||||
"ironic",
|
||||
"cinder",
|
||||
"nova",
|
||||
"magnum",
|
||||
"zun",
|
||||
"trove",
|
||||
"designate",
|
||||
"keystone",
|
||||
"glance",
|
||||
"watcher",
|
||||
"masakari",
|
||||
"barbican",
|
||||
"octavia",
|
||||
"zaqar",
|
||||
"neutron",
|
||||
"tacker",
|
||||
"swift",
|
||||
"heat",
|
||||
"placement",
|
||||
"cloudkitty",
|
||||
"blazar",
|
||||
"manila",
|
||||
}
|
||||
|
||||
|
||||
def test_dalmatian_covers_official_2024_2_api_index_services() -> None:
|
||||
packs = load_series_pack("dalmatian")
|
||||
missing = sorted(DALMATIAN_API_INDEX_SERVICES - set(packs))
|
||||
assert missing == [], f"missing official 2024.2 API index services: {missing}"
|
||||
|
||||
|
||||
def test_dalmatian_surface_beats_prior_baseline() -> None:
|
||||
"""Baseline before watcher/zaqar + neutron/nova expansion was 1144 / 26."""
|
||||
|
||||
man = json.loads((contracts_root() / "dalmatian" / "manifest.json").read_text())
|
||||
assert man["service_count"] >= 28
|
||||
assert man["operation_count"] >= 1300
|
||||
|
||||
|
||||
def test_neutron_and_nova_closer_to_api_ref_counts() -> None:
|
||||
"""Public Neutron API-ref lists ~315 unique method+path pairs; Nova ~200+.
|
||||
|
||||
Packs are surface-complete CRUD expansions (not every microversion quirk),
|
||||
so we assert meaningful floors rather than bit-identical counts.
|
||||
"""
|
||||
|
||||
packs = load_series_pack("dalmatian")
|
||||
assert packs["neutron"].operation_count() >= 280
|
||||
assert packs["nova"].operation_count() >= 120
|
||||
neutron_paths = {op.path for op in packs["neutron"].operations}
|
||||
assert "/v2.0/address-groups" in neutron_paths
|
||||
assert "/v2.0/bgp-speakers" in neutron_paths
|
||||
assert "/v2.0/segments" in neutron_paths
|
||||
|
||||
|
||||
def test_coverage_doc_lists_new_services() -> None:
|
||||
doc = Path(__file__).resolve().parents[2] / "docs" / "api_coverage.md"
|
||||
man = json.loads((contracts_root() / "dalmatian" / "manifest.json").read_text())
|
||||
text = doc.read_text()
|
||||
assert "watcher" in text
|
||||
assert "zaqar" in text
|
||||
assert str(man["operation_count"]) in text
|
||||
Reference in New Issue
Block a user