testing: report the failing test in a late log panic

Updates #29388

Change-Id: Icb0e6048d05fde7a5486b923ff62147edb5c8dac
Reviewed-on: https://go-review.googlesource.com/c/157617
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
This commit is contained in:
Ian Lance Taylor 2019-01-11 14:06:45 -08:00
parent 0456036e28
commit 006a5e7d00
2 changed files with 62 additions and 10 deletions

View file

@ -618,17 +618,20 @@ func (c *common) log(s string) {
func (c *common) logDepth(s string, depth int) {
c.mu.Lock()
defer c.mu.Unlock()
// If this test has already finished try and log this message with our parent
// with this test name tagged so we know where it came from.
// If we don't have a parent panic.
if c.done {
if c.parent != nil {
c.parent.logDepth(s, depth+1)
} else {
panic("Log in goroutine after " + c.name + " has completed")
}
} else {
if !c.done {
c.output = append(c.output, c.decorate(s, depth+1)...)
} else {
// This test has already finished. Try and log this message
// with our parent. If we don't have a parent, panic.
for parent := c.parent; parent != nil; parent = parent.parent {
parent.mu.Lock()
defer parent.mu.Unlock()
if !parent.done {
parent.output = append(parent.output, parent.decorate(s, depth+1)...)
return
}
}
panic("Log in goroutine after " + c.name + " has completed")
}
}