| [!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") }) |
| }) |
| } |