|
@@ -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))
|