]> git.giacomolli.uk - onechat/blobdiff - memory_test.go
Name and order the probe code
[onechat] / memory_test.go
index 8c34149cb07b18997df2d1a950e93e6c41f0fb34..8b418d860d376f55f672fcb030215c0c34a1fba4 100644 (file)
@@ -54,6 +54,33 @@ func TestMemoryRestartLoadsTheSameView(t *testing.T) {
        require.Equal(t, saved, loaded)
 }
 
        require.Equal(t, saved, loaded)
 }
 
+func TestMemoryOpensAfterACrashBeforeTheViewSave(t *testing.T) {
+       root := t.TempDir()
+       clock := newTestClock()
+       memory, err := openMemory(t.Context(), root, clock.Now, newFakeSummarizer())
+       require.NoError(t, err)
+
+       _, err = memory.Append("user", "first")
+       require.NoError(t, err)
+
+       saved, err := os.ReadFile(filepath.Join(root, "view.json"))
+       require.NoError(t, err)
+
+       _, err = memory.Append("user", "second")
+       require.NoError(t, err)
+
+       view := memory.View()
+       require.NoError(t, memory.Close())
+
+       // The log and the tree hold message 1, but the view does not.
+       require.NoError(t, os.WriteFile(filepath.Join(root, "view.json"), saved, 0o600))
+
+       memory, err = openMemory(t.Context(), root, clock.Now, newFakeSummarizer())
+       require.NoError(t, err)
+       require.Equal(t, view, memory.View())
+       require.NoError(t, memory.Close())
+}
+
 func TestMemoryKeepsTheCompactionViewCoarser(t *testing.T) {
        memory, err := openMemory(t.Context(), t.TempDir(), newTestClock().Now, newFakeSummarizer())
        require.NoError(t, err)
 func TestMemoryKeepsTheCompactionViewCoarser(t *testing.T) {
        memory, err := openMemory(t.Context(), t.TempDir(), newTestClock().Now, newFakeSummarizer())
        require.NoError(t, err)
@@ -107,12 +134,12 @@ func TestMemoryRunsAtMostEightBuilds(t *testing.T) {
        require.Equal(t, []nodeKey{{0, 0}, {0, 1}, {0, 2}, {0, 3}, {0, 4}, {0, 5}, {0, 6}, {0, 7}}, running)
 
        require.Eventually(t, func() bool {
        require.Equal(t, []nodeKey{{0, 0}, {0, 1}, {0, 2}, {0, 3}, {0, 4}, {0, 5}, {0, 6}, {0, 7}}, running)
 
        require.Eventually(t, func() bool {
-               return summarizer.Active() == maxBuilds
+               return summarizer.Active() == buildMax
        }, 10*time.Second, time.Millisecond)
 
        close(summarizer.gate)
        require.NoError(t, memory.Wait(t.Context()))
        }, 10*time.Second, time.Millisecond)
 
        close(summarizer.gate)
        require.NoError(t, memory.Wait(t.Context()))
-       require.Equal(t, maxBuilds, summarizer.peak)
+       require.Equal(t, buildMax, summarizer.peak)
 
        for level, count := range []int{12, 6, 3, 1} {
                for index := range count {
 
        for level, count := range []int{12, 6, 3, 1} {
                for index := range count {
@@ -234,7 +261,7 @@ func TestMemoryKeepsALongMessageOutOfTheView(t *testing.T) {
        _, err = memory.Append("echo", longText(0))
        require.NoError(t, err)
        require.NoError(t, memory.Wait(t.Context()))
        _, err = memory.Append("echo", longText(0))
        require.NoError(t, err)
        require.NoError(t, memory.Wait(t.Context()))
-       require.Equal(t, "<chat>\n0+1|"+pending+"\n</chat>", memory.View())
+       require.Equal(t, "<chat>\n0+1|"+viewPending+"\n</chat>", memory.View())
 
        summarizer.SetFailing(false)
 
 
        summarizer.SetFailing(false)