Skip to content

Commit

Permalink
Merge pull request moby#44749 from vvoland/fix-test-race-logs-goroutines
Browse files Browse the repository at this point in the history
integration-cli: Fix hangs in TestLogsFollowGoroutines*
  • Loading branch information
thaJeztah committed Jan 9, 2023
2 parents 6834304 + deb4910 commit eaa7b49
Showing 1 changed file with 23 additions and 5 deletions.
28 changes: 23 additions & 5 deletions integration-cli/docker_cli_logs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -290,21 +290,33 @@ 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)
go func() {
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))
}
Expand All @@ -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))
Expand Down

0 comments on commit eaa7b49

Please sign in to comment.