| # This test demonstrates the fuzz corpus behavior for packages outside of the main module. |
| # (See https://golang.org/issue/48495.) |
| |
| [short] skip |
| |
| # Set -modcacherw so that the test behaves the same regardless of whether the |
| # module cache is writable. (For example, on some platforms it can always be |
| # written if the user is running as root.) At one point, a failing fuzz test |
| # in a writable module cache would corrupt module checksums in the cache. |
| env GOFLAGS=-modcacherw |
| |
| |
| # When the upstream module has no test corpus, running 'go test' should succeed, |
| # but 'go test -fuzz=.' should error out before running the test. |
| # (It should NOT corrupt the module cache by writing out new fuzz inputs, |
| # even if the cache is writable.) |
| |
| go get -t example.com/fuzzfail@v0.1.0 |
| go test example.com/fuzzfail |
| |
| ! go test -fuzz=. example.com/fuzzfail |
| ! stdout . |
| stderr '^cannot use -fuzz flag on package outside the main module$' |
| |
| go mod verify |
| |
| |
| # If the module does include a test corpus, 'go test' (without '-fuzz') should |
| # load that corpus and run the fuzz tests against it, but 'go test -fuzz=.' |
| # should continue to be rejected. |
| |
| go get -t example.com/fuzzfail@v0.2.0 |
| |
| ! go test example.com/fuzzfail |
| stdout '^\s*fuzzfail_test\.go:7: oops:' |
| |
| ! go test -fuzz=. example.com/fuzzfail |
| ! stdout . |
| stderr '^cannot use -fuzz flag on package outside the main module$' |
| |
| go mod verify |
| |
| |
| # Packages in 'std' cannot be fuzzed when the corresponding GOROOT module is not |
| # the main module — either the failures would not be recorded or the behavior of |
| # the 'std' tests would change globally. |
| |
| ! go test -fuzz . encoding/json |
| stderr '^cannot use -fuzz flag on package outside the main module$' |
| |
| ! go test -fuzz . cmd/buildid |
| stderr '^cannot use -fuzz flag on package outside the main module$' |
| |
| |
| -- go.mod -- |
| module example.com/m |
| |
| go 1.18 |