packer: Preserve original stdout/stderr on StartWithUi

/cc @sit
This commit is contained in:
Mitchell Hashimoto 2013-07-23 22:38:03 -05:00
parent 665b03a342
commit 641c46451b
2 changed files with 17 additions and 2 deletions

View File

@ -67,8 +67,17 @@ func (r *RemoteCmd) StartWithUi(c Communicator, ui Ui) error {
stderr_r, stderr_w := io.Pipe()
// Set the writers for the output so that we get it streamed to us
r.Stdout = stdout_w
r.Stderr = stderr_w
if r.Stdout == nil {
r.Stdout = stdout_w
} else {
r.Stdout = io.MultiWriter(r.Stdout, stdout_w)
}
if r.Stderr == nil {
r.Stderr = stderr_w
} else {
r.Stderr = io.MultiWriter(r.Stderr, stderr_w)
}
// Start the command
if err := c.Start(r); err != nil {

View File

@ -38,6 +38,7 @@ func (c *TestCommunicator) Download(string, io.Writer) error {
func TestRemoteCmd_StartWithUi(t *testing.T) {
data := "hello\nworld\nthere"
originalOutput := new(bytes.Buffer)
rcOutput := new(bytes.Buffer)
uiOutput := new(bytes.Buffer)
rcOutput.WriteString(data)
@ -53,6 +54,7 @@ func TestRemoteCmd_StartWithUi(t *testing.T) {
rc := &RemoteCmd{
Command: "test",
Stdout: originalOutput,
}
go func() {
@ -68,6 +70,10 @@ func TestRemoteCmd_StartWithUi(t *testing.T) {
if uiOutput.String() != strings.TrimSpace(data)+"\n" {
t.Fatalf("bad output: '%s'", uiOutput.String())
}
if originalOutput.String() != data {
t.Fatalf("original is bad: '%s'", originalOutput.String())
}
}
func TestRemoteCmd_Wait(t *testing.T) {