From 7a0739a863d36371ed7e57ac5205926c7e574a24 Mon Sep 17 00:00:00 2001 From: Marcus Speight Date: Wed, 18 Nov 2020 09:45:45 +0000 Subject: [PATCH 1/3] Fail message is now the same as the required message. Fixed #8973 Helm function 'fail' should not fail when doing 'helm lint' Signed-off-by: Marcus Speight --- pkg/engine/engine.go | 10 ++++++++++ pkg/engine/engine_test.go | 17 +++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/pkg/engine/engine.go b/pkg/engine/engine.go index 155d50a38..4da64f5cc 100644 --- a/pkg/engine/engine.go +++ b/pkg/engine/engine.go @@ -173,6 +173,16 @@ func (e Engine) initFunMap(t *template.Template, referenceTpls map[string]render return val, nil } + // Override sprig fail function for linting and wrapping message + funcMap["fail"] = func(msg string) (string, error) { + if e.LintMode { + // Don't fail when linting + log.Printf("[INFO] Fail: %s", msg) + return "", nil + } + return "", errors.New(warnWrap(msg)) + } + // If we are not linting and have a cluster connection, provide a Kubernetes-backed // implementation. if !e.LintMode && e.config != nil { diff --git a/pkg/engine/engine_test.go b/pkg/engine/engine_test.go index 87e84c48b..910171cfe 100644 --- a/pkg/engine/engine_test.go +++ b/pkg/engine/engine_test.go @@ -286,6 +286,23 @@ func TestExecErrors(t *testing.T) { } } +func TestFailErrors(t *testing.T) { + vals := chartutil.Values{"Values": map[string]interface{}{}} + + failtpl := `{{ fail "This is an error" }}` + tplsFailed := map[string]renderable{ + "failtpl": {tpl: failtpl, vals: vals}, + } + _, err := new(Engine).render(tplsFailed) + if err == nil { + t.Fatalf("Expected failures while rendering: %s", err) + } + expected := `execution error at (failtpl:1:3): This is an error` + if err.Error() != expected { + t.Errorf("Expected '%s', got %q", expected, err.Error()) + } +} + func TestAllTemplates(t *testing.T) { ch1 := &chart.Chart{ Metadata: &chart.Metadata{Name: "ch1"}, From 8aa42824f9a67a2bbaf81cdb3badb8515204bf9d Mon Sep 17 00:00:00 2001 From: Marcus Speight Date: Wed, 2 Dec 2020 18:23:17 +0000 Subject: [PATCH 2/3] Added test for lint mode Signed-off-by: Marcus Speight --- pkg/engine/engine_test.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/pkg/engine/engine_test.go b/pkg/engine/engine_test.go index 910171cfe..e082283e9 100644 --- a/pkg/engine/engine_test.go +++ b/pkg/engine/engine_test.go @@ -289,7 +289,7 @@ func TestExecErrors(t *testing.T) { func TestFailErrors(t *testing.T) { vals := chartutil.Values{"Values": map[string]interface{}{}} - failtpl := `{{ fail "This is an error" }}` + failtpl := `All your base are belong to us{{ fail "This is an error" }}` tplsFailed := map[string]renderable{ "failtpl": {tpl: failtpl, vals: vals}, } @@ -301,6 +301,18 @@ func TestFailErrors(t *testing.T) { if err.Error() != expected { t.Errorf("Expected '%s', got %q", expected, err.Error()) } + + var e Engine + e.LintMode = true + out, err := e.render(tplsFailed) + if err != nil { + t.Fatal(err) + } + + expectStr := "All your base are belong to us" + if gotStr := out["failtpl"]; gotStr != expectStr { + t.Errorf("Expected %q, got %q (%v)", expectStr, gotStr, out) + } } func TestAllTemplates(t *testing.T) { From 7a663a56c24f4dd05375a4ece81e6107eb1b0d78 Mon Sep 17 00:00:00 2001 From: Marcus Speight Date: Mon, 7 Dec 2020 14:58:30 +0000 Subject: [PATCH 3/3] Fixed Test Signed-off-by: Marcus Speight Signed-off-by: Marcus Speight --- pkg/engine/engine_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/engine/engine_test.go b/pkg/engine/engine_test.go index e082283e9..39f895681 100644 --- a/pkg/engine/engine_test.go +++ b/pkg/engine/engine_test.go @@ -297,7 +297,7 @@ func TestFailErrors(t *testing.T) { if err == nil { t.Fatalf("Expected failures while rendering: %s", err) } - expected := `execution error at (failtpl:1:3): This is an error` + expected := `execution error at (failtpl:1:33): This is an error` if err.Error() != expected { t.Errorf("Expected '%s', got %q", expected, err.Error()) }