AdGuardHome/internal/rdns/rdns_test.go

94 lines
1.9 KiB
Go
Raw Normal View History

2023-07-12 13:13:31 +01:00
package rdns_test
import (
"net/netip"
"testing"
"time"
2023-07-26 11:18:44 +01:00
"github.com/AdguardTeam/AdGuardHome/internal/aghtest"
2023-07-12 13:13:31 +01:00
"github.com/AdguardTeam/AdGuardHome/internal/rdns"
"github.com/AdguardTeam/golibs/netutil"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestDefault_Process(t *testing.T) {
ip1 := netip.MustParseAddr("1.2.3.4")
revAddr1, err := netutil.IPToReversedAddr(ip1.AsSlice())
require.NoError(t, err)
ip2 := netip.MustParseAddr("4.3.2.1")
revAddr2, err := netutil.IPToReversedAddr(ip2.AsSlice())
require.NoError(t, err)
localIP := netip.MustParseAddr("192.168.0.1")
localRevAddr1, err := netutil.IPToReversedAddr(localIP.AsSlice())
require.NoError(t, err)
config := &rdns.Config{
CacheSize: 100,
CacheTTL: time.Hour,
}
testCases := []struct {
name string
addr netip.Addr
want string
}{{
name: "first",
addr: ip1,
want: revAddr1,
}, {
name: "second",
addr: ip2,
want: revAddr2,
}, {
name: "empty",
addr: netip.MustParseAddr("0.0.0.0"),
want: "",
}, {
name: "private",
addr: localIP,
want: localRevAddr1,
}}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
hit := 0
2023-07-26 11:18:44 +01:00
onExchange := func(ip netip.Addr) (host string, ttl time.Duration, err error) {
2023-07-12 13:13:31 +01:00
hit++
switch ip {
case ip1:
2023-07-26 11:18:44 +01:00
return revAddr1, 0, nil
2023-07-12 13:13:31 +01:00
case ip2:
2023-07-26 11:18:44 +01:00
return revAddr2, 0, nil
2023-07-12 13:13:31 +01:00
case localIP:
2023-07-26 11:18:44 +01:00
return localRevAddr1, 0, nil
2023-07-12 13:13:31 +01:00
default:
2023-07-26 11:18:44 +01:00
return "", 0, nil
2023-07-12 13:13:31 +01:00
}
}
2023-07-26 11:18:44 +01:00
exchanger := &aghtest.Exchanger{
2023-07-12 13:13:31 +01:00
OnExchange: onExchange,
}
config.Exchanger = exchanger
r := rdns.New(config)
got, changed := r.Process(tc.addr)
require.True(t, changed)
assert.Equal(t, tc.want, got)
assert.Equal(t, 1, hit)
// From cache.
got, changed = r.Process(tc.addr)
require.False(t, changed)
assert.Equal(t, tc.want, got)
assert.Equal(t, 1, hit)
})
}
}