diff --git a/nestlog_test.go b/nestlog_test.go new file mode 100644 index 0000000..58a87d7 --- /dev/null +++ b/nestlog_test.go @@ -0,0 +1,63 @@ +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) + } +}