github.com/database64128/shadowsocks-go@v1.7.0/dns/dns_test.go (about) 1 package dns 2 3 import ( 4 "net/netip" 5 "testing" 6 7 "github.com/database64128/shadowsocks-go/conn" 8 "github.com/database64128/shadowsocks-go/direct" 9 "github.com/database64128/shadowsocks-go/zerocopy" 10 "go.uber.org/zap" 11 ) 12 13 func testResolver(t *testing.T, name string, serverAddrPort netip.AddrPort, tcpClient zerocopy.TCPClient, udpClient zerocopy.UDPClient, logger *zap.Logger) { 14 r := NewResolver(name, serverAddrPort, tcpClient, udpClient, logger) 15 16 // Uncached lookup. 17 uncachedResult, err := r.Lookup("example.com") 18 if err != nil { 19 t.Fatal(err) 20 } 21 if len(uncachedResult.IPv4) == 0 { 22 t.Error("Expected at least one IPv4 address") 23 } 24 if len(uncachedResult.IPv6) == 0 { 25 t.Error("Expected at least one IPv6 address") 26 } 27 28 // Cached lookup. 29 cachedResult, err := r.Lookup("example.com") 30 if err != nil { 31 t.Fatal(err) 32 } 33 34 if uncachedResult.TTL != cachedResult.TTL { 35 t.Error("TTL mismatch") 36 } 37 } 38 39 func TestResolver(t *testing.T) { 40 logger, err := zap.NewDevelopment() 41 if err != nil { 42 t.Fatal(err) 43 } 44 defer logger.Sync() 45 46 serverAddrPort := netip.AddrPortFrom(netip.AddrFrom4([4]byte{1, 1, 1, 1}), 53) 47 tcpClient := direct.NewTCPClient("direct", conn.DefaultTCPDialer) 48 udpClient := direct.NewUDPClient("direct", 1500, conn.DefaultUDPClientListenConfig) 49 50 t.Run("UDP", func(t *testing.T) { 51 testResolver(t, "UDP", serverAddrPort, nil, udpClient, logger) 52 }) 53 54 t.Run("TCP", func(t *testing.T) { 55 testResolver(t, "TCP", serverAddrPort, tcpClient, nil, logger) 56 }) 57 }