Squashed commit of the following: commit a5607f811ab4642a0e34d3042240e3a9aafc3d84 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed Aug 30 15:44:26 2023 +0300 home: upgrade yaml commit 0593e4da17613b8770c4567fdd5fbfde31631e6f Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed Aug 30 15:01:14 2023 +0300 home: upgrade yaml commit 59ec4ba0bbe59fb2e95290f4f8101891ce4ff959 Merge: 6555941f5a325c9b6bAuthor: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed Aug 30 14:57:41 2023 +0300 Merge remote-tracking branch 'origin/master' into AG-25263-filtering-config # Conflicts: # internal/dnsforward/http.go # internal/dnsforward/http_test.go # internal/dnsforward/process.go # internal/dnsforward/process_internal_test.go commit 6555941f57e99aa8bc2473b8be9e4f096ce665e0 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed Aug 30 14:38:01 2023 +0300 docs: changelog commit c66d14cecbb1f08869a90c46e58d08ec03e29de5 Merge: a50ff1622aac36a2d2Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed Aug 30 12:58:41 2023 +0300 Merge remote-tracking branch 'origin/master' into AG-25263-filtering-config commit a50ff162291f7953912c1bb195bd7b5d802d0ab3 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed Aug 30 11:22:12 2023 +0300 home: imp code commit ef40d073e00d6acb164c0d680ed9971c4e75fbb7 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Tue Aug 29 16:19:14 2023 +0300 home: imp code commit 5fa09a95e901a72dc5d2a90ba47c96842152587b Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Tue Aug 29 14:47:48 2023 +0300 home: imp code commit 52bb295120f468faf94c953d0e795d1d58696ef1 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Tue Aug 29 13:33:01 2023 +0300 home: imp code commit 24cfccf071385d660aeba4ced744ebbacc819686 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Tue Aug 29 12:24:20 2023 +0300 filtering: imp code commit 758242b69ee5f351b25407340f989ec6b90d3607 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Tue Aug 29 10:32:51 2023 +0300 home: imp code commit 906deaa3bf86af5038fb05a54c34cc9511500ac9 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Mon Aug 28 14:46:01 2023 +0300 dnsforward: imp code commit 978bb508349cd0b6a1a0bd3df5b879b6a4dd9e29 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Mon Aug 28 14:40:31 2023 +0300 home: imp code commit d5b8dd5c930b0ccbe612f320a9908f2849370fd4 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Mon Aug 28 12:34:32 2023 +0300 filtering: imp code commit d3e5726df6bc93112329ec81bc83932ccf64b8de Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Mon Aug 28 11:57:33 2023 +0300 home: upgrade yaml commit 75d701553595786d5695540c001e6d46153351a9 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Mon Aug 28 11:46:55 2023 +0300 home: upgrade yaml commit cd8cb623b0e6eb00fd05fb62b7445ca4315b94e0 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Mon Aug 28 11:29:16 2023 +0300 docs: changelog commit 31c098d6f8d68a4afa30246c8d067a1ef4586de9 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Mon Aug 28 11:08:48 2023 +0300 docs: changelog commit 24c88dd5d42b0168a13ea11b3f760eae1e804558 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Sun Aug 27 19:12:55 2023 +0300 home: imp code commit 94f2d386c9c1b6be5df06525078c90a3d068641f Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Sun Aug 27 16:15:05 2023 +0300 home: upgrade yaml ... and 10 more commits
160 lines
3.3 KiB
Go
160 lines
3.3 KiB
Go
package dnsforward
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
|
|
"github.com/AdguardTeam/AdGuardHome/internal/filtering"
|
|
"github.com/AdguardTeam/urlfilter/rules"
|
|
"github.com/miekg/dns"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestGenAnswerHTTPS_andSVCB(t *testing.T) {
|
|
// Preconditions.
|
|
|
|
s := &Server{
|
|
dnsFilter: &filtering.DNSFilter{},
|
|
}
|
|
|
|
req := &dns.Msg{
|
|
Question: []dns.Question{{
|
|
Name: "abcd",
|
|
}},
|
|
}
|
|
|
|
// Constants and helper values.
|
|
|
|
const host = "example.com"
|
|
const prio = 32
|
|
|
|
ip4 := net.IPv4(127, 0, 0, 1)
|
|
ip6 := net.IP{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}
|
|
|
|
// Helper functions.
|
|
|
|
dnssvcb := func(key, value string) (svcb *rules.DNSSVCB) {
|
|
svcb = &rules.DNSSVCB{
|
|
Target: host,
|
|
Priority: prio,
|
|
}
|
|
|
|
if key == "" {
|
|
return svcb
|
|
}
|
|
|
|
svcb.Params = map[string]string{
|
|
key: value,
|
|
}
|
|
|
|
return svcb
|
|
}
|
|
|
|
wantsvcb := func(kv dns.SVCBKeyValue) (want *dns.SVCB) {
|
|
want = &dns.SVCB{
|
|
Hdr: s.hdr(req, dns.TypeSVCB),
|
|
Priority: prio,
|
|
Target: dns.Fqdn(host),
|
|
}
|
|
|
|
if kv == nil {
|
|
return want
|
|
}
|
|
|
|
want.Value = []dns.SVCBKeyValue{kv}
|
|
|
|
return want
|
|
}
|
|
|
|
// Tests.
|
|
|
|
testCases := []struct {
|
|
svcb *rules.DNSSVCB
|
|
want *dns.SVCB
|
|
name string
|
|
}{{
|
|
svcb: dnssvcb("", ""),
|
|
want: wantsvcb(nil),
|
|
name: "no_params",
|
|
}, {
|
|
svcb: dnssvcb("foo", "bar"),
|
|
want: wantsvcb(nil),
|
|
name: "invalid",
|
|
}, {
|
|
svcb: dnssvcb("alpn", "h3"),
|
|
want: wantsvcb(&dns.SVCBAlpn{Alpn: []string{"h3"}}),
|
|
name: "alpn",
|
|
}, {
|
|
svcb: dnssvcb("ech", "AAAA"),
|
|
want: wantsvcb(&dns.SVCBECHConfig{ECH: []byte{0, 0, 0}}),
|
|
name: "ech",
|
|
}, {
|
|
svcb: dnssvcb("echconfig", "AAAA"),
|
|
want: wantsvcb(&dns.SVCBECHConfig{ECH: []byte{0, 0, 0}}),
|
|
name: "ech_deprecated",
|
|
}, {
|
|
svcb: dnssvcb("echconfig", "%BAD%"),
|
|
want: wantsvcb(nil),
|
|
name: "ech_invalid",
|
|
}, {
|
|
svcb: dnssvcb("ipv4hint", "127.0.0.1"),
|
|
want: wantsvcb(&dns.SVCBIPv4Hint{Hint: []net.IP{ip4}}),
|
|
name: "ipv4hint",
|
|
}, {
|
|
svcb: dnssvcb("ipv4hint", "127.0.01"),
|
|
want: wantsvcb(nil),
|
|
name: "ipv4hint_invalid",
|
|
}, {
|
|
svcb: dnssvcb("ipv6hint", "::1"),
|
|
want: wantsvcb(&dns.SVCBIPv6Hint{Hint: []net.IP{ip6}}),
|
|
name: "ipv6hint",
|
|
}, {
|
|
svcb: dnssvcb("ipv6hint", ":::1"),
|
|
want: wantsvcb(nil),
|
|
name: "ipv6hint_invalid",
|
|
}, {
|
|
svcb: dnssvcb("mandatory", "alpn"),
|
|
want: wantsvcb(&dns.SVCBMandatory{Code: []dns.SVCBKey{dns.SVCB_ALPN}}),
|
|
name: "mandatory",
|
|
}, {
|
|
svcb: dnssvcb("mandatory", "alpnn"),
|
|
want: wantsvcb(nil),
|
|
name: "mandatory_invalid",
|
|
}, {
|
|
svcb: dnssvcb("no-default-alpn", ""),
|
|
want: wantsvcb(&dns.SVCBNoDefaultAlpn{}),
|
|
name: "no_default_alpn",
|
|
}, {
|
|
svcb: dnssvcb("dohpath", "/dns-query"),
|
|
want: wantsvcb(&dns.SVCBDoHPath{Template: "/dns-query"}),
|
|
name: "dohpath",
|
|
}, {
|
|
svcb: dnssvcb("port", "8080"),
|
|
want: wantsvcb(&dns.SVCBPort{Port: 8080}),
|
|
name: "port",
|
|
}, {
|
|
svcb: dnssvcb("port", "1005008080"),
|
|
want: wantsvcb(nil),
|
|
name: "bad_port",
|
|
}}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run("https", func(t *testing.T) {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
want := &dns.HTTPS{SVCB: *tc.want}
|
|
want.Hdr.Rrtype = dns.TypeHTTPS
|
|
|
|
got := s.genAnswerHTTPS(req, tc.svcb)
|
|
assert.Equal(t, want, got)
|
|
})
|
|
})
|
|
|
|
t.Run("svcb", func(t *testing.T) {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
got := s.genAnswerSVCB(req, tc.svcb)
|
|
assert.Equal(t, tc.want, got)
|
|
})
|
|
})
|
|
}
|
|
}
|