Commit 641c4645 authored by Mitchell Hashimoto's avatar Mitchell Hashimoto

packer: Preserve original stdout/stderr on StartWithUi

/cc @sit
parent 665b03a3
...@@ -67,8 +67,17 @@ func (r *RemoteCmd) StartWithUi(c Communicator, ui Ui) error { ...@@ -67,8 +67,17 @@ func (r *RemoteCmd) StartWithUi(c Communicator, ui Ui) error {
stderr_r, stderr_w := io.Pipe() stderr_r, stderr_w := io.Pipe()
// Set the writers for the output so that we get it streamed to us // Set the writers for the output so that we get it streamed to us
if r.Stdout == nil {
r.Stdout = stdout_w r.Stdout = stdout_w
} else {
r.Stdout = io.MultiWriter(r.Stdout, stdout_w)
}
if r.Stderr == nil {
r.Stderr = stderr_w r.Stderr = stderr_w
} else {
r.Stderr = io.MultiWriter(r.Stderr, stderr_w)
}
// Start the command // Start the command
if err := c.Start(r); err != nil { if err := c.Start(r); err != nil {
......
...@@ -38,6 +38,7 @@ func (c *TestCommunicator) Download(string, io.Writer) error { ...@@ -38,6 +38,7 @@ func (c *TestCommunicator) Download(string, io.Writer) error {
func TestRemoteCmd_StartWithUi(t *testing.T) { func TestRemoteCmd_StartWithUi(t *testing.T) {
data := "hello\nworld\nthere" data := "hello\nworld\nthere"
originalOutput := new(bytes.Buffer)
rcOutput := new(bytes.Buffer) rcOutput := new(bytes.Buffer)
uiOutput := new(bytes.Buffer) uiOutput := new(bytes.Buffer)
rcOutput.WriteString(data) rcOutput.WriteString(data)
...@@ -53,6 +54,7 @@ func TestRemoteCmd_StartWithUi(t *testing.T) { ...@@ -53,6 +54,7 @@ func TestRemoteCmd_StartWithUi(t *testing.T) {
rc := &RemoteCmd{ rc := &RemoteCmd{
Command: "test", Command: "test",
Stdout: originalOutput,
} }
go func() { go func() {
...@@ -68,6 +70,10 @@ func TestRemoteCmd_StartWithUi(t *testing.T) { ...@@ -68,6 +70,10 @@ func TestRemoteCmd_StartWithUi(t *testing.T) {
if uiOutput.String() != strings.TrimSpace(data)+"\n" { if uiOutput.String() != strings.TrimSpace(data)+"\n" {
t.Fatalf("bad output: '%s'", uiOutput.String()) 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) { func TestRemoteCmd_Wait(t *testing.T) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment