1
0
mirror of https://github.com/golang/go synced 2024-11-17 21:34:49 -07:00

cmd/go: convert TestGoBuildOutput to the script framework

Adds a in-script go binary called inarchive to check that an
archive is produced. A weaker could be done faster using grep,
but this is more faithful to the original test.

Part of converting all tests to script framework to improve
test parallelism.

Updates #36320
Updates #17751

Change-Id: I001fa0698063be80fe3da947c81d4eb0829be47f
Reviewed-on: https://go-review.googlesource.com/c/go/+/214295
Reviewed-by: Jay Conrod <jayconrod@google.com>
This commit is contained in:
Michael Matloob 2020-01-10 14:48:49 -05:00
parent 99c78b7fc1
commit 7e368b3f5a
2 changed files with 87 additions and 76 deletions

View File

@ -788,21 +788,6 @@ func (tg *testgoData) wantExecutable(path, msg string) {
}
}
// wantArchive fails if path is not an archive.
func (tg *testgoData) wantArchive(path string) {
tg.t.Helper()
f, err := os.Open(path)
if err != nil {
tg.t.Fatal(err)
}
buf := make([]byte, 100)
io.ReadFull(f, buf)
f.Close()
if !bytes.HasPrefix(buf, []byte("!<arch>\n")) {
tg.t.Fatalf("file %s exists but is not an archive", path)
}
}
// isStale reports whether pkg is stale, and why
func (tg *testgoData) isStale(pkg string) (bool, string) {
tg.t.Helper()
@ -2219,67 +2204,6 @@ func TestIssue12096(t *testing.T) {
tg.run("test", tg.path("test_test.go"))
}
func TestGoBuildOutput(t *testing.T) {
skipIfGccgo(t, "gccgo has no standard packages")
tooSlow(t)
tg := testgo(t)
defer tg.cleanup()
tg.makeTempdir()
tg.cd(tg.path("."))
nonExeSuffix := ".exe"
if exeSuffix == ".exe" {
nonExeSuffix = ""
}
tg.tempFile("x.go", "package main\nfunc main(){}\n")
tg.run("build", "x.go")
tg.wantExecutable("x"+exeSuffix, "go build x.go did not write x"+exeSuffix)
tg.must(os.Remove(tg.path("x" + exeSuffix)))
tg.mustNotExist("x" + nonExeSuffix)
tg.run("build", "-o", "myprog", "x.go")
tg.mustNotExist("x")
tg.mustNotExist("x.exe")
tg.wantExecutable("myprog", "go build -o myprog x.go did not write myprog")
tg.mustNotExist("myprog.exe")
tg.tempFile("p.go", "package p\n")
tg.run("build", "p.go")
tg.mustNotExist("p")
tg.mustNotExist("p.a")
tg.mustNotExist("p.o")
tg.mustNotExist("p.exe")
tg.run("build", "-o", "p.a", "p.go")
tg.wantArchive("p.a")
tg.run("build", "cmd/gofmt")
tg.wantExecutable("gofmt"+exeSuffix, "go build cmd/gofmt did not write gofmt"+exeSuffix)
tg.must(os.Remove(tg.path("gofmt" + exeSuffix)))
tg.mustNotExist("gofmt" + nonExeSuffix)
tg.run("build", "-o", "mygofmt", "cmd/gofmt")
tg.wantExecutable("mygofmt", "go build -o mygofmt cmd/gofmt did not write mygofmt")
tg.mustNotExist("mygofmt.exe")
tg.mustNotExist("gofmt")
tg.mustNotExist("gofmt.exe")
tg.run("build", "sync/atomic")
tg.mustNotExist("atomic")
tg.mustNotExist("atomic.exe")
tg.run("build", "-o", "myatomic.a", "sync/atomic")
tg.wantArchive("myatomic.a")
tg.mustNotExist("atomic")
tg.mustNotExist("atomic.a")
tg.mustNotExist("atomic.exe")
tg.runFail("build", "-o", "whatever", "cmd/gofmt", "sync/atomic")
tg.grepStderr("multiple packages", "did not reject -o with multiple packages")
}
func TestGoBuildARM(t *testing.T) {
if testing.Short() {
t.Skip("skipping cross-compile in short mode")

View File

@ -0,0 +1,87 @@
[gccgo] skip 'gccgo has no standard packages'
[short] skip
[!windows] env NONEXE='.exe'
[windows] env NONEXE=''
env GOBIN=$WORK/tmp/bin
go install isarchive &
go build x.go
exists -exec x$GOEXE
rm x$GOEXE
! exists x$NONEXE
go build -o myprog x.go
! exists x
! exists x.exe
exists -exec myprog
! exists myprogr.exe
go build p.go
! exists p
! exists p.a
! exists p.o
! exists p.exe
wait # for isarchive
go build -o p.a p.go
exists p.a
exec $GOBIN/isarchive p.a
go build cmd/gofmt
exists -exec gofmt$GOEXE
rm gofmt$GOEXE
! exists gofmt$NONEXE
go build -o mygofmt cmd/gofmt
exists -exec mygofmt
! exists mygofmt.exe
! exists gofmt
! exists gofmt.exe
go build sync/atomic
! exists atomic
! exists atomic.exe
go build -o myatomic.a sync/atomic
exists myatomic.a
exec $GOBIN/isarchive myatomic.a
! exists atomic
! exists atomic.a
! exists atomic.exe
! go build -o whatever cmd/gofmt sync/atomic
stderr 'multiple packages'
-- x.go --
package main
func main() {}
-- p.go --
package p
-- isarchive/isarchive.go --
package main
import (
"bytes"
"fmt"
"io"
"os"
)
func main() {
f, err := os.Open(os.Args[1])
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
buf := make([]byte, 100)
io.ReadFull(f, buf)
f.Close()
if !bytes.HasPrefix(buf, []byte("!<arch>\n")) {
fmt.Fprintf(os.Stderr, "file %s exists but is not an archive\n", os.Args[1])
os.Exit(1)
}
}