fix(db): 收斂 DatabaseManager PostgreSQL 連線池
All checks were successful
CD Pipeline / deploy (push) Successful in 1m35s
All checks were successful
CD Pipeline / deploy (push) Successful in 1m35s
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user