"""Byte-equivalence of the Mizan IR (KDL) that mizan-django, mizan-fastapi, and the Rust mizan-axum backend emit for one shared fixture. Each adapter is reached the way its own runtime reaches it: Django through its management command in a subprocess, FastAPI in-process against a cleared registry, Rust through the `export-ir` bin. """ from __future__ import annotations import os import subprocess import sys from pathlib import Path import pytest HERE = Path(__file__).parent DJANGO_MANAGE = HERE / "django_app" / "manage.py" RUST_APP_DIR = HERE / "rust_app" def _fetch_django_ir() -> str: result = subprocess.run( [sys.executable, str(DJANGO_MANAGE), "export_mizan_ir"], capture_output=True, text=True, check=False, env={**os.environ, "PYTHONDONTWRITEBYTECODE": "1"}, ) if result.returncode != 0: pytest.fail( f"export_mizan_ir failed:\nstdout:\n{result.stdout}\nstderr:\n{result.stderr}", ) return result.stdout def _fetch_fastapi_ir() -> str: # tests/afi/ must be importable for `fixture` and `fastapi_app` to resolve. sys.path.insert(0, str(HERE)) try: from mizan_core.registry import clear_registry from mizan_core.ir import build_ir from fastapi_app import make_app clear_registry() make_app() return build_ir() finally: sys.path.remove(str(HERE)) def _fetch_rust_ir() -> str: result = subprocess.run( [ "cargo", "run", "--quiet", "--release", "--manifest-path", str(RUST_APP_DIR / "Cargo.toml"), "--bin", "export-ir", ], capture_output=True, text=True, check=False, ) if result.returncode != 0: pytest.fail( f"Rust export-ir failed:\nstdout:\n{result.stdout}\nstderr:\n{result.stderr}", ) return result.stdout @pytest.fixture(scope="module") def fastapi_ir() -> str: return _fetch_fastapi_ir() @pytest.fixture(scope="module") def rust_ir() -> str: return _fetch_rust_ir() @pytest.fixture(scope="module") def django_ir() -> str: return _fetch_django_ir() def test_fastapi_matches_rust(fastapi_ir: str, rust_ir: str) -> None: assert fastapi_ir == rust_ir, ( "FastAPI and Rust emit divergent Mizan IR for the same registered " "functions and channels." ) def test_django_matches_fastapi(django_ir: str, fastapi_ir: str) -> None: assert django_ir == fastapi_ir, ( "Django and FastAPI emit divergent Mizan IR for the same registered " "functions and channels." ) def test_all_three_match(django_ir: str, fastapi_ir: str, rust_ir: str) -> None: assert django_ir == fastapi_ir == rust_ir, ( "Three-way IR divergence — see test_django_matches_fastapi and " "test_fastapi_matches_rust for which pair drifts." )