Adds the tier subcommand to the hyperguild CLI. Reuses internal/tier.Detect verbatim, sources probe URLs from ANTHROPIC_PROBE_URL (default https://api.anthropic.com) and LITELLM_BASE_URL (no default — empty triggers airplane). Human-readable output by default; --json emits the same Info struct as the supervisor's tier MCP returns. Tests cover all three tier states via httptest fakes.
78 lines
2.1 KiB
Go
78 lines
2.1 KiB
Go
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)
|
|
}
|