Files

64 lines
2.0 KiB
Go

package main
import (
"path/filepath"
"testing"
)
func TestMessageLogAppendOrder(t *testing.T) {
s := NewMessageStore(filepath.Join(t.TempDir(), "messages"))
for _, m := range []Message{{NestID: "lab", Kind: "say", Author: "owner", Text: "a"}, {NestID: "lab", Kind: "request", Author: "owner", Text: "b"}, {NestID: "lab", Kind: "claim", Author: "Hugin", Text: "c"}} {
if _, err := s.Append(m); err != nil {
t.Fatal(err)
}
}
got := s.After("lab", 0)
if len(got) != 3 || got[0].ID != 1 || got[1].ID != 2 || got[2].ID != 3 || got[2].Kind != "claim" {
t.Fatalf("want ids 1,2,3 in order, got %+v", got)
}
}
func TestMessageLogReplayFrom(t *testing.T) {
s := NewMessageStore(filepath.Join(t.TempDir(), "messages"))
for i := 0; i < 5; i++ {
if _, err := s.Append(Message{NestID: "lab", Kind: "say", Author: "owner"}); err != nil {
t.Fatal(err)
}
}
got := s.After("lab", 2)
if len(got) != 3 || got[0].ID != 3 || got[2].ID != 5 {
t.Fatalf("want ids 3,4,5, got %+v", got)
}
if n := len(s.After("lab", 5)); n != 0 {
t.Fatalf("want nothing after the last id, got %d", n)
}
}
func TestMessageLogPersists(t *testing.T) {
dir := filepath.Join(t.TempDir(), "messages")
s := NewMessageStore(dir)
for _, m := range []Message{{NestID: "lab", Kind: "request", Author: "owner", Text: "do it"}, {NestID: "lab", Kind: "claim", Author: "Munin", Text: "mine", To: "owner", RefersTo: "lab-1"}} {
if _, err := s.Append(m); err != nil {
t.Fatal(err)
}
}
opened, err := LoadMessageStore(dir)
if err != nil {
t.Fatal(err)
}
got := opened.After("lab", 0)
if len(got) != 2 || got[0].Text != "do it" || got[1].RefersTo != "lab-1" || got[1].ID != 2 {
t.Fatalf("round trip lost data: %+v", got)
}
if _, err := opened.Append(Message{NestID: "lab", Kind: "deliver", Author: "Munin"}); err != nil {
t.Fatal(err)
}
reopened, err := LoadMessageStore(dir)
if err != nil {
t.Fatal(err)
}
if n := len(reopened.After("lab", 0)); n != 3 {
t.Fatalf("append after reload not persisted: %d messages", n)
}
}