fix(db): 收斂 DatabaseManager PostgreSQL 連線池
All checks were successful
CD Pipeline / deploy (push) Successful in 1m35s

This commit is contained in:
OoO
2026-04-30 10:08:31 +08:00
parent 27e765668b
commit 74d64092bc
9 changed files with 103 additions and 49 deletions

View File

@@ -14,3 +14,48 @@ def test_database_manager_reuses_engine_for_same_sqlite_path(tmp_path):
finally:
DatabaseManager._instance_cache.clear()
first.engine.dispose()
def test_database_manager_uses_bounded_postgres_pool(monkeypatch):
import config
import database.manager as manager
captured = {}
class FakeEngine:
def dispose(self):
pass
class FakeSession:
pass
def fake_create_engine(url, **kwargs):
captured["url"] = url
captured["kwargs"] = kwargs
return FakeEngine()
def fake_sessionmaker(bind):
captured["session_bind"] = bind
return FakeSession
DatabaseManager._instance_cache.clear()
monkeypatch.setattr(config, "DATABASE_TYPE", "postgresql")
monkeypatch.setattr(config, "DATABASE_PATH", "postgresql://example/db")
monkeypatch.setattr(manager, "create_engine", fake_create_engine)
monkeypatch.setattr(manager, "sessionmaker", fake_sessionmaker)
monkeypatch.setattr(manager, "ensure_metadata_initialized", lambda *args, **kwargs: None)
monkeypatch.setattr(DatabaseManager, "_init_autoheal_tables", lambda self: None)
db = DatabaseManager()
assert captured["url"] == "postgresql://example/db"
assert captured["kwargs"]["pool_pre_ping"] is True
assert captured["kwargs"]["pool_size"] == 2
assert captured["kwargs"]["max_overflow"] == 3
assert captured["kwargs"]["pool_recycle"] == 1800
assert captured["kwargs"]["pool_timeout"] == 30
assert captured["kwargs"]["connect_args"]["connect_timeout"] == 10
assert "statement_timeout=60000" in captured["kwargs"]["connect_args"]["options"]
assert db.engine is captured["session_bind"]
DatabaseManager._instance_cache.clear()