statecache_test.go
1 package agent 2 3 import ( 4 "encoding/json" 5 "testing" 6 ) 7 8 func TestResolveCallStateTraits(t *testing.T) { 9 t.Run("browser read is cacheable", func(t *testing.T) { 10 traits := resolveCallStateTraits("browser_snapshot", `{}`) 11 if !traits.Cacheable { 12 t.Fatal("expected browser_snapshot to be cacheable") 13 } 14 if len(traits.Reads) != 1 || traits.Reads[0].Domain != StateDomainBrowser { 15 t.Fatalf("expected browser read traits, got %+v", traits) 16 } 17 }) 18 19 t.Run("file write tracks filesystem scope", func(t *testing.T) { 20 traits := resolveCallStateTraits("file_write", `{"path":"/tmp/example.txt","content":"x"}`) 21 if len(traits.Writes) != 1 { 22 t.Fatalf("expected one filesystem write ref, got %+v", traits) 23 } 24 if traits.Writes[0].Domain != StateDomainFilesystem || traits.Writes[0].Scope != "/tmp/example.txt" { 25 t.Fatalf("unexpected file write traits: %+v", traits) 26 } 27 }) 28 29 t.Run("bash is unknown write", func(t *testing.T) { 30 traits := resolveCallStateTraits("bash", `{"command":"pwd"}`) 31 if !traits.UnknownWrite { 32 t.Fatal("expected bash to be treated as an unknown write") 33 } 34 if len(traits.Writes) != 1 || traits.Writes[0].Domain != StateDomainProcess { 35 t.Fatalf("unexpected bash traits: %+v", traits) 36 } 37 }) 38 } 39 40 func TestBuildStateAwareCacheKeyChangesAfterVersionBump(t *testing.T) { 41 tracker := newStateVersionTracker() 42 traits := resolveCallStateTraits("file_read", `{"path":"/tmp/example.txt"}`) 43 44 before := buildStateAwareCacheKey("file_read", json.RawMessage(`{"path":"/tmp/example.txt"}`), traits, tracker) 45 if before == "" { 46 t.Fatal("expected initial cache key") 47 } 48 49 tracker.bump([]StateRef{{Domain: StateDomainFilesystem, Scope: "/tmp/example.txt"}}) 50 after := buildStateAwareCacheKey("file_read", json.RawMessage(`{"path":"/tmp/example.txt"}`), traits, tracker) 51 if after == "" { 52 t.Fatal("expected post-write cache key") 53 } 54 if before == after { 55 t.Fatalf("expected cache key to change after version bump, got %q", before) 56 } 57 }