(#9) Nest message log + replay #16
@@ -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