aboutsummaryrefslogtreecommitdiff
path: root/plugin/template/setup_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/template/setup_test.go')
-rw-r--r--plugin/template/setup_test.go141
1 files changed, 141 insertions, 0 deletions
diff --git a/plugin/template/setup_test.go b/plugin/template/setup_test.go
new file mode 100644
index 000000000..a488ff2ff
--- /dev/null
+++ b/plugin/template/setup_test.go
@@ -0,0 +1,141 @@
+package template
+
+import (
+ "testing"
+
+ "github.com/mholt/caddy"
+)
+
+func TestSetup(t *testing.T) {
+ c := caddy.NewTestController("dns", `template ANY ANY {
+ rcode
+ }`)
+ err := setupTemplate(c)
+ if err == nil {
+ t.Errorf("Expected setupTemplate to fail on broken template, got no error")
+ }
+ c = caddy.NewTestController("dns", `template ANY ANY {
+ rcode NXDOMAIN
+ }`)
+ err = setupTemplate(c)
+ if err != nil {
+ t.Errorf("Expected no errors, got: %v", err)
+ }
+}
+
+func TestSetupParse(t *testing.T) {
+
+ serverBlockKeys := []string{"domain.com.:8053", "dynamic.domain.com.:8053"}
+
+ tests := []struct {
+ inputFileRules string
+ shouldErr bool
+ }{
+ // parse errors
+ {`template`, true},
+ {`template X`, true},
+ {`template ANY`, true},
+ {`template ANY X`, true},
+ {`template ANY ANY (?P<x>`, true},
+ {
+ `template ANY ANY {
+
+ }`,
+ true,
+ },
+ {
+ `template ANY ANY .* {
+ notavailable
+ }`,
+ true,
+ },
+ {
+ `template ANY ANY {
+ answer
+ }`,
+ true,
+ },
+ {
+ `template ANY ANY {
+ additional
+ }`,
+ true,
+ },
+ {
+ `template ANY ANY {
+ rcode
+ }`,
+ true,
+ },
+ {
+ `template ANY ANY {
+ rcode UNDEFINED
+ }`,
+ true,
+ },
+ {
+ `template ANY ANY {
+ answer "{{"
+ }`,
+ true,
+ },
+ {
+ `template ANY ANY {
+ additional "{{"
+ }`,
+ true,
+ },
+ {
+ `template ANY ANY {
+ authority "{{"
+ }`,
+ true,
+ },
+ // examples
+ {
+ `template ANY A ip-(?P<a>[0-9]*)-(?P<b>[0-9]*)-(?P<c>[0-9]*)-(?P<d>[0-9]*)[.]example[.]com {
+ answer "{{ .Name }} A {{ .Group.a }}.{{ .Group.b }}.{{ .Group.c }}.{{ .Grup.d }}."
+ }`,
+ false,
+ },
+ {
+ `template IN ANY "[.](example[.]com[.]dc1[.]example[.]com[.])$" {
+ rcode NXDOMAIN
+ answer "{{ index .Match 1 }} 60 IN SOA a.{{ index .Match 1 }} b.{{ index .Match 1 }} (1 60 60 60 60)"
+ }`,
+ false,
+ },
+ {
+ `template IN A ^ip-10-(?P<b>[0-9]*)-(?P<c>[0-9]*)-(?P<d>[0-9]*)[.]example[.]$ {
+ answer "{{ .Name }} 60 IN A 10.{{ .Group.b }}.{{ .Group.c }}.{{ .Group.d }}"
+ }
+ template IN MX ^ip-10-(?P<b>[0-9]*)-(?P<c>[0-9]*)-(?P<d>[0-9]*)[.]example[.]$ {
+ answer "{{ .Name }} 60 IN MX 10 {{ .Name }}"
+ additional "{{ .Name }} 60 IN A 10.{{ .Group.b }}.{{ .Group.c }}.{{ .Group.d }}"
+ }`,
+ false,
+ },
+ {
+ `template IN MX ^ip-10-(?P<b>[0-9]*)-(?P<c>[0-9]*)-(?P<d>[0-9]*)[.]example[.]$ {
+ answer "{{ .Name }} 60 IN MX 10 {{ .Name }}"
+ additional "{{ .Name }} 60 IN A 10.{{ .Group.b }}.{{ .Group.c }}.{{ .Group.d }}"
+ authority "example. 60 IN NS ns0.example."
+ authority "example. 60 IN NS ns1.example."
+ additional "ns0.example. 60 IN A 203.0.113.8"
+ additional "ns1.example. 60 IN A 198.51.100.8"
+ }`,
+ false,
+ },
+ }
+ for i, test := range tests {
+ c := caddy.NewTestController("dns", test.inputFileRules)
+ c.ServerBlockKeys = serverBlockKeys
+ templates, err := templateParse(c)
+
+ if err == nil && test.shouldErr {
+ t.Fatalf("Test %d expected errors, but got no error\n---\n%s\n---\n%v", i, test.inputFileRules, templates)
+ } else if err != nil && !test.shouldErr {
+ t.Fatalf("Test %d expected no errors, but got '%v'", i, err)
+ }
+ }
+}