Files
revsuit/internal/newdns/zone_test.go
T
Li4n0 3559894acc feat: complete basic functions
Support http,dns and mysql connection. Support custom http, dns response. Support dns rebinding.
Support mysql load local files and jdbc deserialize exploit.
2021-04-21 18:55:16 +08:00

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)
}
}