Add projects
This commit is contained in:
parent
2d3a9ad623
commit
8b607dd700
1802 changed files with 503346 additions and 2 deletions
164
backend/sdk/cliproxy/service_plugin_refresh_executor_test.go
Normal file
164
backend/sdk/cliproxy/service_plugin_refresh_executor_test.go
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
package cliproxy
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/router-for-me/CLIProxyAPI/v7/internal/pluginhost"
|
||||
runtimeexecutor "github.com/router-for-me/CLIProxyAPI/v7/internal/runtime/executor"
|
||||
coreauth "github.com/router-for-me/CLIProxyAPI/v7/sdk/cliproxy/auth"
|
||||
"github.com/router-for-me/CLIProxyAPI/v7/sdk/config"
|
||||
)
|
||||
|
||||
func TestRegisterExecutorForAuth_PluginAuthProviderWrapsOpenAICompatRefresh(t *testing.T) {
|
||||
oldHasAuthProvider := pluginHostHasAuthProvider
|
||||
pluginHostHasAuthProvider = func(host *pluginhost.Host, provider string) bool {
|
||||
return host != nil && provider == "plugin-provider"
|
||||
}
|
||||
t.Cleanup(func() {
|
||||
pluginHostHasAuthProvider = oldHasAuthProvider
|
||||
})
|
||||
|
||||
service := &Service{
|
||||
cfg: &config.Config{},
|
||||
coreManager: coreauth.NewManager(nil, nil, nil),
|
||||
pluginHost: pluginhost.New(),
|
||||
}
|
||||
|
||||
auth := &coreauth.Auth{
|
||||
ID: "plugin-auth-1",
|
||||
Provider: "plugin-provider",
|
||||
Attributes: map[string]string{
|
||||
"base_url": "https://compat.example.com/v1",
|
||||
"api_key": "expired-token",
|
||||
},
|
||||
Metadata: map[string]any{
|
||||
"access_token": "expired-token",
|
||||
"refresh_token": "refresh-1",
|
||||
},
|
||||
}
|
||||
|
||||
service.registerExecutorForAuth(auth, true)
|
||||
|
||||
resolved, ok := service.coreManager.Executor("plugin-provider")
|
||||
if !ok || resolved == nil {
|
||||
t.Fatal("expected executor for plugin-provider")
|
||||
}
|
||||
if !pluginhost.IsPluginRefreshCompatExecutor(resolved) {
|
||||
t.Fatalf("executor type = %T, want plugin refresh compat wrapper", resolved)
|
||||
}
|
||||
inner, okInner := pluginhost.UnwrapPluginRefreshCompatExecutor(resolved)
|
||||
if !okInner {
|
||||
t.Fatal("expected unwrap of plugin refresh compat executor")
|
||||
}
|
||||
if _, okOpenAICompat := inner.(*runtimeexecutor.OpenAICompatExecutor); !okOpenAICompat {
|
||||
t.Fatalf("inner executor type = %T, want *executor.OpenAICompatExecutor", inner)
|
||||
}
|
||||
|
||||
// Upgrading from bare OpenAICompat without forceReplace should still wrap.
|
||||
service.coreManager.RegisterExecutor(runtimeexecutor.NewOpenAICompatExecutor("plugin-provider", service.cfg))
|
||||
service.registerExecutorForAuth(auth, false)
|
||||
resolved, ok = service.coreManager.Executor("plugin-provider")
|
||||
if !ok || !pluginhost.IsPluginRefreshCompatExecutor(resolved) {
|
||||
t.Fatalf("upgrade path executor type = %T, want plugin refresh compat wrapper", resolved)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRegisterExecutorForAuth_OpenAICompatWithoutPluginAuthProviderStaysBare(t *testing.T) {
|
||||
service := &Service{
|
||||
cfg: &config.Config{},
|
||||
coreManager: coreauth.NewManager(nil, nil, nil),
|
||||
pluginHost: pluginhost.New(),
|
||||
}
|
||||
auth := &coreauth.Auth{
|
||||
ID: "compat-auth-1",
|
||||
Provider: "custom-compat",
|
||||
Attributes: map[string]string{
|
||||
"base_url": "https://compat.example.com/v1",
|
||||
"api_key": "sk-test",
|
||||
},
|
||||
}
|
||||
|
||||
service.registerExecutorForAuth(auth, true)
|
||||
|
||||
resolved, ok := service.coreManager.Executor("custom-compat")
|
||||
if !ok || resolved == nil {
|
||||
t.Fatal("expected executor for custom-compat")
|
||||
}
|
||||
if pluginhost.IsPluginRefreshCompatExecutor(resolved) {
|
||||
t.Fatal("did not expect plugin refresh wrapper without AuthProvider")
|
||||
}
|
||||
if _, okOpenAICompat := resolved.(*runtimeexecutor.OpenAICompatExecutor); !okOpenAICompat {
|
||||
t.Fatalf("executor type = %T, want *executor.OpenAICompatExecutor", resolved)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRegisterExecutorForAuth_OpenAICompatInfoPathAlsoWrapsPluginRefresh(t *testing.T) {
|
||||
oldHasAuthProvider := pluginHostHasAuthProvider
|
||||
pluginHostHasAuthProvider = func(host *pluginhost.Host, provider string) bool {
|
||||
return host != nil && provider == "plugin-provider"
|
||||
}
|
||||
t.Cleanup(func() {
|
||||
pluginHostHasAuthProvider = oldHasAuthProvider
|
||||
})
|
||||
|
||||
service := &Service{
|
||||
cfg: &config.Config{},
|
||||
coreManager: coreauth.NewManager(nil, nil, nil),
|
||||
pluginHost: pluginhost.New(),
|
||||
}
|
||||
auth := &coreauth.Auth{
|
||||
ID: "plugin-auth-compat",
|
||||
Provider: "plugin-provider",
|
||||
Attributes: map[string]string{
|
||||
"base_url": "https://compat.example.com/v1",
|
||||
"compat_name": "custom",
|
||||
"provider_key": "custom",
|
||||
},
|
||||
Metadata: map[string]any{
|
||||
"access_token": "expired-token",
|
||||
"refresh_token": "refresh-1",
|
||||
},
|
||||
}
|
||||
|
||||
service.registerExecutorForAuth(auth, true)
|
||||
|
||||
resolved, ok := service.coreManager.Executor("openai-compatible-custom")
|
||||
if !ok || resolved == nil {
|
||||
t.Fatal("expected executor for openai-compatible-custom")
|
||||
}
|
||||
if !pluginhost.IsPluginRefreshCompatExecutor(resolved) {
|
||||
t.Fatalf("executor type = %T, want plugin refresh compat wrapper", resolved)
|
||||
}
|
||||
}
|
||||
|
||||
func TestUnregisterOpenAICompatExecutorRemovesPluginRefreshWrapper(t *testing.T) {
|
||||
oldHasAuthProvider := pluginHostHasAuthProvider
|
||||
pluginHostHasAuthProvider = func(host *pluginhost.Host, provider string) bool {
|
||||
return host != nil && provider == "plugin-provider"
|
||||
}
|
||||
t.Cleanup(func() {
|
||||
pluginHostHasAuthProvider = oldHasAuthProvider
|
||||
})
|
||||
|
||||
service := &Service{
|
||||
cfg: &config.Config{},
|
||||
coreManager: coreauth.NewManager(nil, nil, nil),
|
||||
pluginHost: pluginhost.New(),
|
||||
}
|
||||
auth := &coreauth.Auth{
|
||||
ID: "plugin-auth-1",
|
||||
Provider: "plugin-provider",
|
||||
Attributes: map[string]string{
|
||||
"base_url": "https://compat.example.com/v1",
|
||||
},
|
||||
}
|
||||
service.registerExecutorForAuth(auth, true)
|
||||
if _, ok := service.coreManager.Executor("plugin-provider"); !ok {
|
||||
t.Fatal("expected wrapper before unregister")
|
||||
}
|
||||
|
||||
service.unregisterOpenAICompatExecutor("plugin-provider")
|
||||
if _, ok := service.coreManager.Executor("plugin-provider"); ok {
|
||||
t.Fatal("expected plugin-provider executor to be removed")
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue