fix logger [WARNING: DATA RACE] (#1226)

* fix logger [WARNING: DATA RACE]
* add logger unit test for data race
pull/1229/head
Zuolar 2021-03-17 15:08:15 +08:00 committed by GitHub
parent 12cefa2f31
commit 4dcb490489
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 5 deletions

View File

@ -107,10 +107,9 @@ func New(config ...Config) fiber.Handler {
// Set variables
var (
start, stop time.Time
once sync.Once
mu sync.Mutex
errHandler fiber.ErrorHandler
once sync.Once
mu sync.Mutex
errHandler fiber.ErrorHandler
)
// If colors are enabled, check terminal compatibility
@ -145,6 +144,8 @@ func New(config ...Config) fiber.Handler {
errHandler = c.App().Config().ErrorHandler
})
var start, stop time.Time
// Set latency start time
if cfg.enableLatency {
start = time.Now()

View File

@ -4,8 +4,10 @@ import (
"errors"
"fmt"
"io/ioutil"
"net/http"
"net/http/httptest"
"os"
"sync"
"testing"
"github.com/gofiber/fiber/v2"
@ -193,7 +195,7 @@ func Test_Response_Body(t *testing.T) {
expectedGetResponse := fmt.Sprintf("Sample response body")
utils.AssertEqual(t, expectedGetResponse, buf.String())
buf.Reset() // Reset buffer to test POST
buf.Reset() // Reset buffer to test POST
_, err = app.Test(httptest.NewRequest("POST", "/test", nil))
utils.AssertEqual(t, nil, err)
@ -224,6 +226,38 @@ func Test_Logger_AppendUint(t *testing.T) {
utils.AssertEqual(t, "0 5 200", buf.String())
}
// go test -run Test_Logger_Data_Race -race
func Test_Logger_Data_Race(t *testing.T) {
app := fiber.New()
buf := bytebufferpool.Get()
defer bytebufferpool.Put(buf)
app.Use(New(ConfigDefault))
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("hello")
})
var (
resp1, resp2 *http.Response
err1, err2 error
)
wg := &sync.WaitGroup{}
wg.Add(1)
go func() {
resp1, err1 = app.Test(httptest.NewRequest("GET", "/", nil))
wg.Done()
}()
resp2, err2 = app.Test(httptest.NewRequest("GET", "/", nil))
wg.Wait()
utils.AssertEqual(t, nil, err1)
utils.AssertEqual(t, fiber.StatusOK, resp1.StatusCode)
utils.AssertEqual(t, nil, err2)
utils.AssertEqual(t, fiber.StatusOK, resp2.StatusCode)
}
// go test -v -run=^$ -bench=Benchmark_Logger -benchmem -count=4
func Benchmark_Logger(b *testing.B) {
app := fiber.New()