66 lines
1.6 KiB
Go
66 lines
1.6 KiB
Go
|
|
package strategy
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/stretchr/testify/assert"
|
||
|
|
|
||
|
|
"lijiaoqiao/gateway/internal/adapter"
|
||
|
|
)
|
||
|
|
|
||
|
|
// TestStrategyTemplate_Interface 验证策略模板接口
|
||
|
|
func TestStrategyTemplate_Interface(t *testing.T) {
|
||
|
|
// 所有策略实现必须实现SelectProvider, Name, Type方法
|
||
|
|
|
||
|
|
// 创建策略实现示例
|
||
|
|
costBased := &CostBasedTemplate{
|
||
|
|
name: "CostBased",
|
||
|
|
}
|
||
|
|
|
||
|
|
aware := &CostAwareTemplate{
|
||
|
|
name: "CostAware",
|
||
|
|
}
|
||
|
|
|
||
|
|
// 验证实现了StrategyTemplate接口
|
||
|
|
var _ StrategyTemplate = costBased
|
||
|
|
var _ StrategyTemplate = aware
|
||
|
|
|
||
|
|
// 验证方法
|
||
|
|
assert.Equal(t, "CostBased", costBased.Name())
|
||
|
|
assert.Equal(t, "cost_based", costBased.Type())
|
||
|
|
|
||
|
|
assert.Equal(t, "CostAware", aware.Name())
|
||
|
|
assert.Equal(t, "cost_aware", aware.Type())
|
||
|
|
}
|
||
|
|
|
||
|
|
// TestStrategyTemplate_SelectProvider_Signature 验证SelectProvider方法签名
|
||
|
|
func TestStrategyTemplate_SelectProvider_Signature(t *testing.T) {
|
||
|
|
req := &RoutingRequest{
|
||
|
|
Model: "gpt-4",
|
||
|
|
UserID: "user123",
|
||
|
|
TenantID: "tenant1",
|
||
|
|
MaxCost: 1.0,
|
||
|
|
MaxLatency: 1000,
|
||
|
|
}
|
||
|
|
|
||
|
|
// 验证返回值 - 创建一个有providers的模板
|
||
|
|
template := &CostBasedTemplate{
|
||
|
|
name: "test",
|
||
|
|
maxCostPer1KTokens: 1.0,
|
||
|
|
providers: make(map[string]adapter.ProviderAdapter),
|
||
|
|
}
|
||
|
|
template.providers["test"] = &MockProvider{
|
||
|
|
name: "test",
|
||
|
|
costPer1KTokens: 0.5,
|
||
|
|
available: true,
|
||
|
|
models: []string{"gpt-4"},
|
||
|
|
}
|
||
|
|
|
||
|
|
decision, err := template.SelectProvider(context.Background(), req)
|
||
|
|
|
||
|
|
// 接口实现应该返回决策或错误
|
||
|
|
assert.NotNil(t, decision)
|
||
|
|
assert.Nil(t, err)
|
||
|
|
}
|