62 lines
2.9 KiB
Python
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()
|