57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package ledger
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestAppendAndRead(t *testing.T) {
|
|
f, err := os.CreateTemp("", "ledger-test-*.jsonl")
|
|
if err != nil {
|
|
t.Fatalf("tempfile: %v", err)
|
|
}
|
|
path := f.Name()
|
|
f.Close()
|
|
defer os.Remove(path)
|
|
|
|
l := New(path, "stream-1")
|
|
// ensure empty read
|
|
evs, err := l.ReadAll()
|
|
if err != nil {
|
|
t.Fatalf("read empty: %v", err)
|
|
}
|
|
if len(evs) != 0 {
|
|
t.Fatalf("expected 0 events, got %d", len(evs))
|
|
}
|
|
|
|
e1, err := l.Append("route_decision", map[string]any{"tier": "fast"})
|
|
if err != nil {
|
|
t.Fatalf("append1: %v", err)
|
|
}
|
|
if l.LastHash == nil || *l.LastHash != e1.Hash {
|
|
t.Fatalf("lasthash not set after append1")
|
|
}
|
|
|
|
e2, err := l.Append("final_output_emitted", map[string]any{"result": "ok"})
|
|
if err != nil {
|
|
t.Fatalf("append2: %v", err)
|
|
}
|
|
if l.LastHash == nil || *l.LastHash != e2.Hash {
|
|
t.Fatalf("lasthash not set after append2")
|
|
}
|
|
if e2.PrevHash == nil || *e2.PrevHash != e1.Hash {
|
|
t.Fatalf("prevhash chain broken")
|
|
}
|
|
|
|
evs, err = l.ReadAll()
|
|
if err != nil {
|
|
t.Fatalf("read: %v", err)
|
|
}
|
|
if len(evs) != 2 {
|
|
t.Fatalf("expected 2 events, got %d", len(evs))
|
|
}
|
|
if evs[0].Hash != e1.Hash || evs[1].Hash != e2.Hash {
|
|
t.Fatalf("readback hashes mismatch")
|
|
}
|
|
}
|