mirror of
https://github.com/hansjone/netx.git
synced 2026-10-09 00:50:46 +08:00
60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
"""PostgreSQL storage metrics (database used size only)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import unittest
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
import netx_api.db_storage_metrics as db_storage
|
|
from netx_api.db_storage_metrics import collect_db_storage_metrics
|
|
|
|
|
|
class DbStorageMetricsTests(unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
db_storage._CACHED = None
|
|
db_storage._CACHED_AT = 0.0
|
|
|
|
def test_pg_used_bytes(self) -> None:
|
|
row = {"db_name": "netx", "used_bytes": 12_345_678}
|
|
session = MagicMock()
|
|
session.__enter__.return_value = session
|
|
session.__exit__.return_value = False
|
|
session.execute.return_value.mappings.return_value.one.return_value = row
|
|
|
|
with (
|
|
patch.object(db_storage.settings, "database_url", "postgresql://u:p@10.0.0.8:5432/netx"),
|
|
patch.object(db_storage, "_open_session", return_value=session),
|
|
):
|
|
out = collect_db_storage_metrics()
|
|
|
|
self.assertEqual(out["used_bytes"], 12_345_678)
|
|
self.assertEqual(out["db_name"], "netx")
|
|
self.assertEqual(out["source"], "pg_database_size")
|
|
self.assertNotIn("total_bytes", out)
|
|
self.assertNotIn("percent", out)
|
|
|
|
def test_sqlite_not_applicable(self) -> None:
|
|
with patch.object(db_storage.settings, "database_url", "sqlite:///tmp.db"):
|
|
out = collect_db_storage_metrics()
|
|
self.assertEqual(out["source"], "sqlite")
|
|
self.assertEqual(out["error"], "not_applicable")
|
|
self.assertEqual(out["used_bytes"], 0)
|
|
|
|
def test_query_error(self) -> None:
|
|
session = MagicMock()
|
|
session.__enter__.return_value = session
|
|
session.__exit__.return_value = False
|
|
session.execute.side_effect = RuntimeError("boom")
|
|
|
|
with (
|
|
patch.object(db_storage.settings, "database_url", "postgresql://u:p@127.0.0.1:5432/netx"),
|
|
patch.object(db_storage, "_open_session", return_value=session),
|
|
):
|
|
out = collect_db_storage_metrics()
|
|
|
|
self.assertEqual(out["source"], "error")
|
|
self.assertIn("boom", str(out.get("error") or ""))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|