in commands/verify/verify.go [102:144]
func concurrentlyVerifySingleCase(
ctx context.Context,
cancel context.CancelFunc,
v *config.VerifyCase,
verifyInfo *verifyInfo,
) (res *output.CaseResult) {
res = &output.CaseResult{}
defer func() {
if res.Err != nil && verifyInfo.failFast {
cancel()
}
}()
if v.GetExpected() == "" {
res.Msg = fmt.Sprintf("failed to verify %v:", caseName(v))
res.Err = fmt.Errorf("the expected data file for %v is not specified", caseName(v))
return res
}
for current := 0; current <= verifyInfo.retryCount; current++ {
select {
case <-ctx.Done():
res.Skip = true
return res
default:
if err := verifySingleCase(v.GetExpected(), v.GetActual(), v.Query); err == nil {
if current == 0 {
res.Msg = fmt.Sprintf("verified %v\n", caseName(v))
} else {
res.Msg = fmt.Sprintf("verified %v, retried %d time(s)\n", caseName(v), current)
}
return res
} else if current != verifyInfo.retryCount {
time.Sleep(verifyInfo.interval)
} else {
res.Msg = fmt.Sprintf("failed to verify %v, retried %d time(s):", caseName(v), current)
res.Err = err
}
}
}
return res
}