diff --git a/tests/test_svc.py b/tests/test_svc.py index da2e34df..e11433fe 100644 --- a/tests/test_svc.py +++ b/tests/test_svc.py @@ -296,12 +296,14 @@ class SvcDbRecoveryTests(unittest.TestCase): # ---- 1. 存量 exec= DSN:连续启动两次均恢复,进程参数无秘密 ---- def test_legacy_exec_dsn_survives_consecutive_restarts(self): - self.register_pg("pg1", 18890, password="legacy-pw-1") - dsn = "postgresql://agent:legacy-pw-1@127.0.0.1:18890/agent" + pg_port = free_test_port() + self.register_pg("pg1", pg_port, password="legacy-pw-1") + dsn = "postgresql://agent:legacy-pw-1@127.0.0.1:%d/agent" % pg_port d = self.runtime("dev") - self.seed_agent("dev", 18791, - "--addr 127.0.0.1:18791 --data %s --plugins %s --auth auto --dsn %s" - % (d / "data", d / "plugins", dsn)) + port = free_test_port() + self.seed_agent("dev", port, + "--addr 127.0.0.1:%d --data %s --plugins %s --auth auto --dsn %s" + % (port, d / "data", d / "plugins", dsn)) for _ in range(2): self.clear_serve_record() self.svc("dev", "restart") @@ -322,12 +324,14 @@ class SvcDbRecoveryTests(unittest.TestCase): # ---- 2. 仅 dbref:裸 restart 与重新部署均保留绑定 ---- def test_dbref_binding_survives_bare_restart_and_redeploy(self): - self.register_pg("pg1", 18891, password="bind-pw-2") - dsn = "postgresql://agent:bind-pw-2@127.0.0.1:18891/agent" + pg_port = free_test_port() + self.register_pg("pg1", pg_port, password="bind-pw-2") + dsn = "postgresql://agent:bind-pw-2@127.0.0.1:%d/agent" % pg_port d = self.runtime("dev") - self.seed_agent("dev", 18792, - "--addr 127.0.0.1:18792 --data %s --plugins %s --auth auto" - % (d / "data", d / "plugins"), + port = free_test_port() + self.seed_agent("dev", port, + "--addr 127.0.0.1:%d --data %s --plugins %s --auth auto" + % (port, d / "data", d / "plugins"), extra_rows=[("dbref", "pg1/agent"), ("db", "pg")]) self.clear_serve_record() self.svc("dev", "restart") @@ -413,9 +417,10 @@ class SvcDbRecoveryTests(unittest.TestCase): def test_refusals_keep_registration_without_sqlite_fallback(self): d = self.runtime("a1") - self.seed_agent("a1", 18796, - "--addr 127.0.0.1:18796 --data %s --plugins %s --auth auto" - % (d / "data", d / "plugins"), + port = free_test_port() + self.seed_agent("a1", port, + "--addr 127.0.0.1:%d --data %s --plugins %s --auth auto" + % (port, d / "data", d / "plugins"), extra_rows=[("dbref", "pgmissing/agent"), ("db", "pg")]) self.clear_serve_record() result = self.svc("a1", "restart", check=False) @@ -425,33 +430,41 @@ class SvcDbRecoveryTests(unittest.TestCase): self.assertEqual(self.kv("a1", "dbref"), "pgmissing/agent") # 可恢复配置保留 # 实例登记不全(缺 password)→ 拒启。 - self.register_pg("pginc", 18895, complete=False) + self.register_pg("pginc", free_test_port(), complete=False) d = self.runtime("a2") - self.seed_agent("a2", 18797, - "--addr 127.0.0.1:18797 --data %s --plugins %s --auth auto" - % (d / "data", d / "plugins"), + port = free_test_port() + self.seed_agent("a2", port, + "--addr 127.0.0.1:%d --data %s --plugins %s --auth auto" + % (port, d / "data", d / "plugins"), extra_rows=[("dbref", "pginc/agent"), ("db", "pg")]) result = self.svc("a2", "restart", check=False) self.assertNotEqual(result.returncode, 0) self.assertIn("拒绝", result.stdout) # dbref 与 dsn= 指向不同库 → 配置冲突拒启。 - self.register_pg("pg1", 18896, password="clash-pw") + pg_port = free_test_port() + self.register_pg("pg1", pg_port, password="clash-pw") + other_pg_port = free_test_port() + while other_pg_port == pg_port: + other_pg_port = free_test_port() d = self.runtime("a3") - self.seed_agent("a3", 18798, - "--addr 127.0.0.1:18798 --data %s --plugins %s --auth auto" - % (d / "data", d / "plugins"), + port = free_test_port() + self.seed_agent("a3", port, + "--addr 127.0.0.1:%d --data %s --plugins %s --auth auto" + % (port, d / "data", d / "plugins"), extra_rows=[("dbref", "pg1/agent"), ("db", "pg"), - ("dsn", "postgresql://u:p@127.0.0.1:18999/otherdb")]) + ("dsn", "postgresql://u:p@127.0.0.1:%d/otherdb" + % other_pg_port)]) result = self.svc("a3", "restart", check=False) self.assertNotEqual(result.returncode, 0) self.assertIn("拒绝", result.stdout) # db=pg 但无可恢复 DSN → 拒启。 d = self.runtime("a4") - self.seed_agent("a4", 18799, - "--addr 127.0.0.1:18799 --data %s --plugins %s --auth auto" - % (d / "data", d / "plugins"), + port = free_test_port() + self.seed_agent("a4", port, + "--addr 127.0.0.1:%d --data %s --plugins %s --auth auto" + % (port, d / "data", d / "plugins"), extra_rows=[("db", "pg")]) result = self.svc("a4", "restart", check=False) self.assertNotEqual(result.returncode, 0)