diff --git a/internal/filtering/filtering_test.go b/internal/filtering/filtering_test.go index 6e0ea4dd..dd74ed84 100644 --- a/internal/filtering/filtering_test.go +++ b/internal/filtering/filtering_test.go @@ -9,6 +9,7 @@ import ( "testing" "github.com/AdguardTeam/AdGuardHome/internal/aghtest" + "github.com/AdguardTeam/AdGuardHome/internal/filtering/rewrite" "github.com/AdguardTeam/golibs/cache" "github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/testutil" @@ -694,6 +695,96 @@ func TestMatching(t *testing.T) { } } +func TestRewrites(t *testing.T) { + rewrites := []*rewrite.Item{{ + Domain: "example.org", + Answer: "1.1.1.1", + }, { + Domain: "example-v6.org", + Answer: "1:2:3::4", + }, { + Domain: "cname.org", + Answer: "cname-res.org", + }} + + testCases := []struct { + name string + host string + wantReason Reason + wantIsFiltered bool + qtype uint16 + }{{ + name: "not_found_a", + host: "not-example.org", + wantIsFiltered: false, + wantReason: NotFilteredNotFound, + qtype: dns.TypeA, + }, { + name: "not_found_aaaa", + host: "not-example.org", + wantIsFiltered: false, + wantReason: NotFilteredNotFound, + qtype: dns.TypeAAAA, + }, { + name: "not_found_txt", + host: "not-example.org", + wantIsFiltered: false, + wantReason: NotFilteredNotFound, + qtype: dns.TypeTXT, + }, { + name: "found_a", + host: "example.org", + wantIsFiltered: false, + wantReason: Rewritten, + qtype: dns.TypeA, + }, { + name: "found_aaaa", + host: "example-v6.org", + wantIsFiltered: false, + wantReason: Rewritten, + qtype: dns.TypeAAAA, + }, { + name: "found_txt", + host: "example.org", + wantIsFiltered: false, + wantReason: NotFilteredNotFound, + qtype: dns.TypeTXT, + }, { + name: "cname_a", + host: "cname.org", + wantIsFiltered: false, + wantReason: Rewritten, + qtype: dns.TypeA, + }, { + name: "cname_aaaa", + host: "cname.org", + wantIsFiltered: false, + wantReason: Rewritten, + qtype: dns.TypeAAAA, + }, { + name: "cname_txt", + host: "cname.org", + wantIsFiltered: false, + wantReason: NotFilteredNotFound, + qtype: dns.TypeTXT, + }} + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + d, setts := newForTest(t, &Config{ + Rewrites: rewrites, + }, nil) + t.Cleanup(d.Close) + + res, err := d.CheckHost(tc.host, tc.qtype, setts) + require.NoError(t, err) + + assert.Equal(t, tc.wantIsFiltered, res.IsFiltered) + assert.Equal(t, tc.wantReason, res.Reason) + }) + } +} + func TestWhitelist(t *testing.T) { rules := `||host1^ ||host2^