Files
CLIProxyAPI/sdk/access/registry_test.go
Luis Pater fabf06154f feat(access, pluginhost): add support for exclusive frontend auth providers
- Introduced `FrontendAuthProviderExclusive` capability to restrict authentication to a single selected provider.
- Added `SetExclusiveProvider` and `ClearExclusiveProvider` methods for managing exclusive providers in the access registry.
- Updated `pluginhost` to prioritize and enforce exclusive providers based on plugin priority and ID.
- Enhanced RPC capabilities schema to include `FrontendAuthProviderExclusive` field.
- Added example plugin and tests for exclusive frontend auth behavior.
2026-06-09 10:56:58 +08:00

82 lines
2.3 KiB
Go

package access
import (
"context"
"net/http"
"testing"
)
type testProvider struct {
id string
}
func (p testProvider) Identifier() string {
return p.id
}
func (p testProvider) Authenticate(context.Context, *http.Request) (*Result, *AuthError) {
return &Result{Provider: p.id, Principal: p.id}, nil
}
func TestRegisteredProvidersReturnsOnlyExclusiveProvider(t *testing.T) {
UnregisterProvider("test-a")
UnregisterProvider("test-b")
ClearExclusiveProvider()
defer UnregisterProvider("test-a")
defer UnregisterProvider("test-b")
defer ClearExclusiveProvider()
RegisterProvider("test-a", testProvider{id: "test-a"})
RegisterProvider("test-b", testProvider{id: "test-b"})
SetExclusiveProvider("test-b")
providers := RegisteredProviders()
if len(providers) != 1 {
t.Fatalf("RegisteredProviders() len = %d, want 1", len(providers))
}
if providers[0].Identifier() != "test-b" {
t.Fatalf("RegisteredProviders()[0] = %q, want test-b", providers[0].Identifier())
}
}
func TestRegisteredProvidersRestoresAllProvidersAfterExclusiveCleared(t *testing.T) {
UnregisterProvider("test-a")
UnregisterProvider("test-b")
ClearExclusiveProvider()
defer UnregisterProvider("test-a")
defer UnregisterProvider("test-b")
defer ClearExclusiveProvider()
RegisterProvider("test-a", testProvider{id: "test-a"})
RegisterProvider("test-b", testProvider{id: "test-b"})
SetExclusiveProvider("test-b")
ClearExclusiveProvider()
providers := RegisteredProviders()
if len(providers) != 2 {
t.Fatalf("RegisteredProviders() len = %d, want 2", len(providers))
}
if providers[0].Identifier() != "test-a" || providers[1].Identifier() != "test-b" {
t.Fatalf("RegisteredProviders() = [%q, %q], want [test-a, test-b]", providers[0].Identifier(), providers[1].Identifier())
}
}
func TestRegisteredProvidersIgnoresStaleExclusiveProvider(t *testing.T) {
UnregisterProvider("test-a")
UnregisterProvider("missing")
ClearExclusiveProvider()
defer UnregisterProvider("test-a")
defer ClearExclusiveProvider()
RegisterProvider("test-a", testProvider{id: "test-a"})
SetExclusiveProvider("missing")
providers := RegisteredProviders()
if len(providers) != 1 {
t.Fatalf("RegisteredProviders() len = %d, want 1", len(providers))
}
if providers[0].Identifier() != "test-a" {
t.Fatalf("RegisteredProviders()[0] = %q, want test-a", providers[0].Identifier())
}
}