diff --git a/client_test.go b/client_test.go index 79bc3a0..66c0a51 100644 --- a/client_test.go +++ b/client_test.go @@ -109,3 +109,33 @@ func testExecerFail(ctx context.Context, t *testing.T, execer Execer) { assert.True(t, "exit code is nonzero", code.Code != 0) assert.Error(t, "wait for process to error", err) } + +func TestStderrVsStdout(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) + defer cancel() + + var ( + stdout bytes.Buffer + stderr bytes.Buffer + ) + + ws, server := mockConn(ctx, t) + defer server.Close() + + execer := RemoteExecer(ws) + process, err := execer.Start(ctx, Command{ + Command: "sh", + Args: []string{"-c", "echo stdout-message; echo 1>&2 stderr-message"}, + Stdin: false, + }) + assert.Success(t, "start command", err) + + go io.Copy(&stdout, process.Stdout()) + go io.Copy(&stderr, process.Stderr()) + + err = process.Wait() + assert.Success(t, "wait for process to complete", err) + + assert.Equal(t, "stdout", "stdout-message", strings.TrimSpace(stdout.String())) + assert.Equal(t, "stderr", "stderr-message", strings.TrimSpace(stderr.String())) +} diff --git a/localexec_test.go b/localexec_test.go index d2e6564..b33cb27 100644 --- a/localexec_test.go +++ b/localexec_test.go @@ -130,20 +130,18 @@ func TestStdoutVsStderr(t *testing.T) { ) process, err := execer.Start(ctx, Command{ Command: "sh", - Args: []string{"-c", "echo stdout-message; echo 1>&2 stderr-message"}, - Stdin: false, - TTY: false, + Args: []string{"-c", "echo stdout-message; echo 1>&2 stderr-message"}, + Stdin: false, + TTY: false, }) assert.Success(t, "start command", err) go io.Copy(&stdout, process.Stdout()) go io.Copy(&stderr, process.Stderr()) - time.Sleep(time.Second) err = process.Wait() assert.Success(t, "wait for process to complete", err) assert.Equal(t, "stdout", "stdout-message", strings.TrimSpace(stdout.String())) assert.Equal(t, "stderr", "stderr-message", strings.TrimSpace(stderr.String())) } - diff --git a/server.go b/server.go index 05a9518..224a6c6 100644 --- a/server.go +++ b/server.go @@ -78,7 +78,7 @@ func Serve(ctx context.Context, c *websocket.Conn, execer Execer) error { return copyWithHeader(process.Stdout(), wsNetConn, proto.Header{Type: proto.TypeStdout}) }) outputgroup.Go(func() error { - return copyWithHeader(process.Stderr(), wsNetConn, proto.Header{Type: proto.TypeStdout}) + return copyWithHeader(process.Stderr(), wsNetConn, proto.Header{Type: proto.TypeStderr}) }) go func() {