mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-13 20:24:00 +02:00
@@ -18,9 +18,7 @@ import (
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/gohugoio/hugo/common/loggers"
|
||||
"github.com/gohugoio/hugo/helpers"
|
||||
|
||||
qt "github.com/frankban/quicktest"
|
||||
@@ -55,60 +53,6 @@ func TestResolveMarkup(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestDistinctLoggerDoesNotLockOnWarningPanic(t *testing.T) {
|
||||
// Testing to make sure logger mutex doesn't lock if warnings cause panics.
|
||||
// func Warnf() of DistinctLogger is defined in general.go
|
||||
l := helpers.NewDistinctLogger(loggers.NewWarningLogger())
|
||||
|
||||
// Set PanicOnWarning to true to reproduce issue 9380
|
||||
// Ensure global variable loggers.PanicOnWarning is reset to old value after test
|
||||
if !loggers.PanicOnWarning.Load() {
|
||||
loggers.PanicOnWarning.Store(true)
|
||||
defer func() {
|
||||
loggers.PanicOnWarning.Store(false)
|
||||
}()
|
||||
}
|
||||
|
||||
// Establish timeout in case a lock occurs:
|
||||
timeIsUp := make(chan bool)
|
||||
timeOutSeconds := 1
|
||||
go func() {
|
||||
time.Sleep(time.Second * time.Duration(timeOutSeconds))
|
||||
timeIsUp <- true
|
||||
}()
|
||||
|
||||
// Attempt to run multiple logging threads in parallel
|
||||
counterC := make(chan int)
|
||||
goroutines := 5
|
||||
|
||||
for i := 0; i < goroutines; i++ {
|
||||
go func() {
|
||||
defer func() {
|
||||
// Intentional panic successfully recovered - notify counter channel
|
||||
recover()
|
||||
counterC <- 1
|
||||
}()
|
||||
|
||||
l.Warnf("Placeholder template message: %v", "In this test, logging a warning causes a panic.")
|
||||
}()
|
||||
}
|
||||
|
||||
// All goroutines should complete before timeout
|
||||
var counter int
|
||||
for {
|
||||
select {
|
||||
case <-counterC:
|
||||
counter++
|
||||
if counter == goroutines {
|
||||
return
|
||||
}
|
||||
case <-timeIsUp:
|
||||
t.Errorf("Unable to log warnings with --panicOnWarning within alloted time of: %v seconds. Investigate possible mutex locking on panic in distinct warning logger.", timeOutSeconds)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestFirstUpper(t *testing.T) {
|
||||
for i, this := range []struct {
|
||||
in string
|
||||
|
Reference in New Issue
Block a user