feat: use new helm version parse function (#760)

* feat: use new helm version parse function

Signed-off-by: yxxhero <aiopsclub@163.com>
This commit is contained in:
yxxhero
2023-03-23 08:46:11 +08:00
committed by GitHub
parent bfb94314be
commit 5e8a502b41
2 changed files with 78 additions and 17 deletions
+61 -4
View File
@@ -8,6 +8,7 @@ import (
"path/filepath"
"reflect"
"regexp"
"strings"
"testing"
"github.com/Masterminds/semver/v3"
@@ -27,6 +28,10 @@ func (mock *mockRunner) ExecuteStdIn(cmd string, args []string, env map[string]s
}
func (mock *mockRunner) Execute(cmd string, args []string, env map[string]string, enableLiveOutput bool) ([]byte, error) {
if len(mock.output) == 0 && strings.Join(args, " ") == "version --client --short" {
return []byte("v3.2.4+ge29ce2a"), nil
}
return mock.output, mock.err
}
@@ -94,7 +99,7 @@ func Test_AddRepo_Helm_3_3_2(t *testing.T) {
logger := NewLogger(&buffer, "debug")
helm := &execer{
helmBinary: "helm",
version: *semver.MustParse("3.3.2"),
version: semver.MustParse("3.3.2"),
logger: logger,
kubeContext: "dev",
runner: &mockRunner{},
@@ -737,7 +742,7 @@ exec: helm --kube-context dev pull oci://repo/helm-charts --version 0.14.0 --des
buffer.Reset()
helm := &execer{
helmBinary: tt.helmBin,
version: *semver.MustParse(tt.helmVersion),
version: semver.MustParse(tt.helmVersion),
logger: logger,
kubeContext: "dev",
runner: &mockRunner{},
@@ -786,7 +791,7 @@ exec: helm --kube-context dev chart export chart --destination path1 --untar --u
buffer.Reset()
helm := &execer{
helmBinary: tt.helmBin,
version: *semver.MustParse(tt.helmVersion),
version: semver.MustParse(tt.helmVersion),
logger: logger,
kubeContext: "dev",
runner: &mockRunner{},
@@ -975,7 +980,7 @@ func Test_ShowChart(t *testing.T) {
showChartRunner := mockRunner{output: []byte("name: my-chart\nversion: 3.2.0\n")}
helm := &execer{
helmBinary: "helm",
version: *semver.MustParse("3.3.2"),
version: semver.MustParse("3.3.2"),
logger: NewLogger(os.Stdout, "info"),
kubeContext: "dev",
runner: &showChartRunner,
@@ -992,3 +997,55 @@ func Test_ShowChart(t *testing.T) {
t.Errorf("helmexec.ShowChart() - expected chart version was %s, received: %s", "3.2.0", metadata.Version)
}
}
func TestParseHelmVersion(t *testing.T) {
tests := []struct {
name string
version string
want *semver.Version
wantErr bool
}{
{
name: "helm 2",
version: "Client: v2.16.1+ge13bc94\n",
want: semver.MustParse("v2.16.1+ge13bc94"),
wantErr: false,
},
{
name: "helm 3",
version: "Client: v3.2.4+ge29ce2a\n",
want: semver.MustParse("v3.2.4+ge29ce2a"),
wantErr: false,
},
{
name: "helm 3 with os arch and build info",
version: "Client v3.7.1+7.el8+g8f33223\n",
want: semver.MustParse("v3.7.1+7.el8"),
wantErr: false,
},
{
name: "empty version",
version: "",
want: nil,
wantErr: true,
},
{
name: "invalid version",
version: "oooooo",
want: nil,
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := parseHelmVersion(tt.version)
if (err != nil) != tt.wantErr {
t.Errorf("parseHelmVersion() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("parseHelmVersion() = %v, want %v", got, tt.want)
}
})
}
}