Files
OpenFlare/internal/repository/database_export_test.go

76 lines
1.7 KiB
Go

// Copyright 2026 Arctel.net
// SPDX-License-Identifier: Apache-2.0
package repository
import (
"context"
"path/filepath"
"testing"
db "github.com/Rain-kl/Wavelet/internal/infra/persistence"
"github.com/glebarez/sqlite"
"gorm.io/gorm"
)
func TestExportSQLiteSnapshotIncludesWAL(t *testing.T) {
dir := t.TempDir()
source, err := gorm.Open(sqlite.Open(filepath.Join(dir, "source.db")), &gorm.Config{})
if err != nil {
t.Fatal(err)
}
sqlDB, err := source.DB()
if err != nil {
t.Fatal(err)
}
previous := db.DB(context.Background())
db.SetDB(source)
t.Cleanup(func() {
db.SetDB(previous)
if err := sqlDB.Close(); err != nil {
t.Error(err)
}
})
for _, query := range []string{
"PRAGMA journal_mode = WAL",
"PRAGMA wal_autocheckpoint = 0",
"CREATE TABLE snapshot_data (value TEXT)",
"INSERT INTO snapshot_data VALUES ('latest committed data')",
} {
if err := source.Exec(query).Error; err != nil {
t.Fatal(err)
}
}
target := filepath.Join(dir, "snapshot.db")
if err := ExportSQLiteSnapshot(context.Background(), target); err != nil {
t.Fatal(err)
}
snapshot, err := gorm.Open(sqlite.Open(target), &gorm.Config{})
if err != nil {
t.Fatal(err)
}
snapshotDB, err := snapshot.DB()
if err != nil {
t.Fatal(err)
}
t.Cleanup(func() {
if err := snapshotDB.Close(); err != nil {
t.Error(err)
}
})
var value string
if err := snapshot.Raw("SELECT value FROM snapshot_data").Scan(&value).Error; err != nil {
t.Fatal(err)
}
if value != "latest committed data" {
t.Fatalf("unexpected snapshot content: %q", value)
}
var integrity string
if err := snapshot.Raw("PRAGMA integrity_check").Scan(&integrity).Error; err != nil {
t.Fatal(err)
}
if integrity != "ok" {
t.Fatalf("snapshot integrity: %s", integrity)
}
}