Merge pull request #44764 from vvoland/fix-test-race-logs-goroutines-23

[23.0 backport] integration-cli: Fix hanging TestLogsFollowGoroutines*
This commit is contained in:
Sebastiaan van Stijn 2023-01-09 13:00:41 +01:00 committed by GitHub
commit 0f2e972234
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -290,9 +290,17 @@ func (s *DockerCLILogsSuite) TestLogsFollowGoroutinesWithStdout(c *testing.T) {
assert.NilError(c, err)
cmd := exec.Command(dockerBinary, "logs", "-f", id)
r, w := io.Pipe()
defer r.Close()
defer w.Close()
cmd.Stdout = w
assert.NilError(c, cmd.Start())
go cmd.Wait()
defer cmd.Process.Kill()
finished := make(chan error)
go func() {
finished <- cmd.Wait()
}()
// Make sure pipe is written to
chErr := make(chan error)
@ -300,11 +308,15 @@ func (s *DockerCLILogsSuite) TestLogsFollowGoroutinesWithStdout(c *testing.T) {
b := make([]byte, 1)
_, err := r.Read(b)
chErr <- err
r.Close()
}()
// Check read from pipe succeeded
assert.NilError(c, <-chErr)
assert.NilError(c, cmd.Process.Kill())
r.Close()
cmd.Wait()
<-finished
// NGoroutines is not updated right away, so we need to wait before failing
assert.NilError(c, waitForGoroutines(nroutines))
}
@ -318,10 +330,16 @@ func (s *DockerCLILogsSuite) TestLogsFollowGoroutinesNoOutput(c *testing.T) {
assert.NilError(c, err)
cmd := exec.Command(dockerBinary, "logs", "-f", id)
assert.NilError(c, cmd.Start())
go cmd.Wait()
finished := make(chan error)
go func() {
finished <- cmd.Wait()
}()
time.Sleep(200 * time.Millisecond)
assert.NilError(c, cmd.Process.Kill())
cmd.Wait()
<-finished
// NGoroutines is not updated right away, so we need to wait before failing
assert.NilError(c, waitForGoroutines(nroutines))