1
0
mirror of https://github.com/golang/go synced 2024-11-24 10:20:01 -07:00

cmd/go: remove arbitrary sleep in TestScript/test_chatty_parallel_success_sleepy

(Also rename it to no longer describe itself in terms of sleeping.)

This test previously relied on the scheduler to wake up a goroutine to
write the "--- PASS: TestFast" line within 100ms of TestFast actually
finishing. On some platforms, even that long a delay is apparently too
short.

Instead, we now use a deterministic "=== RUN" line instead of a
timing-dependent "--- PASS" line to interrupt the output.

Fixes #51221

Change-Id: I3997640fb7577e29e3866a82d4d49a3a70a4b033
Reviewed-on: https://go-review.googlesource.com/c/go/+/386154
Trust: Bryan Mills <bcmills@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Bryan C. Mills 2022-02-16 10:01:20 -05:00 committed by Bryan Mills
parent ca1e509552
commit 1ac1658642
2 changed files with 41 additions and 39 deletions

View File

@ -0,0 +1,41 @@
# Run parallel chatty tests. Assert on CONT lines. This test makes sure that
# multiple parallel outputs have the appropriate CONT lines between them.
go test -parallel 3 chatty_parallel -v
stdout '=== RUN TestInterruptor/interruption\n=== CONT TestLog\n chatty_parallel_test.go:28: this is the second TestLog log\n--- PASS: TestLog \([0-9.]{4}s\)'
-- go.mod --
module chatty_parallel
go 1.18
-- chatty_parallel_test.go --
package chatty_parallel_test
import (
"testing"
)
var (
afterFirstLog = make(chan struct{})
afterSubTest = make(chan struct{})
afterSecondLog = make(chan struct{})
)
func TestInterruptor(t *testing.T) {
t.Parallel()
<-afterFirstLog
t.Run("interruption", func (t *testing.T) {})
close(afterSubTest)
<-afterSecondLog // Delay the "PASS: TestInterruptor" line until after "CONT TestLog".
}
func TestLog(t *testing.T) {
t.Parallel()
t.Logf("this is the first TestLog log")
close(afterFirstLog)
<-afterSubTest
t.Logf("this is the second TestLog log")
close(afterSecondLog)
}

View File

@ -1,39 +0,0 @@
# Run parallel chatty tests. Assert on CONT lines. This test makes sure that
# multiple parallel outputs have the appropriate CONT lines between them.
go test -parallel 3 chatty_parallel_test.go -v
stdout '--- PASS: TestFast \([0-9.]{4}s\)\n=== CONT TestSlow\n chatty_parallel_test.go:31: this is the second TestSlow log\n--- PASS: TestSlow \([0-9.]{4}s\)'
-- chatty_parallel_test.go --
package chatty_parallel_test
import (
"testing"
"time"
)
var (
run = make(chan struct{})
afterFirstLog = make(chan struct{})
afterPass = make(chan struct{})
)
func TestFast(t *testing.T) {
t.Parallel()
<-afterFirstLog
t.Cleanup(func() {
close(afterPass)
})
}
func TestSlow(t *testing.T) {
t.Parallel()
t.Logf("this is the first TestSlow log")
close(afterFirstLog)
<-afterPass
time.Sleep(100 * time.Millisecond)
t.Logf("this is the second TestSlow log")
}