Files
yunzerwebsiteallinone/go/pkg/holiday/year2027_probe_test.go
T
2026-09-24 15:14:30 +08:00

44 lines
1.3 KiB
Go

package holiday
import (
"testing"
"time"
)
// 验证 2027 年(国务院通知尚未发布,各数据源为空数组)不会再被误判为失败
// 而继续请求被墙的备用源。修复前实测单次约 6 秒,修复后应接近一次 CDN 往返。
func TestFetchYear2027NoWasteRetry(t *testing.T) {
// 清空内存缓存,确保走完整路径
memMu.Lock()
memCache = map[int][]Day{}
memMu.Unlock()
start := time.Now()
list, src, err := FetchYear(2027)
elapsed := time.Since(start)
t.Logf("2027 首次拉取: %v, src=%q, err=%v, 条数=%d", elapsed, src, err, len(list))
if err != nil {
t.Fatalf("2027 不应返回错误(空年份是合法状态): %v", err)
}
if len(list) != 0 {
t.Logf("提示: 2027 已有数据(上游发布了通知),条数=%d", len(list))
}
if elapsed > 3*time.Second {
t.Fatalf("2027 拉取耗时 %v,疑似仍在重试备用源", elapsed)
}
// 第二次必须命中内存缓存,几乎零耗时
start2 := time.Now()
list2, _, err2 := FetchYear(2027)
elapsed2 := time.Since(start2)
t.Logf("2027 二次拉取(走缓存): %v, 条数=%d", elapsed2, len(list2))
if err2 != nil {
t.Fatalf("缓存命中不应报错: %v", err2)
}
if elapsed2 > 50*time.Millisecond {
t.Fatalf("二次拉取应命中内存缓存,实测 %v", elapsed2)
}
}