From 233aa1784834d90afc77d4c7ca45c4ace993362d Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Mon, 25 Jul 2022 16:55:53 +0300 Subject: [PATCH] fix: Avoid dirtying stdout/stderr in test (#3165) * fix: Default all clitest commands to io.Discard stdout/err * fix: Never write to stdout or stderr in tests --- cli/clitest/clitest.go | 6 ++++++ cli/cliui/prompt_test.go | 2 +- cli/configssh_test.go | 3 ++- cli/portforward_test.go | 9 ++++----- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/cli/clitest/clitest.go b/cli/clitest/clitest.go index 5e0e38b771..53cf6b28a9 100644 --- a/cli/clitest/clitest.go +++ b/cli/clitest/clitest.go @@ -25,6 +25,12 @@ func New(t *testing.T, args ...string) (*cobra.Command, config.Root) { dir := t.TempDir() root := config.Root(dir) cmd.SetArgs(append([]string{"--global-config", dir}, args...)) + + // We could consider using writers + // that log via t.Log here instead. + cmd.SetOut(io.Discard) + cmd.SetErr(io.Discard) + return cmd, root } diff --git a/cli/cliui/prompt_test.go b/cli/cliui/prompt_test.go index ad35a8116c..d80b964e51 100644 --- a/cli/cliui/prompt_test.go +++ b/cli/cliui/prompt_test.go @@ -185,7 +185,7 @@ func TestPasswordTerminalState(t *testing.T) { // connect the child process's stdio to the PTY directly, not via a pipe cmd.Stdin = ptty.Input().Reader cmd.Stdout = ptty.Output().Writer - cmd.Stderr = os.Stderr + cmd.Stderr = ptty.Output().Writer err := cmd.Start() require.NoError(t, err) process := cmd.Process diff --git a/cli/configssh_test.go b/cli/configssh_test.go index 2a6c8cd88f..9be0c216c5 100644 --- a/cli/configssh_test.go +++ b/cli/configssh_test.go @@ -173,9 +173,10 @@ func TestConfigSSH(t *testing.T) { home := filepath.Dir(filepath.Dir(sshConfigFile)) // #nosec sshCmd := exec.Command("ssh", "-F", sshConfigFile, "coder."+workspace.Name, "echo", "test") + pty = ptytest.New(t) // Set HOME because coder config is included from ~/.ssh/coder. sshCmd.Env = append(sshCmd.Env, fmt.Sprintf("HOME=%s", home)) - sshCmd.Stderr = os.Stderr + sshCmd.Stderr = pty.Output() data, err := sshCmd.Output() require.NoError(t, err) require.Equal(t, "test", strings.TrimSpace(string(data))) diff --git a/cli/portforward_test.go b/cli/portforward_test.go index 5d49200707..5f314a3658 100644 --- a/cli/portforward_test.go +++ b/cli/portforward_test.go @@ -6,7 +6,6 @@ import ( "fmt" "io" "net" - "os" "path/filepath" "runtime" "strings" @@ -158,7 +157,7 @@ func TestPortForward(t *testing.T) { cmd, root := clitest.New(t, "port-forward", workspace.Name, flag) clitest.SetupConfig(t, client, root) buf := newThreadSafeBuffer() - cmd.SetOut(io.MultiWriter(buf, os.Stderr)) + cmd.SetOut(buf) ctx, cancel := context.WithCancel(context.Background()) defer cancel() errC := make(chan error) @@ -204,7 +203,7 @@ func TestPortForward(t *testing.T) { cmd, root := clitest.New(t, "port-forward", workspace.Name, flag1, flag2) clitest.SetupConfig(t, client, root) buf := newThreadSafeBuffer() - cmd.SetOut(io.MultiWriter(buf, os.Stderr)) + cmd.SetOut(buf) ctx, cancel := context.WithCancel(context.Background()) defer cancel() errC := make(chan error) @@ -257,7 +256,7 @@ func TestPortForward(t *testing.T) { cmd, root := clitest.New(t, "port-forward", workspace.Name, flag) clitest.SetupConfig(t, client, root) buf := newThreadSafeBuffer() - cmd.SetOut(io.MultiWriter(buf, os.Stderr)) + cmd.SetOut(buf) ctx, cancel := context.WithCancel(context.Background()) defer cancel() errC := make(chan error) @@ -317,7 +316,7 @@ func TestPortForward(t *testing.T) { cmd, root := clitest.New(t, append([]string{"port-forward", workspace.Name}, flags...)...) clitest.SetupConfig(t, client, root) buf := newThreadSafeBuffer() - cmd.SetOut(io.MultiWriter(buf, os.Stderr)) + cmd.SetOut(buf) ctx, cancel := context.WithCancel(context.Background()) defer cancel() errC := make(chan error)