1
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
3.1 KiB
Go

package snapshot
import (
"io"
"os"
"testing"
)
func Test_RemoveAllTmpSnapshotData(t *testing.T) {
dir := t.TempDir()
if err := RemoveAllTmpSnapshotData(dir); err != nil {
t.Fatalf("Failed to remove all tmp snapshot data: %v", err)
}
if !pathExists(dir) {
t.Fatalf("Expected dir to exist, but it does not")
}
directories, err := os.ReadDir(dir)
if err != nil {
t.Fatalf("Failed to read dir: %v", err)
}
if len(directories) != 0 {
t.Fatalf("Expected dir to be empty, got %d files", len(directories))
}
mustTouchDir(t, dir+"/dir")
mustTouchFile(t, dir+"/file")
if err := RemoveAllTmpSnapshotData(dir); err != nil {
t.Fatalf("Failed to remove all tmp snapshot data: %v", err)
}
if !pathExists(dir + "/dir") {
t.Fatalf("Expected dir to exist, but it does not")
}
if !pathExists(dir + "/file") {
t.Fatalf("Expected file to exist, but it does not")
}
mustTouchDir(t, dir+"/snapshot1234.tmp")
mustTouchFile(t, dir+"/snapshot1234.db")
mustTouchFile(t, dir+"/snapshot1234.db-wal")
mustTouchFile(t, dir+"/snapshot1234-5678")
if err := RemoveAllTmpSnapshotData(dir); err != nil {
t.Fatalf("Failed to remove all tmp snapshot data: %v", err)
}
if !pathExists(dir + "/dir") {
t.Fatalf("Expected dir to exist, but it does not")
}
if !pathExists(dir + "/file") {
t.Fatalf("Expected file to exist, but it does not")
}
if pathExists(dir + "/snapshot1234.tmp") {
t.Fatalf("Expected snapshot1234.tmp to not exist, but it does")
}
if pathExists(dir + "/snapshot1234.db") {
t.Fatalf("Expected snapshot1234.db to not exist, but it does")
}
if pathExists(dir + "/snapshot1234.db-wal") {
t.Fatalf("Expected snapshot1234.db-wal to not exist, but it does")
}
if pathExists(dir + "/snapshot1234-5678") {
t.Fatalf("Expected /snapshot1234-5678 to not exist, but it does")
}
mustTouchFile(t, dir+"/snapshotABCD.tmp")
if err := RemoveAllTmpSnapshotData(dir); err != nil {
t.Fatalf("Failed to remove all tmp snapshot data: %v", err)
}
if !pathExists(dir + "/snapshotABCD.tmp") {
t.Fatalf("Expected /snapshotABCD.tmp to exist, but it does not")
}
}
func Test_LatestIndex(t *testing.T) {
store := mustStore(t)
li, err := LatestIndex(store.dir)
if err != nil {
t.Fatalf("Failed to get latest index: %v", err)
}
if li != 0 {
t.Fatalf("Expected latest index to be 0, got %d", li)
}
sink := NewSink(store, makeRaftMeta("snap-1234", 3, 2, 1))
if sink == nil {
t.Fatalf("Failed to create new sink")
}
if err := sink.Open(); err != nil {
t.Fatalf("Failed to open sink: %v", err)
}
sqliteFile := mustOpenFile(t, "testdata/db-and-wals/backup.db")
defer sqliteFile.Close()
n, err := io.Copy(sink, sqliteFile)
if err != nil {
t.Fatalf("Failed to copy SQLite file: %v", err)
}
sqliteFile.Close() // Reaping will fail on Windows if file is not closed.
if n != mustGetFileSize(t, "testdata/db-and-wals/backup.db") {
t.Fatalf("Unexpected number of bytes copied: %d", n)
}
if err := sink.Close(); err != nil {
t.Fatalf("Failed to close sink: %v", err)
}
li, err = LatestIndex(store.dir)
if err != nil {
t.Fatalf("Failed to get latest index: %v", err)
}
if li != 3 {
t.Fatalf("Expected latest index to be 3, got %d", li)
}
}