Files
model-gateway/service/error_memory_service_test.go
T

36 lines
717 B
Go

package service
import (
"sync"
"testing"
"time"
)
// analyzeOnce 应合并并发同键分析请求,只执行一次 fn
func TestAnalyzeOnceDedup(t *testing.T) {
var mu sync.Mutex
calls := 0
fn := func() (bool, string) {
mu.Lock()
calls++
mu.Unlock()
// 短暂阻塞确保所有并发调用在 singleflight 窗口内到达 Do,仅首次执行 fn
time.Sleep(50 * time.Millisecond)
return true, "dedup"
}
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
defer wg.Done()
if retry, _ := analyzeOnce("k", fn); !retry {
t.Errorf("期望 retryable=true")
}
}()
}
wg.Wait()
if calls != 1 {
t.Fatalf("singleflight应只执行一次fn, got %d", calls)
}
}