]> Cypherpunks repositories - gostls13.git/commit
[dev.fuzz] testing: make F.Fuzz more similar to T.Run
authorJay Conrod <jayconrod@google.com>
Tue, 9 Feb 2021 15:08:48 +0000 (10:08 -0500)
committerJay Conrod <jayconrod@google.com>
Wed, 10 Feb 2021 18:34:24 +0000 (18:34 +0000)
commit7743f60b5a01b5892edda7311484a2c2bc207ea2
tree93fb36ac8bd4c1a7320d71f4f38d142c6c94a263
parent25bd2e962e33d15922111464311c4a94ec910773
[dev.fuzz] testing: make F.Fuzz more similar to T.Run

This change rewrites much of the glue code in testing/fuzz.go to work
more analogously to T.Run. This results in improved behavior:

* If a fuzz target returns without calling F.Skip, F.Fail, or F.Fuzz,
  'go test' will report an error and exit non-zero.
* Functions registered with F.Cleanup are called.
* The user can re-run individual inputs using -run=FuzzTarget/name
  where name is the base name of the seed corpus file. We now print
  the 'go test' command after a crash.

This change doesn't correctly handle T.Parallel calls yet, but it
should be easier to do that in the future.

Highlighted parts of this change:

* Instead of creating one F for all targets, create an F for each
  target. F (actually common) holds the status, output, and cleanup
  function list for each target, so it's important to keep them
  separate.
* Run each target in its own goroutine via fRunner. fRunner is
  analogous to tRunner. It runs cleanups and catches inappropriate
  Goexits and panics.
* Run each input in its own goroutine via T.Run. This enables subtest
  filtering with -test.run and ensures functions registered with
  T.Cleanup (not F.Cleanup) are run at the appropriate time.

Change-Id: Iab1da14ead8bcb57746f8a76f4aebc625baa5792
Reviewed-on: https://go-review.googlesource.com/c/go/+/290693
Reviewed-by: Katie Hockman <katie@golang.org>
Trust: Jay Conrod <jayconrod@google.com>
Run-TryBot: Jay Conrod <jayconrod@google.com>
src/cmd/go/testdata/script/test_fuzz.txt
src/cmd/go/testdata/script/test_fuzz_cleanup.txt [new file with mode: 0644]
src/internal/fuzz/fuzz.go
src/testing/fuzz.go