切换为默认的dns解析;增加resolver=system的支持
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
|
||||
"github.com/go-gost/core/chain"
|
||||
xlogger "github.com/go-gost/x/logger"
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
|
||||
func TestNewExchanger_UDP(t *testing.T) {
|
||||
@@ -175,6 +176,117 @@ func TestNewExchanger_String(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewExchanger_System(t *testing.T) {
|
||||
ex, err := NewExchanger("system", LoggerOption(xlogger.Nop()))
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if _, ok := ex.(*systemExchanger); !ok {
|
||||
t.Fatalf("NewExchanger(system) = %T, want *systemExchanger", ex)
|
||||
}
|
||||
if ex.String() != "system" {
|
||||
t.Errorf("String() = %q, want system", ex.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewExchanger_AutoSystem(t *testing.T) {
|
||||
ex, err := NewExchanger("auto", LoggerOption(xlogger.Nop()))
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if _, ok := ex.(*systemExchanger); !ok {
|
||||
t.Fatalf("NewExchanger(auto) = %T, want *systemExchanger", ex)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSystemExchanger_ExchangeA(t *testing.T) {
|
||||
ex := &systemExchanger{
|
||||
rawAddr: "system",
|
||||
lookupIP: func(_ context.Context, network, host string) ([]net.IP, error) {
|
||||
if network != "ip4" {
|
||||
t.Errorf("network = %q, want ip4", network)
|
||||
}
|
||||
if host != "example.com" {
|
||||
t.Errorf("host = %q, want example.com", host)
|
||||
}
|
||||
return []net.IP{
|
||||
net.ParseIP("192.0.2.1"),
|
||||
net.ParseIP("2001:db8::1"),
|
||||
}, nil
|
||||
},
|
||||
}
|
||||
|
||||
mq := new(dns.Msg)
|
||||
mq.SetQuestion(dns.Fqdn("example.com"), dns.TypeA)
|
||||
packed, err := mq.Pack()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
reply, err := ex.Exchange(context.Background(), packed)
|
||||
if err != nil {
|
||||
t.Fatalf("Exchange: %v", err)
|
||||
}
|
||||
mr := new(dns.Msg)
|
||||
if err := mr.Unpack(reply); err != nil {
|
||||
t.Fatalf("Unpack: %v", err)
|
||||
}
|
||||
if len(mr.Answer) != 1 {
|
||||
t.Fatalf("len(Answer) = %d, want 1", len(mr.Answer))
|
||||
}
|
||||
a, ok := mr.Answer[0].(*dns.A)
|
||||
if !ok {
|
||||
t.Fatalf("Answer[0] = %T, want *dns.A", mr.Answer[0])
|
||||
}
|
||||
if !a.A.Equal(net.ParseIP("192.0.2.1")) {
|
||||
t.Errorf("A = %s, want 192.0.2.1", a.A)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSystemExchanger_ExchangeAAAA(t *testing.T) {
|
||||
ex := &systemExchanger{
|
||||
rawAddr: "system",
|
||||
lookupIP: func(_ context.Context, network, host string) ([]net.IP, error) {
|
||||
if network != "ip6" {
|
||||
t.Errorf("network = %q, want ip6", network)
|
||||
}
|
||||
if host != "example.com" {
|
||||
t.Errorf("host = %q, want example.com", host)
|
||||
}
|
||||
return []net.IP{
|
||||
net.ParseIP("192.0.2.1"),
|
||||
net.ParseIP("2001:db8::1"),
|
||||
}, nil
|
||||
},
|
||||
}
|
||||
|
||||
mq := new(dns.Msg)
|
||||
mq.SetQuestion(dns.Fqdn("example.com"), dns.TypeAAAA)
|
||||
packed, err := mq.Pack()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
reply, err := ex.Exchange(context.Background(), packed)
|
||||
if err != nil {
|
||||
t.Fatalf("Exchange: %v", err)
|
||||
}
|
||||
mr := new(dns.Msg)
|
||||
if err := mr.Unpack(reply); err != nil {
|
||||
t.Fatalf("Unpack: %v", err)
|
||||
}
|
||||
if len(mr.Answer) != 1 {
|
||||
t.Fatalf("len(Answer) = %d, want 1", len(mr.Answer))
|
||||
}
|
||||
aaaa, ok := mr.Answer[0].(*dns.AAAA)
|
||||
if !ok {
|
||||
t.Fatalf("Answer[0] = %T, want *dns.AAAA", mr.Answer[0])
|
||||
}
|
||||
if !aaaa.AAAA.Equal(net.ParseIP("2001:db8::1")) {
|
||||
t.Errorf("AAAA = %s, want 2001:db8::1", aaaa.AAAA)
|
||||
}
|
||||
}
|
||||
|
||||
func TestExchange_DialFailure(t *testing.T) {
|
||||
ex, err := NewExchanger("udp://127.0.0.1:1", TimeoutOption(100*time.Millisecond), LoggerOption(xlogger.Nop()))
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user