| [!fuzz] skip |
| [short] skip |
| env GOCACHE=$WORK/cache |
| |
| # Warm up the build cache with GOMAXPROCS unrestricted. |
| go test -c -o $devnull |
| |
| # For the fuzzing phase, we reduce GOMAXPROCS to avoid consuming too many |
| # resources during the test. Ideally this would just free up resources to run |
| # other parallel tests more quickly, but unfortunately it is actually necessary |
| # in some 32-bit environments to prevent the fuzzing engine from running out of |
| # address space (see https://go.dev/issue/65434). |
| env GOMAXPROCS=2 |
| |
| # The fuzz function should be able to detect whether -timeout |
| # was set with T.Deadline. Note there is no F.Deadline, and |
| # there is no timeout while fuzzing, even if -fuzztime is set. |
| go test -run=FuzzDeadline -wantdeadline=true # -timeout defaults to 10m |
| go test -run=FuzzDeadline -timeout=0 -wantdeadline=false |
| ! go test -run=FuzzDeadline -timeout=1s -wantdeadline=false |
| go test -run=FuzzDeadline -timeout=1s -wantdeadline=true |
| go test -fuzz=FuzzDeadline -timeout=0 -fuzztime=1s -wantdeadline=false |
| go test -fuzz=FuzzDeadline -timeout=0 -fuzztime=100x -wantdeadline=false |
| |
| -- go.mod -- |
| module fuzz |
| |
| go 1.16 |
| -- fuzz_deadline_test.go -- |
| package fuzz_test |
| |
| import ( |
| "flag" |
| "testing" |
| ) |
| |
| var wantDeadline = flag.Bool("wantdeadline", false, "whether the test should have a deadline") |
| |
| func FuzzDeadline(f *testing.F) { |
| f.Add("run once") |
| f.Fuzz(func (t *testing.T, _ string) { |
| if _, hasDeadline := t.Deadline(); hasDeadline != *wantDeadline { |
| t.Fatalf("function got %v; want %v", hasDeadline, *wantDeadline) |
| } |
| }) |
| } |