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
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)
|
|
}
|
|
}
|