mirror of
https://github.com/miekg/dns.git
synced 2025-08-10 03:26:57 +02:00
Although BIND9 documentations does not specify the possible size of offset in $GENERATE clause, it clearly says that range must be a positive integer between 0 and (2^31)-1. Moreover, BIND perfectly supports large offsets which might be really handy when you're dealing with large intranets. I.e. consider following case ``` $GENERATE 0-255 dhcp-${0,4,d} A 10.0.0.$ $GENERATE 0-255 dhcp-${256,4,d} A 10.0.1.$ $GENERATE 0-255 dhcp-${512,4,d} A 10.0.2.$ ... ``` This change removes offset size check and introduces check that 0 >= (start + offset) and (end + offset) < (2^31)-1.
79 lines
2.1 KiB
Go
79 lines
2.1 KiB
Go
package dns
|
|
|
|
import (
|
|
"testing"
|
|
"strings"
|
|
)
|
|
|
|
func TestGenerateRangeGuard(t *testing.T) {
|
|
var tests = [...]struct {
|
|
zone string
|
|
fail bool
|
|
}{{
|
|
`@ IN SOA ns.test. hostmaster.test. ( 1 8h 2h 7d 1d )
|
|
$GENERATE 0-1 dhcp-${0,4,d} A 10.0.0.$
|
|
`, false},{
|
|
`@ IN SOA ns.test. hostmaster.test. ( 1 8h 2h 7d 1d )
|
|
$GENERATE 128-129 dhcp-${-128,4,d} A 10.0.0.$
|
|
`, false},{
|
|
`@ IN SOA ns.test. hostmaster.test. ( 1 8h 2h 7d 1d )
|
|
$GENERATE 128-129 dhcp-${-129,4,d} A 10.0.0.$
|
|
`, true},{
|
|
`@ IN SOA ns.test. hostmaster.test. ( 1 8h 2h 7d 1d )
|
|
$GENERATE 0-2 dhcp-${2147483647,4,d} A 10.0.0.$
|
|
`, true},{
|
|
`@ IN SOA ns.test. hostmaster.test. ( 1 8h 2h 7d 1d )
|
|
$GENERATE 0-1 dhcp-${2147483646,4,d} A 10.0.0.$
|
|
`, false},
|
|
}
|
|
Outer:
|
|
for i := range tests {
|
|
for tok := range ParseZone(strings.NewReader(tests[i].zone), "test.", "test") {
|
|
if tok.Error != nil {
|
|
if !tests[i].fail {
|
|
t.Errorf("expected \n\n%s\nto be parsed, but got %v", tests[i].zone, tok.Error)
|
|
}
|
|
continue Outer
|
|
}
|
|
}
|
|
if tests[i].fail {
|
|
t.Errorf("expected \n\n%s\nto fail, but got no error", tests[i].zone)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGenerateModToPrintf(t *testing.T) {
|
|
tests := []struct {
|
|
mod string
|
|
wantFmt string
|
|
wantOffset int
|
|
wantErr bool
|
|
}{
|
|
{"0,0,d", "%0d", 0, false},
|
|
{"0,0", "%0d", 0, false},
|
|
{"0", "%0d", 0, false},
|
|
{"3,2,d", "%02d", 3, false},
|
|
{"3,2", "%02d", 3, false},
|
|
{"3", "%0d", 3, false},
|
|
{"0,0,o", "%0o", 0, false},
|
|
{"0,0,x", "%0x", 0, false},
|
|
{"0,0,X", "%0X", 0, false},
|
|
{"0,0,z", "", 0, true},
|
|
{"0,0,0,d", "", 0, true},
|
|
{"-100,0,d", "%0d", -100, false},
|
|
}
|
|
for _, test := range tests {
|
|
gotFmt, gotOffset, err := modToPrintf(test.mod)
|
|
switch {
|
|
case err != nil && !test.wantErr:
|
|
t.Errorf("modToPrintf(%q) - expected nil-error, but got %v", test.mod, err)
|
|
case err == nil && test.wantErr:
|
|
t.Errorf("modToPrintf(%q) - expected error, but got nil-error", test.mod)
|
|
case gotFmt != test.wantFmt:
|
|
t.Errorf("modToPrintf(%q) - expected format %q, but got %q", test.mod, test.wantFmt, gotFmt)
|
|
case gotOffset != test.wantOffset:
|
|
t.Errorf("modToPrintf(%q) - expected offset %d, but got %d", test.mod, test.wantOffset, gotOffset)
|
|
}
|
|
}
|
|
}
|