ethlog: verify that Flush is blocking in TestLoggerFlush
This commit is contained in:
parent
793baf060a
commit
a6265cb49a
|
@ -49,22 +49,40 @@ func (ls *TestLogSystem) CheckOutput(t *testing.T, expected string) {
|
|||
}
|
||||
}
|
||||
|
||||
type blockedLogSystem struct {
|
||||
LogSystem
|
||||
unblock chan struct{}
|
||||
}
|
||||
|
||||
func (ls blockedLogSystem) Println(v ...interface{}) {
|
||||
<-ls.unblock
|
||||
ls.LogSystem.Println(v...)
|
||||
}
|
||||
|
||||
func (ls blockedLogSystem) Printf(fmt string, v ...interface{}) {
|
||||
<-ls.unblock
|
||||
ls.LogSystem.Printf(fmt, v...)
|
||||
}
|
||||
|
||||
func TestLoggerFlush(t *testing.T) {
|
||||
Reset()
|
||||
|
||||
logger := NewLogger("TEST")
|
||||
testLogSystem := &TestLogSystem{level: WarnLevel}
|
||||
AddLogSystem(testLogSystem)
|
||||
ls := blockedLogSystem{&TestLogSystem{level: WarnLevel}, make(chan struct{})}
|
||||
AddLogSystem(ls)
|
||||
for i := 0; i < 5; i++ {
|
||||
// these writes shouldn't hang even though ls is blocked
|
||||
logger.Errorf(".")
|
||||
}
|
||||
Flush()
|
||||
output := testLogSystem.Output
|
||||
if output != "[TEST] .[TEST] .[TEST] .[TEST] .[TEST] ." {
|
||||
t.Error("Expected complete logger output '[TEST] .[TEST] .[TEST] .[TEST] .[TEST] .', got ", output)
|
||||
|
||||
beforeFlush := time.Now()
|
||||
time.AfterFunc(80*time.Millisecond, func() { close(ls.unblock) })
|
||||
Flush() // this should hang for approx. 80ms
|
||||
if blockd := time.Now().Sub(beforeFlush); blockd < 80*time.Millisecond {
|
||||
t.Errorf("Flush didn't block long enough, blocked for %v, should've been >= 80ms", blockd)
|
||||
}
|
||||
|
||||
ls.LogSystem.(*TestLogSystem).CheckOutput(t, "[TEST] .[TEST] .[TEST] .[TEST] .[TEST] .")
|
||||
}
|
||||
|
||||
func TestLoggerPrintln(t *testing.T) {
|
||||
|
|
Loading…
Reference in New Issue