From 6ed2086b74b79d9c50caa5ac2a050d1c587f6169 Mon Sep 17 00:00:00 2001 From: guofutan Date: Tue, 21 Jun 2022 15:27:11 +0800 Subject: [PATCH] fix: add unit test for TestPostRenderHookManifests and fix unit test error in internal/test/test.go and pkg/chartutil/values.go Signed-off-by: guofutan --- pkg/action/action.go | 23 +++++++++++++++++------ pkg/action/action_test.go | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 6 deletions(-) diff --git a/pkg/action/action.go b/pkg/action/action.go index 57766c16d..7e31de76a 100644 --- a/pkg/action/action.go +++ b/pkg/action/action.go @@ -97,6 +97,19 @@ type Configuration struct { Log func(string, ...interface{}) } +// postRenderReleaseHook render the manifests of release hooks with postrender.PostRenderer +func postRenderHookManifests(hs []*release.Hook, pr postrender.PostRenderer) error { + + for _, hook := range hs { + sb, err := pr.Run(bytes.NewBufferString(hook.Manifest)) + if err != nil { + return errors.Wrapf(err, "error while running post render on hook: %s manifest", hook.Name) + } + hook.Manifest = sb.String() + } + return nil +} + // renderResources renders the templates in a chart // // TODO: This function is badly in need of a refactor. @@ -220,12 +233,10 @@ func (cfg *Configuration) renderResources(ch *chart.Chart, values chartutil.Valu if err != nil { return hs, b, notes, errors.Wrap(err, "error while running post render on files") } - for _, hook := range hs { - sb, err := pr.Run(bytes.NewBufferString(hook.Manifest)) - if err != nil { - return hs, b, notes, errors.Wrap(err, "error while running post render on hooks manifest") - } - hook.Manifest = sb.String() + + err = postRenderHookManifests(hs, pr) + if err != nil { + return hs, b, notes, err } } diff --git a/pkg/action/action_test.go b/pkg/action/action_test.go index c816c84af..cfdc039a9 100644 --- a/pkg/action/action_test.go +++ b/pkg/action/action_test.go @@ -18,13 +18,16 @@ package action import ( "flag" "io/ioutil" + "runtime" "testing" + "github.com/stretchr/testify/assert" fakeclientset "k8s.io/client-go/kubernetes/fake" "helm.sh/helm/v3/pkg/chart" "helm.sh/helm/v3/pkg/chartutil" kubefake "helm.sh/helm/v3/pkg/kube/fake" + "helm.sh/helm/v3/pkg/postrender" "helm.sh/helm/v3/pkg/registry" "helm.sh/helm/v3/pkg/release" "helm.sh/helm/v3/pkg/storage" @@ -281,3 +284,37 @@ func TestGetVersionSet(t *testing.T) { t.Error("Non-existent version is reported found.") } } + +func TestPostRenderHookManifests(t *testing.T) { + if runtime.GOOS == "windows" { + // the actual Run test uses a basic sed example, so skip this test on windows + t.Skip("skipping on windows") + } + + hs := []*release.Hook{ + { + Name: "finding-nemo", + Kind: "Pod", + Path: "finding-nemo", + Manifest: manifestWithTestHook, + Events: []release.HookEvent{ + release.HookTest, + }, + }, + } + + pr, err := postrender.NewExec("sed", "s/fake-image/local-image/") + if err != nil { + t.Error(err) + } + + if err := postRenderHookManifests(hs, pr); err != nil { + t.Error(err) + } + + is := assert.New(t) + for _, hook := range hs { + is.Contains(hook.Manifest, "local-image") + } + +}