Skip to content
Snippets Groups Projects
Unverified Commit 1766f85b authored by sudoforge's avatar sudoforge Committed by GitHub
Browse files

test: implement support for Failed() and FailedNow() (#1399)

This change adds support to //internal/test for Failed() and
FailedNow(), and expands the support for setting and detecting the
failed status on //internal/test%recorder.

Change-Id: I04e7a978cbf0ead8d28722c0a3a0fc34136e72e1
parent f6e7fb52
Branches
Tags
No related merge requests found
......@@ -5,24 +5,46 @@ import (
"testing"
)
const (
RecorderFailNow int = iota
)
type recorder struct {
testing.TB
fail func(string)
fatal func(string)
failed bool
}
func (r *recorder) Error(args ...any) {
r.failed = true
r.fail(fmt.Sprint(args...))
}
func (r *recorder) Errorf(format string, args ...any) {
r.failed = true
r.fail(fmt.Sprintf(format, args...))
}
func (r *recorder) Fatalf(format string, args ...any) {
r.fatal(fmt.Sprintf(format, args...))
func (r *recorder) Fail() {
r.failed = true
}
func (r *recorder) FailNow() {
r.failed = true
panic(RecorderFailNow)
}
func (r *recorder) Failed() bool {
return r.failed
}
func (r *recorder) Fatal(args ...any) {
r.failed = true
r.fatal(fmt.Sprint(args...))
}
func (r *recorder) Error(args ...any) {
r.fail(fmt.Sprint(args...))
func (r *recorder) Fatalf(format string, args ...any) {
r.failed = true
r.fatal(fmt.Sprintf(format, args...))
}
......@@ -38,15 +38,26 @@ func (f *flaky) Run(fn func(t testing.TB)) {
var last error
for attempt := 1; attempt <= f.o.MaxAttempts; attempt++ {
var failed bool
f.t.Logf("attempt %d of %d", attempt, f.o.MaxAttempts)
fn(&recorder{
r := &recorder{
TB: f.t,
fail: func(e string) { failed = true; last = errors.New(e) },
fatal: func(e string) { failed = true; last = errors.New(e) },
})
fail: func(s string) { last = errors.New(s) },
fatal: func(s string) { last = errors.New(s) },
}
func() {
defer func() {
if v := recover(); v != nil {
if code, ok := v.(int); ok && code != RecorderFailNow {
panic(v)
}
}
}()
fn(r)
}()
if !failed {
if !r.Failed() {
return
}
......@@ -56,7 +67,7 @@ func (f *flaky) Run(fn func(t testing.TB)) {
}
}
f.t.Fatalf("[%s] test failed after %d attempts: %s", f.t.Name(), f.o.MaxAttempts, last)
f.t.Fatalf("[%s] test failed after %d attempts: %v", f.t.Name(), f.o.MaxAttempts, last)
}
func applyJitter(d time.Duration, jitter float64) time.Duration {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment