tsan_test.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. package sanitizers_test
  5. import (
  6. "strings"
  7. "testing"
  8. )
  9. func TestTSAN(t *testing.T) {
  10. t.Parallel()
  11. requireOvercommit(t)
  12. config := configure("thread")
  13. config.skipIfCSanitizerBroken(t)
  14. mustRun(t, config.goCmd("build", "std"))
  15. cases := []struct {
  16. src string
  17. needsRuntime bool
  18. }{
  19. {src: "tsan.go"},
  20. {src: "tsan2.go"},
  21. {src: "tsan3.go"},
  22. {src: "tsan4.go"},
  23. {src: "tsan5.go", needsRuntime: true},
  24. {src: "tsan6.go", needsRuntime: true},
  25. {src: "tsan7.go", needsRuntime: true},
  26. {src: "tsan8.go"},
  27. {src: "tsan9.go"},
  28. {src: "tsan10.go", needsRuntime: true},
  29. {src: "tsan11.go", needsRuntime: true},
  30. {src: "tsan12.go", needsRuntime: true},
  31. }
  32. for _, tc := range cases {
  33. tc := tc
  34. name := strings.TrimSuffix(tc.src, ".go")
  35. t.Run(name, func(t *testing.T) {
  36. t.Parallel()
  37. dir := newTempDir(t)
  38. defer dir.RemoveAll(t)
  39. outPath := dir.Join(name)
  40. mustRun(t, config.goCmd("build", "-o", outPath, srcPath(tc.src)))
  41. cmd := hangProneCmd(outPath)
  42. if tc.needsRuntime {
  43. config.skipIfRuntimeIncompatible(t)
  44. }
  45. mustRun(t, cmd)
  46. })
  47. }
  48. }