Files
routedns/route_test.go
tekert 61be40db8c Add ECS source support to routing (#470) (#471)
* 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
2025-10-20 11:25:47 +02:00

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