Files
clawgo/pkg/config/config_test.go
2026-02-20 23:06:38 +08:00

88 lines
2.1 KiB
Go

package config
import (
"os"
"path/filepath"
"strings"
"testing"
)
func TestLoadConfigRejectsUnknownField(t *testing.T) {
t.Parallel()
dir := t.TempDir()
cfgPath := filepath.Join(dir, "config.json")
content := `{
"agents": {
"defaults": {
"runtime_control": {
"intent_max_input_chars": 1200,
"unknown_field": 1
}
}
}
}`
if err := os.WriteFile(cfgPath, []byte(content), 0o644); err != nil {
t.Fatalf("write config: %v", err)
}
_, err := LoadConfig(cfgPath)
if err == nil {
t.Fatalf("expected unknown field error")
}
if !strings.Contains(strings.ToLower(err.Error()), "unknown field") {
t.Fatalf("expected unknown field error, got: %v", err)
}
}
func TestLoadConfigRejectsTrailingJSONContent(t *testing.T) {
t.Parallel()
dir := t.TempDir()
cfgPath := filepath.Join(dir, "config.json")
content := `{"agents":{"defaults":{"runtime_control":{"intent_max_input_chars":1200}}}}{"extra":true}`
if err := os.WriteFile(cfgPath, []byte(content), 0o644); err != nil {
t.Fatalf("write config: %v", err)
}
_, err := LoadConfig(cfgPath)
if err == nil {
t.Fatalf("expected trailing json content error")
}
if !strings.Contains(err.Error(), "trailing JSON content") {
t.Fatalf("expected trailing JSON content error, got: %v", err)
}
}
func TestLoadConfigAllowsKnownRuntimeControlFields(t *testing.T) {
t.Parallel()
dir := t.TempDir()
cfgPath := filepath.Join(dir, "config.json")
content := `{
"agents": {
"defaults": {
"runtime_control": {
"run_state_max": 321,
"tool_parallel_safe_names": ["read_file", "memory_search"],
"tool_max_parallel_calls": 3
}
}
}
}`
if err := os.WriteFile(cfgPath, []byte(content), 0o644); err != nil {
t.Fatalf("write config: %v", err)
}
cfg, err := LoadConfig(cfgPath)
if err != nil {
t.Fatalf("load config: %v", err)
}
if got := cfg.Agents.Defaults.RuntimeControl.RunStateMax; got != 321 {
t.Fatalf("run_state_max mismatch: got %d", got)
}
if got := cfg.Agents.Defaults.RuntimeControl.ToolMaxParallelCalls; got != 3 {
t.Fatalf("tool_max_parallel_calls mismatch: got %d", got)
}
}