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) } }