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