require.NoError(t, err)
var written []Message
+
for _, kind := range []string{"user", "reply", "tool", "echo", "work", "note"} {
message, err := log.Append(kind, kind+" text ✓")
require.NoError(t, err)
}()
require.Equal(t, len(written), log.Len())
+
for _, message := range written {
read, err := log.Message(message.ID)
require.NoError(t, err)
require.NoError(t, log.Close())
// A missing index, and an index that a crash cut in a record.
- for _, cut := range []func(string) error{os.Remove, truncateToOneAndAHalf} {
+ for _, cut := range []func(string) error{os.Remove, logTruncateToOneAndAHalf} {
require.NoError(t, cut(filepath.Join(root, "index", "main.idx")))
log, err = openLog(t.Context(), root, clock.Now)
first, err := os.ReadFile(filepath.Join(root, "main", "2026-01-01.jsonl"))
require.NoError(t, err)
- require.Equal(t, `{"i":0,"kind":"user","text":"first day","size":9,"date":"2026-01-01T12:00:00Z"}`+"\n", string(first))
+ require.JSONEq(t, `{"i":0,"kind":"user","text":"first day","size":9,"date":"2026-01-01T12:00:00Z"}`+"\n", string(first))
second, err := os.ReadFile(filepath.Join(root, "main", "2026-01-02.jsonl"))
require.NoError(t, err)
- require.Equal(t, `{"i":1,"kind":"user","text":"second day","size":10,"date":"2026-01-02T12:00:00Z"}`+"\n", string(second))
+ require.JSONEq(t, `{"i":1,"kind":"user","text":"second day","size":10,"date":"2026-01-02T12:00:00Z"}`+"\n", string(second))
}
func TestLogAllowsOneWriter(t *testing.T) {
first := `{"i":0,"kind":"user","text":"x","size":1,"date":"2026-01-01T12:00:00Z"}` + "\n" + `{"i":1,"kin`
second := `{"i":1,"kind":"user","text":"y","size":1,"date":"2026-01-02T12:00:00Z"}` + "\n"
+
require.NoError(t, os.WriteFile(filepath.Join(root, "main", "2026-01-01.jsonl"), []byte(first), 0o600))
require.NoError(t, os.WriteFile(filepath.Join(root, "main", "2026-01-02.jsonl"), []byte(second), 0o600))
require.ErrorContains(t, err, "ends in an incomplete line")
}
-// truncateToOneAndAHalf cuts the index at path in its second record.
-func truncateToOneAndAHalf(path string) error {
+// logTruncateToOneAndAHalf cuts the index at path in its second record.
+func logTruncateToOneAndAHalf(path string) error {
return os.Truncate(path, positionBytes+positionBytes/2)
}