# Regression test for #56222: 'go get -t' and 'go mod tidy' # should save enough checksums to run 'go test' on the named # packages or any package in "all" respectively. # 'go mod tidy' in a module at go 1.21 or higher should preserve # checksums needed to run 'go test all'. cd m1 go mod tidy go list -f '{{if eq .ImportPath "example.com/generics"}}{{.Module.GoVersion}}{{end}}' -deps -test example.com/m2/q stdout 1.18 [!short] go test -o $devnull -c all cat go.sum replace 'example.com/generics v1.0.0/go.mod' 'example.com/notgenerics v1.0.0/go.mod' go.sum ! go list -f '{{if eq .ImportPath "example.com/generics"}}{{.Module.GoVersion}}{{end}}' -deps -test example.com/m2/q stderr '^go: can''t load test package: \.\.'${/}m2${/}q${/}'q_test.go:3:8: example\.com/generics@v1\.0\.0: missing go.sum entry for go.mod file; to add it:\n\tgo mod download example\.com/generics$' go mod download -json example.com/generics stdout '"GoModSum":' go list -f '{{if eq .ImportPath "example.com/generics"}}{{.Module.GoVersion}}{{end}}' -deps -test example.com/m2/q stdout 1.18 # At go 1.20 or earlier, 'go mod tidy' should preserve the historical go.sum # contents, but 'go test' should flag the missing checksums (instead of trying # to build the test dependency with the wrong language version). go mod tidy -go=1.20 ! go test -o $devnull -c all stderr '^# example.com/m2/q\n'..${/}m2${/}q${/}'q_test.go:3:8: example.com/generics@v1.0.0: missing go.sum entry for go.mod file; to add it:\n\tgo mod download example.com/generics$' go mod download -json example.com/generics go list -f '{{if eq .ImportPath "example.com/generics"}}{{.Module.GoVersion}}{{end}}' -deps -test example.com/m2/q stdout 1.18 # Even at go 1.20 or earlier, 'go mod tidy' shouldn't need go.mod files or # checksums that it won't record. go mod tidy -go=1.20 go clean -modcache # Remove checksums from the module cache, so that only go.sum is used. # Issue 60667: 'go list' without -mod=mod shouldn't report the checksums as # dirty either. go list -m -u all env OLDSUMDB=$GOSUMDB env GOSUMDB=bad go mod tidy env GOSUMDB=$OLDSUMDB # Regardless of the go version in go.mod, 'go get -t' should fetch # enough checksums to run 'go test' on the named package. rm p go mod tidy -go=1.20 go list -m all ! stdout example.com/generics go get -t example.com/m2/q@v1.0.0 go list -f '{{if eq .ImportPath "example.com/generics"}}{{.Module.GoVersion}}{{end}}' -deps -test example.com/m2/q stdout 1.18 [!short] go test -o $devnull -c example.com/m2/q -- m1/go.mod -- module example.com/m1 go 1.21 require example.com/m2 v1.0.0 replace example.com/m2 => ../m2 -- m1/p/p.go -- package p import _ "example.com/m2/q" -- m2/go.mod -- module example.com/m2 go 1.19 require example.com/generics v1.0.0 -- m2/q/q.go -- package q -- m2/q/q_test.go -- package q import _ "example.com/generics"