in commands/verify/verify.go [183:248]
func verifyCasesSerially(verify *config.Verify, verifyInfo *verifyInfo) (err error) {
// A case may be skipped in fail-fast mode, so set it in advance.
res := make([]*output.CaseResult, len(verify.Cases))
for i := range res {
res[i] = &output.CaseResult{
Skip: true,
}
}
defer func() {
_, errNum, _ := printer.PrintResult(res)
if errNum > 0 {
err = fmt.Errorf("failed to verify %d case(s)", errNum)
}
}()
for idx := range verify.Cases {
printer.Start()
v := &verify.Cases[idx]
if v.GetExpected() == "" {
res[idx].Skip = false
res[idx].Msg = fmt.Sprintf("failed to verify %v", caseName(v))
res[idx].Err = fmt.Errorf("the expected data file for %v is not specified", caseName(v))
printer.Warning(res[idx].Msg)
printer.Fail(res[idx].Err.Error())
if verifyInfo.failFast {
return
}
continue
}
for current := 0; current <= verifyInfo.retryCount; current++ {
if e := verifySingleCase(v.GetExpected(), v.GetActual(), v.Query); e == nil {
if current == 0 {
res[idx].Msg = fmt.Sprintf("verified %v \n", caseName(v))
} else {
res[idx].Msg = fmt.Sprintf("verified %v, retried %d time(s)\n", caseName(v), current)
}
res[idx].Skip = false
printer.Success(res[idx].Msg)
break
} else if current != verifyInfo.retryCount {
if current == 0 {
printer.UpdateText(fmt.Sprintf("failed to verify %v, will continue retry:", caseName(v)))
} else {
printer.UpdateText(fmt.Sprintf("failed to verify %v, retry [%d/%d]", caseName(v), current, verifyInfo.retryCount))
}
time.Sleep(verifyInfo.interval)
} else {
res[idx].Msg = fmt.Sprintf("failed to verify %v, retried %d time(s):", caseName(v), current)
res[idx].Err = e
res[idx].Skip = false
printer.UpdateText(fmt.Sprintf("failed to verify %v, retry [%d/%d]", caseName(v), current, verifyInfo.retryCount))
printer.Warning(res[idx].Msg)
printer.Fail(res[idx].Err.Error())
if verifyInfo.failFast {
return
}
}
}
}
return nil
}