Files
argo-cd/util/helm/cmd_test.go
2026-01-27 22:58:03 +02:00

177 lines
5.1 KiB
Go

package helm
import (
"errors"
"log"
"os/exec"
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func Test_cmd_redactor(t *testing.T) {
assert.Equal(t, "--foo bar", redactor("--foo bar"))
assert.Equal(t, "--username ******", redactor("--username bar"))
assert.Equal(t, "--password ******", redactor("--password bar"))
}
func TestCmd_template_kubeVersion(t *testing.T) {
cmd, err := NewCmdWithVersion(".", false, "", "")
require.NoError(t, err)
s, _, err := cmd.template("testdata/redis", &TemplateOpts{
KubeVersion: "1.14",
})
require.NoError(t, err)
assert.NotEmpty(t, s)
}
func TestCmd_template_noApiVersionsInError(t *testing.T) {
cmd, err := NewCmdWithVersion(".", false, "", "")
require.NoError(t, err)
_, _, err = cmd.template("testdata/chart-does-not-exist", &TemplateOpts{
KubeVersion: "1.14",
APIVersions: []string{"foo", "bar"},
})
require.Error(t, err)
assert.NotContains(t, err.Error(), "--api-version")
assert.ErrorContains(t, err, "<api versions removed> ")
}
func TestNewCmd_helmInvalidVersion(t *testing.T) {
_, err := NewCmd(".", "abcd", "", "")
log.Println(err)
assert.EqualError(t, err, "helm chart version 'abcd' is not supported")
}
func TestNewCmd_withProxy(t *testing.T) {
cmd, err := NewCmd(".", "", "https://proxy:8888", ".argoproj.io")
require.NoError(t, err)
assert.Equal(t, "https://proxy:8888", cmd.proxy)
assert.Equal(t, ".argoproj.io", cmd.noProxy)
}
func TestRegistryLogin(t *testing.T) {
tests := []struct {
name string
repo string
creds *HelmCreds
execErr error
expectedErr error
expectedOut string
}{
{
name: "username and password",
repo: "my.registry.com/repo",
creds: &HelmCreds{Username: "user", Password: "pass"},
expectedOut: "helm registry login my.registry.com --username user --password pass",
},
{
name: "username and password with just the hostname",
repo: "my.registry.com",
creds: &HelmCreds{Username: "user", Password: "pass"},
expectedOut: "helm registry login my.registry.com --username user --password pass",
},
{
name: "ca file path",
repo: "my.registry.com/repo",
creds: &HelmCreds{CAPath: "/path/to/ca"},
expectedOut: "helm registry login my.registry.com --ca-file /path/to/ca",
},
{
name: "insecure skip verify",
repo: "my.registry.com/repo",
creds: &HelmCreds{InsecureSkipVerify: true},
expectedOut: "helm registry login my.registry.com --insecure",
},
{
name: "helm failure",
repo: "my.registry.com/repo",
creds: &HelmCreds{},
execErr: errors.New("exit status 1"),
expectedErr: errors.New("failed to login to registry: failed running helm: exit status 1"),
},
{
name: "invalid repo",
repo: ":///bad-url",
expectedErr: errors.New("failed to parse registry URL: parse \":///bad-url\": missing protocol scheme"),
},
{
name: "username & password",
repo: "my.registry.com/repo",
creds: &HelmCreds{Username: "user", Password: "pass"},
expectedOut: "helm registry login my.registry.com --username user --password pass",
},
{
name: "combined flags",
repo: "my.registry.com:5000/repo",
creds: &HelmCreds{
Username: "u",
Password: "p",
CAPath: "/ca",
InsecureSkipVerify: true,
},
expectedOut: "helm registry login my.registry.com:5000 --username u --password p --ca-file /ca --insecure",
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
c, err := newCmdWithVersion(".", false, "", "", func(cmd *exec.Cmd, _ func(_ string) string) (string, error) {
if tc.execErr != nil {
return "", tc.execErr
}
return strings.Join(cmd.Args, " "), nil
})
require.NoError(t, err)
out, err := c.RegistryLogin(tc.repo, tc.creds)
assert.Equal(t, tc.expectedOut, out)
if tc.expectedErr != nil {
require.EqualError(t, err, tc.expectedErr.Error())
} else {
require.NoError(t, err)
}
})
}
}
func TestRegistryLogout(t *testing.T) {
tests := []struct {
name string
repo string
execErr error
expectedErr error
expectedOut string
}{
{
name: "valid repo",
repo: "my.registry.com/repo",
expectedOut: "helm registry logout my.registry.com",
expectedErr: nil,
},
{
name: "invalid repo",
repo: ":///bad-url",
expectedErr: errors.New("failed to parse registry URL: parse \":///bad-url\": missing protocol scheme"),
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
c, err := newCmdWithVersion(".", false, "", "", func(cmd *exec.Cmd, _ func(_ string) string) (string, error) {
if tc.execErr != nil {
return "", tc.execErr
}
return strings.Join(cmd.Args, " "), nil
})
require.NoError(t, err)
out, err := c.RegistryLogout(tc.repo, nil)
assert.Equal(t, tc.expectedOut, out)
if tc.expectedErr != nil {
require.EqualError(t, err, tc.expectedErr.Error())
} else {
require.NoError(t, err)
}
})
}
}