切换为默认的dns解析;增加resolver=system的支持

This commit is contained in:
wenyifan
2026-07-02 20:50:24 +08:00
parent a24d79fd45
commit bf85966600
6 changed files with 312 additions and 24 deletions
+4 -1
View File
@@ -95,7 +95,9 @@ func BuildConfigFromCmd(serviceList, nodeList []string) (*config.Config, error)
resolverCfg.Nameservers = append(
resolverCfg.Nameservers,
&config.NameserverConfig{
Addr: rs,
Addr: rs,
Prefer: mdutil.GetString(md, "prefer"),
Only: mdutil.GetString(md, "only"),
},
)
}
@@ -272,6 +274,7 @@ func BuildConfigFromCmd(serviceList, nodeList []string) (*config.Config, error)
&config.NameserverConfig{
Addr: rs,
Prefer: mdutil.GetString(md, "prefer"),
Only: mdutil.GetString(md, "only"),
},
)
}
+71 -19
View File
@@ -211,13 +211,13 @@ func TestNorm(t *testing.T) {
wantErr bool
}{
{
name: "empty string",
input: "",
name: "empty string",
input: "",
wantErr: true,
},
{
name: "whitespace only",
input: " ",
name: "whitespace only",
input: " ",
wantErr: true,
},
{
@@ -326,12 +326,12 @@ func TestCutHost(t *testing.T) {
func TestParseSelector(t *testing.T) {
tests := []struct {
name string
input map[string]any
wantNil bool
wantStrat string
wantFails int
wantDurGt bool // failTimeout > 0
name string
input map[string]any
wantNil bool
wantStrat string
wantFails int
wantDurGt bool // failTimeout > 0
}{
{
name: "no params",
@@ -359,9 +359,9 @@ func TestParseSelector(t *testing.T) {
{
name: "all params with failTimeout",
input: map[string]any{
"strategy": "hash",
"maxFails": 5,
"failTimeout": "10s",
"strategy": "hash",
"maxFails": 5,
"failTimeout": "10s",
},
wantStrat: "hash",
wantFails: 5,
@@ -455,8 +455,8 @@ func TestCopyConnectorConfig(t *testing.T) {
t.Run("non-nil deep copy", func(t *testing.T) {
orig := &config.ConnectorConfig{
Type: "http",
Auth: &config.AuthConfig{Username: "u", Password: "p"},
Type: "http",
Auth: &config.AuthConfig{Username: "u", Password: "p"},
Metadata: map[string]any{"k": "v"},
}
c := copyConnectorConfig(orig)
@@ -487,9 +487,9 @@ func TestCopyDialerConfig(t *testing.T) {
t.Run("non-nil deep copy", func(t *testing.T) {
orig := &config.DialerConfig{
Type: "tls",
TLS: &config.TLSConfig{ServerName: "example.com"},
Auth: &config.AuthConfig{Username: "u"},
Type: "tls",
TLS: &config.TLSConfig{ServerName: "example.com"},
Auth: &config.AuthConfig{Username: "u"},
Metadata: map[string]any{"k": "v"},
}
c := copyDialerConfig(orig)
@@ -1068,6 +1068,31 @@ func TestBuildConfigFromCmd_NodeWithResolver(t *testing.T) {
}
}
func TestBuildConfigFromCmd_NodeResolverFamilyOptions(t *testing.T) {
cfg, err := BuildConfigFromCmd(
[]string{":8080"},
[]string{"http://proxy:3128?resolver=auto&prefer=ipv6&only=ipv4"},
)
if err != nil {
t.Fatalf("BuildConfigFromCmd: %v", err)
}
rs := cfg.Resolvers[0]
if len(rs.Nameservers) != 1 {
t.Fatalf("len(Nameservers) = %d, want 1", len(rs.Nameservers))
}
ns := rs.Nameservers[0]
if ns.Addr != "auto" {
t.Errorf("Addr = %q, want auto", ns.Addr)
}
if ns.Prefer != "ipv6" {
t.Errorf("Prefer = %q, want ipv6", ns.Prefer)
}
if ns.Only != "ipv4" {
t.Errorf("Only = %q, want ipv4", ns.Only)
}
}
func TestBuildConfigFromCmd_NodeWithHosts(t *testing.T) {
cfg, err := BuildConfigFromCmd(
[]string{":8080"},
@@ -1171,6 +1196,34 @@ func TestBuildConfigFromCmd_ServiceWithResolver(t *testing.T) {
}
}
func TestBuildConfigFromCmd_ServiceSystemResolverOnlyIPv4(t *testing.T) {
cfg, err := BuildConfigFromCmd(
[]string{"http://:8080?resolver=system&only=ipv4"},
nil,
)
if err != nil {
t.Fatalf("BuildConfigFromCmd: %v", err)
}
if len(cfg.Resolvers) != 1 {
t.Fatalf("len(Resolvers) = %d, want 1", len(cfg.Resolvers))
}
rs := cfg.Resolvers[0]
if len(rs.Nameservers) != 1 {
t.Fatalf("len(Nameservers) = %d, want 1", len(rs.Nameservers))
}
ns := rs.Nameservers[0]
if ns.Addr != "system" {
t.Errorf("Addr = %q, want system", ns.Addr)
}
if ns.Only != "ipv4" {
t.Errorf("Only = %q, want ipv4", ns.Only)
}
if cfg.Services[0].Resolver != rs.Name {
t.Errorf("Service.Resolver = %q, want %q", cfg.Services[0].Resolver, rs.Name)
}
}
func TestBuildConfigFromCmd_ServiceWithHosts(t *testing.T) {
cfg, err := BuildConfigFromCmd(
[]string{":8080?hosts=example.com:1.2.3.4"},
@@ -1896,4 +1949,3 @@ func TestBuildNodeConfig_TLSOnlySecure(t *testing.T) {
t.Error("TLS.Secure should be true")
}
}