Typed config struct and env parser for the routing pod. Kept separate from the supervisor Config to avoid forcing routing fields onto the supervisor and vice versa. Uses the existing envOr helper from config.go. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
66 lines
2.3 KiB
Go
66 lines
2.3 KiB
Go
package config_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/mathiasbq/supervisor/internal/config"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestLoadRoutingDefaults(t *testing.T) {
|
|
for _, k := range []string{
|
|
"ROUTING_PORT", "ROUTING_MCP_TOKEN", "LITELLM_BASE_URL", "LITELLM_API_KEY",
|
|
"BRAIN_URL", "HYPERGUILD_LOCAL_MODEL", "HYPERGUILD_CLAUDE_MODEL",
|
|
"HYPERGUILD_ROUTE_LOCAL_FLOOR", "HYPERGUILD_ROUTE_LOCAL_CEIL",
|
|
"HYPERGUILD_PASS_RATE_TTL_SECONDS",
|
|
} {
|
|
t.Setenv(k, "")
|
|
}
|
|
|
|
cfg, err := config.LoadRouting()
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "3210", cfg.Port)
|
|
assert.Equal(t, "", cfg.MCPAuthToken)
|
|
assert.Equal(t, "http://piguard:4000", cfg.LiteLLMBaseURL)
|
|
assert.Equal(t, "http://ingestion.supervisor:3300", cfg.BrainURL)
|
|
assert.Equal(t, "qwen35", cfg.LocalModel)
|
|
assert.Equal(t, "claude-sonnet-4-6", cfg.ClaudeModel)
|
|
assert.InDelta(t, 0.90, cfg.RouteLocalFloor, 1e-9)
|
|
assert.InDelta(t, 0.70, cfg.RouteLocalCeil, 1e-9)
|
|
assert.Equal(t, 60, cfg.PassRateTTLSeconds)
|
|
}
|
|
|
|
func TestLoadRoutingFromEnv(t *testing.T) {
|
|
t.Setenv("ROUTING_PORT", "3250")
|
|
t.Setenv("ROUTING_MCP_TOKEN", "tok-xyz")
|
|
t.Setenv("LITELLM_BASE_URL", "http://localhost:4000")
|
|
t.Setenv("LITELLM_API_KEY", "lk")
|
|
t.Setenv("BRAIN_URL", "http://localhost:3300")
|
|
t.Setenv("HYPERGUILD_LOCAL_MODEL", "qwen2-7b")
|
|
t.Setenv("HYPERGUILD_CLAUDE_MODEL", "claude-opus-4-7")
|
|
t.Setenv("HYPERGUILD_ROUTE_LOCAL_FLOOR", "0.85")
|
|
t.Setenv("HYPERGUILD_ROUTE_LOCAL_CEIL", "0.65")
|
|
t.Setenv("HYPERGUILD_PASS_RATE_TTL_SECONDS", "30")
|
|
|
|
cfg, err := config.LoadRouting()
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "3250", cfg.Port)
|
|
assert.Equal(t, "tok-xyz", cfg.MCPAuthToken)
|
|
assert.Equal(t, "http://localhost:4000", cfg.LiteLLMBaseURL)
|
|
assert.Equal(t, "lk", cfg.LiteLLMAPIKey)
|
|
assert.Equal(t, "http://localhost:3300", cfg.BrainURL)
|
|
assert.Equal(t, "qwen2-7b", cfg.LocalModel)
|
|
assert.Equal(t, "claude-opus-4-7", cfg.ClaudeModel)
|
|
assert.InDelta(t, 0.85, cfg.RouteLocalFloor, 1e-9)
|
|
assert.InDelta(t, 0.65, cfg.RouteLocalCeil, 1e-9)
|
|
assert.Equal(t, 30, cfg.PassRateTTLSeconds)
|
|
}
|
|
|
|
func TestLoadRoutingRejectsBadFloat(t *testing.T) {
|
|
t.Setenv("HYPERGUILD_ROUTE_LOCAL_FLOOR", "not-a-number")
|
|
_, err := config.LoadRouting()
|
|
require.Error(t, err)
|
|
assert.Contains(t, err.Error(), "HYPERGUILD_ROUTE_LOCAL_FLOOR")
|
|
}
|