|
|
|
@ -18,6 +18,7 @@ package engine
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"strings"
|
|
|
|
|
"sync"
|
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
@ -604,3 +605,58 @@ func TestAlterFuncMap(t *testing.T) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestRenderRecursionLimit(t *testing.T) {
|
|
|
|
|
// endless recursion should produce an error
|
|
|
|
|
c := &chart.Chart{
|
|
|
|
|
Metadata: &chart.Metadata{Name: "bad"},
|
|
|
|
|
Templates: []*chart.Template{
|
|
|
|
|
{Name: "templates/base", Data: []byte(`{{include "recursion" . }}`)},
|
|
|
|
|
{Name: "templates/recursion", Data: []byte(`{{define "recursion"}}{{include "recursion" . }}{{end}}`)},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
v := chartutil.Values{
|
|
|
|
|
"Values": "",
|
|
|
|
|
"Chart": c.Metadata,
|
|
|
|
|
"Release": chartutil.Values{
|
|
|
|
|
"Name": "TestRelease",
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
expectErr := "rendering template has a nested reference name: recursion: unable to execute template"
|
|
|
|
|
|
|
|
|
|
e := New()
|
|
|
|
|
_, err := e.Render(c, v)
|
|
|
|
|
if err == nil || !strings.HasSuffix(err.Error(), expectErr) {
|
|
|
|
|
t.Errorf("Expected err with suffix: %s", expectErr)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// calling the same function many times is ok
|
|
|
|
|
times := 4000
|
|
|
|
|
phrase := "All work and no play makes Jack a dull boy"
|
|
|
|
|
printFunc := `{{define "overlook"}}{{printf "` + phrase + `\n"}}{{end}}`
|
|
|
|
|
var repeatedIncl string
|
|
|
|
|
for i := 0; i < times; i++ {
|
|
|
|
|
repeatedIncl += `{{include "overlook" . }}`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
d := &chart.Chart{
|
|
|
|
|
Metadata: &chart.Metadata{Name: "overlook"},
|
|
|
|
|
Templates: []*chart.Template{
|
|
|
|
|
{Name: "templates/quote", Data: []byte(repeatedIncl)},
|
|
|
|
|
{Name: "templates/_function", Data: []byte(printFunc)},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
out, err := e.Render(d, v)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var expect string
|
|
|
|
|
for i := 0; i < times; i++ {
|
|
|
|
|
expect += phrase + "\n"
|
|
|
|
|
}
|
|
|
|
|
if got := out["overlook/templates/quote"]; got != expect {
|
|
|
|
|
t.Errorf("Expected %q, got %q (%v)", expect, got, out)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|