Files
horizon-airdef/tools/test_dispatch.py
T

65 lines
3.3 KiB
Python

#!/usr/bin/env python3
"""Exercise applied DH dispatch hooks in isolated Fabric clients; no world or account needed."""
import argparse
import json
import os
from pathlib import Path
import platform
import shutil
import subprocess
import sys
try:
from . import build_mod, build_pack
except ImportError:
import build_mod
import build_pack
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--native-display", action="store_true", help="Use the existing display instead of Linux Xvfb")
args = parser.parse_args()
root = build_pack.ROOT
fixture = build_mod.build_dispatch_fixture()
version = build_pack.read_lock()["pack_version"]
mod = root / "dist" / f"horizon-lab-{version}.jar"
results = []
for enabled in [False, True]:
instance = root / ".local/runtime" / ("dispatch-fixture-patched" if enabled else "dispatch-fixture-upstream")
build_pack.prepare_instance("dispatch-retry", instance, mod)
shutil.copy2(fixture, instance / "mods/dispatch-fixture.jar")
(instance / "config/horizon-dispatch-retry.properties").write_text(f"enabled={str(enabled).lower()}\n")
command = [sys.executable, str(root / "tools/runtime.py"), "demo", "--instance", str(instance),
"--heap", "3G", "--compact-headers"]
if platform.system() == "Linux" and not args.native_display:
command = ["xvfb-run", "-a", *command]
environment = os.environ.copy()
environment["_JAVA_OPTIONS"] = "-Dhorizon.fixture.exit=true"
run = subprocess.run(command, cwd=root, env=environment, text=True, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, timeout=240)
(instance / "fixture.log").write_text(run.stdout)
marker = "HORIZON_DISPATCH_RESULT "
reports = [json.loads(line.split(marker, 1)[1]) for line in run.stdout.splitlines() if marker in line]
if run.returncode or len(reports) != 1:
raise RuntimeError(f"Dispatch fixture failed; inspect {instance / 'fixture.log'}")
report = reports[0]
if report["enabled"] != enabled or report["tasks_completed"] != 2 or report["occupied_slots"] != 0:
raise AssertionError("Fixture outcome did not match the selected hook")
results.append(report)
print(json.dumps(report), flush=True)
output = root / "dist/dispatch-integration.json"
output.write_text(json.dumps({"schema": 1, "platform": platform.platform(), "architecture": platform.machine(),
"minecraft": "26.3", "distant_horizons": "3.3.4", "results": results,
"notes": ["Synthetic full physical worker queue; both modes use the actual publisher dispatcher inside Fabric.",
"Allocation and CPU measure the submission caller only; retry scheduler activity is excluded.",
"Upstream keeps the caller blocked for the requested 200 ms observation window; patched returns earlier.",
"Both modes verify exact task counts, recovered occupied slots and fixture worker shutdown.",
"Not a game FPS, terrain completion, whole-game RAM, or hardware compatibility benchmark."]}, indent=2) + "\n")
print(f"Applied-hook integration checks passed: {output}")
if __name__ == "__main__":
main()