返回 DeepSeek-Reasonix
upgrade_backup_test.go
根目录 / desktop / internal / draftstate / upgrade_backup_test.go
1 package draftstate
2
3 import (
4 "database/sql"
5 "path/filepath"
6 "testing"
7 )
8
9 func TestUpgradeBackupIncludesCommittedWAL(t *testing.T) {
10 path := filepath.Join(t.TempDir(), "drafts.sqlite")
11 db, err := sql.Open("sqlite", path)
12 if err != nil {
13 t.Fatal(err)
14 }
15 defer db.Close()
16 for _, statement := range []string{`PRAGMA journal_mode=WAL`, `PRAGMA wal_autocheckpoint=0`, `CREATE TABLE previous_input(value TEXT)`, `PRAGMA user_version=3`, `INSERT INTO previous_input VALUES('unsent attachment and text')`} {
17 if _, err := db.Exec(statement); err != nil {
18 t.Fatal(err)
19 }
20 }
21 if err := backupBeforeUpgrade(db, path, 3); err != nil {
22 t.Fatal(err)
23 }
24 backup, err := sql.Open("sqlite", path+".pre-v4.sqlite")
25 if err != nil {
26 t.Fatal(err)
27 }
28 defer backup.Close()
29 var text string
30 var version int
31 if err := backup.QueryRow(`SELECT value FROM previous_input`).Scan(&text); err != nil {
32 t.Fatal(err)
33 }
34 if err := backup.QueryRow(`PRAGMA user_version`).Scan(&version); err != nil {
35 t.Fatal(err)
36 }
37 if text != "unsent attachment and text" || version != 3 {
38 t.Fatalf("backup lost source: %q v%d", text, version)
39 }
40 if _, err := db.Exec(`UPDATE previous_input SET value='newer'`); err != nil {
41 t.Fatal(err)
42 }
43 if err := backupBeforeUpgrade(db, path, 3); err != nil {
44 t.Fatal(err)
45 }
46 if err := backup.QueryRow(`SELECT value FROM previous_input`).Scan(&text); err != nil {
47 t.Fatal(err)
48 }
49 if text != "unsent attachment and text" {
50 t.Fatal("retry replaced original backup")
51 }
52 }
53
53 lines GO