mirror of
https://github.com/golang/go
synced 2024-11-22 02:44:39 -07:00
net/http: unify the confusingly-named serve_test and server_test
One was tiny. One was gigantic. Now one is gone and one is giganticer. No code changes. R=golang-dev, adg CC=golang-dev https://golang.org/cl/13025043
This commit is contained in:
parent
999a36f9af
commit
95e0a8c277
@ -247,6 +247,81 @@ func TestHostHandlers(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var serveMuxRegister = []struct {
|
||||||
|
pattern string
|
||||||
|
h Handler
|
||||||
|
}{
|
||||||
|
{"/dir/", serve(200)},
|
||||||
|
{"/search", serve(201)},
|
||||||
|
{"codesearch.google.com/search", serve(202)},
|
||||||
|
{"codesearch.google.com/", serve(203)},
|
||||||
|
}
|
||||||
|
|
||||||
|
// serve returns a handler that sends a response with the given code.
|
||||||
|
func serve(code int) HandlerFunc {
|
||||||
|
return func(w ResponseWriter, r *Request) {
|
||||||
|
w.WriteHeader(code)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var serveMuxTests = []struct {
|
||||||
|
method string
|
||||||
|
host string
|
||||||
|
path string
|
||||||
|
code int
|
||||||
|
pattern string
|
||||||
|
}{
|
||||||
|
{"GET", "google.com", "/", 404, ""},
|
||||||
|
{"GET", "google.com", "/dir", 301, "/dir/"},
|
||||||
|
{"GET", "google.com", "/dir/", 200, "/dir/"},
|
||||||
|
{"GET", "google.com", "/dir/file", 200, "/dir/"},
|
||||||
|
{"GET", "google.com", "/search", 201, "/search"},
|
||||||
|
{"GET", "google.com", "/search/", 404, ""},
|
||||||
|
{"GET", "google.com", "/search/foo", 404, ""},
|
||||||
|
{"GET", "codesearch.google.com", "/search", 202, "codesearch.google.com/search"},
|
||||||
|
{"GET", "codesearch.google.com", "/search/", 203, "codesearch.google.com/"},
|
||||||
|
{"GET", "codesearch.google.com", "/search/foo", 203, "codesearch.google.com/"},
|
||||||
|
{"GET", "codesearch.google.com", "/", 203, "codesearch.google.com/"},
|
||||||
|
{"GET", "images.google.com", "/search", 201, "/search"},
|
||||||
|
{"GET", "images.google.com", "/search/", 404, ""},
|
||||||
|
{"GET", "images.google.com", "/search/foo", 404, ""},
|
||||||
|
{"GET", "google.com", "/../search", 301, "/search"},
|
||||||
|
{"GET", "google.com", "/dir/..", 301, ""},
|
||||||
|
{"GET", "google.com", "/dir/..", 301, ""},
|
||||||
|
{"GET", "google.com", "/dir/./file", 301, "/dir/"},
|
||||||
|
|
||||||
|
// The /foo -> /foo/ redirect applies to CONNECT requests
|
||||||
|
// but the path canonicalization does not.
|
||||||
|
{"CONNECT", "google.com", "/dir", 301, "/dir/"},
|
||||||
|
{"CONNECT", "google.com", "/../search", 404, ""},
|
||||||
|
{"CONNECT", "google.com", "/dir/..", 200, "/dir/"},
|
||||||
|
{"CONNECT", "google.com", "/dir/..", 200, "/dir/"},
|
||||||
|
{"CONNECT", "google.com", "/dir/./file", 200, "/dir/"},
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestServeMuxHandler(t *testing.T) {
|
||||||
|
mux := NewServeMux()
|
||||||
|
for _, e := range serveMuxRegister {
|
||||||
|
mux.Handle(e.pattern, e.h)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range serveMuxTests {
|
||||||
|
r := &Request{
|
||||||
|
Method: tt.method,
|
||||||
|
Host: tt.host,
|
||||||
|
URL: &url.URL{
|
||||||
|
Path: tt.path,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
h, pattern := mux.Handler(r)
|
||||||
|
rr := httptest.NewRecorder()
|
||||||
|
h.ServeHTTP(rr, r)
|
||||||
|
if pattern != tt.pattern || rr.Code != tt.code {
|
||||||
|
t.Errorf("%s %s %s = %d, %q, want %d, %q", tt.method, tt.host, tt.path, rr.Code, pattern, tt.code, tt.pattern)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Tests for http://code.google.com/p/go/issues/detail?id=900
|
// Tests for http://code.google.com/p/go/issues/detail?id=900
|
||||||
func TestMuxRedirectLeadingSlashes(t *testing.T) {
|
func TestMuxRedirectLeadingSlashes(t *testing.T) {
|
||||||
paths := []string{"//foo.txt", "///foo.txt", "/../../foo.txt"}
|
paths := []string{"//foo.txt", "///foo.txt", "/../../foo.txt"}
|
||||||
@ -981,6 +1056,23 @@ func TestRedirectMunging(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRedirectBadPath(t *testing.T) {
|
||||||
|
// This used to crash. It's not valid input (bad path), but it
|
||||||
|
// shouldn't crash.
|
||||||
|
rr := httptest.NewRecorder()
|
||||||
|
req := &Request{
|
||||||
|
Method: "GET",
|
||||||
|
URL: &url.URL{
|
||||||
|
Scheme: "http",
|
||||||
|
Path: "not-empty-but-no-leading-slash", // bogus
|
||||||
|
},
|
||||||
|
}
|
||||||
|
Redirect(rr, req, "", 304)
|
||||||
|
if rr.Code != 304 {
|
||||||
|
t.Errorf("Code = %d; want 304", rr.Code)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TestZeroLengthPostAndResponse exercises an optimization done by the Transport:
|
// TestZeroLengthPostAndResponse exercises an optimization done by the Transport:
|
||||||
// when there is no body (either because the method doesn't permit a body, or an
|
// when there is no body (either because the method doesn't permit a body, or an
|
||||||
// explicit Content-Length of zero is present), then the transport can re-use the
|
// explicit Content-Length of zero is present), then the transport can re-use the
|
||||||
|
@ -1,104 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package http_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
. "net/http"
|
|
||||||
"net/http/httptest"
|
|
||||||
"net/url"
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
var serveMuxRegister = []struct {
|
|
||||||
pattern string
|
|
||||||
h Handler
|
|
||||||
}{
|
|
||||||
{"/dir/", serve(200)},
|
|
||||||
{"/search", serve(201)},
|
|
||||||
{"codesearch.google.com/search", serve(202)},
|
|
||||||
{"codesearch.google.com/", serve(203)},
|
|
||||||
}
|
|
||||||
|
|
||||||
// serve returns a handler that sends a response with the given code.
|
|
||||||
func serve(code int) HandlerFunc {
|
|
||||||
return func(w ResponseWriter, r *Request) {
|
|
||||||
w.WriteHeader(code)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var serveMuxTests = []struct {
|
|
||||||
method string
|
|
||||||
host string
|
|
||||||
path string
|
|
||||||
code int
|
|
||||||
pattern string
|
|
||||||
}{
|
|
||||||
{"GET", "google.com", "/", 404, ""},
|
|
||||||
{"GET", "google.com", "/dir", 301, "/dir/"},
|
|
||||||
{"GET", "google.com", "/dir/", 200, "/dir/"},
|
|
||||||
{"GET", "google.com", "/dir/file", 200, "/dir/"},
|
|
||||||
{"GET", "google.com", "/search", 201, "/search"},
|
|
||||||
{"GET", "google.com", "/search/", 404, ""},
|
|
||||||
{"GET", "google.com", "/search/foo", 404, ""},
|
|
||||||
{"GET", "codesearch.google.com", "/search", 202, "codesearch.google.com/search"},
|
|
||||||
{"GET", "codesearch.google.com", "/search/", 203, "codesearch.google.com/"},
|
|
||||||
{"GET", "codesearch.google.com", "/search/foo", 203, "codesearch.google.com/"},
|
|
||||||
{"GET", "codesearch.google.com", "/", 203, "codesearch.google.com/"},
|
|
||||||
{"GET", "images.google.com", "/search", 201, "/search"},
|
|
||||||
{"GET", "images.google.com", "/search/", 404, ""},
|
|
||||||
{"GET", "images.google.com", "/search/foo", 404, ""},
|
|
||||||
{"GET", "google.com", "/../search", 301, "/search"},
|
|
||||||
{"GET", "google.com", "/dir/..", 301, ""},
|
|
||||||
{"GET", "google.com", "/dir/..", 301, ""},
|
|
||||||
{"GET", "google.com", "/dir/./file", 301, "/dir/"},
|
|
||||||
|
|
||||||
// The /foo -> /foo/ redirect applies to CONNECT requests
|
|
||||||
// but the path canonicalization does not.
|
|
||||||
{"CONNECT", "google.com", "/dir", 301, "/dir/"},
|
|
||||||
{"CONNECT", "google.com", "/../search", 404, ""},
|
|
||||||
{"CONNECT", "google.com", "/dir/..", 200, "/dir/"},
|
|
||||||
{"CONNECT", "google.com", "/dir/..", 200, "/dir/"},
|
|
||||||
{"CONNECT", "google.com", "/dir/./file", 200, "/dir/"},
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestServeMuxHandler(t *testing.T) {
|
|
||||||
mux := NewServeMux()
|
|
||||||
for _, e := range serveMuxRegister {
|
|
||||||
mux.Handle(e.pattern, e.h)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, tt := range serveMuxTests {
|
|
||||||
r := &Request{
|
|
||||||
Method: tt.method,
|
|
||||||
Host: tt.host,
|
|
||||||
URL: &url.URL{
|
|
||||||
Path: tt.path,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
h, pattern := mux.Handler(r)
|
|
||||||
rr := httptest.NewRecorder()
|
|
||||||
h.ServeHTTP(rr, r)
|
|
||||||
if pattern != tt.pattern || rr.Code != tt.code {
|
|
||||||
t.Errorf("%s %s %s = %d, %q, want %d, %q", tt.method, tt.host, tt.path, rr.Code, pattern, tt.code, tt.pattern)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestServerRedirect(t *testing.T) {
|
|
||||||
// This used to crash. It's not valid input (bad path), but it
|
|
||||||
// shouldn't crash.
|
|
||||||
rr := httptest.NewRecorder()
|
|
||||||
req := &Request{
|
|
||||||
Method: "GET",
|
|
||||||
URL: &url.URL{
|
|
||||||
Scheme: "http",
|
|
||||||
Path: "not-empty-but-no-leading-slash", // bogus
|
|
||||||
},
|
|
||||||
}
|
|
||||||
Redirect(rr, req, "", 304)
|
|
||||||
if rr.Code != 304 {
|
|
||||||
t.Errorf("Code = %d; want 304", rr.Code)
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user