1# This test demonstrates the fuzz corpus behavior for packages outside of the main module. 2# (See https://golang.org/issue/48495.) 3 4[short] skip 5 6# Set -modcacherw so that the test behaves the same regardless of whether the 7# module cache is writable. (For example, on some platforms it can always be 8# written if the user is running as root.) At one point, a failing fuzz test 9# in a writable module cache would corrupt module checksums in the cache. 10env GOFLAGS=-modcacherw 11 12 13# When the upstream module has no test corpus, running 'go test' should succeed, 14# but 'go test -fuzz=.' should error out before running the test. 15# (It should NOT corrupt the module cache by writing out new fuzz inputs, 16# even if the cache is writable.) 17 18go get -t example.com/fuzzfail@v0.1.0 19go test example.com/fuzzfail 20 21! go test -fuzz=. example.com/fuzzfail 22! stdout . 23stderr '^cannot use -fuzz flag on package outside the main module$' 24 25go mod verify 26 27 28# If the module does include a test corpus, 'go test' (without '-fuzz') should 29# load that corpus and run the fuzz tests against it, but 'go test -fuzz=.' 30# should continue to be rejected. 31 32go get -t example.com/fuzzfail@v0.2.0 33 34! go test example.com/fuzzfail 35stdout '^\s*fuzzfail_test\.go:7: oops:' 36 37! go test -fuzz=. example.com/fuzzfail 38! stdout . 39stderr '^cannot use -fuzz flag on package outside the main module$' 40 41go mod verify 42 43 44# Packages in 'std' cannot be fuzzed when the corresponding GOROOT module is not 45# the main module — either the failures would not be recorded or the behavior of 46# the 'std' tests would change globally. 47 48! go test -fuzz . encoding/json 49stderr '^cannot use -fuzz flag on package outside the main module$' 50 51! go test -fuzz . cmd/buildid 52stderr '^cannot use -fuzz flag on package outside the main module$' 53 54 55-- go.mod -- 56module example.com/m 57 58go 1.18 59