fix(install): check lenght and file nil, add tests

Signed-off-by: Manuel Alonso <434575+manute@users.noreply.github.com>
pull/31578/head
Manuel Alonso 1 month ago
parent 268593bf2e
commit 52235cc0bf
No known key found for this signature in database
GPG Key ID: 9315A3EFCBD4D56A

@ -180,13 +180,17 @@ func (i *Install) installCRDs(crds []chart.CRD) error {
// We do these one file at a time in the order they were read.
totalItems := []*resource.Info{}
for _, obj := range crds {
if obj.File == nil {
return fmt.Errorf("failed to install CRD %s: file is empty", obj.Name)
}
// Read in the resources
res, err := i.cfg.KubeClient.Build(bytes.NewBuffer(obj.File.Data), false)
if err != nil {
return fmt.Errorf("failed to install CRD %s: %w", obj.Name, err)
}
if res == nil {
if len(res) == 0 {
return fmt.Errorf("failed to install CRD %s: resources are empty", obj.Name)
}

@ -45,6 +45,7 @@ import (
"helm.sh/helm/v4/internal/test"
"helm.sh/helm/v4/pkg/chart/common"
chart "helm.sh/helm/v4/pkg/chart/v2"
"helm.sh/helm/v4/pkg/kube"
kubefake "helm.sh/helm/v4/pkg/kube/fake"
rcommon "helm.sh/helm/v4/pkg/release/common"
@ -1068,3 +1069,42 @@ func TestInstallRun_UnreachableKubeClient(t *testing.T) {
assert.Nil(t, res)
assert.ErrorContains(t, err, "connection refused")
}
func TestInstallCRDs_CheckNilErrors(t *testing.T) {
tests := []struct {
name string
input []chart.CRD
}{
{
name: "only one crd with file nil",
input: []chart.CRD{
{Name: "one", File: nil},
},
},
{
name: "only one crd with its file data nil",
input: []chart.CRD{
{Name: "one", File: &common.File{Name: "crds/foo.yaml", Data: nil}},
},
},
{
name: "at least a crd with its file data nil",
input: []chart.CRD{
{Name: "one", File: &common.File{Name: "crds/foo.yaml", Data: []byte("data")}},
{Name: "two", File: &common.File{Name: "crds/foo.yaml", Data: nil}},
{Name: "three", File: &common.File{Name: "crds/foo.yaml", Data: []byte("data")}},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
instAction := installAction(t)
err := instAction.installCRDs(tt.input)
if err == nil {
t.Errorf("got error expected nil")
}
})
}
}

Loading…
Cancel
Save