package namedconf import "testing" func TestFormatValue(t *testing.T) { for _, c := range []struct{ name, value, want string }{ {"logging", `{ channel c { file "/var/log/named/x.log" versions 3; print-time yes; }; category default { c; }; }`, // A short inner block stays on one line, as in named.conf. "{\n\tchannel c { file \"/var/log/named/x.log\" versions 3; print-time yes; };\n\tcategory default { c; };\n}"}, {"allow-query", `{ allowed_clients; }`, `{ allowed_clients; }`}, // short: unchanged {"directory", `"/var/cache/bind"`, `"/var/cache/bind"`}, {"logging", `{ broken`, `{ broken`}, // unparsable: as it is } { if got := FormatValue(c.name, c.value); got != c.want { t.Errorf("FormatValue(%s, %q) =\n%s\nwant\n%s", c.name, c.value, got, c.want) } } } func TestFormatValueList(t *testing.T) { cases := []struct{ name, value, want string }{ {"allow-query", "{ homelab; localhost; 10.0.0.0/8; }", "{\n\thomelab;\n\tlocalhost;\n\t10.0.0.0/8;\n}"}, {"allow-query", "{ homelab; localhost; }", "{ homelab; localhost; }"}, // short: as it was {"listen-on", "port 853 tls dot { 10.0.0.1; 10.0.0.2; 10.0.0.3; }", "port 853 tls dot {\n\t10.0.0.1;\n\t10.0.0.2;\n\t10.0.0.3;\n}"}, {"allow-transfer", "{ !10.0.0.9; key xfer; 10.0.0.0/8; }", "{\n\t!10.0.0.9;\n\tkey xfer;\n\t10.0.0.0/8;\n}"}, {"recursion", "yes", "yes"}, } for _, c := range cases { if got := FormatValueList(c.name, c.value, 3); got != c.want { t.Errorf("%s %q:\n got %q\nwant %q", c.name, c.value, got, c.want) } } // A nested block (rate-limit with exempt-clients) keeps FormatValue's layout. v := "{ responses-per-second 10; log-only yes; exempt-clients { 192.0.2.1; 192.0.2.2; 192.0.2.3; }; }" if got := FormatValueList("rate-limit", v, 3); got != FormatValue("rate-limit", v) { t.Errorf("nested: %q", got) } }