1
0
mirror of https://github.com/golang/go synced 2024-11-26 09:18:07 -07:00

cmd/dist: refactor test constraints for misc/cgo/testsantizers

Currently, the cmd/dist runs test cases in misc/cgo/testsantizers only
when memeory sanitizer is supported, but the tsan tests in
misc/cgo/testsanitizers do not require support for -msan option, which
makes tsan tests can not be run on some unsupported -msan option platforms.

Therefore, this patch moves the test constraints from cmd/dist to
msan_test.go, so that the tsan tests in misc/cgo/testsanitizers
can be run on any system where the C compiler supports -fsanitize=thread
option.

Change-Id: I779c92eedd0270050f1a0b1a69ecce50c3712bc9
Reviewed-on: https://go-review.googlesource.com/c/go/+/297774
Trust: fannie zhang <Fannie.Zhang@arm.com>
Run-TryBot: fannie zhang <Fannie.Zhang@arm.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
fanzha02 2021-03-01 10:34:08 +08:00 committed by fannie zhang
parent 68f3344fe9
commit 3a3b8164fd
5 changed files with 40 additions and 14 deletions

View File

@ -440,3 +440,14 @@ func hangProneCmd(name string, arg ...string) *exec.Cmd {
} }
return cmd return cmd
} }
// mSanSupported is a copy of the function cmd/internal/sys.MSanSupported,
// because the internal pacakage can't be used here.
func mSanSupported(goos, goarch string) bool {
switch goos {
case "linux":
return goarch == "amd64" || goarch == "arm64"
default:
return false
}
}

View File

@ -19,6 +19,12 @@ func TestShared(t *testing.T) {
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
GOARCH, err := goEnv("GOARCH")
if err != nil {
t.Fatal(err)
}
libExt := "so" libExt := "so"
if GOOS == "darwin" { if GOOS == "darwin" {
libExt = "dylib" libExt = "dylib"
@ -41,6 +47,11 @@ func TestShared(t *testing.T) {
for _, tc := range cases { for _, tc := range cases {
tc := tc tc := tc
name := strings.TrimSuffix(tc.src, ".go") name := strings.TrimSuffix(tc.src, ".go")
//The memory sanitizer tests require support for the -msan option.
if tc.sanitizer == "memory" && !mSanSupported(GOOS, GOARCH) {
t.Logf("skipping %s test on %s/%s; -msan option is not supported.", name, GOOS, GOARCH)
continue
}
t.Run(name, func(t *testing.T) { t.Run(name, func(t *testing.T) {
t.Parallel() t.Parallel()
config := configure(tc.sanitizer) config := configure(tc.sanitizer)

View File

@ -10,6 +10,19 @@ import (
) )
func TestMSAN(t *testing.T) { func TestMSAN(t *testing.T) {
goos, err := goEnv("GOOS")
if err != nil {
t.Fatal(err)
}
goarch, err := goEnv("GOARCH")
if err != nil {
t.Fatal(err)
}
// The msan tests require support for the -msan option.
if !mSanSupported(goos, goarch) {
t.Skipf("skipping on %s/%s; -msan option is not supported.", goos, goarch)
}
t.Parallel() t.Parallel()
requireOvercommit(t) requireOvercommit(t)
config := configure("memory") config := configure("memory")

16
src/cmd/dist/test.go vendored
View File

@ -736,8 +736,9 @@ func (t *tester) registerTests() {
if gohostos == "linux" && goarch == "amd64" { if gohostos == "linux" && goarch == "amd64" {
t.registerTest("testasan", "../misc/cgo/testasan", "go", "run", ".") t.registerTest("testasan", "../misc/cgo/testasan", "go", "run", ".")
} }
if mSanSupported(goos, goarch) { if goos == "linux" {
t.registerHostTest("testsanitizers/msan", "../misc/cgo/testsanitizers", "misc/cgo/testsanitizers", ".") // because syscall.SysProcAttri struct used in misc/cgo/testsanitizers is only built on linux.
t.registerHostTest("testsanitizers", "../misc/cgo/testsanitizers", "misc/cgo/testsanitizers", ".")
} }
if t.hasBash() && goos != "android" && !t.iOS() && gohostos != "windows" { if t.hasBash() && goos != "android" && !t.iOS() && gohostos != "windows" {
t.registerHostTest("cgo_errors", "../misc/cgo/errors", "misc/cgo/errors", ".") t.registerHostTest("cgo_errors", "../misc/cgo/errors", "misc/cgo/errors", ".")
@ -1640,17 +1641,6 @@ func raceDetectorSupported(goos, goarch string) bool {
} }
} }
// mSanSupported is a copy of the function cmd/internal/sys.MSanSupported,
// which can't be used here because cmd/dist has to be buildable by Go 1.4.
func mSanSupported(goos, goarch string) bool {
switch goos {
case "linux":
return goarch == "amd64" || goarch == "arm64"
default:
return false
}
}
// isUnsupportedVMASize reports whether the failure is caused by an unsupported // isUnsupportedVMASize reports whether the failure is caused by an unsupported
// VMA for the race detector (for example, running the race detector on an // VMA for the race detector (for example, running the race detector on an
// arm64 machine configured with 39-bit VMA) // arm64 machine configured with 39-bit VMA)

View File

@ -23,7 +23,8 @@ func RaceDetectorSupported(goos, goarch string) bool {
} }
// MSanSupported reports whether goos/goarch supports the memory // MSanSupported reports whether goos/goarch supports the memory
// sanitizer option. There is a copy of this function in cmd/dist/test.go. // sanitizer option.
// There is a copy of this function in misc/cgo/testsanitizers/cc_test.go.
func MSanSupported(goos, goarch string) bool { func MSanSupported(goos, goarch string) bool {
switch goos { switch goos {
case "linux": case "linux":