blob: 935c22a05e28d5acbcc1f8fba91067d0384cb3c2 (
plain)
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# TODO(jayconrod): support shared memory on more platforms.
[!darwin] [!linux] [!windows] skip
# Check that if a worker does not call F.Fuzz or calls F.Fail first,
# 'go test' exits non-zero and no crasher is recorded.
[short] skip
! go test -fuzz=FuzzReturn
! exists testdata
! go test -fuzz=FuzzSkip
! exists testdata
! go test -fuzz=FuzzFail
! exists testdata
! go test -fuzz=FuzzPanic
! exists testdata
! go test -fuzz=FuzzNilPanic
! exists testdata
! go test -fuzz=FuzzGoexit
! exists testdata
! go test -fuzz=FuzzExit
! exists testdata
-- go.mod --
module m
go 1.17
-- fuzz_fail_test.go --
package fuzz_fail
import (
"flag"
"os"
"runtime"
"testing"
)
func isWorker() bool {
f := flag.Lookup("test.fuzzworker")
if f == nil {
return false
}
get, ok := f.Value.(flag.Getter)
if !ok {
return false
}
return get.Get() == interface{}(true)
}
func FuzzReturn(f *testing.F) {
if isWorker() {
return
}
f.Fuzz(func(*testing.T, []byte) {})
}
func FuzzSkip(f *testing.F) {
if isWorker() {
f.Skip()
}
f.Fuzz(func(*testing.T, []byte) {})
}
func FuzzFail(f *testing.F) {
if isWorker() {
f.Fail()
}
f.Fuzz(func(*testing.T, []byte) {})
}
func FuzzPanic(f *testing.F) {
if isWorker() {
panic("nope")
}
f.Fuzz(func(*testing.T, []byte) {})
}
func FuzzNilPanic(f *testing.F) {
if isWorker() {
panic(nil)
}
f.Fuzz(func(*testing.T, []byte) {})
}
func FuzzGoexit(f *testing.F) {
if isWorker() {
runtime.Goexit()
}
f.Fuzz(func(*testing.T, []byte) {})
}
func FuzzExit(f *testing.F) {
if isWorker() {
os.Exit(99)
}
f.Fuzz(func(*testing.T, []byte) {})
}
|