返回 DeepSeek-Reasonix
fresh_snapshot_test.go
根目录 / internal / sessioninbox / fresh_snapshot_test.go
1 package sessioninbox
2
3 import (
4 "errors"
5 "os"
6 "path/filepath"
7 "testing"
8
9 "reasonix/internal/filelock"
10 )
11
12 func TestTryFreshSnapshotReloadsAnotherStoreCommit(t *testing.T) {
13 session := filepath.Join(t.TempDir(), "s.jsonl")
14 first, err := Open(session, Limits{})
15 if err != nil {
16 t.Fatal(err)
17 }
18 defer first.Close()
19 second, err := Open(session, Limits{})
20 if err != nil {
21 t.Fatal(err)
22 }
23 defer second.Close()
24
25 receipt, err := second.Enqueue(EnqueueRequest{Envelope: PromptEnvelope{SubmitText: "new user work"}})
26 if err != nil {
27 t.Fatal(err)
28 }
29 manifestPath := filepath.Join(first.dir, manifestName)
30 before, err := os.ReadFile(manifestPath)
31 if err != nil {
32 t.Fatal(err)
33 }
34 if got := first.CachedSnapshot(); len(got.Items) != 0 {
35 t.Fatalf("cached snapshot unexpectedly refreshed: %+v", got)
36 }
37 snapshot, err := first.TryFreshSnapshot()
38 if err != nil {
39 t.Fatalf("TryFreshSnapshot: %v", err)
40 }
41 if len(snapshot.Items) != 1 || snapshot.Items[0].ID != receipt.ItemID {
42 t.Fatalf("fresh snapshot = %+v, want external item %q", snapshot, receipt.ItemID)
43 }
44 after, err := os.ReadFile(manifestPath)
45 if err != nil {
46 t.Fatal(err)
47 }
48 if string(after) != string(before) {
49 t.Fatal("TryFreshSnapshot mutated the durable manifest")
50 }
51 if got := first.CachedSnapshot(); len(got.Items) != 0 {
52 t.Fatalf("read-only fresh snapshot mutated the Store cache: %+v", got)
53 }
54 }
55
56 func TestTryFreshSnapshotDoesNotWaitForDiskLock(t *testing.T) {
57 session := filepath.Join(t.TempDir(), "s.jsonl")
58 s, err := Open(session, Limits{})
59 if err != nil {
60 t.Fatal(err)
61 }
62 defer s.Close()
63
64 release, err := filelock.TryAcquire(filepath.Join(s.dir, diskLockName))
65 if err != nil {
66 t.Fatalf("hold inbox disk lock: %v", err)
67 }
68 defer release()
69 if _, err := s.TryFreshSnapshot(); !errors.Is(err, ErrSnapshotBusy) {
70 t.Fatalf("TryFreshSnapshot error = %v, want ErrSnapshotBusy", err)
71 }
72 }
73
73 lines GO