Files
inecs 6033967e6a 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.
2026-07-18 04:26:48 +03:00

74 lines
2.2 KiB
Python

"""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