From 277147135d64661914040085d6630e39a1f507d3 Mon Sep 17 00:00:00 2001 From: "Justin Terry (VM)" Date: Thu, 28 Feb 2019 10:35:26 -0800 Subject: [PATCH] Fix issue with NewFIFOSetInDir with Terminal true Signed-off-by: Justin Terry (VM) --- cio/io_windows.go | 6 +++++- cio/io_windows_test.go | 49 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 cio/io_windows_test.go diff --git a/cio/io_windows.go b/cio/io_windows.go index 4e5d18231..ca6cd54a4 100644 --- a/cio/io_windows.go +++ b/cio/io_windows.go @@ -31,11 +31,15 @@ const pipeRoot = `\\.\pipe` // NewFIFOSetInDir returns a new set of fifos for the task func NewFIFOSetInDir(_, id string, terminal bool) (*FIFOSet, error) { + stderrPipe := "" + if !terminal { + stderrPipe = fmt.Sprintf(`%s\ctr-%s-stderr`, pipeRoot, id) + } return NewFIFOSet(Config{ Terminal: terminal, Stdin: fmt.Sprintf(`%s\ctr-%s-stdin`, pipeRoot, id), Stdout: fmt.Sprintf(`%s\ctr-%s-stdout`, pipeRoot, id), - Stderr: fmt.Sprintf(`%s\ctr-%s-stderr`, pipeRoot, id), + Stderr: stderrPipe, }, nil), nil } diff --git a/cio/io_windows_test.go b/cio/io_windows_test.go new file mode 100644 index 000000000..e0191480e --- /dev/null +++ b/cio/io_windows_test.go @@ -0,0 +1,49 @@ +// +build windows + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cio + +import ( + "testing" + + "gotest.tools/assert" +) + +func TestNewFifoSetInDir_NoTerminal(t *testing.T) { + set, err := NewFIFOSetInDir("", t.Name(), false) + if err != nil { + t.Fatalf("NewFifoSetInDir failed with: %v", err) + } + + assert.Assert(t, !set.Terminal, "FIFOSet.Terminal should be false") + assert.Assert(t, set.Stdin != "", "FIFOSet.Stdin should be set") + assert.Assert(t, set.Stdout != "", "FIFOSet.Stdout should be set") + assert.Assert(t, set.Stderr != "", "FIFOSet.Stderr should be set") +} + +func TestNewFifoSetInDir_Terminal(t *testing.T) { + set, err := NewFIFOSetInDir("", t.Name(), true) + if err != nil { + t.Fatalf("NewFifoSetInDir failed with: %v", err) + } + + assert.Assert(t, set.Terminal, "FIFOSet.Terminal should be false") + assert.Assert(t, set.Stdin != "", "FIFOSet.Stdin should be set") + assert.Assert(t, set.Stdout != "", "FIFOSet.Stdout should be set") + assert.Assert(t, set.Stderr == "", "FIFOSet.Stderr should not be set") +}