backup_test.go
⎇
Raw
1package database
2
3import (
4 "context"
5 "io"
6 "log/slog"
7 "os"
8 "path/filepath"
9 "testing"
10)
11
12func TestBackupConsistentAndPrune(t *testing.T) {
13 dir := t.TempDir()
14 db, err := Open(filepath.Join(dir, "live.db"))
15 if err != nil {
16 t.Fatal(err)
17 }
18 defer Close(db)
19 if _, err := db.Exec(`INSERT INTO patients (name) VALUES ('Test')`); err != nil {
20 t.Fatal(err)
21 }
22 bdir := filepath.Join(dir, "backup")
23 name, err := Backup(context.Background(), db, bdir)
24 if err != nil {
25 t.Fatal(err)
26 }
27 // Backup muss ohne -wal vollständig lesbar sein
28 bdb, err := Open(name)
29 if err != nil {
30 t.Fatal(err)
31 }
32 var n int
33 bdb.QueryRow(`SELECT count(*) FROM patients`).Scan(&n)
34 bdb.Close()
35 if n != 1 {
36 t.Fatalf("backup enthält %d Patienten", n)
37 }
38 for _, f := range []string{"physiobase-2020-01-01_000000.db", "physiobase-2020-01-02_000000.db"} {
39 os.WriteFile(filepath.Join(bdir, f), nil, 0o600)
40 }
41 Prune(bdir, 2)
42 files, _ := filepath.Glob(filepath.Join(bdir, "physiobase-*.db"))
43 if len(files) != 2 || filepath.Base(files[1]) != filepath.Base(name) {
44 t.Fatalf("prune: %v", files)
45 }
46 _ = slog.New(slog.NewTextHandler(io.Discard, nil))
47}
48