package main import ( "bytes" "context" "encoding/json" "net/http" "net/http/httptest" "strings" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func okServer(t *testing.T) *httptest.Server { t.Helper() return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) })) } func TestRunTier_Full_Human(t *testing.T) { anthropic := okServer(t) defer anthropic.Close() litellm := okServer(t) defer litellm.Close() t.Setenv("ANTHROPIC_PROBE_URL", anthropic.URL) t.Setenv("LITELLM_BASE_URL", litellm.URL) var out, errBuf bytes.Buffer err := runTier(context.Background(), []string{}, strings.NewReader(""), &out, &errBuf) require.NoError(t, err) assert.Contains(t, out.String(), "tier 1") assert.Contains(t, out.String(), "full-online") assert.Contains(t, out.String(), "managed_agents=true") } func TestRunTier_LANOnly_JSON(t *testing.T) { litellm := okServer(t) defer litellm.Close() t.Setenv("ANTHROPIC_PROBE_URL", "http://127.0.0.1:1") // unreachable t.Setenv("LITELLM_BASE_URL", litellm.URL) var out, errBuf bytes.Buffer err := runTier(context.Background(), []string{"--json"}, strings.NewReader(""), &out, &errBuf) require.NoError(t, err) var got struct { Tier int `json:"tier"` Label string `json:"label"` ManagedAgents bool `json:"managed_agents"` } require.NoError(t, json.Unmarshal(out.Bytes(), &got)) assert.Equal(t, 2, got.Tier) assert.Equal(t, "lan-only", got.Label) assert.False(t, got.ManagedAgents) } func TestRunTier_Airplane_NoLiteLLMBaseURL(t *testing.T) { t.Setenv("ANTHROPIC_PROBE_URL", "http://127.0.0.1:1") t.Setenv("LITELLM_BASE_URL", "") var out, errBuf bytes.Buffer err := runTier(context.Background(), []string{}, strings.NewReader(""), &out, &errBuf) require.NoError(t, err) assert.Contains(t, out.String(), "tier 3") assert.Contains(t, out.String(), "airplane") } func TestRunTier_UnknownFlag_ReturnsError(t *testing.T) { var out, errBuf bytes.Buffer err := runTier(context.Background(), []string{"--bogus"}, strings.NewReader(""), &out, &errBuf) assert.Error(t, err) }