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  }