Files
Agent-System-Dev/tests/test_svc_lifecycle_isolation.py
T
agent-exec-transport f84d7c724e
ci / svc-realcombo (pull_request) Successful in 2m55s
ci / test (pull_request) Successful in 9m8s
ci / test-pg (pull_request) Successful in 20m53s
agent-exec transport 8c38703572870841a8c0c81bef7c6773/e8f9fe72723f
2026-10-22 12:31:34 +00:00

62 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""生命周期隔离:调用方的 AGENT_SYSTEM_* 不得进入 serve,serve.env 为 0600。"""
import importlib.util
import json
import os
import shutil
import sys
from pathlib import Path
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from _port_alloc import free_test_port # noqa: E402
SOURCE = Path(__file__).resolve().parents[1]
_spec = importlib.util.spec_from_file_location("tsr", SOURCE / "tests" / "test_svc_recover.py")
tsr = importlib.util.module_from_spec(_spec)
_spec.loader.exec_module(tsr)
class LifecycleIsolationTests(tsr.SvcAutoRecoverTests):
def setUp(self):
super().setUp()
shutil.copy2(SOURCE / "scripts" / "svc_manifest.py",
self.root / "scripts" / "svc_manifest.py")
def test_caller_identity_env_does_not_reach_serve(self):
port = free_test_port()
self.seed_agent("iso", port)
env = dict(self.env)
env["AGENT_SYSTEM_DSN"] = "postgres://leak-user:leak-pass@127.0.0.1/leak"
env["AGENT_SYSTEM_DATA"] = "/tmp/leak-data"
env["AGENT_SYSTEM_INSTANCE_ID"] = "svc-foreign-leak"
self.svc("iso", "start", env=env)
pid = self.pid_of("iso")
self.assertIsNotNone(pid)
raw = Path("/proc/%d/environ" % pid).read_bytes()
self.assertNotIn(b"leak-pass", raw)
self.assertNotIn(b"/tmp/leak-data", raw)
self.assertNotIn(b"svc-foreign-leak", raw)
serve_env = self.runtime("iso") / "serve.env"
self.assertTrue(serve_env.is_file())
self.assertEqual(serve_env.stat().st_mode & 0o777, 0o600)
text = serve_env.read_text()
self.assertNotIn("AGENT_SYSTEM_", text)
self.assertNotIn("leak-pass", text)
self.svc("iso", "stop")
def test_two_bare_restarts_keep_identity(self):
port = free_test_port()
self.seed_agent("iso2", port)
self.svc("iso2", "start")
manifest = json.loads((self.runtime("iso2") / "manifest.json").read_text())
iid = manifest["instance_id"]
data = manifest["identity"]["data_root"]
self.svc("iso2", "stop")
self.svc("iso2", "start")
self.svc("iso2", "stop")
self.svc("iso2", "start")
again = json.loads((self.runtime("iso2") / "manifest.json").read_text())
self.assertEqual(again["instance_id"], iid)
self.assertEqual(again["identity"]["data_root"], data)
self.assertEqual(again["identity"].get("db_marker"), "established")
self.svc("iso2", "stop")