build: shorten a few packages with long tests

Takes 3% off my all.bash run time.

For #10571.

Change-Id: I8f00f523d6919e87182d35722a669b0b96b8218b
Reviewed-on: https://go-review.googlesource.com/18087
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/src/archive/zip/zip_test.go b/src/archive/zip/zip_test.go
index f00ff47..0fa749e 100644
--- a/src/archive/zip/zip_test.go
+++ b/src/archive/zip/zip_test.go
@@ -10,6 +10,7 @@
 	"bytes"
 	"fmt"
 	"hash"
+	"internal/testenv"
 	"io"
 	"io/ioutil"
 	"sort"
@@ -19,6 +20,9 @@
 )
 
 func TestOver65kFiles(t *testing.T) {
+	if testing.Short() && testenv.Builder() == "" {
+		t.Skip("skipping in short mode")
+	}
 	buf := new(bytes.Buffer)
 	w := NewWriter(buf)
 	const nFiles = (1 << 16) + 42
diff --git a/src/compress/flate/deflate_test.go b/src/compress/flate/deflate_test.go
index d5d6e73..72bc665 100644
--- a/src/compress/flate/deflate_test.go
+++ b/src/compress/flate/deflate_test.go
@@ -7,6 +7,7 @@
 import (
 	"bytes"
 	"fmt"
+	"internal/testenv"
 	"io"
 	"io/ioutil"
 	"reflect"
@@ -343,6 +344,9 @@
 }
 
 func TestDeflateInflateString(t *testing.T) {
+	if testing.Short() && testenv.Builder() == "" {
+		t.Skip("skipping in short mode")
+	}
 	for _, test := range deflateInflateStringTests {
 		gold, err := ioutil.ReadFile(test.filename)
 		if err != nil {
@@ -436,7 +440,11 @@
 			t.Fatalf("NewWriter: %v", err)
 		}
 		buf := []byte("hello world")
-		for i := 0; i < 1024; i++ {
+		n := 1024
+		if testing.Short() {
+			n = 10
+		}
+		for i := 0; i < n; i++ {
 			w.Write(buf)
 		}
 		w.Reset(ioutil.Discard)
diff --git a/src/compress/lzw/writer_test.go b/src/compress/lzw/writer_test.go
index c20d058..66d7617 100644
--- a/src/compress/lzw/writer_test.go
+++ b/src/compress/lzw/writer_test.go
@@ -5,6 +5,7 @@
 package lzw
 
 import (
+	"internal/testenv"
 	"io"
 	"io/ioutil"
 	"os"
@@ -13,6 +14,7 @@
 )
 
 var filenames = []string{
+	"../testdata/gettysburg.txt",
 	"../testdata/e.txt",
 	"../testdata/pi.txt",
 }
@@ -89,10 +91,16 @@
 	for _, filename := range filenames {
 		for _, order := range [...]Order{LSB, MSB} {
 			// The test data "2.71828 etcetera" is ASCII text requiring at least 6 bits.
-			for _, litWidth := range [...]int{6, 7, 8} {
+			for litWidth := 6; litWidth <= 8; litWidth++ {
+				if filename == "../testdata/gettysburg.txt" && litWidth == 6 {
+					continue
+				}
 				testFile(t, filename, order, litWidth)
 			}
 		}
+		if testing.Short() && testenv.Builder() == "" {
+			break
+		}
 	}
 }
 
diff --git a/src/compress/testdata/gettysburg.txt b/src/compress/testdata/gettysburg.txt
new file mode 100644
index 0000000..2c9bcde
--- /dev/null
+++ b/src/compress/testdata/gettysburg.txt
@@ -0,0 +1,29 @@
+  Four score and seven years ago our fathers brought forth on
+this continent, a new nation, conceived in Liberty, and dedicated
+to the proposition that all men are created equal.
+  Now we are engaged in a great Civil War, testing whether that
+nation, or any nation so conceived and so dedicated, can long
+endure.
+  We are met on a great battle-field of that war.
+  We have come to dedicate a portion of that field, as a final
+resting place for those who here gave their lives that that
+nation might live.  It is altogether fitting and proper that
+we should do this.
+  But, in a larger sense, we can not dedicate - we can not
+consecrate - we can not hallow - this ground.
+  The brave men, living and dead, who struggled here, have
+consecrated it, far above our poor power to add or detract.
+The world will little note, nor long remember what we say here,
+but it can never forget what they did here.
+  It is for us the living, rather, to be dedicated here to the
+unfinished work which they who fought here have thus far so
+nobly advanced.  It is rather for us to be here dedicated to
+the great task remaining before us - that from these honored
+dead we take increased devotion to that cause for which they
+gave the last full measure of devotion -
+  that we here highly resolve that these dead shall not have
+died in vain - that this nation, under God, shall have a new
+birth of freedom - and that government of the people, by the
+people, for the people, shall not perish from this earth.
+
+Abraham Lincoln, November 19, 1863, Gettysburg, Pennsylvania
diff --git a/src/compress/zlib/writer_test.go b/src/compress/zlib/writer_test.go
index 71ba81a..dd94165 100644
--- a/src/compress/zlib/writer_test.go
+++ b/src/compress/zlib/writer_test.go
@@ -7,6 +7,7 @@
 import (
 	"bytes"
 	"fmt"
+	"internal/testenv"
 	"io"
 	"io/ioutil"
 	"os"
@@ -14,6 +15,7 @@
 )
 
 var filenames = []string{
+	"../testdata/gettysburg.txt",
 	"../testdata/e.txt",
 	"../testdata/pi.txt",
 }
@@ -152,22 +154,34 @@
 }
 
 func TestWriterBig(t *testing.T) {
-	for _, fn := range filenames {
+	for i, fn := range filenames {
 		testFileLevelDict(t, fn, DefaultCompression, "")
 		testFileLevelDict(t, fn, NoCompression, "")
 		for level := BestSpeed; level <= BestCompression; level++ {
 			testFileLevelDict(t, fn, level, "")
+			if level >= 1 && testing.Short() && testenv.Builder() == "" {
+				break
+			}
+		}
+		if i == 0 && testing.Short() && testenv.Builder() == "" {
+			break
 		}
 	}
 }
 
 func TestWriterDict(t *testing.T) {
 	const dictionary = "0123456789."
-	for _, fn := range filenames {
+	for i, fn := range filenames {
 		testFileLevelDict(t, fn, DefaultCompression, dictionary)
 		testFileLevelDict(t, fn, NoCompression, dictionary)
 		for level := BestSpeed; level <= BestCompression; level++ {
 			testFileLevelDict(t, fn, level, dictionary)
+			if level >= 1 && testing.Short() && testenv.Builder() == "" {
+				break
+			}
+		}
+		if i == 0 && testing.Short() && testenv.Builder() == "" {
+			break
 		}
 	}
 }
@@ -179,10 +193,11 @@
 		testFileLevelDictReset(t, fn, DefaultCompression, nil)
 		testFileLevelDictReset(t, fn, NoCompression, []byte(dictionary))
 		testFileLevelDictReset(t, fn, DefaultCompression, []byte(dictionary))
-		if !testing.Short() {
-			for level := BestSpeed; level <= BestCompression; level++ {
-				testFileLevelDictReset(t, fn, level, nil)
-			}
+		if testing.Short() {
+			break
+		}
+		for level := BestSpeed; level <= BestCompression; level++ {
+			testFileLevelDictReset(t, fn, level, nil)
 		}
 	}
 }
diff --git a/src/go/internal/gcimporter/gcimporter_test.go b/src/go/internal/gcimporter/gcimporter_test.go
index 81d0e66..316ba16 100644
--- a/src/go/internal/gcimporter/gcimporter_test.go
+++ b/src/go/internal/gcimporter/gcimporter_test.go
@@ -164,7 +164,11 @@
 		return
 	}
 
-	nimports := testDir(t, "", time.Now().Add(maxTime)) // installed packages
+	dt := maxTime
+	if testing.Short() && testenv.Builder() == "" {
+		dt = 10 * time.Millisecond
+	}
+	nimports := testDir(t, "", time.Now().Add(dt)) // installed packages
 	t.Logf("tested %d imports", nimports)
 }
 
diff --git a/src/go/types/stdlib_test.go b/src/go/types/stdlib_test.go
index 055bd96..09f2585 100644
--- a/src/go/types/stdlib_test.go
+++ b/src/go/types/stdlib_test.go
@@ -127,6 +127,10 @@
 func TestStdTest(t *testing.T) {
 	testenv.MustHaveGoBuild(t)
 
+	if testing.Short() && testenv.Builder() == "" {
+		t.Skip("skipping in short mode")
+	}
+
 	// test/recover4.go is only built for Linux and Darwin.
 	// TODO(gri) Remove once tests consider +build tags (issue 10370).
 	if runtime.GOOS != "linux" && runtime.GOOS != "darwin" {
@@ -142,6 +146,10 @@
 func TestStdFixed(t *testing.T) {
 	testenv.MustHaveGoBuild(t)
 
+	if testing.Short() && testenv.Builder() == "" {
+		t.Skip("skipping in short mode")
+	}
+
 	testTestDir(t, filepath.Join(runtime.GOROOT(), "test", "fixedbugs"),
 		"bug248.go", "bug302.go", "bug369.go", // complex test instructions - ignore
 		"issue6889.go",  // gc-specific test
@@ -247,7 +255,7 @@
 
 func walkDirs(t *testing.T, dir string) {
 	// limit run time for short tests
-	if testing.Short() && time.Since(start) >= 750*time.Millisecond {
+	if testing.Short() && time.Since(start) >= 10*time.Millisecond {
 		return
 	}
 
diff --git a/src/math/big/int_test.go b/src/math/big/int_test.go
index 616a562..2f55a7e 100644
--- a/src/math/big/int_test.go
+++ b/src/math/big/int_test.go
@@ -1378,6 +1378,14 @@
 				t.Errorf("#%d: failed (sqrt(e) = %s)", i, &sqrt)
 			}
 		}
+
+		if testing.Short() && i > 2 {
+			break
+		}
+	}
+
+	if testing.Short() {
+		return
 	}
 
 	// exhaustive test for small values
diff --git a/src/math/rand/rand_test.go b/src/math/rand/rand_test.go
index 6a1df4d..8d68335 100644
--- a/src/math/rand/rand_test.go
+++ b/src/math/rand/rand_test.go
@@ -7,6 +7,7 @@
 import (
 	"errors"
 	"fmt"
+	"internal/testenv"
 	"math"
 	"os"
 	"runtime"
@@ -327,9 +328,10 @@
 func TestFloat32(t *testing.T) {
 	// For issue 6721, the problem came after 7533753 calls, so check 10e6.
 	num := int(10e6)
+	// But do the full amount only on builders (not locally).
 	// But ARM5 floating point emulation is slow (Issue 10749), so
 	// do less for that builder:
-	if testing.Short() && runtime.GOARCH == "arm" && os.Getenv("GOARM") == "5" {
+	if testing.Short() && (testenv.Builder() == "" || runtime.GOARCH == "arm" && os.Getenv("GOARM") == "5") {
 		num /= 100 // 1.72 seconds instead of 172 seconds
 	}
 
diff --git a/src/net/http/serve_test.go b/src/net/http/serve_test.go
index 0ce492c..0c2fc48 100644
--- a/src/net/http/serve_test.go
+++ b/src/net/http/serve_test.go
@@ -12,6 +12,7 @@
 	"crypto/tls"
 	"errors"
 	"fmt"
+	"internal/testenv"
 	"io"
 	"io/ioutil"
 	"log"
@@ -454,6 +455,7 @@
 	if runtime.GOOS == "plan9" {
 		t.Skip("skipping test; see https://golang.org/issue/7237")
 	}
+	t.Parallel()
 	defer afterTest(t)
 	reqNum := 0
 	ts := httptest.NewUnstartedServer(HandlerFunc(func(res ResponseWriter, req *Request) {
@@ -937,6 +939,7 @@
 	if runtime.GOOS == "plan9" {
 		t.Skip("skipping test; see https://golang.org/issue/7237")
 	}
+	t.Parallel()
 	defer afterTest(t)
 	ts := httptest.NewUnstartedServer(HandlerFunc(func(w ResponseWriter, r *Request) {}))
 	errc := make(chanWriter, 10) // but only expecting 1
@@ -1277,6 +1280,9 @@
 // should ignore client request bodies that a handler didn't read
 // and close the connection.
 func TestServerUnreadRequestBodyLarge(t *testing.T) {
+	if testing.Short() && testenv.Builder() == "" {
+		t.Log("skipping in short mode")
+	}
 	conn := new(testConn)
 	body := strings.Repeat("x", 1<<20)
 	conn.readBuf.Write([]byte(fmt.Sprintf(
@@ -1407,6 +1413,9 @@
 }
 
 func TestHandlerBodyClose(t *testing.T) {
+	if testing.Short() && testenv.Builder() == "" {
+		t.Skip("skipping in -short mode")
+	}
 	for i, tt := range handlerBodyCloseTests {
 		testHandlerBodyClose(t, i, tt)
 	}
diff --git a/src/net/http/transport_test.go b/src/net/http/transport_test.go
index e15b34c..e1e8380 100644
--- a/src/net/http/transport_test.go
+++ b/src/net/http/transport_test.go
@@ -436,6 +436,7 @@
 }
 
 func TestTransportServerClosingUnexpectedly(t *testing.T) {
+	t.Parallel()
 	defer afterTest(t)
 	ts := httptest.NewServer(hostPortHandler)
 	defer ts.Close()
@@ -968,6 +969,7 @@
 
 // tests that persistent goroutine connections shut down when no longer desired.
 func TestTransportPersistConnLeak(t *testing.T) {
+	t.Parallel()
 	defer afterTest(t)
 	gotReqCh := make(chan bool)
 	unblockCh := make(chan bool)
@@ -1034,6 +1036,7 @@
 // golang.org/issue/4531: Transport leaks goroutines when
 // request.ContentLength is explicitly short
 func TestTransportPersistConnLeakShortBody(t *testing.T) {
+	t.Parallel()
 	defer afterTest(t)
 	ts := httptest.NewServer(HandlerFunc(func(w ResponseWriter, r *Request) {
 	}))
@@ -1374,6 +1377,7 @@
 }
 
 func TestTransportResponseHeaderTimeout(t *testing.T) {
+	t.Parallel()
 	defer afterTest(t)
 	if testing.Short() {
 		t.Skip("skipping timeout test in -short mode")
@@ -1445,6 +1449,7 @@
 }
 
 func TestTransportCancelRequest(t *testing.T) {
+	t.Parallel()
 	defer afterTest(t)
 	if testing.Short() {
 		t.Skip("skipping test in -short mode")
@@ -1554,6 +1559,7 @@
 }
 
 func TestCancelRequestWithChannel(t *testing.T) {
+	t.Parallel()
 	defer afterTest(t)
 	if testing.Short() {
 		t.Skip("skipping test in -short mode")
@@ -1611,6 +1617,7 @@
 }
 
 func TestCancelRequestWithChannelBeforeDo(t *testing.T) {
+	t.Parallel()
 	defer afterTest(t)
 	unblockc := make(chan bool)
 	ts := httptest.NewServer(HandlerFunc(func(w ResponseWriter, r *Request) {
@@ -2488,6 +2495,7 @@
 
 // Issue 6981
 func TestTransportClosesBodyOnError(t *testing.T) {
+	t.Parallel()
 	defer afterTest(t)
 	readBody := make(chan error, 1)
 	ts := httptest.NewServer(HandlerFunc(func(w ResponseWriter, r *Request) {