diff --git a/api_test.go b/api_test.go index 928daf963c..9ab00cd759 100644 --- a/api_test.go +++ b/api_test.go @@ -461,26 +461,48 @@ func TestGetContainersTop(t *testing.T) { container, err := builder.Create( &Config{ - Image: GetTestImage(runtime).ID, - Cmd: []string{"/bin/sh", "-c", "sleep 2"}, + Image: GetTestImage(runtime).ID, + Cmd: []string{"/bin/sh", "-c", "cat"}, + OpenStdin: true, }, ) if err != nil { t.Fatal(err) } defer runtime.Destroy(container) + defer func() { + // Make sure the process dies before destorying runtime + container.stdin.Close() + container.WaitTimeout(2 * time.Second) + }() + hostConfig := &HostConfig{} if err := container.Start(hostConfig); err != nil { t.Fatal(err) } - // Give some time to the process to start - container.WaitTimeout(500 * time.Millisecond) + setTimeout(t, "Waiting for the container to be started timed out", 10*time.Second, func() { + for { + if container.State.Running { + break + } + time.Sleep(10 * time.Millisecond) + } + }) if !container.State.Running { - t.Errorf("Container should be running") + t.Fatalf("Container should be running") } + // Make sure sh spawn up cat + setTimeout(t, "read/write assertion timed out", 2*time.Second, func() { + in, _ := container.StdinPipe() + out, _ := container.StdoutPipe() + if err := assertPipe("hello\n", "hello", out, in, 15); err != nil { + t.Fatal(err) + } + }) + r := httptest.NewRecorder() req, err := http.NewRequest("GET", "/"+container.ID+"/top?ps_args=u", bytes.NewReader([]byte{})) if err != nil { @@ -504,11 +526,11 @@ func TestGetContainersTop(t *testing.T) { if len(procs.Processes) != 2 { t.Fatalf("Expected 2 processes, found %d.", len(procs.Processes)) } - if procs.Processes[0][10] != "/bin/sh" && procs.Processes[0][10] != "sleep" { - t.Fatalf("Expected `sleep` or `/bin/sh`, found %s.", procs.Processes[0][10]) + if procs.Processes[0][10] != "/bin/sh" && procs.Processes[0][10] != "cat" { + t.Fatalf("Expected `cat` or `/bin/sh`, found %s.", procs.Processes[0][10]) } - if procs.Processes[1][10] != "/bin/sh" && procs.Processes[1][10] != "sleep" { - t.Fatalf("Expected `sleep` or `/bin/sh`, found %s.", procs.Processes[1][10]) + if procs.Processes[1][10] != "/bin/sh" && procs.Processes[1][10] != "cat" { + t.Fatalf("Expected `cat` or `/bin/sh`, found %s.", procs.Processes[1][10]) } }