Files
waf-platform/EdgeDNS/internal/dbs/db_migrate_sqlite_internal_test.go
2026-03-22 17:37:40 +08:00

64 lines
1.3 KiB
Go

//go:build plus
package dbs
import (
"database/sql"
"errors"
"os"
"path/filepath"
"strings"
"testing"
"github.com/cockroachdb/pebble"
)
func TestDB_MigrateSQLiteIfNeeded_FlushFailureKeepsSQLite(t *testing.T) {
dir := t.TempDir()
sqlitePath := filepath.Join(dir, "data.db")
sqliteDB, err := sql.Open("sqlite3", sqlitePath)
if err != nil {
t.Fatal(err)
}
_, err = sqliteDB.Exec(`CREATE TABLE "domains_v2" ("id" INTEGER, "clusterId" INTEGER, "userId" INTEGER, "name" TEXT, "tsig" TEXT, "version" INTEGER)`)
if err != nil {
if strings.Contains(err.Error(), "requires cgo") || strings.Contains(err.Error(), "CGO_ENABLED=0") {
_ = sqliteDB.Close()
t.Skip("sqlite3 driver is unavailable in current environment")
}
_ = sqliteDB.Close()
t.Fatal(err)
}
err = sqliteDB.Close()
if err != nil {
t.Fatal(err)
}
oldFlushRawDB := flushRawDB
flushRawDB = func(rawDB *pebble.DB) error {
return errors.New("flush failed")
}
defer func() {
flushRawDB = oldFlushRawDB
}()
db := NewDB(sqlitePath)
defer func() {
_ = db.Close()
}()
err = db.Init()
if err == nil {
t.Fatal("expected migration error, got nil")
}
if !strings.Contains(err.Error(), "flush failed") {
t.Fatalf("unexpected error: %v", err)
}
_, err = os.Stat(sqlitePath)
if err != nil {
t.Fatalf("sqlite source should remain after flush failure: %v", err)
}
}