Files
wehub-resource-sync a06f331eb8
CI / benchmark (push) Has been skipped
install-script / posix-syntax (push) Successful in 6m1s
CI / build-onnx (push) Failing after 6m43s
init-smoke / dry-run (push) Failing after 15m57s
security / govulncheck (push) Has been cancelled
security / trivy-fs (push) Has been cancelled
CI / test (1.26, ubuntu-latest) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
CI / test (1.26, macos-latest) (push) Has been cancelled
CI / build-windows (push) Has been cancelled
CI / lint (push) Has been cancelled
install-script / powershell-syntax (push) Has been cancelled
install-script / install (macos-14) (push) Has been cancelled
install-script / install (ubuntu-latest) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:33:42 +08:00

115 lines
3.1 KiB
Go

package provider
import (
"context"
"io"
"net/http"
"net/http/httptest"
"testing"
"github.com/zzet/gortex/internal/llm"
)
// TestNew_CustomProviderDispatches proves an unknown provider name
// resolves to a registered custom OpenAI-compatible endpoint, addressed
// at <base_url>/chat/completions with a Bearer key.
func TestNew_CustomProviderDispatches(t *testing.T) {
var gotPath, gotAuth string
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
gotPath = r.URL.Path
gotAuth = r.Header.Get("authorization")
_, _ = io.WriteString(w, `{"choices":[{"message":{"content":"hi from gateway"}}]}`)
}))
defer srv.Close()
t.Setenv("MY_GATEWAY_KEY", "secret")
cfg := llm.Config{
Provider: "mygw",
Custom: map[string]llm.CustomProvider{
"mygw": {BaseURL: srv.URL + "/v1", Model: "some-model", APIKeyEnv: "MY_GATEWAY_KEY"},
},
}
p, err := New(cfg)
if err != nil {
t.Fatal(err)
}
defer p.Close()
if p.Name() != "custom" {
t.Errorf("Name()=%q want custom (frontier prompt tier)", p.Name())
}
resp, err := p.Complete(context.Background(), llm.CompletionRequest{
Messages: []llm.Message{{Role: llm.RoleUser, Content: "hi"}},
})
if err != nil {
t.Fatal(err)
}
if resp.Text != "hi from gateway" {
t.Errorf("text=%q", resp.Text)
}
if gotPath != "/v1/chat/completions" {
t.Errorf("path=%q want /v1/chat/completions", gotPath)
}
if gotAuth != "Bearer secret" {
t.Errorf("authorization=%q want Bearer secret", gotAuth)
}
}
func TestNew_CustomKeylessOmitsAuth(t *testing.T) {
var gotAuth string
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
gotAuth = r.Header.Get("authorization")
_, _ = io.WriteString(w, `{"choices":[{"message":{"content":"ok"}}]}`)
}))
defer srv.Close()
cfg := llm.Config{
Provider: "localgw",
Custom: map[string]llm.CustomProvider{
"localgw": {BaseURL: srv.URL + "/v1", Model: "m"},
},
}
p, err := New(cfg)
if err != nil {
t.Fatal(err)
}
defer p.Close()
if _, err := p.Complete(context.Background(), llm.CompletionRequest{
Messages: []llm.Message{{Role: llm.RoleUser, Content: "hi"}},
}); err != nil {
t.Fatal(err)
}
if gotAuth != "" {
t.Errorf("keyless provider must not send an Authorization header, got %q", gotAuth)
}
}
func TestNew_CustomMissingKeyErrors(t *testing.T) {
t.Setenv("ABSENT_KEY", "")
cfg := llm.Config{
Provider: "gw",
Custom: map[string]llm.CustomProvider{
"gw": {BaseURL: "https://x/v1", Model: "m", APIKeyEnv: "ABSENT_KEY"},
},
}
if _, err := New(cfg); err == nil {
t.Fatal("expected an error when the configured API key env is unset")
}
}
func TestNew_CustomBadSchemeErrors(t *testing.T) {
cfg := llm.Config{
Provider: "gw",
Custom: map[string]llm.CustomProvider{"gw": {BaseURL: "ftp://x/v1", Model: "m"}},
}
if _, err := New(cfg); err == nil {
t.Fatal("expected an error for a non-http base_url")
}
}
func TestNew_UnknownProviderStillErrors(t *testing.T) {
if _, err := New(llm.Config{Provider: "totally-unknown"}); err == nil {
t.Fatal("expected an error for an unknown provider with no custom entry")
}
}