## 设计文档 - multi_role_permission_design: 多角色权限设计 (CONDITIONAL GO) - audit_log_enhancement_design: 审计日志增强 (CONDITIONAL GO) - routing_strategy_template_design: 路由策略模板 (CONDITIONAL GO) - sso_saml_technical_research: SSO/SAML调研 (CONDITIONAL GO) - compliance_capability_package_design: 合规能力包设计 (CONDITIONAL GO) ## TDD开发成果 - IAM模块: supply-api/internal/iam/ (111个测试) - 审计日志模块: supply-api/internal/audit/ (40+测试) - 路由策略模块: gateway/internal/router/ (33+测试) - 合规能力包: gateway/internal/compliance/ + scripts/ci/compliance/ ## 规范文档 - parallel_agent_output_quality_standards: 并行Agent产出质量规范 - project_experience_summary: 项目经验总结 (v2) - 2026-04-02-p1-p2-tdd-execution-plan: TDD执行计划 ## 评审报告 - 5个CONDITIONAL GO设计文档评审报告 - fix_verification_report: 修复验证报告 - full_verification_report: 全面质量验证报告 - tdd_module_quality_verification: TDD模块质量验证 - tdd_execution_summary: TDD执行总结 依据: Superpowers执行框架 + TDD规范
109 lines
2.9 KiB
Go
109 lines
2.9 KiB
Go
package strategy
|
||
|
||
import (
|
||
"context"
|
||
"testing"
|
||
|
||
"github.com/stretchr/testify/assert"
|
||
)
|
||
|
||
// TestCostAwareStrategy_Balance 测试成本感知策略的平衡选择
|
||
func TestCostAwareStrategy_Balance(t *testing.T) {
|
||
template := NewCostAwareTemplate("CostAware", CostAwareParams{
|
||
MaxCostPer1KTokens: 1.0,
|
||
MaxLatencyMs: 500,
|
||
MinQualityScore: 0.7,
|
||
})
|
||
|
||
// 注册多个providers
|
||
// ProviderA: 低成本, 低质量
|
||
template.providers["ProviderA"] = &MockProvider{
|
||
name: "ProviderA",
|
||
costPer1KTokens: 0.2,
|
||
available: true,
|
||
models: []string{"gpt-4"},
|
||
qualityScore: 0.6, // 质量不达标
|
||
latencyMs: 100,
|
||
}
|
||
|
||
// ProviderB: 中成本, 高质量, 低延迟
|
||
template.providers["ProviderB"] = &MockProvider{
|
||
name: "ProviderB",
|
||
costPer1KTokens: 0.5,
|
||
available: true,
|
||
models: []string{"gpt-4"},
|
||
qualityScore: 0.9,
|
||
latencyMs: 150,
|
||
}
|
||
|
||
// ProviderC: 高成本, 高质量, 高延迟
|
||
template.providers["ProviderC"] = &MockProvider{
|
||
name: "ProviderC",
|
||
costPer1KTokens: 0.9,
|
||
available: true,
|
||
models: []string{"gpt-4"},
|
||
qualityScore: 0.95,
|
||
latencyMs: 400,
|
||
}
|
||
|
||
req := &RoutingRequest{
|
||
Model: "gpt-4",
|
||
UserID: "user123",
|
||
MaxCost: 1.0,
|
||
MaxLatency: 500,
|
||
MinQuality: 0.7,
|
||
}
|
||
|
||
decision, err := template.SelectProvider(context.Background(), req)
|
||
|
||
// 验证选择逻辑
|
||
assert.NoError(t, err)
|
||
assert.NotNil(t, decision)
|
||
|
||
// ProviderA因质量不达标应被排除
|
||
// ProviderB应在成本/质量/延迟权衡中胜出
|
||
assert.Equal(t, "ProviderB", decision.Provider, "Should select balanced provider")
|
||
assert.GreaterOrEqual(t, decision.QualityScore, 0.7, "Quality should meet minimum")
|
||
assert.LessOrEqual(t, decision.CostPer1KTokens, 1.0, "Cost should be within budget")
|
||
assert.LessOrEqual(t, decision.EstimatedLatency, int64(500), "Latency should be within limit")
|
||
}
|
||
|
||
// TestCostAwareStrategy_QualityThreshold 测试质量阈值过滤
|
||
func TestCostAwareStrategy_QualityThreshold(t *testing.T) {
|
||
template := NewCostAwareTemplate("CostAware", CostAwareParams{
|
||
MaxCostPer1KTokens: 1.0,
|
||
MaxLatencyMs: 1000,
|
||
MinQualityScore: 0.9, // 高质量要求
|
||
})
|
||
|
||
// 所有provider质量都不达标
|
||
template.providers["ProviderA"] = &MockProvider{
|
||
name: "ProviderA",
|
||
costPer1KTokens: 0.3,
|
||
available: true,
|
||
models: []string{"gpt-4"},
|
||
qualityScore: 0.7,
|
||
latencyMs: 100,
|
||
}
|
||
template.providers["ProviderB"] = &MockProvider{
|
||
name: "ProviderB",
|
||
costPer1KTokens: 0.4,
|
||
available: true,
|
||
models: []string{"gpt-4"},
|
||
qualityScore: 0.8,
|
||
latencyMs: 150,
|
||
}
|
||
|
||
req := &RoutingRequest{
|
||
Model: "gpt-4",
|
||
UserID: "user123",
|
||
MinQuality: 0.9,
|
||
}
|
||
|
||
decision, err := template.SelectProvider(context.Background(), req)
|
||
|
||
// 应该返回错误,因为没有满足质量要求的provider
|
||
assert.Error(t, err)
|
||
assert.Nil(t, decision)
|
||
}
|