diff options
author | Bryan C. Mills <bcmills@google.com> | 2017-08-01 19:30:57 -0400 |
---|---|---|
committer | Bryan Mills <bcmills@google.com> | 2017-08-17 15:05:08 +0000 |
commit | 39d4693bac5ed85765a05f25ac68b2d4771ee470 (patch) | |
tree | df66f6b61e57a94837d72623a63a51101def93bb /misc/cgo/testsanitizers/msan_test.go | |
parent | d46953c9f61ee9fe9852be86bf7bae02e1b82e36 (diff) | |
download | go-39d4693bac5ed85765a05f25ac68b2d4771ee470.tar.gz go-39d4693bac5ed85765a05f25ac68b2d4771ee470.zip |
misc/cgo/testsanitizers: convert test.bash to Go
This makes it much easier to run individual failing subtests.
Use $(go env CC) instead of always defaulting to clang; this makes it
easier to test with other compilers.
Run C binaries to detect incompatible compiler/kernel pairings instead
of sniffing versions.
updates #21196
Change-Id: I0debb3cc4a4244df44b825157ffdc97b5c09338d
Reviewed-on: https://go-review.googlesource.com/52910
Run-TryBot: Bryan Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'misc/cgo/testsanitizers/msan_test.go')
-rw-r--r-- | misc/cgo/testsanitizers/msan_test.go | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/misc/cgo/testsanitizers/msan_test.go b/misc/cgo/testsanitizers/msan_test.go new file mode 100644 index 0000000000..af5afa9ee4 --- /dev/null +++ b/misc/cgo/testsanitizers/msan_test.go @@ -0,0 +1,55 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sanitizers_test + +import ( + "strings" + "testing" +) + +func TestMSAN(t *testing.T) { + t.Parallel() + requireOvercommit(t) + config := configure("memory") + config.skipIfCSanitizerBroken(t) + + mustRun(t, config.goCmd("build", "std")) + + cases := []struct { + src string + wantErr bool + }{ + {src: "msan.go"}, + {src: "msan2.go"}, + {src: "msan2_cmsan.go"}, + {src: "msan3.go"}, + {src: "msan4.go"}, + {src: "msan5.go"}, + {src: "msan_fail.go", wantErr: true}, + } + for _, tc := range cases { + tc := tc + name := strings.TrimSuffix(tc.src, ".go") + t.Run(name, func(t *testing.T) { + t.Parallel() + + dir := newTempDir(t) + defer dir.RemoveAll(t) + + outPath := dir.Join(name) + mustRun(t, config.goCmd("build", "-o", outPath, srcPath(tc.src))) + + cmd := hangProneCmd(outPath) + if tc.wantErr { + out, err := cmd.CombinedOutput() + if err != nil { + return + } + t.Fatalf("%#q exited without error; want MSAN failure\n%s", strings.Join(cmd.Args, " "), out) + } + mustRun(t, cmd) + }) + } +} |