aboutsummaryrefslogtreecommitdiff
path: root/src/testing/testing.go
diff options
context:
space:
mode:
authorDamien Neil <dneil@google.com>2025-05-23 16:21:19 -0700
committerGopher Robot <gobot@golang.org>2025-05-30 09:23:37 -0700
commit8cd7f17248b9215530e9ce9ed7831fc24b5eeef7 (patch)
tree5c7b0544fac4e9ce9c8509dae733d354cf6ad81b /src/testing/testing.go
parent29782bd347a1c707b6804ea6ee7da3a70ba9fd4a (diff)
downloadgo-8cd7f17248b9215530e9ce9ed7831fc24b5eeef7.tar.xz
testing, testing/synctest: report correct duration after panics
Report the correct wall-clock test duration after handling a panic in a synctest.Test bubble. Fixes #73852 Change-Id: I053262e5eac2dd9d5938b17c3093cbc3fa115a0d Reviewed-on: https://go-review.googlesource.com/c/go/+/676695 Auto-Submit: Damien Neil <dneil@google.com> Reviewed-by: Alan Donovan <adonovan@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/testing/testing.go')
-rw-r--r--src/testing/testing.go6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/testing/testing.go b/src/testing/testing.go
index 43ef9eef09..b5305f29cc 100644
--- a/src/testing/testing.go
+++ b/src/testing/testing.go
@@ -1851,7 +1851,8 @@ func tRunner(t *T, fn func(t *T)) {
t.Logf("cleanup panicked with %v", r)
}
// Flush the output log up to the root before dying.
- for root := &t.common; root.parent != nil; root = root.parent {
+ // Skip this if this *T is a synctest bubble, because we're not a subtest.
+ for root := &t.common; !root.isSynctest && root.parent != nil; root = root.parent {
root.mu.Lock()
root.duration += highPrecisionTimeSince(root.start)
d := root.duration
@@ -2013,7 +2014,7 @@ func (t *T) Run(name string, f func(t *T)) bool {
// It is called by synctest.Test, from within an already-created bubble.
//
//go:linkname testingSynctestTest testing/synctest.testingSynctestTest
-func testingSynctestTest(t *T, f func(*T)) {
+func testingSynctestTest(t *T, f func(*T)) (ok bool) {
if t.cleanupStarted.Load() {
panic("testing: synctest.Run called during t.Cleanup")
}
@@ -2044,6 +2045,7 @@ func testingSynctestTest(t *T, f func(*T)) {
// parent tests by one of the subtests. Continue aborting up the chain.
runtime.Goexit()
}
+ return !t2.failed
}
// Deadline reports the time at which the test binary will have