返回 DeepSeek-Reasonix
history_slice_rebuild_test.go
根目录 / desktop / history_slice_rebuild_test.go
1 package main
2
3 import (
4 "fmt"
5 "testing"
6 "time"
7
8 "reasonix/internal/provider"
9 )
10
11 func waitHistoryIndexRebuilds(t *testing.T, app *App) {
12 t.Helper()
13 deadline := time.NewTimer(5 * time.Second)
14 defer deadline.Stop()
15 for {
16 app.historySliceMu.Lock()
17 pending := make([]<-chan struct{}, 0, len(app.historyIndexRebuilds))
18 for _, done := range app.historyIndexRebuilds {
19 pending = append(pending, done)
20 }
21 app.historySliceMu.Unlock()
22 if len(pending) == 0 {
23 return
24 }
25 for _, done := range pending {
26 select {
27 case <-done:
28 case <-deadline.C:
29 t.Fatal("history display-index rebuild did not finish during cleanup")
30 }
31 }
32 }
33 }
34
35 func TestHistorySliceEntryIDsStableAcrossAppends(t *testing.T) {
36 app := historySliceTestApp(t)
37 dir := t.TempDir()
38 var msgs []provider.Message
39 for i := range 3 {
40 msgs = append(msgs, historySliceUser(i, fmt.Sprintf("q%d", i)), historySliceAssistant(i, fmt.Sprintf("a%d", i)))
41 }
42 sess, path := saveHistorySliceSession(t, dir, "ids.jsonl", msgs)
43 newLiveHistoryTab(t, app, dir, path, sess)
44
45 before := app.HistorySliceForTab("test", HistorySliceRequest{Turns: 500, Entries: 1000})
46
47 sess.Add(historySliceUser(3, "q3"))
48 sess.Add(historySliceAssistant(3, "a3"))
49 if err := sess.Save(path); err != nil {
50 t.Fatalf("save: %v", err)
51 }
52 after := app.HistorySliceForTab("test", HistorySliceRequest{Turns: 500, Entries: 1000})
53 if len(after.Entries) != len(before.Entries)+2 {
54 t.Fatalf("entries after append = %d, want %d", len(after.Entries), len(before.Entries)+2)
55 }
56 for i := range before.Entries {
57 if before.Entries[i].EntryID != after.Entries[i].EntryID {
58 t.Fatalf("entry %d ID changed across append-only save: %s -> %s", i, before.Entries[i].EntryID, after.Entries[i].EntryID)
59 }
60 }
61 }
62
62 lines GO