This repository has been archived on 2026-08-16. You can view files and clone it, but cannot push or open issues or pull requests.
ollie-core/pkg/tools/execute/tier_test.go

98 lines
3.3 KiB
Go

package execute
import (
"encoding/json"
"testing"
)
func TestResultTierArgs_CallToolCold(t *testing.T) {
s := &Server{}
args := json.RawMessage(`{"calls":[{"tool":"file_read","args":["/tmp/x"]}]}`)
if got := s.ResultTierArgs("call_tool", args); got != "cold" {
t.Errorf("ResultTierArgs(call_tool, file_read) = %q; want cold", got)
}
}
func TestResultTierArgs_CallToolMultipleCold(t *testing.T) {
s := &Server{}
args := json.RawMessage(`{"calls":[{"tool":"file_read","args":["/a"]},{"tool":"file_grep","args":["pat"]}]}`)
if got := s.ResultTierArgs("call_tool", args); got != "cold" {
t.Errorf("ResultTierArgs(call_tool, file_read+file_grep) = %q; want cold", got)
}
}
func TestResultTierArgs_CallToolMixedHot(t *testing.T) {
s := &Server{}
// file_write is not in defaultColdTools and has no script, so falls back to hot
args := json.RawMessage(`{"calls":[{"tool":"file_read","args":["/a"]},{"tool":"file_write","args":["/b","x"]}]}`)
if got := s.ResultTierArgs("call_tool", args); got != "cold" {
t.Errorf("ResultTierArgs(call_tool, file_read+file_write) = %q; want cold (coldest wins)", got)
}
}
func TestResultTierArgs_CallToolParallel(t *testing.T) {
s := &Server{}
args := json.RawMessage(`{"calls":[{"parallel":[{"tool":"file_grep","args":["x"]},{"tool":"lsp_hover","args":["/f","1","1"]}]}]}`)
if got := s.ResultTierArgs("call_tool", args); got != "cold" {
t.Errorf("ResultTierArgs(call_tool, parallel cold tools) = %q; want cold", got)
}
}
func TestResultTierArgs_PipeCold(t *testing.T) {
s := &Server{}
args := json.RawMessage(`{"stages":[{"tool":"file_grep","args":["TODO"]},{"code":"wc -l"}]}`)
if got := s.ResultTierArgs("pipe", args); got != "cold" {
t.Errorf("ResultTierArgs(pipe, file_grep+code) = %q; want cold", got)
}
}
func TestResultTierArgs_ExecuteCode(t *testing.T) {
s := &Server{}
args := json.RawMessage(`{"steps":[{"code":"date"}]}`)
if got := s.ResultTierArgs("execute_code", args); got != "warm" {
t.Errorf("ResultTierArgs(execute_code) = %q; want warm", got)
}
}
func TestResultTierArgs_BadJSON(t *testing.T) {
s := &Server{}
if got := s.ResultTierArgs("call_tool", json.RawMessage(`{invalid`)); got != "hot" {
t.Errorf("ResultTierArgs(bad json) = %q; want hot", got)
}
}
func TestResultTierArgs_EmptyCalls(t *testing.T) {
s := &Server{}
if got := s.ResultTierArgs("call_tool", json.RawMessage(`{"calls":[]}`)); got != "hot" {
t.Errorf("ResultTierArgs(empty calls) = %q; want hot", got)
}
}
func TestResultTier_DefaultColdTools(t *testing.T) {
s := &Server{}
coldTools := []string{"file_read", "file_grep", "file_glob", "memory_recall",
"web_fetch", "web_search", "lsp_definition", "lsp_references",
"lsp_hover", "lsp_symbols", "lsp_completion", "lsp_diagnostics", "reasoning_think"}
for _, name := range coldTools {
if got := s.ResultTier(name); got != "cold" {
t.Errorf("ResultTier(%q) = %q; want cold", name, got)
}
}
}
func TestColderTier(t *testing.T) {
tests := []struct{ a, b, want string }{
{"hot", "cold", "cold"},
{"cold", "hot", "cold"},
{"warm", "cold", "cold"},
{"hot", "warm", "warm"},
{"hot", "hot", "hot"},
{"cold", "cold", "cold"},
}
for _, tt := range tests {
if got := colderTier(tt.a, tt.b); got != tt.want {
t.Errorf("colderTier(%q, %q) = %q; want %q", tt.a, tt.b, got, tt.want)
}
}
}