| [!fuzz] skip | |
| [short] skip | |
| env GOCACHE=$WORK/cache | |
| # Cleanup should run after F.Skip. | |
| go test -run=FuzzTargetSkip | |
| stdout cleanup | |
| # Cleanup should run after F.Fatal. | |
| ! go test -run=FuzzTargetFatal | |
| stdout cleanup | |
| # Cleanup should run after an unexpected runtime.Goexit. | |
| ! go test -run=FuzzTargetGoexit | |
| stdout cleanup | |
| # Cleanup should run after panic. | |
| ! go test -run=FuzzTargetPanic | |
| stdout cleanup | |
| # Cleanup should run in fuzz function on seed corpus. | |
| go test -v -run=FuzzFunction | |
| stdout '(?s)inner.*outer' | |
| # TODO(jayconrod): test cleanup while fuzzing. For now, the worker process's | |
| # stdout and stderr is connected to the coordinator's, but it should eventually | |
| # be connected to os.DevNull, so we wouldn't see t.Log output. | |
| -- go.mod -- | |
| module cleanup | |
| go 1.15 | |
| -- cleanup_test.go -- | |
| package cleanup | |
| import ( | |
| "runtime" | |
| "testing" | |
| ) | |
| func FuzzTargetSkip(f *testing.F) { | |
| f.Cleanup(func() { f.Log("cleanup") }) | |
| f.Skip() | |
| } | |
| func FuzzTargetFatal(f *testing.F) { | |
| f.Cleanup(func() { f.Log("cleanup") }) | |
| f.Fatal() | |
| } | |
| func FuzzTargetGoexit(f *testing.F) { | |
| f.Cleanup(func() { f.Log("cleanup") }) | |
| runtime.Goexit() | |
| } | |
| func FuzzTargetPanic(f *testing.F) { | |
| f.Cleanup(func() { f.Log("cleanup") }) | |
| panic("oh no") | |
| } | |
| func FuzzFunction(f *testing.F) { | |
| f.Add([]byte{0}) | |
| f.Cleanup(func() { f.Log("outer") }) | |
| f.Fuzz(func(t *testing.T, b []byte) { | |
| t.Cleanup(func() { t.Logf("inner") }) | |
| }) | |
| } | |