Files
Charon/backend/internal/services/backup_service_wave5_test.go
2026-03-04 18:34:49 +00:00

57 lines
1.8 KiB
Go

package services
import (
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
func TestBackupServiceWave5_Rehydrate_FallbackWhenRestorePathMissing(t *testing.T) {
tmpDir := t.TempDir()
dataDir := filepath.Join(tmpDir, "data")
require.NoError(t, os.MkdirAll(dataDir, 0o700))
restoredDBPath := filepath.Join(dataDir, "charon.db")
createSQLiteTestDB(t, restoredDBPath)
activeDB, err := gorm.Open(sqlite.Open(filepath.Join(tmpDir, "active.db")), &gorm.Config{})
require.NoError(t, err)
require.NoError(t, activeDB.Exec(`CREATE TABLE healthcheck (id INTEGER PRIMARY KEY, value TEXT)`).Error)
svc := &BackupService{
DataDir: dataDir,
DatabaseName: "charon.db",
restoreDBPath: filepath.Join(tmpDir, "missing-restore.sqlite"),
}
require.NoError(t, svc.RehydrateLiveDatabase(activeDB))
}
func TestBackupServiceWave5_Rehydrate_DisableForeignKeysError(t *testing.T) {
activeDB, dataDir, restoreDBPath := setupRehydrateDBPair(t)
registerBackupRawErrorHook(t, activeDB, "wave5-disable-fk", func(tx *gorm.DB) bool {
return backupSQLContains(tx, "pragma foreign_keys = off")
})
svc := &BackupService{DataDir: dataDir, DatabaseName: "charon.db", restoreDBPath: restoreDBPath}
err := svc.RehydrateLiveDatabase(activeDB)
require.Error(t, err)
require.Contains(t, err.Error(), "disable foreign keys")
}
func TestBackupServiceWave5_Rehydrate_ClearTableError(t *testing.T) {
activeDB, dataDir, restoreDBPath := setupRehydrateDBPair(t)
registerBackupRawErrorHook(t, activeDB, "wave5-clear-users", func(tx *gorm.DB) bool {
return backupSQLContains(tx, "delete from \"users\"")
})
svc := &BackupService{DataDir: dataDir, DatabaseName: "charon.db", restoreDBPath: restoreDBPath}
err := svc.RehydrateLiveDatabase(activeDB)
require.Error(t, err)
require.Contains(t, err.Error(), "clear table users")
}