55 lines
843 B
Go
55 lines
843 B
Go
package wal
|
|
|
|
import (
|
|
"io"
|
|
"testing"
|
|
|
|
"git.crumpington.com/public/jldb/lib/errs"
|
|
)
|
|
|
|
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())
|
|
}
|
|
}
|