]> Cypherpunks repositories - gostls13.git/commitdiff
debug/gosym: clean up and modernize pclntab_test
authorIan Lance Taylor <iant@golang.org>
Wed, 7 Oct 2015 14:24:20 +0000 (07:24 -0700)
committerIan Lance Taylor <iant@golang.org>
Wed, 7 Oct 2015 17:01:59 +0000 (17:01 +0000)
The self tests do not need to build the binary; they won't read it.  The
self tests should work on any ELF system.

Use t.Skip instead of panic.  Use internal/testenv.  Don't worry about a
space in the temporary directory name.

Change-Id: I66ef0af90520d330820afa7b6c6b3a132ab27454
Reviewed-on: https://go-review.googlesource.com/15495
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/debug/gosym/pclntab_test.go

index 53f3e952d62bdbf7f2d12c535aa701ecedc45da5..8d4aa547a020b38e3b4eeae3abf3bf1d09b68f42 100644 (file)
@@ -6,6 +6,7 @@ package gosym
 
 import (
        "debug/elf"
+       "internal/testenv"
        "io/ioutil"
        "os"
        "os/exec"
@@ -20,25 +21,16 @@ var (
        pclinetestBinary string
 )
 
-func dotest(self bool) bool {
+func dotest(t *testing.T) {
+       testenv.MustHaveGoBuild(t)
        // For now, only works on amd64 platforms.
        if runtime.GOARCH != "amd64" {
-               return false
-       }
-       // Self test reads test binary; only works on Linux.
-       if self && runtime.GOOS != "linux" {
-               return false
-       }
-       if pclinetestBinary != "" {
-               return true
+               t.Skipf("skipping on non-AMD64 system %s", runtime.GOARCH)
        }
        var err error
        pclineTempDir, err = ioutil.TempDir("", "pclinetest")
        if err != nil {
-               panic(err)
-       }
-       if strings.Contains(pclineTempDir, " ") {
-               panic("unexpected space in tempdir")
+               t.Fatal(err)
        }
        // This command builds pclinetest from pclinetest.asm;
        // the resulting binary looks like it was built from pclinetest.s,
@@ -48,16 +40,15 @@ func dotest(self bool) bool {
        cmd.Stdout = os.Stdout
        cmd.Stderr = os.Stderr
        if err := cmd.Run(); err != nil {
-               panic(err)
+               t.Fatal(err)
        }
        cmd = exec.Command("go", "tool", "link", "-H", "linux", "-E", "main",
                "-o", pclinetestBinary, pclinetestBinary+".o")
        cmd.Stdout = os.Stdout
        cmd.Stderr = os.Stderr
        if err := cmd.Run(); err != nil {
-               panic(err)
+               t.Fatal(err)
        }
-       return true
 }
 
 func endtest() {
@@ -68,6 +59,17 @@ func endtest() {
        }
 }
 
+// skipIfNotELF skips the test if we are not running on an ELF system.
+// These tests open and examine the test binary, and use elf.Open to do so.
+func skipIfNotELF(t *testing.T) {
+       switch runtime.GOOS {
+       case "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "solaris":
+               // OK.
+       default:
+               t.Skipf("skipping on non-ELF system %s", runtime.GOOS)
+       }
+}
+
 func getTable(t *testing.T) *Table {
        f, tab := crack(os.Args[0], t)
        f.Close()
@@ -112,10 +114,7 @@ func parse(file string, f *elf.File, t *testing.T) (*elf.File, *Table) {
 var goarch = os.Getenv("O")
 
 func TestLineFromAline(t *testing.T) {
-       if !dotest(true) {
-               return
-       }
-       defer endtest()
+       skipIfNotELF(t)
 
        tab := getTable(t)
        if tab.go12line != nil {
@@ -164,10 +163,7 @@ func TestLineFromAline(t *testing.T) {
 }
 
 func TestLineAline(t *testing.T) {
-       if !dotest(true) {
-               return
-       }
-       defer endtest()
+       skipIfNotELF(t)
 
        tab := getTable(t)
        if tab.go12line != nil {
@@ -210,9 +206,7 @@ func TestLineAline(t *testing.T) {
 }
 
 func TestPCLine(t *testing.T) {
-       if !dotest(false) {
-               return
-       }
+       dotest(t)
        defer endtest()
 
        f, tab := crack(pclinetestBinary, t)