Initial commit
This commit is contained in:
53
lib/wal/corrupt_test.go
Normal file
53
lib/wal/corrupt_test.go
Normal file
@@ -0,0 +1,53 @@
|
||||
package wal
|
||||
|
||||
import (
|
||||
"io"
|
||||
"git.crumpington.com/public/jldb/lib/errs"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestCorruptWAL(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
tmpDir := t.TempDir()
|
||||
wal, err := Create(tmpDir, 100, Config{
|
||||
SegMinCount: 1024,
|
||||
SegMaxAgeSec: 3600,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer wal.Close()
|
||||
|
||||
appendRandomRecords(t, wal, 100)
|
||||
|
||||
f := wal.seg.f
|
||||
info, err := f.Stat()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
offset := info.Size() / 2
|
||||
if _, err := f.WriteAt([]byte{1, 2, 3, 4, 5, 6, 7, 8}, offset); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
it, err := wal.Iterator(-1)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer it.Close()
|
||||
|
||||
for it.Next(0) {
|
||||
rec := it.Record()
|
||||
if _, err := io.ReadAll(rec.Reader); err != nil {
|
||||
if errs.Corrupt.Is(err) {
|
||||
return
|
||||
}
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
if !errs.Corrupt.Is(it.Error()) {
|
||||
t.Fatal(it.Error())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user