返回 DeepSeek-Reasonix
session_matrix_test.go
根目录 / internal / agent / session_matrix_test.go
1 package agent
2
3 import (
4 "path/filepath"
5 "testing"
6
7 "reasonix/internal/provider"
8 )
9
10 // Matrix pins that must also run on a real Windows runner (session lock,
11 // delete-disposition, atomic replace). Locally this covers the portable
12 // generation and lock contracts.
13 func TestSessionWriterGenerationInvalidatesPriorSave(t *testing.T) {
14 path := filepath.Join(t.TempDir(), "session.jsonl")
15 s := NewSession("sys")
16 s.Add(provider.Message{Role: provider.RoleUser, Content: "hello"})
17 w, err := AcquireSessionWriter(path)
18 if err != nil {
19 t.Fatal(err)
20 }
21 defer w.Release()
22 if err := w.Bind(s, NextSessionWriteGeneration()); err != nil {
23 t.Fatal(err)
24 }
25 if err := s.SaveSnapshot(path); err != nil {
26 t.Fatal(err)
27 }
28 if err := w.Bind(s, NextSessionWriteGeneration()); err != nil {
29 t.Fatal(err)
30 }
31 old := s.WriteAuthority()
32 if err := w.Bind(s, NextSessionWriteGeneration()); err != nil {
33 t.Fatal(err)
34 }
35 s.BindWriteAuthority(old)
36 s.Add(provider.Message{Role: provider.RoleAssistant, Content: "stale"})
37 if err := s.SaveSnapshot(path); err == nil {
38 t.Fatal("stale generation save succeeded")
39 }
40 }
41
42 func TestRepeatedWriterSavesDoNotCreateRecoveryBranches(t *testing.T) {
43 path := filepath.Join(t.TempDir(), "session.jsonl")
44 s := NewSession("sys")
45 s.Add(provider.Message{Role: provider.RoleUser, Content: "hello"})
46 bindSessionWriter(t, s, path)
47 for i := range 8 {
48 s.Add(provider.Message{Role: provider.RoleAssistant, Content: "x"})
49 if err := s.SaveSnapshot(path); err != nil {
50 t.Fatalf("save %d: %v", i, err)
51 }
52 }
53 if got := recoveryJSONL(filepath.Dir(path)); len(got) != 0 {
54 t.Fatalf("autosave created recovery files: %v", got)
55 }
56 }
57
57 lines GO