diff options
| author | Jay Conrod <jayconrod@google.com> | 2021-02-09 17:32:08 -0500 |
|---|---|---|
| committer | Jay Conrod <jayconrod@google.com> | 2021-02-10 18:33:14 +0000 |
| commit | 25bd2e962e33d15922111464311c4a94ec910773 (patch) | |
| tree | 9585dd8ea2f58078275239839129fccc6f0d697a /src/testing/testing.go | |
| parent | 1b5cf71ccf0dc95f121830cfdad8280c4f6c1f28 (diff) | |
| download | go-25bd2e962e33d15922111464311c4a94ec910773.tar.xz | |
[dev.fuzz] testing: move inFuzzFn checks from common to F
inFuzzFn is set when the fuzz function is called. While it's set,
F methods that have side effects like Skip and Fail may not be called.
Previously, (CL 259657) inFuzzFn was in common, and we checked it in
the common implementation of those methods. This causes problems in
CL 290693 for recursive methods like common.Fail. If T.Fail is
called by the fuzz function, it calls common.Fail on the parent F's
common. That should not panic.
Change-Id: I841b12f77d9c77f5021370d03313e71b4ef50102
Reviewed-on: https://go-review.googlesource.com/c/go/+/290811
Trust: Jay Conrod <jayconrod@google.com>
Trust: Katie Hockman <katie@golang.org>
Reviewed-by: Katie Hockman <katie@golang.org>
Diffstat (limited to 'src/testing/testing.go')
| -rw-r--r-- | src/testing/testing.go | 37 |
1 files changed, 0 insertions, 37 deletions
diff --git a/src/testing/testing.go b/src/testing/testing.go index 72529956c3..2e38898c98 100644 --- a/src/testing/testing.go +++ b/src/testing/testing.go @@ -399,7 +399,6 @@ type common struct { chatty *chattyPrinter // A copy of chattyPrinter, if the chatty flag is set. bench bool // Whether the current test is a benchmark. - inFuzzFn bool // Whether the test is executing a Fuzz function finished bool // Test function has completed. hasSub int32 // Written atomically. raceErrors int // Number of races detected during test. @@ -690,9 +689,6 @@ func (c *common) setRan() { // Fail marks the function as having failed but continues execution. func (c *common) Fail() { - if c.inFuzzFn { - panic("testing: f.Fail was called inside the f.Fuzz function") - } if c.parent != nil { c.parent.Fail() } @@ -722,9 +718,6 @@ func (c *common) Failed() bool { // created during the test. Calling FailNow does not stop // those other goroutines. func (c *common) FailNow() { - if c.inFuzzFn { - panic("testing: f.FailNow was called inside the f.Fuzz function") - } c.Fail() // Calling runtime.Goexit will exit the goroutine, which @@ -802,54 +795,36 @@ func (c *common) Logf(format string, args ...interface{}) { c.log(fmt.Sprintf(fo // Error is equivalent to Log followed by Fail. func (c *common) Error(args ...interface{}) { - if c.inFuzzFn { - panic("testing: f.Error was called inside the f.Fuzz function") - } c.log(fmt.Sprintln(args...)) c.Fail() } // Errorf is equivalent to Logf followed by Fail. func (c *common) Errorf(format string, args ...interface{}) { - if c.inFuzzFn { - panic("testing: f.Errorf was called inside the f.Fuzz function") - } c.log(fmt.Sprintf(format, args...)) c.Fail() } // Fatal is equivalent to Log followed by FailNow. func (c *common) Fatal(args ...interface{}) { - if c.inFuzzFn { - panic("testing: f.Fatal was called inside the f.Fuzz function") - } c.log(fmt.Sprintln(args...)) c.FailNow() } // Fatalf is equivalent to Logf followed by FailNow. func (c *common) Fatalf(format string, args ...interface{}) { - if c.inFuzzFn { - panic("testing: f.Fatalf was called inside the f.Fuzz function") - } c.log(fmt.Sprintf(format, args...)) c.FailNow() } // Skip is equivalent to Log followed by SkipNow. func (c *common) Skip(args ...interface{}) { - if c.inFuzzFn { - panic("testing: f.Skip was called inside the f.Fuzz function") - } c.log(fmt.Sprintln(args...)) c.SkipNow() } // Skipf is equivalent to Logf followed by SkipNow. func (c *common) Skipf(format string, args ...interface{}) { - if c.inFuzzFn { - panic("testing: f.Skipf was called inside the f.Fuzz function") - } c.log(fmt.Sprintf(format, args...)) c.SkipNow() } @@ -863,9 +838,6 @@ func (c *common) Skipf(format string, args ...interface{}) { // other goroutines created during the test. Calling SkipNow does not stop // those other goroutines. func (c *common) SkipNow() { - if c.inFuzzFn { - panic("testing: f.SkipNow was called inside the f.Fuzz function") - } c.skip() c.finished = true runtime.Goexit() @@ -888,9 +860,6 @@ func (c *common) Skipped() bool { // When printing file and line information, that function will be skipped. // Helper may be called simultaneously from multiple goroutines. func (c *common) Helper() { - if c.inFuzzFn { - panic("testing: f.Helper was called inside the f.Fuzz function") - } c.mu.Lock() defer c.mu.Unlock() if c.helperPCs == nil { @@ -912,9 +881,6 @@ func (c *common) Helper() { // subtests complete. Cleanup functions will be called in last added, // first called order. func (c *common) Cleanup(f func()) { - if c.inFuzzFn { - panic("testing: f.Cleanup was called inside the f.Fuzz function") - } var pc [maxStackLen]uintptr // Skip two extra frames to account for this function and runtime.Callers itself. n := runtime.Callers(2, pc[:]) @@ -953,9 +919,6 @@ var tempDirReplacer struct { // Each subsequent call to t.TempDir returns a unique directory; // if the directory creation fails, TempDir terminates the test by calling Fatal. func (c *common) TempDir() string { - if c.inFuzzFn { - panic("testing: f.TempDir was called inside the f.Fuzz function") - } // Use a single parent directory for all the temporary directories // created by a test, each numbered sequentially. c.tempDirMu.Lock() |
