70 lines
1.6 KiB
Go

package checkpoint
import (
"path/filepath"
"testing"
)
func TestFileStorePersistsAcrossInstances(t *testing.T) {
path := filepath.Join(t.TempDir(), "cp.json")
s, err := NewFileStore(path)
if err != nil {
t.Fatalf("NewFileStore: %v", err)
}
if err := s.SetLogOffset("/var/log/app.log", 2048); err != nil {
t.Fatalf("SetLogOffset: %v", err)
}
if err := s.SetAckedSeq("h-001", 42); err != nil {
t.Fatalf("SetAckedSeq: %v", err)
}
_ = s.Close()
s2, err := NewFileStore(path)
if err != nil {
t.Fatalf("reopen: %v", err)
}
defer s2.Close()
if got, _ := s2.GetLogOffset("/var/log/app.log"); got != 2048 {
t.Fatalf("log offset = %d, want 2048", got)
}
if got, _ := s2.GetAckedSeq("h-001"); got != 42 {
t.Fatalf("acked seq = %d, want 42", got)
}
}
func TestFileStoreMissingReturnsZero(t *testing.T) {
path := filepath.Join(t.TempDir(), "cp.json")
s, err := NewFileStore(path)
if err != nil {
t.Fatalf("NewFileStore: %v", err)
}
defer s.Close()
if got, err := s.GetLogOffset("nope"); err != nil || got != 0 {
t.Fatalf("got=%d err=%v, want 0 nil", got, err)
}
if got, err := s.GetAckedSeq("nope"); err != nil || got != 0 {
t.Fatalf("got=%d err=%v, want 0 nil", got, err)
}
}
func TestMemoryStoreThreadSafe(t *testing.T) {
s := NewMemoryStore()
for i := int64(0); i < 100; i++ {
if err := s.SetAckedSeq("h", i); err != nil {
t.Fatalf("SetAckedSeq: %v", err)
}
}
if got, _ := s.GetAckedSeq("h"); got != 99 {
t.Fatalf("acked seq = %d, want 99", got)
}
}
func TestNewUnknownDriver(t *testing.T) {
if _, err := New("bogus", "", ""); err == nil {
t.Fatalf("expected error for unknown driver")
}
}