package network import ( "context" "errors" "net" "testing" "time" ) // Regression test for https://github.com/9seconds/mtg/issues/439: the dialer // used to reach a SOCKS upstream must not inherit the user-supplied DoT/DoH // resolver, otherwise internal names (docker compose, k8s, /etc/hosts) fail // to resolve through a public resolver that does not know them. func TestProxyServerDialerDropsCustomResolver(t *testing.T) { customResolver := &net.Resolver{ PreferGo: true, Dial: func(_ context.Context, _, _ string) (net.Conn, error) { return nil, errors.New("custom resolver must not be queried for SOCKS upstream") }, } base := New( customResolver, "mtg-test", 7*time.Second, 0, 0, DefaultKeepAliveConfig, ) if base.NativeDialer().Resolver != customResolver { t.Fatalf("base.NativeDialer().Resolver = %v, want custom resolver", base.NativeDialer().Resolver) } d := proxyServerDialer(base) if d.Resolver != nil { t.Errorf("proxyServerDialer().Resolver = %v, want nil (must use OS resolver)", d.Resolver) } if d.Timeout != base.NativeDialer().Timeout { t.Errorf("proxyServerDialer().Timeout = %v, want %v", d.Timeout, base.NativeDialer().Timeout) } if d.FallbackDelay != base.NativeDialer().FallbackDelay { t.Errorf("proxyServerDialer().FallbackDelay = %v, want %v", d.FallbackDelay, base.NativeDialer().FallbackDelay) } }