File size: 1,534 Bytes
e36aeda
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[!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)
		}
	})
}