test(app): 测试库 - 改用 WAL 文件库,消除共享缓存内存库的表级锁 flake (#562)

Original-Commit: 25931635266ca01843691e87d631b6f2db178e52
test(app): 测试库 - 改用 WAL 文件库,消除共享缓存内存库的表级锁 flake

两处用例夹具用 sqlite 的 `file:…?mode=memory&cache=shared`(表级锁,且不受 _busy_timeout
约束),而它们都会触发后台删除 outbox(go s.drainResourceDeletionJobs),并发时偶发
`database table is locked`(本地并发读写 400 次撞到 70+ 次)。

新增 newSQLiteTestDB(t):文件库 + WAL + busy_timeout=5000,WAL 允许"一写多读"、写冲突退化成
SQLITE_BUSY 并由 busy_timeout 重试;库文件放 os.MkdirTemp(不用 t.TempDir,避免 outbox 仍在写
时清理报 directory not empty)。两处夹具改用它,并新增一条属性用例守住这个选型。
This commit is contained in:
AetherNo2332 authored and ddCat committed 2026-09-21 09:37:19 +08:00
1 parent c4172295c3
commit 6c55ba0991
3 files changed
+102 -10

No files matched your search

@@ -10,7 +10,6 @@ import (
"infinite-canvas/backend/internal/model"
"infinite-canvas/backend/internal/repository"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
@@ -162,10 +161,7 @@ func TestDeleteAdminResourcesRejectsNonAdminAndOversizedBatch(t *testing.T) {
func newAdminStorageDeleteTestService(t *testing.T) (*Service, *gorm.DB, string, *model.User) {
t.Helper()
db, err := gorm.Open(sqlite.Open("file:"+newID()+"?mode=memory&cache=shared"), &gorm.Config{})
if err != nil {
t.Fatal(err)
}
db := newSQLiteTestDB(t)
if err := database.MigrateSchema(db); err != nil {
t.Fatal(err)
}