95 lines
2.0 KiB
Go
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)
|
|
}
|
|
}
|