Skip to content

Commit 250bddf

Browse files
committed
dns: allow rule-set updates that keep new mode
1 parent 0926405 commit 250bddf

File tree

2 files changed

+54
-3
lines changed

2 files changed

+54
-3
lines changed

dns/router.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -234,12 +234,12 @@ func (r *Router) ValidateRuleSetMetadataUpdate(tag string, metadata adapter.Rule
234234
}
235235
return nil
236236
}
237-
_, flags, err := resolveLegacyDNSMode(router, r.rawRules, overrides)
237+
candidateLegacyDNSMode, flags, err := resolveLegacyDNSMode(router, r.rawRules, overrides)
238238
if err != nil {
239239
return err
240240
}
241241
if legacyDNSMode {
242-
if flags.disabled {
242+
if !candidateLegacyDNSMode && flags.disabled {
243243
err := validateLegacyDNSModeDisabledRules(r.rawRules)
244244
if err != nil {
245245
return err
@@ -248,7 +248,7 @@ func (r *Router) ValidateRuleSetMetadataUpdate(tag string, metadata adapter.Rule
248248
}
249249
return nil
250250
}
251-
if flags.needed {
251+
if candidateLegacyDNSMode {
252252
return E.New(deprecated.OptionLegacyDNSAddressFilter.MessageWithLink())
253253
}
254254
return nil

dns/router_test.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,57 @@ func TestValidateRuleSetMetadataUpdateRejectsRuleSetThatWouldRequireLegacyDNSMod
715715
require.ErrorContains(t, err, "Address Filter Fields")
716716
}
717717

718+
func TestValidateRuleSetMetadataUpdateAllowsRuleSetThatKeepsNewMode(t *testing.T) {
719+
t.Parallel()
720+
721+
fakeSet := &fakeRuleSet{}
722+
routerService := &fakeRouter{
723+
ruleSets: map[string]adapter.RuleSet{
724+
"dynamic-set": fakeSet,
725+
},
726+
}
727+
ctx := service.ContextWith[adapter.Router](context.Background(), routerService)
728+
router := newTestRouterWithContext(t, ctx, []option.DNSRule{
729+
{
730+
Type: C.RuleTypeDefault,
731+
DefaultOptions: option.DefaultDNSRule{
732+
RawDefaultDNSRule: option.RawDefaultDNSRule{
733+
Domain: badoption.Listable[string]{"example.com"},
734+
},
735+
DNSRuleAction: option.DNSRuleAction{
736+
Action: C.RuleActionTypeEvaluate,
737+
RouteOptions: option.DNSRouteActionOptions{Server: "upstream"},
738+
},
739+
},
740+
},
741+
{
742+
Type: C.RuleTypeDefault,
743+
DefaultOptions: option.DefaultDNSRule{
744+
RawDefaultDNSRule: option.RawDefaultDNSRule{
745+
RuleSet: badoption.Listable[string]{"dynamic-set"},
746+
},
747+
DNSRuleAction: option.DNSRuleAction{
748+
Action: C.RuleActionTypeRoute,
749+
RouteOptions: option.DNSRouteActionOptions{Server: "selected"},
750+
},
751+
},
752+
},
753+
}, &fakeDNSTransportManager{
754+
defaultTransport: &fakeDNSTransport{tag: "default", transportType: C.DNSTypeUDP},
755+
transports: map[string]adapter.DNSTransport{
756+
"default": &fakeDNSTransport{tag: "default", transportType: C.DNSTypeUDP},
757+
"selected": &fakeDNSTransport{tag: "selected", transportType: C.DNSTypeUDP},
758+
"upstream": &fakeDNSTransport{tag: "upstream", transportType: C.DNSTypeUDP},
759+
},
760+
}, &fakeDNSClient{})
761+
require.False(t, router.legacyDNSMode)
762+
763+
err := router.ValidateRuleSetMetadataUpdate("dynamic-set", adapter.RuleSetMetadata{
764+
ContainsIPCIDRRule: true,
765+
})
766+
require.NoError(t, err)
767+
}
768+
718769
func TestValidateRuleSetMetadataUpdateAllowsRelaxingLegacyRequirement(t *testing.T) {
719770
t.Parallel()
720771

0 commit comments

Comments
 (0)