@@ -109,3 +109,33 @@ func testExecerFail(ctx context.Context, t *testing.T, execer Execer) {
109
109
assert .True (t , "exit code is nonzero" , code .Code != 0 )
110
110
assert .Error (t , "wait for process to error" , err )
111
111
}
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
+ }
0 commit comments