diff options
| author | Damien Neil <dneil@google.com> | 2022-10-03 16:07:48 -0700 |
|---|---|---|
| committer | Damien Neil <dneil@google.com> | 2022-10-07 16:53:14 +0000 |
| commit | 747e1961e95c2eb3df62e045b90b111c2ceea337 (patch) | |
| tree | 59a7c933ffe695cac3c9c48e8c8e8afa068b0985 /src/net/http/sniff_test.go | |
| parent | 5ca0cd3f1824f189b6c5edf59b669f22a393e2e1 (diff) | |
| download | go-747e1961e95c2eb3df62e045b90b111c2ceea337.tar.xz | |
net/http: refactor tests to run most in HTTP/1 and HTTP/2 modes
Replace the ad-hoc approach to running tests in HTTP/1 and HTTP/2
modes with a 'run' function that executes a test in various modes.
By default, these modes are HTTP/1 and HTTP/2, but tests can
opt-in to HTTPS/1 as well.
The 'run' function also takes care of post-test cleanup (running the
afterTest function).
The 'run' function runs tests in parallel by default. Tests which
can't run in parallel (generally because they use global test hooks)
pass a testNotParallel option to disable parallelism.
Update clientServerTest to use t.Cleanup to clean up after itself,
rather than leaving this up to tests to handle.
Drop an unnecessary mutex in SetReadLoopBeforeNextReadHook.
Test hooks can't be set in parallel, and we want the race detector
to notify us if two simultaneous tests try to set a hook.
Fixes #56032
Change-Id: I16be64913c426fc93d84abc6ad85dbd3bc191224
Reviewed-on: https://go-review.googlesource.com/c/go/+/438137
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Damien Neil <dneil@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'src/net/http/sniff_test.go')
| -rw-r--r-- | src/net/http/sniff_test.go | 39 |
1 files changed, 12 insertions, 27 deletions
diff --git a/src/net/http/sniff_test.go b/src/net/http/sniff_test.go index e91335729a..d6ef40905e 100644 --- a/src/net/http/sniff_test.go +++ b/src/net/http/sniff_test.go @@ -88,13 +88,9 @@ func TestDetectContentType(t *testing.T) { } } -func TestServerContentType_h1(t *testing.T) { testServerContentType(t, h1Mode) } -func TestServerContentType_h2(t *testing.T) { testServerContentType(t, h2Mode) } - -func testServerContentType(t *testing.T, h2 bool) { - setParallel(t) - defer afterTest(t) - cst := newClientServerTest(t, h2, HandlerFunc(func(w ResponseWriter, r *Request) { +func TestServerContentTypeSniff(t *testing.T) { run(t, testServerContentTypeSniff) } +func testServerContentTypeSniff(t *testing.T, mode testMode) { + cst := newClientServerTest(t, mode, HandlerFunc(func(w ResponseWriter, r *Request) { i, _ := strconv.Atoi(r.FormValue("i")) tt := sniffTests[i] n, err := w.Write(tt.data) @@ -134,15 +130,12 @@ func testServerContentType(t *testing.T, h2 bool) { // Issue 5953: shouldn't sniff if the handler set a Content-Type header, // even if it's the empty string. -func TestServerIssue5953_h1(t *testing.T) { testServerIssue5953(t, h1Mode) } -func TestServerIssue5953_h2(t *testing.T) { testServerIssue5953(t, h2Mode) } -func testServerIssue5953(t *testing.T, h2 bool) { - defer afterTest(t) - cst := newClientServerTest(t, h2, HandlerFunc(func(w ResponseWriter, r *Request) { +func TestServerIssue5953(t *testing.T) { run(t, testServerIssue5953) } +func testServerIssue5953(t *testing.T, mode testMode) { + cst := newClientServerTest(t, mode, HandlerFunc(func(w ResponseWriter, r *Request) { w.Header()["Content-Type"] = []string{""} fmt.Fprintf(w, "<html><head></head><body>hi</body></html>") })) - defer cst.close() resp, err := cst.c.Get(cst.ts.URL) if err != nil { @@ -173,11 +166,8 @@ func (b *byteAtATimeReader) Read(p []byte) (n int, err error) { return 1, nil } -func TestContentTypeWithVariousSources_h1(t *testing.T) { testContentTypeWithVariousSources(t, h1Mode) } -func TestContentTypeWithVariousSources_h2(t *testing.T) { testContentTypeWithVariousSources(t, h2Mode) } -func testContentTypeWithVariousSources(t *testing.T, h2 bool) { - defer afterTest(t) - +func TestContentTypeWithVariousSources(t *testing.T) { run(t, testContentTypeWithVariousSources) } +func testContentTypeWithVariousSources(t *testing.T, mode testMode) { const ( input = "\n<html>\n\t<head>\n" expected = "text/html; charset=utf-8" @@ -239,8 +229,7 @@ func testContentTypeWithVariousSources(t *testing.T, h2 bool) { }, }} { t.Run(test.name, func(t *testing.T) { - cst := newClientServerTest(t, h2, HandlerFunc(test.handler)) - defer cst.close() + cst := newClientServerTest(t, mode, HandlerFunc(test.handler)) resp, err := cst.c.Get(cst.ts.URL) if err != nil { @@ -265,12 +254,9 @@ func testContentTypeWithVariousSources(t *testing.T, h2 bool) { } } -func TestSniffWriteSize_h1(t *testing.T) { testSniffWriteSize(t, h1Mode) } -func TestSniffWriteSize_h2(t *testing.T) { testSniffWriteSize(t, h2Mode) } -func testSniffWriteSize(t *testing.T, h2 bool) { - setParallel(t) - defer afterTest(t) - cst := newClientServerTest(t, h2, HandlerFunc(func(w ResponseWriter, r *Request) { +func TestSniffWriteSize(t *testing.T) { run(t, testSniffWriteSize) } +func testSniffWriteSize(t *testing.T, mode testMode) { + cst := newClientServerTest(t, mode, HandlerFunc(func(w ResponseWriter, r *Request) { size, _ := strconv.Atoi(r.FormValue("size")) written, err := io.WriteString(w, strings.Repeat("a", size)) if err != nil { @@ -281,7 +267,6 @@ func testSniffWriteSize(t *testing.T, h2 bool) { t.Errorf("write of %d bytes wrote %d bytes", size, written) } })) - defer cst.close() for _, size := range []int{0, 1, 200, 600, 999, 1000, 1023, 1024, 512 << 10, 1 << 20} { res, err := cst.c.Get(fmt.Sprintf("%s/?size=%d", cst.ts.URL, size)) if err != nil { |
