Complete networking integration gate (#58)
This commit is contained in:
106
tools/check_milestone_08.py
Normal file
106
tools/check_milestone_08.py
Normal file
@@ -0,0 +1,106 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Audit the native networking/client lifecycle milestone boundary."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
import re
|
||||
|
||||
import generate_api_shims
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
OWNED_SOURCES = (
|
||||
"caps.rs",
|
||||
"caps_http.rs",
|
||||
"client_core.rs",
|
||||
"download_manager.rs",
|
||||
"event_queue.rs",
|
||||
"login.rs",
|
||||
"network_manager.rs",
|
||||
"sim_stats.rs",
|
||||
"udp_transport.rs",
|
||||
)
|
||||
REQUIRED_NATIVE_TYPES = {
|
||||
"T:LibreMetaverse.Caps",
|
||||
"T:LibreMetaverse.GridClient",
|
||||
"T:LibreMetaverse.Http.DownloadManager",
|
||||
"T:LibreMetaverse.Http.EventQueueClient",
|
||||
"T:LibreMetaverse.HttpCapsClient",
|
||||
"T:LibreMetaverse.NetworkManager",
|
||||
"T:LibreMetaverse.Settings",
|
||||
"T:LibreMetaverse.Simulator",
|
||||
"T:LibreMetaverse.Simulator.SimStats",
|
||||
"T:LibreMetaverse.UDPBase",
|
||||
"T:LibreMetaverse.UDPPacketBuffer",
|
||||
}
|
||||
STUB_RE = re.compile(r"\b(?:not_implemented|unimplemented_api)\b|\b(?:todo|unimplemented)!\s*\(")
|
||||
|
||||
|
||||
def check_owned_sources() -> None:
|
||||
source_root = ROOT / "crates" / "libremetaverse" / "src"
|
||||
offenders = [
|
||||
name for name in OWNED_SOURCES if STUB_RE.search((source_root / name).read_text())
|
||||
]
|
||||
if offenders:
|
||||
raise SystemExit("milestone 08 owned Rust stubs remain: " + ", ".join(offenders))
|
||||
|
||||
|
||||
def check_native_mapping() -> None:
|
||||
native = generate_api_shims.NATIVE_TYPES.keys() | generate_api_shims.NATIVE_DECLARATIONS.keys()
|
||||
missing = sorted(REQUIRED_NATIVE_TYPES - native)
|
||||
if missing:
|
||||
raise SystemExit("milestone 08 native type mappings missing: " + ", ".join(missing))
|
||||
|
||||
|
||||
def check_fake_grid_gate() -> None:
|
||||
tests = (ROOT / "crates" / "libremetaverse" / "tests" / "network_manager.rs").read_text()
|
||||
required_evidence = (
|
||||
"offline_fake_grid_drives_the_complete_networking_lifecycle_without_task_leaks",
|
||||
"EventQueueGet",
|
||||
"active_download_count",
|
||||
"dispatcher_running",
|
||||
"get_recv_packets",
|
||||
"get_sent_packets",
|
||||
"seed-secret",
|
||||
"queue-secret",
|
||||
"asset-secret",
|
||||
)
|
||||
missing = [marker for marker in required_evidence if marker not in tests]
|
||||
if missing:
|
||||
raise SystemExit("fake-grid audit evidence missing: " + ", ".join(missing))
|
||||
|
||||
|
||||
def check_bounded_policies() -> None:
|
||||
expectations = {
|
||||
"caps_http.rs": ("CapsHttpLimits", "max_redirects", "max_response_bytes"),
|
||||
"download_manager.rs": ("DOWNLOAD_QUEUE_CAPACITY", "MAX_PARALLEL_DOWNLOADS"),
|
||||
"event_queue.rs": ("EventQueuePolicy", "max_events_per_response", "max_event_nodes"),
|
||||
"udp_transport.rs": (
|
||||
"UdpTransportConfig",
|
||||
"receive_queue_capacity",
|
||||
"command_queue_capacity",
|
||||
"write_queue_capacity",
|
||||
),
|
||||
}
|
||||
source_root = ROOT / "crates" / "libremetaverse" / "src"
|
||||
for name, markers in expectations.items():
|
||||
source = (source_root / name).read_text()
|
||||
missing = [marker for marker in markers if marker not in source]
|
||||
if missing:
|
||||
raise SystemExit(f"{name}: bounded policy evidence missing: " + ", ".join(missing))
|
||||
|
||||
|
||||
def main() -> None:
|
||||
check_owned_sources()
|
||||
check_native_mapping()
|
||||
check_fake_grid_gate()
|
||||
check_bounded_policies()
|
||||
print(
|
||||
"milestone 08 audit: native networking sources contain no stubs; "
|
||||
"fake-grid lifecycle, redaction, task cleanup, statistics, and bounded policies are present"
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -75,6 +75,7 @@ NATIVE_TYPES = {
|
||||
"T:LibreMetaverse.SimConnectedEventArgs": "crate::network_manager::SimConnectedEventArgs",
|
||||
"T:LibreMetaverse.SimConnectingEventArgs": "crate::network_manager::SimConnectingEventArgs",
|
||||
"T:LibreMetaverse.SimDisconnectedEventArgs": "crate::network_manager::SimDisconnectedEventArgs",
|
||||
"T:LibreMetaverse.Simulator.SimStats": "crate::sim_stats::SimulatorSimStats",
|
||||
"T:LibreMetaverse.Messages.Linden.EventMessageBlock": "crate::event_queue::EventMessageBlock",
|
||||
"T:LibreMetaverse.Messages.Linden.EventQueueAck": "crate::event_queue::EventQueueAck",
|
||||
"T:LibreMetaverse.Messages.Linden.EventQueueEvent": "crate::event_queue::EventQueueEvent",
|
||||
|
||||
Reference in New Issue
Block a user