Ctrl K
ComunidadGuías…

sdk/pluginhost/quota_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package pluginhost

import (
	"context"
	"testing"

	"github.com/router-for-me/CLIProxyAPI/v8/sdk/pluginapi"
)

type quotaSDKFixture struct{ t *testing.T }

func (p quotaSDKFixture) Identifier() string { return "fixture" }
func (p quotaSDKFixture) DescribeQuota(context.Context, pluginapi.QuotaDescribeRequest) (pluginapi.QuotaDescribeResponse, error) {
	return pluginapi.QuotaDescribeResponse{SupportedProviders: []string{"fixture"}, SupportsReset: true}, nil
}
func (p quotaSDKFixture) FetchQuota(_ context.Context, req pluginapi.QuotaFetchRequest) (pluginapi.QuotaFetchResponse, error) {
	if req.AuthID != "credential" || req.Metadata["fixture"] != "value" {
		p.t.Fatal("SDK dropped credential context")
	}
	return pluginapi.QuotaFetchResponse{Subscription: &pluginapi.QuotaSubscription{Plan: "fixture-plan"}}, nil
}
func (p quotaSDKFixture) ResetQuota(_ context.Context, req pluginapi.QuotaResetRequest) (pluginapi.QuotaResetResponse, error) {
	if req.AuthID != "credential" {
		p.t.Fatal("SDK dropped reset credential")
	}
	return pluginapi.QuotaResetResponse{Success: true}, nil
}

type quotaSelectionSDKFixture struct {
	quotaSDKFixture
	identifier string
	broken     bool
}

func (p quotaSelectionSDKFixture) Identifier() string { return p.identifier }

func (p quotaSelectionSDKFixture) DescribeQuota(context.Context, pluginapi.QuotaDescribeRequest) (pluginapi.QuotaDescribeResponse, error) {
	if p.broken {
		panic("broken quota description")
	}
	return pluginapi.QuotaDescribeResponse{SupportedProviders: []string{"foo"}}, nil
}

func TestQuotaProviderPluginIDsSDK(t *testing.T) {
	for _, healthyIdentifier := range []string{"foo", "healthy-quota"} {
		t.Run(healthyIdentifier, func(t *testing.T) {
			host := New()
			host.inner.RegisterPluginForTest("a-broken", pluginapi.Plugin{Capabilities: pluginapi.Capabilities{
				QuotaProvider: quotaSelectionSDKFixture{identifier: "foo", broken: true},
			}})
			host.inner.RegisterPluginForTest("b-healthy", pluginapi.Plugin{Capabilities: pluginapi.Capabilities{
				QuotaProvider: quotaSelectionSDKFixture{identifier: healthyIdentifier},
			}})
			got := host.QuotaProviderPluginIDs(context.Background())
			if got["foo"] != "b-healthy" {
				t.Fatalf("selected plugin = %q, want b-healthy", got["foo"])
			}
			if _, exists := got["a-broken"]; exists {
				t.Fatal("mapping includes a fused plugin's alias")
			}
			if host.HasQuotaProviderForPlugin("a-broken") {
				t.Fatal("broken plugin must be unavailable through the public API")
			}
			for provider, pluginID := range got {
				if !host.HasQuotaProviderForPlugin(pluginID) {
					t.Fatalf("provider %q references unavailable plugin %q", provider, pluginID)
				}
			}
		})
	}
}

func TestQuotaProviderPluginIDsSDKWithoutHost(t *testing.T) {
	for _, host := range []*Host{nil, {}, New()} {
		for _, ctx := range []context.Context{nil, context.Background()} {
			if got := host.QuotaProviderPluginIDs(ctx); len(got) != 0 {
				t.Fatalf("expected no quota plugins, got %#v", got)
			}
		}
	}
}

func TestQuotaSDKEmbedding(t *testing.T) {
	host := New()
	host.inner.RegisterPluginForTest("fixture-plugin", pluginapi.Plugin{Capabilities: pluginapi.Capabilities{QuotaProvider: quotaSDKFixture{t}}})
	ctx := context.Background()
	if len(host.QuotaProviders(ctx)) != 1 || !host.HasQuotaProviderContext(ctx, "fixture") || !host.HasQuotaProviderForPlugin("fixture-plugin") {
		t.Fatal("missing public quota capabilities")
	}
	for _, byPlugin := range []bool{false, true} {
		req := pluginapi.QuotaFetchRequest{Provider: "fixture", AuthID: "credential", Metadata: map[string]any{"fixture": "value"}}
		var result pluginapi.QuotaFetchResponse
		var handled bool
		var err error
		if byPlugin {
			result, handled, err = host.FetchQuotaByPlugin(ctx, "fixture-plugin", req)
		} else {
			result, handled, err = host.FetchQuota(ctx, req)
		}
		if err != nil || !handled || result.Subscription == nil || result.Subscription.Plan != "fixture-plan" {
			t.Fatalf("fetch: handled=%v err=%v", handled, err)
		}
		reset := pluginapi.QuotaResetRequest{Provider: "fixture", AuthID: "credential"}
		var resetResult pluginapi.QuotaResetResponse
		if byPlugin {
			resetResult, handled, err = host.ResetQuotaByPlugin(ctx, "fixture-plugin", reset)
		} else {
			resetResult, handled, err = host.ResetQuota(ctx, reset)
		}
		if err != nil || !handled || !resetResult.Success {
			t.Fatalf("reset: handled=%v err=%v", handled, err)
		}
	}
}