Files
lijiaoqiao/gateway/internal/router/strategy/cost_aware_test.go
Your Name 89104bd0db feat(P1/P2): 完成TDD开发及P1/P2设计文档
## 设计文档
- 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规范
2026-04-02 23:35:53 +08:00

109 lines
2.9 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)
}