mirror of
https://github.com/Li4n0/revsuit.git
synced 2026-09-22 06:40:43 +08:00
208 lines
4.2 KiB
Go
208 lines
4.2 KiB
Go
package newdns
|
|
|
|
import (
|
|
"io"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestZoneValidate(t *testing.T) {
|
|
table := []struct {
|
|
zne Zone
|
|
err string
|
|
}{
|
|
{
|
|
zne: Zone{
|
|
Name: "foo",
|
|
},
|
|
err: "name not fully qualified: foo",
|
|
},
|
|
{
|
|
zne: Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "foo",
|
|
},
|
|
err: "master server not full qualified: foo",
|
|
},
|
|
{
|
|
zne: Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "n1.example.com.",
|
|
},
|
|
err: "missing name servers",
|
|
},
|
|
{
|
|
zne: Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "n1.example.com.",
|
|
AllNameServers: []string{
|
|
"foo",
|
|
},
|
|
},
|
|
err: "name server not fully qualified: foo",
|
|
},
|
|
{
|
|
zne: Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "n2.example.com.",
|
|
AllNameServers: []string{
|
|
"n1.example.com.",
|
|
},
|
|
},
|
|
err: "master name server not listed as name server: n2.example.com.",
|
|
},
|
|
{
|
|
zne: Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "n1.example.com.",
|
|
AllNameServers: []string{
|
|
"n1.example.com.",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
zne: Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "n1.example.com.",
|
|
AllNameServers: []string{
|
|
"n1.example.com.",
|
|
},
|
|
AdminEmail: "[email protected]",
|
|
},
|
|
err: "admin email cannot be converted to a domain name: [email protected]",
|
|
},
|
|
{
|
|
zne: Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "n1.example.com.",
|
|
AllNameServers: []string{
|
|
"n1.example.com.",
|
|
},
|
|
Refresh: 1,
|
|
Retry: 2,
|
|
},
|
|
err: "retry must be less than refresh: 2",
|
|
},
|
|
{
|
|
zne: Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "n1.example.com.",
|
|
AllNameServers: []string{
|
|
"n1.example.com.",
|
|
},
|
|
Expire: 1,
|
|
Retry: 2,
|
|
},
|
|
err: "expire must be bigger than the sum of refresh and retry: 1",
|
|
},
|
|
}
|
|
|
|
for i, item := range table {
|
|
err := item.zne.Validate()
|
|
if err != nil {
|
|
assert.EqualValues(t, item.err, err.Error(), i)
|
|
} else {
|
|
assert.Equal(t, item.err, "", item)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestZoneLookup(t *testing.T) {
|
|
zone := Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "ns1.example.com.",
|
|
AllNameServers: []string{
|
|
"ns1.example.com.",
|
|
"ns2.example.com.",
|
|
},
|
|
Handler: func(name, remoteAddr string) ([]Set, error) {
|
|
if name == "error" {
|
|
return nil, io.EOF
|
|
}
|
|
|
|
if name == "invalid1" {
|
|
return []Set{
|
|
{Name: "foo"},
|
|
}, nil
|
|
}
|
|
|
|
if name == "invalid2" {
|
|
return []Set{
|
|
{Name: "foo.", Type: A, Records: []Record{{Address: "1.2.3.4"}}},
|
|
}, nil
|
|
}
|
|
|
|
if name == "multiple" {
|
|
return []Set{
|
|
{Name: "foo.example.com.", Type: A, Records: []Record{{Address: "1.2.3.4"}}},
|
|
{Name: "foo.example.com.", Type: A, Records: []Record{{Address: "1.2.3.4"}}},
|
|
}, nil
|
|
}
|
|
|
|
if name == "" {
|
|
return []Set{
|
|
{Name: "example.com.", Type: CNAME, Records: []Record{{Address: "cool.com."}}},
|
|
}, nil
|
|
}
|
|
|
|
if name == "cname" {
|
|
return []Set{
|
|
{Name: "cname.example.com.", Type: A, Records: []Record{{Address: "1.2.3.4"}}},
|
|
{Name: "cname.example.com.", Type: CNAME, Records: []Record{{Address: "cool.com."}}},
|
|
}, nil
|
|
}
|
|
|
|
return nil, nil
|
|
},
|
|
}
|
|
|
|
err := zone.Validate()
|
|
assert.NoError(t, err)
|
|
|
|
table := []struct {
|
|
name string
|
|
err string
|
|
}{
|
|
{
|
|
name: "foo",
|
|
err: "invalid name: foo",
|
|
},
|
|
{
|
|
name: "foo.",
|
|
err: "name does not belong to zone: foo.",
|
|
},
|
|
{
|
|
name: "error.example.com.",
|
|
err: "zone handler error: EOF",
|
|
},
|
|
{
|
|
name: "invalid1.example.com.",
|
|
err: "invalid set: invalid name: foo",
|
|
},
|
|
{
|
|
name: "invalid2.example.com.",
|
|
err: "set does not belong to zone: foo.",
|
|
},
|
|
{
|
|
name: "multiple.example.com.",
|
|
err: "multiple sets for same type",
|
|
},
|
|
{
|
|
name: "example.com.",
|
|
err: "invalid CNAME set at apex: example.com.",
|
|
},
|
|
{
|
|
name: "cname.example.com.",
|
|
err: "other sets with CNAME set: cname.example.com.",
|
|
},
|
|
}
|
|
|
|
for i, item := range table {
|
|
res, exists, err := zone.Lookup(item.name, "127.0.0.1", A)
|
|
assert.Equal(t, item.err, err.Error(), i)
|
|
assert.False(t, exists, i)
|
|
assert.Nil(t, res, i)
|
|
}
|
|
}
|