6033967e6a
Ship Keystone auth, multi-service handlers (Yoga→Dalmatian), Compose/Helm packaging, API contract packs, and pytest/Pulumi coverage labs.
58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
"""Path-based OpenStack service dispatch (WebUI on Keystone port)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from app.openstack.dispatch import resolve_service, resolve_service_from_path
|
|
|
|
|
|
def test_path_maps_core_services() -> None:
|
|
assert resolve_service_from_path("/v2.1/servers") == "nova"
|
|
assert resolve_service_from_path("/v2.0/networks") == "neutron"
|
|
assert resolve_service_from_path("/v2/images") == "glance"
|
|
assert resolve_service_from_path("/v3/volumes") == "cinder"
|
|
assert resolve_service_from_path("/v3/auth/tokens") == "keystone"
|
|
assert resolve_service_from_path("/v3/projects") == "keystone"
|
|
assert resolve_service_from_path("/v1/nodes") == "ironic"
|
|
assert resolve_service_from_path("/v2/lbaas/loadbalancers") == "octavia"
|
|
assert resolve_service_from_path("/resource_providers") == "placement"
|
|
|
|
|
|
def test_keystone_port_overrides_to_nova_path() -> None:
|
|
service = resolve_service(
|
|
{"x-openstack-service": "keystone", "x-forwarded-port": "5000"},
|
|
"/v2.1/servers/detail",
|
|
)
|
|
assert service == "nova"
|
|
|
|
|
|
def test_route_service_header_wins() -> None:
|
|
service = resolve_service(
|
|
{
|
|
"x-openstack-service": "keystone",
|
|
"x-openstack-route-service": "cinder",
|
|
"x-forwarded-port": "5000",
|
|
},
|
|
"/v3/limits",
|
|
)
|
|
assert service == "cinder"
|
|
|
|
|
|
def test_auth_path_ignores_stale_route_service() -> None:
|
|
service = resolve_service(
|
|
{
|
|
"x-openstack-service": "keystone",
|
|
"x-openstack-route-service": "cinder",
|
|
"x-forwarded-port": "5000",
|
|
},
|
|
"/v3/auth/tokens",
|
|
)
|
|
assert service == "keystone"
|
|
|
|
|
|
def test_dedicated_nova_port_keeps_nova() -> None:
|
|
service = resolve_service(
|
|
{"x-openstack-service": "nova", "x-forwarded-port": "8774"},
|
|
"/v2.1/servers",
|
|
)
|
|
assert service == "nova"
|