90 lines
2.1 KiB
Go

package testutil
import (
"time"
"rua.plus/lolly/internal/config"
"rua.plus/lolly/internal/loadbalance"
)
// NewTestProxyConfig 创建测试用的代理配置
//
// 参数:
// - path: 代理路径
// - targetURLs: 后端目标 URL 列表
//
// 返回值:
// - *config.ProxyConfig: 配置好的代理配置
func NewTestProxyConfig(path string, targetURLs ...string) *config.ProxyConfig {
cfg := &config.ProxyConfig{
Path: path,
LoadBalance: "round_robin",
Timeout: config.ProxyTimeout{
Connect: 5 * time.Second,
Read: 30 * time.Second,
Write: 30 * time.Second,
},
}
if len(targetURLs) > 0 {
cfg.Targets = make([]config.ProxyTarget, len(targetURLs))
for i, url := range targetURLs {
cfg.Targets[i] = config.ProxyTarget{URL: url}
}
}
return cfg
}
// NewTestProxyConfigWithCache 创建带缓存的测试代理配置
func NewTestProxyConfigWithCache(path string, maxAge time.Duration, targetURLs ...string) *config.ProxyConfig {
cfg := NewTestProxyConfig(path, targetURLs...)
cfg.Cache = config.ProxyCacheConfig{
Enabled: true,
MaxAge: maxAge,
}
return cfg
}
// NewTestTarget 创建测试用的代理目标
//
// 参数:
// - url: 目标 URL
//
// 返回值:
// - *loadbalance.Target: 测试目标
func NewTestTarget(url string) *loadbalance.Target {
return &loadbalance.Target{URL: url}
}
// NewTestTargets 批量创建测试目标
func NewTestTargets(urls ...string) []*loadbalance.Target {
targets := make([]*loadbalance.Target, len(urls))
for i, url := range urls {
targets[i] = NewTestTarget(url)
}
return targets
}
// NewTestHealthyTarget 创建已标记为健康的测试目标
//
// 参数:
// - url: 目标 URL
//
// 返回值:
// - *loadbalance.Target: 已标记为健康的测试目标
func NewTestHealthyTarget(url string) *loadbalance.Target {
t := NewTestTarget(url)
t.Healthy.Store(true)
return t
}
// NewTestHealthyTargets 批量创建健康测试目标
func NewTestHealthyTargets(urls ...string) []*loadbalance.Target {
targets := make([]*loadbalance.Target, len(urls))
for i, url := range urls {
targets[i] = NewTestHealthyTarget(url)
}
return targets
}