2026-08-15 01:36:51 +08:00

95 lines
2.0 KiB
Go

package wal
import (
"path/filepath"
"testing"
)
func TestWALAppendLoad(t *testing.T) {
path := filepath.Join(t.TempDir(), "wal.bin")
w, err := Open(path)
if err != nil {
t.Fatalf("Open: %v", err)
}
defer w.Close()
if err := w.Append(1, []byte("a")); err != nil {
t.Fatalf("Append: %v", err)
}
if err := w.Append(2, []byte("bb")); err != nil {
t.Fatalf("Append: %v", err)
}
recs, err := w.Load()
if err != nil {
t.Fatalf("Load: %v", err)
}
if len(recs) != 2 {
t.Fatalf("len(recs)=%d, want 2", len(recs))
}
if recs[0].Seq != 1 || string(recs[0].Payload) != "a" {
t.Fatalf("recs[0]=%+v", recs[0])
}
if recs[1].Seq != 2 || string(recs[1].Payload) != "bb" {
t.Fatalf("recs[1]=%+v", recs[1])
}
}
func TestWALTruncateBefore(t *testing.T) {
path := filepath.Join(t.TempDir(), "wal.bin")
w, err := Open(path)
if err != nil {
t.Fatalf("Open: %v", err)
}
defer w.Close()
for i := int64(1); i <= 5; i++ {
if err := w.Append(i, []byte{byte(i)}); err != nil {
t.Fatalf("Append %d: %v", i, err)
}
}
if err := w.TruncateBefore(3); err != nil {
t.Fatalf("TruncateBefore: %v", err)
}
recs, err := w.Load()
if err != nil {
t.Fatalf("Load: %v", err)
}
if len(recs) != 3 {
t.Fatalf("len(recs)=%d, want 3", len(recs))
}
for i, want := range []int64{3, 4, 5} {
if recs[i].Seq != want {
t.Fatalf("recs[%d].Seq=%d, want %d", i, recs[i].Seq, want)
}
}
}
func TestWALReopenPersists(t *testing.T) {
path := filepath.Join(t.TempDir(), "wal.bin")
w, err := Open(path)
if err != nil {
t.Fatalf("Open: %v", err)
}
if err := w.Append(7, []byte("persist")); err != nil {
t.Fatalf("Append: %v", err)
}
if err := w.Close(); err != nil {
t.Fatalf("Close: %v", err)
}
w2, err := Open(path)
if err != nil {
t.Fatalf("Reopen: %v", err)
}
defer w2.Close()
recs, err := w2.Load()
if err != nil {
t.Fatalf("Load: %v", err)
}
if len(recs) != 1 || recs[0].Seq != 7 || string(recs[0].Payload) != "persist" {
t.Fatalf("recs=%+v", recs)
}
}