4c4444b160
Otherwise, caller needs to invoke WriteHeaderNow himself after AbortWithStatus(), which is error-prone. Also modified ErrorLoggerT() such that it always writes log to response body. Otherwise calling AbortWithStatus() will fail to write body because c.Writer.Written() is set true by WriteHeaderNow().
44 lines
1.2 KiB
Go
44 lines
1.2 KiB
Go
// Copyright 2014 Manu Martinez-Almeida. All rights reserved.
|
|
// Use of this source code is governed by a MIT style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package gin
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
// TestPanicInHandler assert that panic has been recovered.
|
|
func TestPanicInHandler(t *testing.T) {
|
|
buffer := new(bytes.Buffer)
|
|
router := New()
|
|
router.Use(RecoveryWithWriter(buffer))
|
|
router.GET("/recovery", func(_ *Context) {
|
|
panic("Oupps, Houston, we have a problem")
|
|
})
|
|
// RUN
|
|
w := performRequest(router, "GET", "/recovery")
|
|
// TEST
|
|
assert.Equal(t, w.Code, 500)
|
|
assert.Contains(t, buffer.String(), "GET /recovery")
|
|
assert.Contains(t, buffer.String(), "Oupps, Houston, we have a problem")
|
|
assert.Contains(t, buffer.String(), "TestPanicInHandler")
|
|
}
|
|
|
|
// TestPanicWithAbort assert that panic has been recovered even if context.Abort was used.
|
|
func TestPanicWithAbort(t *testing.T) {
|
|
router := New()
|
|
router.Use(RecoveryWithWriter(nil))
|
|
router.GET("/recovery", func(c *Context) {
|
|
c.AbortWithStatus(400)
|
|
panic("Oupps, Houston, we have a problem")
|
|
})
|
|
// RUN
|
|
w := performRequest(router, "GET", "/recovery")
|
|
// TEST
|
|
assert.Equal(t, w.Code, 400)
|
|
}
|