github.com/hikaru7719/go@v0.0.0-20181025140707-c8b2ac68906a/misc/cgo/testsanitizers/msan_test.go (about) 1 // Copyright 2017 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package sanitizers_test 6 7 import ( 8 "strings" 9 "testing" 10 ) 11 12 func TestMSAN(t *testing.T) { 13 t.Parallel() 14 requireOvercommit(t) 15 config := configure("memory") 16 config.skipIfCSanitizerBroken(t) 17 18 mustRun(t, config.goCmd("build", "std")) 19 20 cases := []struct { 21 src string 22 wantErr bool 23 }{ 24 {src: "msan.go"}, 25 {src: "msan2.go"}, 26 {src: "msan2_cmsan.go"}, 27 {src: "msan3.go"}, 28 {src: "msan4.go"}, 29 {src: "msan5.go"}, 30 {src: "msan6.go"}, 31 {src: "msan_fail.go", wantErr: true}, 32 } 33 for _, tc := range cases { 34 tc := tc 35 name := strings.TrimSuffix(tc.src, ".go") 36 t.Run(name, func(t *testing.T) { 37 t.Parallel() 38 39 dir := newTempDir(t) 40 defer dir.RemoveAll(t) 41 42 outPath := dir.Join(name) 43 mustRun(t, config.goCmd("build", "-o", outPath, srcPath(tc.src))) 44 45 cmd := hangProneCmd(outPath) 46 if tc.wantErr { 47 out, err := cmd.CombinedOutput() 48 if err != nil { 49 return 50 } 51 t.Fatalf("%#q exited without error; want MSAN failure\n%s", strings.Join(cmd.Args, " "), out) 52 } 53 mustRun(t, cmd) 54 }) 55 } 56 }