Files
pebrel/scripts/tests/test_ai_session_probe.py
T

62 lines
2.9 KiB
Python

import json
import os
import subprocess
import sys
import tempfile
import unittest
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
CHILD = r'''
import ctypes, json, sys
ctypes.CDLL(None).prctl(15, b"codex", 0, 0, 0)
handles = [open(path, "rb") for path in json.loads(sys.argv[1])]
print("ready", flush=True)
sys.stdin.read()
'''
@unittest.skipUnless(sys.platform == "linux", "requires Linux procfs (also runs inside WSL)")
class ActiveRolloutProbeTests(unittest.TestCase):
def test_probe_binds_custom_home_to_exact_instance_and_pane(self):
source = (ROOT / "nebula_app/src/platform/ai_session_identity.rs").read_text()
script = source.split('const PROBE_SCRIPT: &str = r###"', 1)[1].split('"###;', 1)[0]
with tempfile.TemporaryDirectory(prefix="pebrel-identity-") as temporary:
codex_directory = Path(temporary) / "custom codex"
sessions = codex_directory / "sessions/2026/09/07"
sessions.mkdir(parents=True)
main_id = "01a079fa-4a9b-7d93-8a4a-4a7a9edaf247"
guardian_id = "01a079f7-7e36-7232-882b-f06d3bde9df8"
paths = []
for identity, origin in ((main_id, "cli"), (guardian_id, {"subagent": "guardian"})):
path = sessions / f"rollout-x-{identity}.jsonl"
path.write_text(json.dumps({"type": "session_meta", "payload": {
"id": identity, "source": origin,
}}) + "\n", encoding="utf-8")
paths.append(str(path))
instance = f"probe-test-{os.getpid()}"
environment = dict(os.environ, PEBREL_PROCESS_ID=instance,
PEBREL_PANE_ID="713", CODEX_HOME=str(codex_directory))
child = subprocess.Popen([sys.executable, "-c", CHILD, json.dumps(paths)],
env=environment, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
try:
self.assertEqual(child.stdout.readline().strip(), "ready")
result = subprocess.run(["sh", "-c", script, "probe", "713", instance],
capture_output=True, text=True, check=True, timeout=5)
records = [json.loads(line.split("\t", 3)[3])
for line in result.stdout.splitlines()]
self.assertEqual({item["payload"]["id"] for item in records},
{main_id, guardian_id})
for pane, owner in (("714", instance), ("713", instance + "-other")):
mismatch = subprocess.run(["sh", "-c", script, "probe", pane, owner],
capture_output=True, text=True, check=True, timeout=5)
self.assertEqual(mismatch.stdout, "")
finally:
child.communicate(timeout=5)
if __name__ == "__main__":
unittest.main()