50 lines
2.6 KiB
Go
50 lines
2.6 KiB
Go
package upstream
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
// TestResolveUpstreamTimeoutScalesWithCardCount 覆盖批量操作预算:
|
|
// worker 不能再把批量请求压回 2 分钟,否则通道仍在按卡串行办理时会被提前判失败。
|
|
func TestResolveUpstreamTimeoutScalesWithCardCount(t *testing.T) {
|
|
cases := []struct {
|
|
name string
|
|
path string
|
|
itemCount int
|
|
perCard time.Duration
|
|
override time.Duration
|
|
maxTimeout time.Duration
|
|
apnTimeout time.Duration
|
|
want time.Duration
|
|
}{
|
|
{"单卡", "/sim/change/sim-status", 1, 10 * time.Second, 0, defaultUpstreamProxyMaxTimeout, 240 * time.Second, 10 * time.Second},
|
|
{"零卡按单卡处理", "/sim/change/sim-status", 0, 10 * time.Second, 0, defaultUpstreamProxyMaxTimeout, 240 * time.Second, 10 * time.Second},
|
|
{"50卡按单卡预算放大", "/sim/change/sim-status", 50, 10 * time.Second, 0, defaultUpstreamProxyMaxTimeout, 240 * time.Second, 500 * time.Second},
|
|
{"100卡恰好低于上限", "/sim/change/sim-status", 100, 10 * time.Second, 0, defaultUpstreamProxyMaxTimeout, 240 * time.Second, 1000 * time.Second},
|
|
{"超大批量按上限截断", "/sim/query/usage", 1000, 10 * time.Second, 0, defaultUpstreamProxyMaxTimeout, 240 * time.Second, defaultUpstreamProxyMaxTimeout},
|
|
{"单卡预算缺失用默认值", "/sim/query/usage", 2, 0, 0, defaultUpstreamProxyMaxTimeout, 240 * time.Second, 20 * time.Second},
|
|
{"显式覆盖仍按卡数放大", "/sim/query/usage", 3, 10 * time.Second, 2 * time.Second, defaultUpstreamProxyMaxTimeout, 240 * time.Second, 6 * time.Second},
|
|
{"数据开停使用独立预算", "/sim/change/sim-apn", 50, 10 * time.Second, 0, defaultUpstreamProxyMaxTimeout, 240 * time.Second, 240 * time.Second},
|
|
{"数据开停预算缺失回退", "/sim/change/sim-apn", 1, 10 * time.Second, 0, defaultUpstreamProxyMaxTimeout, 0, 240 * time.Second},
|
|
}
|
|
for _, c := range cases {
|
|
t.Run(c.name, func(t *testing.T) {
|
|
got := resolveUpstreamTimeout(c.path, c.itemCount, c.perCard, c.override, c.maxTimeout, c.apnTimeout)
|
|
if got != c.want {
|
|
t.Fatalf("resolveUpstreamTimeout=%s,期望%s", got, c.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// TestUpstreamMaxTimeoutOutlastsProxyBatchTimeout 固化跨服务预算约束:
|
|
// worker 上限必须大于 proxy 的 gateway.batchTimeout(默认 20 分钟),
|
|
// 使超时由更靠近通道的一层先判定,避免 worker 提前放弃而通道仍在办理。
|
|
func TestUpstreamMaxTimeoutOutlastsProxyBatchTimeout(t *testing.T) {
|
|
const proxyBatchTimeout = 20 * time.Minute
|
|
if defaultUpstreamProxyMaxTimeout <= proxyBatchTimeout {
|
|
t.Fatalf("worker 上限%s 必须大于 proxy 批量上限%s", defaultUpstreamProxyMaxTimeout, proxyBatchTimeout)
|
|
}
|
|
}
|