Skip to content

Commit dedbab5

Browse files
committed
Fix stderr writing and add test
1 parent 36abb3c commit dedbab5

File tree

3 files changed

+34
-6
lines changed

3 files changed

+34
-6
lines changed

client_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,3 +109,33 @@ func testExecerFail(ctx context.Context, t *testing.T, execer Execer) {
109109
assert.True(t, "exit code is nonzero", code.Code != 0)
110110
assert.Error(t, "wait for process to error", err)
111111
}
112+
113+
func TestStderrVsStdout(t *testing.T) {
114+
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
115+
defer cancel()
116+
117+
var (
118+
stdout bytes.Buffer
119+
stderr bytes.Buffer
120+
)
121+
122+
ws, server := mockConn(ctx, t)
123+
defer server.Close()
124+
125+
execer := RemoteExecer(ws)
126+
process, err := execer.Start(ctx, Command{
127+
Command: "sh",
128+
Args: []string{"-c", "echo stdout-message; echo 1>&2 stderr-message"},
129+
Stdin: false,
130+
})
131+
assert.Success(t, "start command", err)
132+
133+
go io.Copy(&stdout, process.Stdout())
134+
go io.Copy(&stderr, process.Stderr())
135+
136+
err = process.Wait()
137+
assert.Success(t, "wait for process to complete", err)
138+
139+
assert.Equal(t, "stdout", "stdout-message", strings.TrimSpace(stdout.String()))
140+
assert.Equal(t, "stderr", "stderr-message", strings.TrimSpace(stderr.String()))
141+
}

localexec_test.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,20 +130,18 @@ func TestStdoutVsStderr(t *testing.T) {
130130
)
131131
process, err := execer.Start(ctx, Command{
132132
Command: "sh",
133-
Args: []string{"-c", "echo stdout-message; echo 1>&2 stderr-message"},
134-
Stdin: false,
135-
TTY: false,
133+
Args: []string{"-c", "echo stdout-message; echo 1>&2 stderr-message"},
134+
Stdin: false,
135+
TTY: false,
136136
})
137137
assert.Success(t, "start command", err)
138138

139139
go io.Copy(&stdout, process.Stdout())
140140
go io.Copy(&stderr, process.Stderr())
141141

142-
time.Sleep(time.Second)
143142
err = process.Wait()
144143
assert.Success(t, "wait for process to complete", err)
145144

146145
assert.Equal(t, "stdout", "stdout-message", strings.TrimSpace(stdout.String()))
147146
assert.Equal(t, "stderr", "stderr-message", strings.TrimSpace(stderr.String()))
148147
}
149-

server.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func Serve(ctx context.Context, c *websocket.Conn, execer Execer) error {
7878
return copyWithHeader(process.Stdout(), wsNetConn, proto.Header{Type: proto.TypeStdout})
7979
})
8080
outputgroup.Go(func() error {
81-
return copyWithHeader(process.Stderr(), wsNetConn, proto.Header{Type: proto.TypeStdout})
81+
return copyWithHeader(process.Stderr(), wsNetConn, proto.Header{Type: proto.TypeStderr})
8282
})
8383

8484
go func() {

0 commit comments

Comments
 (0)