All checks were successful
技能自动化发布 / release (push) Successful in 9s
新增 DATA_SOURCES.md、data-sources 示例与双后端 connection 骨架;CLI 与宿主 UI 可读写同一库。要求匠厂 Host ≥ 6.9.28。 Co-authored-by: Cursor <cursoragent@cursor.com>
50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""数据库后端选择:默认 SQLite,DSN 解析。"""
|
||
from __future__ import annotations
|
||
|
||
import os
|
||
import unittest
|
||
|
||
from _support import IsolatedDataRoot
|
||
|
||
|
||
class TestDbBackend(unittest.TestCase):
|
||
def test_resolve_backend_defaults_to_sqlite(self) -> None:
|
||
with IsolatedDataRoot():
|
||
from db.backend import resolve_backend
|
||
|
||
self.assertEqual(resolve_backend(), "sqlite")
|
||
|
||
def test_parse_mysql_dsn(self) -> None:
|
||
with IsolatedDataRoot():
|
||
from db.backend import parse_mysql_dsn
|
||
|
||
params = parse_mysql_dsn("mysql://root:secret@192.168.0.20:3306/demo_db")
|
||
self.assertEqual(params["host"], "192.168.0.20")
|
||
self.assertEqual(params["port"], 3306)
|
||
self.assertEqual(params["user"], "root")
|
||
self.assertEqual(params["password"], "secret")
|
||
self.assertEqual(params["database"], "demo_db")
|
||
|
||
def test_resolve_backend_uses_mysql_dsn_from_env(self) -> None:
|
||
with IsolatedDataRoot():
|
||
from db.backend import resolve_backend
|
||
|
||
os.environ["MYSQL_DSN"] = "mysql://u:p@127.0.0.1:3306/t"
|
||
try:
|
||
self.assertEqual(resolve_backend(), "mysql")
|
||
finally:
|
||
os.environ.pop("MYSQL_DSN", None)
|
||
|
||
def test_describe_active_store_sqlite(self) -> None:
|
||
with IsolatedDataRoot():
|
||
from db.connection import describe_active_store
|
||
|
||
info = describe_active_store()
|
||
self.assertEqual(info["backend"], "sqlite")
|
||
self.assertIn("db_path", info)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
unittest.main()
|