mirror of https://github.com/stretchr/testify.git
assert: fix httpCode and HTTPBody occur panic when http.Handler read body
parent
89920137cd
commit
ce5c2b684b
|
@ -12,7 +12,7 @@ import (
|
||||||
// an error if building a new request fails.
|
// an error if building a new request fails.
|
||||||
func httpCode(handler http.HandlerFunc, method, url string, values url.Values) (int, error) {
|
func httpCode(handler http.HandlerFunc, method, url string, values url.Values) (int, error) {
|
||||||
w := httptest.NewRecorder()
|
w := httptest.NewRecorder()
|
||||||
req, err := http.NewRequest(method, url, nil)
|
req, err := http.NewRequest(method, url, http.NoBody)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return -1, err
|
return -1, err
|
||||||
}
|
}
|
||||||
|
@ -116,7 +116,7 @@ func HTTPBody(handler http.HandlerFunc, method, url string, values url.Values) s
|
||||||
if len(values) > 0 {
|
if len(values) > 0 {
|
||||||
url += "?" + values.Encode()
|
url += "?" + values.Encode()
|
||||||
}
|
}
|
||||||
req, err := http.NewRequest(method, url, nil)
|
req, err := http.NewRequest(method, url, http.NoBody)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package assert
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -11,6 +12,12 @@ func httpOK(w http.ResponseWriter, r *http.Request) {
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func httpReadBody(w http.ResponseWriter, r *http.Request) {
|
||||||
|
_, _ = io.Copy(io.Discard, r.Body)
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
_, _ = w.Write([]byte("hello"))
|
||||||
|
}
|
||||||
|
|
||||||
func httpRedirect(w http.ResponseWriter, r *http.Request) {
|
func httpRedirect(w http.ResponseWriter, r *http.Request) {
|
||||||
w.WriteHeader(http.StatusTemporaryRedirect)
|
w.WriteHeader(http.StatusTemporaryRedirect)
|
||||||
}
|
}
|
||||||
|
@ -41,6 +48,10 @@ func TestHTTPSuccess(t *testing.T) {
|
||||||
mockT4 := new(testing.T)
|
mockT4 := new(testing.T)
|
||||||
assert.Equal(HTTPSuccess(mockT4, httpStatusCode, "GET", "/", nil), false)
|
assert.Equal(HTTPSuccess(mockT4, httpStatusCode, "GET", "/", nil), false)
|
||||||
assert.True(mockT4.Failed())
|
assert.True(mockT4.Failed())
|
||||||
|
|
||||||
|
mockT5 := new(testing.T)
|
||||||
|
assert.Equal(HTTPSuccess(mockT5, httpReadBody, "POST", "/", nil), true)
|
||||||
|
assert.False(mockT5.Failed())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHTTPRedirect(t *testing.T) {
|
func TestHTTPRedirect(t *testing.T) {
|
||||||
|
@ -122,7 +133,7 @@ func TestHTTPStatusesWrapper(t *testing.T) {
|
||||||
|
|
||||||
func httpHelloName(w http.ResponseWriter, r *http.Request) {
|
func httpHelloName(w http.ResponseWriter, r *http.Request) {
|
||||||
name := r.FormValue("name")
|
name := r.FormValue("name")
|
||||||
_, _ = w.Write([]byte(fmt.Sprintf("Hello, %s!", name)))
|
_, _ = fmt.Fprintf(w, "Hello, %s!", name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHTTPRequestWithNoParams(t *testing.T) {
|
func TestHTTPRequestWithNoParams(t *testing.T) {
|
||||||
|
@ -165,6 +176,8 @@ func TestHttpBody(t *testing.T) {
|
||||||
assert.False(HTTPBodyNotContains(mockT, httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "Hello, World!"))
|
assert.False(HTTPBodyNotContains(mockT, httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "Hello, World!"))
|
||||||
assert.False(HTTPBodyNotContains(mockT, httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "World"))
|
assert.False(HTTPBodyNotContains(mockT, httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "World"))
|
||||||
assert.True(HTTPBodyNotContains(mockT, httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "world"))
|
assert.True(HTTPBodyNotContains(mockT, httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "world"))
|
||||||
|
|
||||||
|
assert.True(HTTPBodyContains(mockT, httpReadBody, "GET", "/", nil, "hello"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHttpBodyWrappers(t *testing.T) {
|
func TestHttpBodyWrappers(t *testing.T) {
|
||||||
|
@ -178,5 +191,4 @@ func TestHttpBodyWrappers(t *testing.T) {
|
||||||
assert.False(mockAssert.HTTPBodyNotContains(httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "Hello, World!"))
|
assert.False(mockAssert.HTTPBodyNotContains(httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "Hello, World!"))
|
||||||
assert.False(mockAssert.HTTPBodyNotContains(httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "World"))
|
assert.False(mockAssert.HTTPBodyNotContains(httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "World"))
|
||||||
assert.True(mockAssert.HTTPBodyNotContains(httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "world"))
|
assert.True(mockAssert.HTTPBodyNotContains(httpHelloName, "GET", "/", url.Values{"name": []string{"World"}}, "world"))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue