package main import ( "net/http" "net/http/httptest" "strings" "testing" "git.cin.su/m/Assistant/contracts/capability" ) func TestFleetReadinessSelectsBestAvailablePrimaryTierBeforeLifeboat(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusOK) })) defer server.Close() handler := fleetReadinessHandler(server.Client(), capability.FleetTierHeavy, []fleetEndpoint{ {ProviderID: "cpu", ModelID: "cpu-model", Tier: capability.FleetTierFast, URL: server.URL}, {ProviderID: "medium", ModelID: "medium-model", Tier: capability.FleetTierMedium}, {ProviderID: "heavy", ModelID: "heavy-model", Tier: capability.FleetTierHeavy}, {ProviderID: "lifeboat", ModelID: "lifeboat-model", Tier: capability.FleetTierLifeboat, URL: server.URL}, }) recorder := httptest.NewRecorder() request := httptest.NewRequest(http.MethodGet, "/v1/fleet/readiness", nil) handler.ServeHTTP(recorder, request) if recorder.Code != http.StatusOK || !strings.Contains(recorder.Body.String(), `"selected_tier":"FAST"`) || !strings.Contains(recorder.Body.String(), `"tier":"MEDIUM"`) { t.Fatalf("status=%d body=%s", recorder.Code, recorder.Body.String()) } } func TestFleetReadinessSendsConfiguredProviderHeaders(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Header.Get("Authorization") != "Bearer fleet-key" { t.Fatalf("authorization=%q", r.Header.Get("Authorization")) } w.WriteHeader(http.StatusOK) })) defer server.Close() handler := fleetReadinessHandler(server.Client(), capability.FleetTierFast, []fleetEndpoint{{ ProviderID: "cpu", ModelID: "cpu-model", Tier: capability.FleetTierFast, URL: server.URL, Headers: map[string]string{"Authorization": "Bearer fleet-key"}, }}) recorder := httptest.NewRecorder() handler.ServeHTTP(recorder, httptest.NewRequest(http.MethodGet, "/v1/fleet/readiness", nil)) if recorder.Code != http.StatusOK || !strings.Contains(recorder.Body.String(), `"ready":true`) { t.Fatalf("status=%d body=%s", recorder.Code, recorder.Body.String()) } }