Merge pull request #587 from roylou/develop
Write header immediately in AbortWithStatus(), close #585
This commit is contained in:
		@ -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)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user