tg.mustExist(filepath.Join(pkg, "sync/atomic.a"))
}
-func TestGoTestRaceInstallCgo(t *testing.T) {
- if !canRace {
- t.Skip("skipping because race detector not supported")
- }
-
- // golang.org/issue/10500.
- // This used to install a race-enabled cgo.
- tg := testgo(t)
- defer tg.cleanup()
- tg.run("tool", "-n", "cgo")
- cgo := strings.TrimSpace(tg.stdout.String())
- old, err := os.Stat(cgo)
- tg.must(err)
-
- // For this test, we don't actually care whether 'go test -race -i' succeeds.
- // It may fail, for example, if GOROOT was installed from source as root and
- // is now read-only.
- // We only care that — regardless of whether it succeeds — it does not
- // overwrite cmd/cgo.
- runArgs := []string{"test", "-race", "-i", "runtime/race"}
- if status := tg.doRun(runArgs); status != nil {
- tg.t.Logf("go %v failure ignored: %v", runArgs, status)
- }
-
- new, err := os.Stat(cgo)
- tg.must(err)
- if !new.ModTime().Equal(old.ModTime()) {
- t.Fatalf("go test -i runtime/race reinstalled cmd/cgo")
- }
-}
-
func TestGoInstallShadowedGOPATH(t *testing.T) {
// golang.org/issue/3652.
// go get foo.io (not foo.io/subdir) was not working consistently.
--- /dev/null
+# Tests Issue #10500
+
+[!race] skip
+
+env GOBIN=$WORK/bin
+go install mtime sametime
+
+go tool -n cgo
+cp stdout cgopath.txt
+exec $GOBIN/mtime cgopath.txt # get the mtime of the file whose name is in cgopath.txt
+cp stdout cgotime_before.txt
+
+ # For this test, we don't actually care whether 'go test -race -i' succeeds.
+ # It may fail, for example, if GOROOT was installed from source as root and
+ # is now read-only.
+ # We only care that — regardless of whether it succeeds — it does not
+ # overwrite cmd/cgo.
+go test -race -i runtime/race
+
+exec $GOBIN/mtime cgopath.txt # get the mtime of the file whose name is in cgopath.txt
+cp stdout cgotime_after.txt
+exec $GOBIN/sametime cgotime_before.txt cgotime_after.txt
+
+-- mtime/mtime.go --
+package main
+
+import (
+ "io/ioutil"
+ "encoding/json"
+ "fmt"
+ "os"
+ "strings"
+)
+
+func main() {
+ b, err := ioutil.ReadFile(os.Args[1])
+ if err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ os.Exit(1)
+ }
+ filename := strings.TrimSpace(string(b))
+ info, err := os.Stat(filename)
+ if err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ os.Exit(1)
+ }
+ if err := json.NewEncoder(os.Stdout).Encode(info.ModTime()); err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ os.Exit(1)
+ }
+}
+-- sametime/sametime.go --
+package main
+
+import (
+ "encoding/json"
+ "fmt"
+ "io/ioutil"
+ "os"
+ "time"
+)
+
+
+func main() {
+ var t1 time.Time
+ b1, err := ioutil.ReadFile(os.Args[1])
+ if err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ os.Exit(1)
+ }
+ if err := json.Unmarshal(b1, &t1); err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ os.Exit(1)
+ }
+
+ var t2 time.Time
+ b2, err := ioutil.ReadFile(os.Args[2])
+ if err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ os.Exit(1)
+ }
+ if err := json.Unmarshal(b2, &t2); err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ os.Exit(1)
+ }
+
+ if !t1.Equal(t2) {
+ fmt.Fprintf(os.Stderr, "time in %v (%v) is not the same as time in %v (%v)", os.Args[1], t1, os.Args[2], t2)
+ os.Exit(1)
+ }
+}
\ No newline at end of file