87 lines
2.7 KiB
Go
87 lines
2.7 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func load(t *testing.T, yaml string) (Config, error) {
|
|
t.Helper()
|
|
t.Helper()
|
|
p := filepath.Join(t.TempDir(), "c.yaml")
|
|
os.WriteFile(p, []byte("auth_token: aaaaaaaaaaaaaaaaaaaa\n"+yaml), 0o600)
|
|
return Load(p)
|
|
}
|
|
|
|
func TestPresetDahl(t *testing.T) {
|
|
t.Setenv("DAHL_API_KEY", "dahl_test")
|
|
c, err := load(t, "llm:\n provider: dahl\n")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if c.LLM.BaseURL != "https://inference.dahl.global/v1" || c.LLM.Model != "MiniMaxAI/MiniMax-M2.7" || c.LLM.APIKey != "dahl_test" {
|
|
t.Fatalf("%+v", c.LLM)
|
|
}
|
|
}
|
|
|
|
func TestPresetGonkaRouterViaEnv(t *testing.T) {
|
|
t.Setenv("BYTECLAW_LLM_PROVIDER", "GonkaRouter")
|
|
t.Setenv("GONKAROUTER_API_KEY", "sk-g")
|
|
c, err := load(t, "")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if c.LLM.Provider != "gonkarouter" || c.LLM.BaseURL != "https://api.gonkarouter.io/v1" || c.LLM.Model != "MiniMaxAI/MiniMax-M2.7" || c.LLM.APIKey != "sk-g" {
|
|
t.Fatalf("%+v", c.LLM)
|
|
}
|
|
}
|
|
|
|
func TestPresetExplicitValuesWin(t *testing.T) {
|
|
t.Setenv("GONKAROUTER_API_KEY", "from-env")
|
|
c, err := load(t, "llm:\n provider: gonkarouter\n model: zai-org/GLM-5.3-Flash\n api_key: explicit\n")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if c.LLM.Model != "zai-org/GLM-5.3-Flash" || c.LLM.APIKey != "explicit" || c.LLM.BaseURL != "https://api.gonkarouter.io/v1" {
|
|
t.Fatalf("%+v", c.LLM)
|
|
}
|
|
}
|
|
|
|
func TestPresetDefaultIsOpenAI(t *testing.T) {
|
|
c, err := load(t, "")
|
|
if err != nil || c.LLM.Provider != "openai" || c.LLM.BaseURL != "https://api.openai.com/v1" {
|
|
t.Fatalf("%+v %v", c.LLM, err)
|
|
}
|
|
}
|
|
|
|
func TestPresetUnknownAndCustom(t *testing.T) {
|
|
if _, err := load(t, "llm:\n provider: nope\n"); err == nil {
|
|
t.Fatal("unknown provider must fail")
|
|
}
|
|
if _, err := load(t, "llm:\n provider: custom\n"); err == nil {
|
|
t.Fatal("custom without base_url/model must fail validation")
|
|
}
|
|
c, err := load(t, "llm:\n provider: custom\n base_url: http://x/v1\n model: m\n")
|
|
if err != nil || c.LLM.BaseURL != "http://x/v1" {
|
|
t.Fatalf("%+v %v", c.LLM, err)
|
|
}
|
|
}
|
|
|
|
func TestAllPresetsComplete(t *testing.T) {
|
|
for n, p := range Presets {
|
|
if p.Name != n || p.BaseURL == "" || p.DefaultModel == "" || p.Source == "" {
|
|
t.Errorf("incomplete preset %q: %+v", n, p)
|
|
}
|
|
}
|
|
}
|
|
|
|
// TestMain keeps tests hermetic when the developer shell has BYTECLAW_* or provider keys set.
|
|
func TestMain(m *testing.M) {
|
|
for _, k := range []string{"BYTECLAW_LISTEN", "BYTECLAW_DATA_DIR", "BYTECLAW_WORKSPACE", "BYTECLAW_LLM_PROVIDER",
|
|
"BYTECLAW_LLM_BASE_URL", "BYTECLAW_LLM_API_KEY", "BYTECLAW_LLM_MODEL", "BYTECLAW_ALLOWED_ORIGINS", "BYTECLAW_AUTH_TOKEN",
|
|
"OPENAI_API_KEY", "OPENROUTER_API_KEY", "DAHL_API_KEY", "GONKAROUTER_API_KEY"} {
|
|
os.Unsetenv(k)
|
|
}
|
|
os.Exit(m.Run())
|
|
}
|