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