package cmdimport ("regexp""strings". "github.com/onsi/ginkgo/v2". "github.com/onsi/gomega")var _ = Describe("systemdScript template", func() {systemdKeys := map[string]bool{"Description": true, "Path": true, "Name": true, "Dependencies": true,"Arguments": true, "ChRoot": true, "WorkingDirectory": true,"UserName": true, "ReloadSignal": true, "PIDFile": true,"LogDirectory": true, "OutputFileSupport": true, "LimitNOFILE": true,"Restart": true, "SuccessExitStatus": true, "EnvVars": true,}systemdFuncs := map[string]bool{"cmd": true, "cmdEscape": true}actionRe := regexp.MustCompile(`\{\{(.*?)\}\}`)parseAction := func(action string) (key string, funcs []string) {action = strings.TrimSpace(strings.TrimSuffix(strings.TrimPrefix(action, "-"), "-"))kw, rest, _ := strings.Cut(action, " ")switch kw {case "end", "else":return "", nilcase "if", "range":return strings.TrimSpace(rest), nil}parts := strings.Split(action, "|")for _, p := range parts[1:] {funcs = append(funcs, strings.TrimSpace(p))}return strings.TrimSpace(parts[0]), funcs}It("only references keys and functions the service library provides", func() {matches := actionRe.FindAllStringSubmatch(systemdScript, -1)Expect(matches).ToNot(BeEmpty())for _, m := range matches {key, funcs := parseAction(m[1])if key != "" && key != "." {Expect(systemdKeys).To(HaveKey(key),"template action %q uses a key unknown to kardianos/service", m[0])}for _, fn := range funcs {Expect(systemdFuncs).To(HaveKey(fn),"template action %q uses an unknown pipeline function", m[0])}}})})