forked from mirror/gin
Merge pull request #587 from roylou/develop
Write header immediately in AbortWithStatus(), close #585
This commit is contained in:
commit
4df51ad4f8
|
@ -115,6 +115,7 @@ func (c *Context) Abort() {
|
||||||
// For example, a failed attempt to authentificate a request could use: context.AbortWithStatus(401).
|
// For example, a failed attempt to authentificate a request could use: context.AbortWithStatus(401).
|
||||||
func (c *Context) AbortWithStatus(code int) {
|
func (c *Context) AbortWithStatus(code int) {
|
||||||
c.Status(code)
|
c.Status(code)
|
||||||
|
c.Writer.WriteHeaderNow()
|
||||||
c.Abort()
|
c.Abort()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -556,7 +556,6 @@ func TestContextAbortWithStatus(t *testing.T) {
|
||||||
c, w, _ := CreateTestContext()
|
c, w, _ := CreateTestContext()
|
||||||
c.index = 4
|
c.index = 4
|
||||||
c.AbortWithStatus(401)
|
c.AbortWithStatus(401)
|
||||||
c.Writer.WriteHeaderNow()
|
|
||||||
|
|
||||||
assert.Equal(t, c.index, abortIndex)
|
assert.Equal(t, c.index, abortIndex)
|
||||||
assert.Equal(t, c.Writer.Status(), 401)
|
assert.Equal(t, c.Writer.Status(), 401)
|
||||||
|
@ -607,7 +606,6 @@ func TestContextTypedError(t *testing.T) {
|
||||||
func TestContextAbortWithError(t *testing.T) {
|
func TestContextAbortWithError(t *testing.T) {
|
||||||
c, w, _ := CreateTestContext()
|
c, w, _ := CreateTestContext()
|
||||||
c.AbortWithError(401, errors.New("bad input")).SetMeta("some input")
|
c.AbortWithError(401, errors.New("bad input")).SetMeta("some input")
|
||||||
c.Writer.WriteHeaderNow()
|
|
||||||
|
|
||||||
assert.Equal(t, w.Code, 401)
|
assert.Equal(t, w.Code, 401)
|
||||||
assert.Equal(t, c.index, abortIndex)
|
assert.Equal(t, c.index, abortIndex)
|
||||||
|
|
|
@ -28,14 +28,11 @@ func ErrorLogger() HandlerFunc {
|
||||||
func ErrorLoggerT(typ ErrorType) HandlerFunc {
|
func ErrorLoggerT(typ ErrorType) HandlerFunc {
|
||||||
return func(c *Context) {
|
return func(c *Context) {
|
||||||
c.Next()
|
c.Next()
|
||||||
// avoid writting if we already wrote into the response body
|
|
||||||
if !c.Writer.Written() {
|
|
||||||
errors := c.Errors.ByType(typ)
|
errors := c.Errors.ByType(typ)
|
||||||
if len(errors) > 0 {
|
if len(errors) > 0 {
|
||||||
c.JSON(-1, errors)
|
c.JSON(-1, errors)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Instances a Logger middleware that will write the logs to gin.DefaultWriter
|
// Instances a Logger middleware that will write the logs to gin.DefaultWriter
|
||||||
|
|
|
@ -116,7 +116,7 @@ func TestErrorLogger(t *testing.T) {
|
||||||
|
|
||||||
w = performRequest(router, "GET", "/print")
|
w = performRequest(router, "GET", "/print")
|
||||||
assert.Equal(t, w.Code, 500)
|
assert.Equal(t, w.Code, 500)
|
||||||
assert.Equal(t, w.Body.String(), "hola!")
|
assert.Equal(t, w.Body.String(), "hola!{\"error\":\"this is an error\"}\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSkippingPaths(t *testing.T) {
|
func TestSkippingPaths(t *testing.T) {
|
||||||
|
|
|
@ -39,5 +39,5 @@ func TestPanicWithAbort(t *testing.T) {
|
||||||
// RUN
|
// RUN
|
||||||
w := performRequest(router, "GET", "/recovery")
|
w := performRequest(router, "GET", "/recovery")
|
||||||
// TEST
|
// TEST
|
||||||
assert.Equal(t, w.Code, 500) // NOT SURE
|
assert.Equal(t, w.Code, 400)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue