]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/nm: run tests in parallel, don't use Scanner on []byte
authorIan Lance Taylor <iant@golang.org>
Mon, 10 Dec 2018 23:47:10 +0000 (15:47 -0800)
committerIan Lance Taylor <iant@golang.org>
Tue, 11 Dec 2018 03:36:22 +0000 (03:36 +0000)
Saves about 35% on total test time on my laptop.

Fixes #26471

Change-Id: I15b28b1bc00f889934d577dc7996864bbab10105
Reviewed-on: https://go-review.googlesource.com/c/153499
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/nm/nm_test.go

index 1f2ad53ef27155e0a2c4f305b1cedb5d3edfefd4..53c39f2f896b66075b57bc338a52a1bcf5309048 100644 (file)
@@ -5,8 +5,6 @@
 package main
 
 import (
-       "bufio"
-       "bytes"
        "fmt"
        "internal/testenv"
        "io/ioutil"
@@ -55,6 +53,7 @@ func testMain(m *testing.M) int {
 }
 
 func TestNonGoExecs(t *testing.T) {
+       t.Parallel()
        testfiles := []string{
                "debug/elf/testdata/gcc-386-freebsd-exec",
                "debug/elf/testdata/gcc-amd64-linux-exec",
@@ -77,6 +76,7 @@ func TestNonGoExecs(t *testing.T) {
 }
 
 func testGoExec(t *testing.T, iscgo, isexternallinker bool) {
+       t.Parallel()
        tmpdir, err := ioutil.TempDir("", "TestGoExec")
        if err != nil {
                t.Fatal(err)
@@ -154,10 +154,9 @@ func testGoExec(t *testing.T, iscgo, isexternallinker bool) {
                return false
        }
 
-       scanner := bufio.NewScanner(bytes.NewBuffer(out))
        dups := make(map[string]bool)
-       for scanner.Scan() {
-               f := strings.Fields(scanner.Text())
+       for _, line := range strings.Split(string(out), "\n") {
+               f := strings.Fields(line)
                if len(f) < 3 {
                        continue
                }
@@ -184,10 +183,6 @@ func testGoExec(t *testing.T, iscgo, isexternallinker bool) {
                        delete(runtimeSyms, name)
                }
        }
-       err = scanner.Err()
-       if err != nil {
-               t.Fatalf("error reading nm output: %v", err)
-       }
        if len(names) > 0 {
                t.Errorf("executable is missing %v symbols", names)
        }
@@ -201,6 +196,7 @@ func TestGoExec(t *testing.T) {
 }
 
 func testGoLib(t *testing.T, iscgo bool) {
+       t.Parallel()
        tmpdir, err := ioutil.TempDir("", "TestGoLib")
        if err != nil {
                t.Fatal(err)
@@ -269,9 +265,9 @@ func testGoLib(t *testing.T, iscgo bool) {
                        syms = append(syms, symType{"T", "cgofunc", true, false})
                }
        }
-       scanner := bufio.NewScanner(bytes.NewBuffer(out))
-       for scanner.Scan() {
-               f := strings.Fields(scanner.Text())
+
+       for _, line := range strings.Split(string(out), "\n") {
+               f := strings.Fields(line)
                var typ, name string
                var csym bool
                if iscgo {
@@ -298,10 +294,6 @@ func testGoLib(t *testing.T, iscgo bool) {
                        }
                }
        }
-       err = scanner.Err()
-       if err != nil {
-               t.Fatalf("error reading nm output: %v", err)
-       }
        for _, sym := range syms {
                if !sym.Found {
                        t.Errorf("cannot found symbol %s %s", sym.Type, sym.Name)