mirror of
https://github.com/folbricht/routedns.git
synced 2025-12-17 15:45:21 -06:00
* Add ECS source support to routing (#470) * Add comment to clarify handling of EDNS0_SUBNET option in match function * Add support for EDNS Client Subnet (ECS) routing and per-client filtering - Updated README.md to include ECS routing capabilities and SVG image. - Added example configuration for use case 7
94 lines
1.7 KiB
Go
94 lines
1.7 KiB
Go
package rdns
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/miekg/dns"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestRoute(t *testing.T) {
|
|
tests := []struct {
|
|
rName string
|
|
rType []string
|
|
rClass string
|
|
rInvert bool
|
|
qName string
|
|
qType uint16
|
|
qClass uint16
|
|
match bool
|
|
}{
|
|
{
|
|
rName: "\\.google\\.com$",
|
|
qType: dns.TypeA,
|
|
qName: "bla.google.com",
|
|
match: true,
|
|
},
|
|
{
|
|
rName: "\\.google\\.com$",
|
|
qType: dns.TypeA,
|
|
qName: "google.com",
|
|
match: false,
|
|
},
|
|
{
|
|
rType: []string{"MX"},
|
|
rName: "google\\.com$",
|
|
qType: dns.TypeA,
|
|
qName: "google.com",
|
|
match: false,
|
|
},
|
|
{
|
|
rType: []string{"MX", "A"},
|
|
rName: "google\\.com$",
|
|
qType: dns.TypeA,
|
|
qName: "google.com",
|
|
match: true,
|
|
},
|
|
{
|
|
rType: []string{"MX"},
|
|
rName: "google\\.com$",
|
|
qType: dns.TypeMX,
|
|
qName: "google.com",
|
|
match: true,
|
|
},
|
|
{
|
|
rType: []string{"MX"},
|
|
rName: "google\\.com$",
|
|
rInvert: true,
|
|
qType: dns.TypeMX,
|
|
qName: "google.com",
|
|
match: false,
|
|
},
|
|
{
|
|
rClass: "INET",
|
|
rType: []string{"A"},
|
|
rName: "google\\.com$",
|
|
qClass: dns.ClassANY,
|
|
qType: dns.TypeA,
|
|
qName: "google.com",
|
|
match: false,
|
|
},
|
|
{
|
|
rClass: "INET",
|
|
rType: []string{"A"},
|
|
rName: "google\\.com$",
|
|
qClass: dns.ClassINET,
|
|
qType: dns.TypeA,
|
|
qName: "google.com",
|
|
match: true,
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
r, err := NewRoute(test.rName, test.rClass, test.rType, nil, "", "", "", "", "", "", "", &TestResolver{})
|
|
require.NoError(t, err)
|
|
r.Invert(test.rInvert)
|
|
|
|
q := new(dns.Msg)
|
|
q.Question = make([]dns.Question, 1)
|
|
q.Question[0] = dns.Question{Name: test.qName, Qtype: test.qType, Qclass: test.qClass}
|
|
|
|
match := r.match(q, ClientInfo{})
|
|
require.Equal(t, test.match, match)
|
|
}
|
|
}
|