diff --git a/pkg/tmpl/context.go b/pkg/tmpl/context.go index 6c119415..2cfce655 100644 --- a/pkg/tmpl/context.go +++ b/pkg/tmpl/context.go @@ -5,3 +5,12 @@ type Context struct { basePath string readFile func(string) ([]byte, error) } + +// SetBasePath sets the base path for the template +func (c *Context) SetBasePath(path string) { + c.basePath = path +} + +func (c *Context) SetReadFile(f func(string) ([]byte, error)) { + c.readFile = f +} diff --git a/pkg/tmpl/context_funcs.go b/pkg/tmpl/context_funcs.go index 0131db33..e709ad51 100644 --- a/pkg/tmpl/context_funcs.go +++ b/pkg/tmpl/context_funcs.go @@ -172,6 +172,10 @@ func (c *Context) ReadFile(filename string) (string, error) { path = filepath.Join(c.basePath, filename) } + if c.readFile == nil { + return "", fmt.Errorf("readFile is not implemented") + } + bytes, err := c.readFile(path) if err != nil { return "", err diff --git a/test/e2e/template/helmfile/snapshot_test.go b/test/e2e/template/helmfile/snapshot_test.go index c2b2d960..6eef2ad1 100644 --- a/test/e2e/template/helmfile/snapshot_test.go +++ b/test/e2e/template/helmfile/snapshot_test.go @@ -16,7 +16,7 @@ func TestHelmfileTemplateWithBuildCommand(t *testing.T) { _, filename, _, _ := runtime.Caller(0) projectRoot := filepath.Join(filepath.Dir(filename), "..", "..", "..", "..") helmfileBin := filepath.Join(projectRoot, "helmfile") - testdataDir := "testdata" + testdataDir := "testdata/snapshot" entries, err := os.ReadDir(testdataDir) require.NoError(t, err) diff --git a/test/e2e/template/helmfile/testdata/issue_2098_release_template_needs/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/issue_2098_release_template_needs/input.yaml similarity index 100% rename from test/e2e/template/helmfile/testdata/issue_2098_release_template_needs/input.yaml rename to test/e2e/template/helmfile/testdata/snapshot/issue_2098_release_template_needs/input.yaml diff --git a/test/e2e/template/helmfile/testdata/issue_2098_release_template_needs/output.yaml b/test/e2e/template/helmfile/testdata/snapshot/issue_2098_release_template_needs/output.yaml similarity index 100% rename from test/e2e/template/helmfile/testdata/issue_2098_release_template_needs/output.yaml rename to test/e2e/template/helmfile/testdata/snapshot/issue_2098_release_template_needs/output.yaml diff --git a/test/e2e/template/helmfile/testdata/tmpl/readfile.txt b/test/e2e/template/helmfile/testdata/tmpl/readfile.txt new file mode 100644 index 00000000..30d74d25 --- /dev/null +++ b/test/e2e/template/helmfile/testdata/tmpl/readfile.txt @@ -0,0 +1 @@ +test \ No newline at end of file diff --git a/test/e2e/template/helmfile/tmpl_test.go b/test/e2e/template/helmfile/tmpl_test.go index 94e96ae1..6c82e5fd 100644 --- a/test/e2e/template/helmfile/tmpl_test.go +++ b/test/e2e/template/helmfile/tmpl_test.go @@ -77,13 +77,36 @@ var envExecTestCases = []tmplTestCase{ { name: "envExec", tmplString: `{{ envExec (dict) "bash" (list "-c" "echo -n $testkey" ) }}`, - output: "", }, { name: "envExecInvalidEnvType", wantErr: true, tmplString: `{{ envExec "dict" "bash" (list "-c" "echo -n $testkey" ) }}`, - output: "", + }, +} + +var execTestCases = []tmplTestCase{ + { + name: "exec", + tmplString: `{{ exec "bash" (list "-c" "echo -n $testkey" ) }}`, + }, + { + name: "execWithError", + wantErr: true, + tmplString: `{{ exec "bash" (list "-c" "exit 1" ) }}`, + }, +} + +var readFileTestCases = []tmplTestCase{ + { + name: "readFile", + tmplString: `{{ readFile "./testdata/tmpl/readfile.txt" }}`, + output: "test", + }, + { + name: "readFileWithError", + tmplString: `{{ readFile "./testdata/tmpl/readfile_error.txt" }}`, + wantErr: true, }, } @@ -102,6 +125,8 @@ func (t *tmplE2e) load() { t.append(requireEnvTestCases...) t.append(requiredTestCases...) t.append(envExecTestCases...) + t.append(execTestCases...) + t.append(readFileTestCases...) } var tmplE2eTest = tmplE2e{} @@ -109,6 +134,8 @@ var tmplE2eTest = tmplE2e{} // TestTmplStrings tests the template string func TestTmplStrings(t *testing.T) { c := &tmpl.Context{} + c.SetBasePath(".") + c.SetReadFile(os.ReadFile) tmpl := template.New("stringTemplateTest").Funcs(c.CreateFuncMap()) tmplE2eTest.load()