test(nestlog): red for #9 — append order, replay, persistence
This commit is contained in:
1 parent
798052a9a6
commit
996660b3db
1 file changed
+63
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user