53 lines
2.2 KiB
Go
53 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"git.cin.su/m/Assistant/adapters/models"
|
|
"git.cin.su/m/Assistant/contracts/capability"
|
|
"git.cin.su/m/Assistant/contracts/cognitive"
|
|
"git.cin.su/m/Assistant/contracts/identity"
|
|
)
|
|
|
|
type discoveryTestProvider struct{}
|
|
|
|
func (discoveryTestProvider) Probe(context.Context) models.ProviderProbe {
|
|
return models.ProviderProbe{Health: capability.HealthAvailable}
|
|
}
|
|
func (discoveryTestProvider) Discover(context.Context) ([]models.DiscoveredModel, models.ProviderProbe) {
|
|
return []models.DiscoveredModel{{ProviderModelID: "local-model", Fingerprint: "fingerprint-1", Capabilities: []capability.ModelCapability{capability.CapabilityAdvisory}}}, models.ProviderProbe{Health: capability.HealthAvailable}
|
|
}
|
|
func (discoveryTestProvider) Advise(context.Context, cognitive.AdvisoryRequest) (cognitive.AdvisoryResponse, error) {
|
|
return cognitive.AdvisoryResponse{}, nil
|
|
}
|
|
|
|
func TestDiscoveryStatusIsReadOnlyAndDoesNotExposeCredentialMetadata(t *testing.T) {
|
|
service := discoveryService{
|
|
providers: map[string]providerRegistration{"cpu": {ProviderInstanceID: "provider-1", Kind: "openai-compatible-chat-v1", CredentialRef: "credential://must-not-be-returned", Discovery: discoveryTestProvider{}}},
|
|
owner: identity.PrincipalID("owner-1"),
|
|
now: func() time.Time { return time.UnixMilli(1234) },
|
|
}
|
|
response := httptest.NewRecorder()
|
|
service.handler(response, httptest.NewRequest(http.MethodGet, "/v1/provider-discovery/status", nil))
|
|
if response.Code != http.StatusOK {
|
|
t.Fatalf("status=%d", response.Code)
|
|
}
|
|
body := response.Body.String()
|
|
var result []discoveryStatus
|
|
if err := json.NewDecoder(strings.NewReader(body)).Decode(&result); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(result) != 1 || result[0].Provider != "cpu" || result[0].Health != capability.HealthAvailable || len(result[0].Models) != 1 || result[0].ObservedAtUnixMillis != 1234 {
|
|
t.Fatalf("unexpected discovery status: %+v", result)
|
|
}
|
|
if strings.Contains(body, "must-not-be-returned") || strings.Contains(body, "credential://") {
|
|
t.Fatalf("credential metadata leaked in discovery status: %s", body)
|
|
}
|
|
}
|