aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/go/testdata/script/test_fuzz_mutate_fail.txt
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) {})
}