62 lines
2.0 KiB
Go
62 lines
2.0 KiB
Go
package httpapi
|
||
|
||
import (
|
||
"path/filepath"
|
||
"testing"
|
||
|
||
"git.pcux.cn/xuans/Scert/backend/internal/database"
|
||
"git.pcux.cn/xuans/Scert/backend/internal/repository"
|
||
)
|
||
|
||
func TestReadyTestConfigIsolatesRuntimePaths(t *testing.T) {
|
||
root := t.TempDir()
|
||
cfg := readyTestConfig(root)
|
||
for name, path := range map[string]string{
|
||
"install": cfg.Paths.Install, "config": cfg.Paths.Config,
|
||
"data": cfg.Paths.Data, "log": cfg.Paths.Log,
|
||
"certificate": cfg.Paths.Certificate, "backup": cfg.Paths.Backup,
|
||
"database": cfg.Database.DSN,
|
||
} {
|
||
relative, err := filepath.Rel(root, path)
|
||
if err != nil || !filepath.IsLocal(relative) {
|
||
t.Fatalf("测试路径越过临时目录:%s=%s,错误=%v", name, path, err)
|
||
}
|
||
}
|
||
if !cfg.SetupReady || cfg.Database.Driver != "sqlite" {
|
||
t.Fatal("隔离配置必须保留已初始化状态和 SQLite 数据库")
|
||
}
|
||
}
|
||
|
||
func TestReadyTestConfigCreatesIndependentDatabases(t *testing.T) {
|
||
for range 2 {
|
||
cfg := readyTestConfig(t.TempDir())
|
||
db, err := database.Open(t.Context(), cfg.Database)
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
t.Cleanup(func() { _ = db.Close() })
|
||
if err := database.Migrate(t.Context(), db.DB, cfg.Database.Driver); err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
var sequence int
|
||
var name, path string
|
||
if err := db.DB.QueryRowContext(t.Context(), "PRAGMA database_list").Scan(&sequence, &name, &path); err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
if filepath.Clean(path) != filepath.Clean(cfg.Database.DSN) {
|
||
t.Fatalf("测试实际连接了错误的数据库:%s", path)
|
||
}
|
||
tasks := repository.NewSQLTaskRepository(db.DB)
|
||
items, err := tasks.ListTasks(t.Context(), "", 10)
|
||
if err != nil || len(items) != 0 {
|
||
t.Fatalf("新测试数据库不为空:%+v,错误=%v", items, err)
|
||
}
|
||
if err := tasks.CreateTask(t.Context(), repository.Task{
|
||
ID: "isolation-task", DomainID: "management-certificate",
|
||
TaskType: "management_renewal", Status: "running", Stage: "preflight",
|
||
}); err != nil {
|
||
t.Fatalf("测试数据库被其他用例复用或不可写:%v", err)
|
||
}
|
||
}
|
||
}
|