Skip to content

Commit

Permalink
cmd/go: convert TestGoTestRaceInstallsCgo to script framework
Browse files Browse the repository at this point in the history
Part of converting all tests to script framework to improve
test parallelism.

Updates #36320
Updates #17751

Change-Id: I9a99aa5d37300c83a2f95fb906949cb4c1d5356f
Reviewed-on: https://go-review.googlesource.com/c/go/+/214426
Reviewed-by: Jay Conrod <[email protected]>
  • Loading branch information
matloob committed Feb 27, 2020
1 parent c40914b commit ff811c8
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 31 deletions.
31 changes: 0 additions & 31 deletions src/cmd/go/go_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2013,37 +2013,6 @@ func TestGoInstallPkgdir(t *testing.T) {
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.
Expand Down
91 changes: 91 additions & 0 deletions src/cmd/go/testdata/script/test_race_install_cgo.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# 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)
}
}

0 comments on commit ff811c8

Please sign in to comment.