Skip to content

Commit 9e6fe8f

Browse files
chore: modify CLI tests to inject stdout so mutating os.Stdout isn't necessary
1 parent 59678e1 commit 9e6fe8f

2 files changed

Lines changed: 10 additions & 14 deletions

File tree

pkg/cmd/cmdutil.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,21 +193,24 @@ func streamToStdout(generateOutput func(w *os.File) error) error {
193193
return err
194194
}
195195

196-
func writeBinaryResponse(response *http.Response, outfile string) (string, error) {
196+
// writeBinaryResponse writes a binary response to stdout or a file.
197+
//
198+
// Takes in a stdout reference so we can test this function without overriding os.Stdout in tests.
199+
func writeBinaryResponse(response *http.Response, stdout io.Writer, outfile string) (string, error) {
197200
defer response.Body.Close()
198201
body, err := io.ReadAll(response.Body)
199202
if err != nil {
200203
return "", err
201204
}
202205
switch outfile {
203206
case "-", "/dev/stdout":
204-
_, err := os.Stdout.Write(body)
207+
_, err := stdout.Write(body)
205208
return "", err
206209
case "":
207210
// If output file is unspecified, then print to stdout for plain text or
208211
// if stdout is not a terminal:
209212
if !isTerminal(os.Stdout) || isUTF8TextFile(body) {
210-
_, err := os.Stdout.Write(body)
213+
_, err := stdout.Write(body)
211214
return "", err
212215
}
213216

pkg/cmd/cmdutil_test.go

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func TestWriteBinaryResponse(t *testing.T) {
3232
Body: io.NopCloser(bytes.NewReader(body)),
3333
}
3434

35-
msg, err := writeBinaryResponse(resp, outfile)
35+
msg, err := writeBinaryResponse(resp, os.Stdout, outfile)
3636

3737
require.NoError(t, err)
3838
assert.Contains(t, msg, outfile)
@@ -43,24 +43,17 @@ func TestWriteBinaryResponse(t *testing.T) {
4343
})
4444

4545
t.Run("write to stdout", func(t *testing.T) {
46-
oldStdout := os.Stdout
47-
r, w, _ := os.Pipe()
48-
os.Stdout = w
46+
t.Parallel()
4947

48+
var buf bytes.Buffer
5049
body := []byte("stdout content")
5150
resp := &http.Response{
5251
Body: io.NopCloser(bytes.NewReader(body)),
5352
}
54-
msg, err := writeBinaryResponse(resp, "-")
55-
56-
w.Close()
57-
os.Stdout = oldStdout
53+
msg, err := writeBinaryResponse(resp, &buf, "-")
5854

5955
require.NoError(t, err)
6056
assert.Empty(t, msg)
61-
62-
var buf bytes.Buffer
63-
_, _ = buf.ReadFrom(r)
6457
assert.Equal(t, body, buf.Bytes())
6558
})
6659
}

0 commit comments

Comments
 (0)