Bladeren bron

Merge pull request #10148 from jingyih/add_unit_test_for_snapshot_file_integrity

clientv3: add test for snapshot status
Jingyi Hu 7 jaren geleden
bovenliggende
commit
6976819792
2 gewijzigde bestanden met toevoegingen van 26 en 0 verwijderingen
  1. BIN
      clientv3/snapshot/testdata/corrupted_backup.db
  2. 26 0
      clientv3/snapshot/v3_snapshot_test.go

BIN
clientv3/snapshot/testdata/corrupted_backup.db


+ 26 - 0
clientv3/snapshot/v3_snapshot_test.go

@@ -21,6 +21,7 @@ import (
 	"net/url"
 	"os"
 	"path/filepath"
+	"strings"
 	"testing"
 	"time"
 
@@ -161,6 +162,31 @@ func TestSnapshotFilePermissions(t *testing.T) {
 	}
 }
 
+// TestCorruptedBackupFileCheck tests if we can correctly identify a corrupted backup file.
+func TestCorruptedBackupFileCheck(t *testing.T) {
+	dbPath := "testdata/corrupted_backup.db"
+	if _, err := os.Stat(dbPath); err != nil {
+		t.Fatalf("test file [%s] does not exist: %v", dbPath, err)
+	}
+
+	sp := NewV3(zap.NewExample())
+	_, err := sp.Status(dbPath)
+	expectedErrKeywords := "snapshot file integrity check failed"
+	/* example error message:
+	snapshot file integrity check failed. 2 errors found.
+	page 3: already freed
+	page 4: unreachable unfreed
+	*/
+	if err == nil {
+		t.Error("expected error due to corrupted snapshot file, got no error")
+	}
+	if !strings.Contains(err.Error(), expectedErrKeywords) {
+		t.Errorf("expected error message to contain the following keywords:\n%s\n"+
+			"actual error message:\n%s",
+			expectedErrKeywords, err.Error())
+	}
+}
+
 type kv struct {
 	k, v string
 }