Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
142 changes: 142 additions & 0 deletions cmd/helpers_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
package cmd

import (
"bytes"
"io"
"os"
"os/exec"
"testing"

"github.com/stretchr/testify/require"
)

func captureStdout(f func()) (string, error) {
old := os.Stdout
r, w, err := os.Pipe()
if err != nil {
return "", err
}
os.Stdout = w

defer func() {
os.Stdout = old
}()

f()

w.Close()

var buf bytes.Buffer
_, err = io.Copy(&buf, r)
if err != nil {
return "", err
}
return buf.String(), nil
}

func TestCaptureStdout(t *testing.T) {
output, err := captureStdout(func() {
_, _ = os.Stdout.Write([]byte("test"))
})
require.NoError(t, err)
require.Equal(t, "test", output)
}

func TestIsDebug(t *testing.T) {
tests := []struct {
name string
envValue string
expected bool
}{
{
name: "HELM_DEBUG is true",
envValue: "true",
expected: true,
},
{
name: "HELM_DEBUG is false",
envValue: "false",
expected: false,
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Setenv("HELM_DEBUG", tt.envValue)
require.Equalf(t, tt.expected, isDebug(), "Expected %v but got %v", tt.expected, isDebug())
})
}
}

func TestDebugPrint(t *testing.T) {
tests := []struct {
name string
envValue string
expected string
}{
{
name: "non-empty when HELM_DEBUG is true",
envValue: "true",
expected: "test\n",
},
{
name: "empty when HELM_DEBUG is false",
envValue: "false",
expected: "",
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Setenv("HELM_DEBUG", tt.envValue)
output, err := captureStdout(func() {
debugPrint("test")
})
require.NoError(t, err)
require.Equalf(t, tt.expected, output, "Expected %v but got %v", tt.expected, output)
})
}
}

func TestOutputWithRichError(t *testing.T) {
tests := []struct {
name string
envValue string
cmd *exec.Cmd
expected string
expectedStdout string
}{
{
name: "debug output in stdout when HELM_DEBUG is true",
envValue: "true",
cmd: exec.Command("echo", "test1"),
expected: "test1\n",
expectedStdout: "Executing echo test1\n",
},
{
name: "non-debug output in stdout when HELM_DEBUG is false",
envValue: "false",
cmd: exec.Command("echo", "test2"),
expected: "test2\n",
expectedStdout: "",
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Setenv("HELM_DEBUG", tt.envValue)
var (
stdoutString string
outBytes []byte
funcErr, captureErr error
)
stdoutString, captureErr = captureStdout(func() {
outBytes, funcErr = outputWithRichError(tt.cmd)
})
require.NoError(t, captureErr)
require.NoError(t, funcErr)
require.Equalf(t, tt.expected, string(outBytes), "Expected %v but got %v", tt.expected, string(outBytes))
require.Equalf(t, tt.expectedStdout, stdoutString, "Expected %v but got %v", tt.expectedStdout, stdoutString)
})
}
}