返回 DeepSeek-Reasonix
index_test.go
根目录 / internal / session / index_test.go
1 package session
2
3 import (
4 "context"
5 "encoding/json"
6 "os"
7 "path/filepath"
8 "strconv"
9 "testing"
10 )
11
12 func TestPagedReadBuildsAndUsesSparseCommitIndex(t *testing.T) {
13 dir := filepath.Join(t.TempDir(), "indexed")
14 store, err := Open(dir, "indexed")
15 if err != nil {
16 t.Fatal(err)
17 }
18 for i := range 600 {
19 payload, _ := json.Marshal(map[string]int{"number": i})
20 if _, err := store.Append(t.Context(), Batch{
21 OperationID: "diagnostic-" + strconv.Itoa(i),
22 Events: []Event{{Kind: "diagnostic/test", Optional: true, Payload: payload}},
23 }); err != nil {
24 t.Fatal(err)
25 }
26 }
27 if err := store.Close(context.Background()); err != nil {
28 t.Fatal(err)
29 }
30
31 handle, err := openReadHandle(dir, "indexed")
32 if err != nil {
33 t.Fatal(err)
34 }
35 page, err := handle.Read(context.Background(), 520, 3)
36 if err != nil {
37 t.Fatal(err)
38 }
39 if len(page.Commits) != 3 || page.Commits[0].FirstSequence != 521 || page.Next != 523 || !page.Truncated {
40 t.Fatalf("page = %+v", page)
41 }
42 data, err := os.ReadFile(sparseIndexPath(dir))
43 if err != nil {
44 t.Fatal(err)
45 }
46 var index sparseIndex
47 if err := json.Unmarshal(data, &index); err != nil {
48 t.Fatal(err)
49 }
50 if len(index.Entries) != 3 || index.Entries[1].FirstSequence != 257 || index.Entries[2].FirstSequence != 513 {
51 t.Fatalf("sparse entries = %+v", index.Entries)
52 }
53 }
54
55 func TestCorruptSparseIndexIsRebuiltFromValidatedLog(t *testing.T) {
56 dir := filepath.Join(t.TempDir(), "rebuild")
57 store, err := Open(dir, "rebuild")
58 if err != nil {
59 t.Fatal(err)
60 }
61 if _, err := store.Append(t.Context(), Batch{OperationID: "one", Events: []Event{{Kind: "diagnostic/test", Optional: true}}}); err != nil {
62 t.Fatal(err)
63 }
64 if err := store.Close(context.Background()); err != nil {
65 t.Fatal(err)
66 }
67 if err := os.WriteFile(sparseIndexPath(dir), []byte("not-json\n"), 0o600); err != nil {
68 t.Fatal(err)
69 }
70 page, err := readCommitPage(context.Background(), dir, 0, 10)
71 if err != nil || len(page.Commits) != 1 {
72 t.Fatalf("page=%+v err=%v", page, err)
73 }
74 data, err := os.ReadFile(sparseIndexPath(dir))
75 if err != nil {
76 t.Fatal(err)
77 }
78 var rebuilt sparseIndex
79 if err := json.Unmarshal(data, &rebuilt); err != nil || rebuilt.Codec != sparseIndexCodec || rebuilt.LastSequence != 1 {
80 t.Fatalf("rebuilt=%+v err=%v", rebuilt, err)
81 }
82 }
83
83 lines GO