| # Tests Issue #10500 |
| |
| [!race] skip |
| |
| [!darwin] ! stale cmd/cgo # The darwin builders are spuriously stale; see #33598. |
| |
| env GOBIN=$WORK/bin |
| go install m/mtime m/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 if GOROOT is read-only (perhaps it was installed as root). |
| # We only care that it does not overwrite cmd/cgo regardless. |
| ? 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 |
| |
| -- go.mod -- |
| module m |
| |
| go 1.16 |
| -- 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) |
| } |
| } |