Merge pull request #1394 from crosbymichael/test-io

Remove Stdio usage in tests
This commit is contained in:
Kenfe-Mickaël Laventure 2017-08-22 15:22:56 -07:00 committed by GitHub
commit 0e1f6c5da6
4 changed files with 25 additions and 33 deletions

View File

@ -209,7 +209,7 @@ func TestDaemonRestart(t *testing.T) {
} }
defer container.Delete(ctx, WithSnapshotCleanup) defer container.Delete(ctx, WithSnapshotCleanup)
task, err := container.NewTask(ctx, Stdio) task, err := container.NewTask(ctx, empty())
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return

View File

@ -20,6 +20,11 @@ import (
) )
func empty() IOCreation { func empty() IOCreation {
// TODO (@mlaventure) windows searches for pipes
// when none are provided
if runtime.GOOS == "windows" {
return Stdio
}
return NullIO return NullIO
} }
@ -117,7 +122,7 @@ func TestContainerStart(t *testing.T) {
} }
defer container.Delete(ctx, WithSnapshotCleanup) defer container.Delete(ctx, WithSnapshotCleanup)
task, err := container.NewTask(ctx, Stdio) task, err := container.NewTask(ctx, empty())
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
@ -471,32 +476,12 @@ func TestContainerCloseIO(t *testing.T) {
t.Error(err) t.Error(err)
return return
} }
if _, err := fmt.Fprint(w, expected); err != nil {
t.Error(err)
}
w.Close() w.Close()
if err := task.CloseIO(ctx, WithStdinCloser); err != nil { if err := task.CloseIO(ctx, WithStdinCloser); err != nil {
t.Error(err) t.Error(err)
} }
<-statusC <-statusC
if _, err := task.Delete(ctx); err != nil {
t.Error(err)
}
output := stdout.String()
if runtime.GOOS == "windows" {
// On windows we use more and it always adds an extra newline
// remove it here
output = strings.TrimSuffix(output, newLine)
}
if output != expected {
t.Errorf("expected output %q but received %q", expected, output)
}
} }
func TestContainerAttach(t *testing.T) { func TestContainerAttach(t *testing.T) {
@ -727,7 +712,7 @@ func TestContainerKill(t *testing.T) {
} }
} }
spec, err := generateSpec(withImageConfig(ctx, image), withCat()) spec, err := generateSpec(withImageConfig(ctx, image), withProcessArgs("sleep", "10"))
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
@ -739,7 +724,7 @@ func TestContainerKill(t *testing.T) {
} }
defer container.Delete(ctx) defer container.Delete(ctx)
task, err := container.NewTask(ctx, Stdio) task, err := container.NewTask(ctx, empty())
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
@ -808,7 +793,7 @@ func TestContainerNoBinaryExists(t *testing.T) {
} }
defer container.Delete(ctx, WithSnapshotCleanup) defer container.Delete(ctx, WithSnapshotCleanup)
task, err := container.NewTask(ctx, Stdio) task, err := container.NewTask(ctx, empty())
switch runtime.GOOS { switch runtime.GOOS {
case "windows": case "windows":
if err != nil { if err != nil {
@ -942,7 +927,7 @@ func TestUserNamespaces(t *testing.T) {
} }
defer container.Delete(ctx, WithSnapshotCleanup) defer container.Delete(ctx, WithSnapshotCleanup)
task, err := container.NewTask(ctx, Stdio) task, err := container.NewTask(ctx, empty())
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
@ -1018,7 +1003,7 @@ func TestWaitStoppedTask(t *testing.T) {
} }
defer container.Delete(ctx, WithSnapshotCleanup) defer container.Delete(ctx, WithSnapshotCleanup)
task, err := container.NewTask(ctx, Stdio) task, err := container.NewTask(ctx, empty())
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
@ -1193,7 +1178,7 @@ func TestTaskForceDelete(t *testing.T) {
} }
defer container.Delete(ctx, WithSnapshotCleanup) defer container.Delete(ctx, WithSnapshotCleanup)
task, err := container.NewTask(ctx, Stdio) task, err := container.NewTask(ctx, empty())
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
@ -1246,7 +1231,7 @@ func TestProcessForceDelete(t *testing.T) {
} }
defer container.Delete(ctx, WithSnapshotCleanup) defer container.Delete(ctx, WithSnapshotCleanup)
task, err := container.NewTask(ctx, Stdio) task, err := container.NewTask(ctx, empty())
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return

View File

@ -190,10 +190,6 @@ func (p *process) Delete(ctx context.Context, opts ...ProcessDeleteOpts) (uint32
case Running, Paused, Pausing: case Running, Paused, Pausing:
return UnknownExitStatus, errors.Wrapf(errdefs.ErrFailedPrecondition, "process must be stopped before deletion") return UnknownExitStatus, errors.Wrapf(errdefs.ErrFailedPrecondition, "process must be stopped before deletion")
} }
if p.io != nil {
p.io.Wait()
p.io.Close()
}
r, err := p.task.client.TaskService().DeleteProcess(ctx, &tasks.DeleteProcessRequest{ r, err := p.task.client.TaskService().DeleteProcess(ctx, &tasks.DeleteProcessRequest{
ContainerID: p.task.id, ContainerID: p.task.id,
ExecID: p.id, ExecID: p.id,
@ -201,6 +197,10 @@ func (p *process) Delete(ctx context.Context, opts ...ProcessDeleteOpts) (uint32
if err != nil { if err != nil {
return UnknownExitStatus, errdefs.FromGRPC(err) return UnknownExitStatus, errdefs.FromGRPC(err)
} }
if p.io != nil {
p.io.Wait()
p.io.Close()
}
return r.ExitStatus, nil return r.ExitStatus, nil
} }

View File

@ -240,6 +240,13 @@ func (t *task) DeleteProcess(ctx context.Context, id string) (*runtime.Exit, err
if err != nil { if err != nil {
return nil, err return nil, err
} }
// If we never started the process close the pipes
if p.Status() == runtime.CreatedStatus {
p.io.Close()
ea = time.Now()
}
t.removeProcess(id) t.removeProcess(id)
return &runtime.Exit{ return &runtime.Exit{
Pid: p.pid, Pid: p.pid,