返回 DeepSeek-Reasonix
metadata_read_cache_test.go
根目录 / internal / session / metadata_read_cache_test.go
1 package session
2
3 import (
4 "bytes"
5 "os"
6 "path/filepath"
7 "testing"
8 )
9
10 func TestMetadataReadCacheObservesExternalHeaderReplacementAndCorruption(t *testing.T) {
11 p := NewFilesystemPersistence(t.TempDir())
12 w, err := p.Create(CreateOptions{SessionID: "cached", CWD: t.TempDir(), Origin: SessionOriginNew})
13 if err != nil {
14 t.Fatal(err)
15 }
16 if err := w.Close(t.Context()); err != nil {
17 t.Fatal(err)
18 }
19 first, err := p.Stat(t.Context(), "cached")
20 if err != nil {
21 t.Fatal(err)
22 }
23 if _, err := p.Stat(t.Context(), "cached"); err != nil {
24 t.Fatal(err)
25 }
26 if len(p.metadataReads.entries) != 1 {
27 t.Fatal("metadata read was not cached")
28 }
29 for _, invalid := range []string{"../cached", `..\cached`, "/cached", "cached/../cached", "."} {
30 if _, err := p.Stat(t.Context(), invalid); err == nil {
31 t.Fatalf("metadata lookup admitted path-shaped identity %q", invalid)
32 }
33 }
34 path := filepath.Join(p.Root, "cached", sessionHeaderName)
35 body, err := os.ReadFile(path)
36 if err != nil {
37 t.Fatal(err)
38 }
39 body = bytes.Replace(body, []byte(`"origin":"new"`), []byte(`"origin":"fork"`), 1)
40 if err := os.WriteFile(path, body, 0600); err != nil {
41 t.Fatal(err)
42 }
43 second, err := p.Stat(t.Context(), "cached")
44 if err != nil || first.Origin != SessionOriginNew || second.Origin != SessionOriginFork {
45 t.Fatalf("external header stayed cached: %+v %v", second, err)
46 }
47 if err := os.WriteFile(path, []byte("{"), 0600); err != nil {
48 t.Fatal(err)
49 }
50 if _, err := p.Stat(t.Context(), "cached"); err == nil {
51 t.Fatal("cached metadata hid header corruption")
52 }
53 if err := os.RemoveAll(filepath.Join(p.Root, "cached")); err != nil {
54 t.Fatal(err)
55 }
56 if _, err := p.Stat(t.Context(), "cached"); err == nil {
57 t.Fatal("cached session survived removal")
58 }
59 }
60
60 lines GO