mirror of
https://github.com/coredns/coredns.git
synced 2025-10-27 16:24:19 -04:00
restore 1.8.3 question revert logic; add tests (#4840)
Signed-off-by: Chris O'Haver <cohaver@infoblox.com> Signed-off-by: Vector <815926354@qq.com>
This commit is contained in:
@@ -54,7 +54,10 @@ func (rw Rewrite) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg
|
|||||||
}
|
}
|
||||||
wr.ResponseRules = append(wr.ResponseRules, respRules...)
|
wr.ResponseRules = append(wr.ResponseRules, respRules...)
|
||||||
if rule.Mode() == Stop {
|
if rule.Mode() == Stop {
|
||||||
break
|
if !rw.RevertPolicy.DoRevert() {
|
||||||
|
return plugin.NextOrFailure(rw.Name(), rw.Next, ctx, w, r)
|
||||||
|
}
|
||||||
|
return plugin.NextOrFailure(rw.Name(), rw.Next, ctx, wr, r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -163,6 +163,59 @@ func TestNewRule(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRewriteDefaultRevertPolicy(t *testing.T) {
|
||||||
|
rules := []Rule{}
|
||||||
|
|
||||||
|
r, _ := newNameRule("stop", "prefix", "prefix", "to")
|
||||||
|
rules = append(rules, r)
|
||||||
|
r, _ = newNameRule("stop", "suffix", ".suffix.", ".nl.")
|
||||||
|
rules = append(rules, r)
|
||||||
|
r, _ = newNameRule("stop", "substring", "from.substring", "to")
|
||||||
|
rules = append(rules, r)
|
||||||
|
r, _ = newNameRule("stop", "regex", "(f.*m)\\.regex\\.(nl)", "to.{2}")
|
||||||
|
rules = append(rules, r)
|
||||||
|
|
||||||
|
rw := Rewrite{
|
||||||
|
Next: plugin.HandlerFunc(msgPrinter),
|
||||||
|
Rules: rules,
|
||||||
|
// use production (default) RevertPolicy
|
||||||
|
}
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
from string
|
||||||
|
fromT uint16
|
||||||
|
fromC uint16
|
||||||
|
to string
|
||||||
|
toT uint16
|
||||||
|
toC uint16
|
||||||
|
}{
|
||||||
|
{"prefix.nl.", dns.TypeA, dns.ClassINET, "to.nl.", dns.TypeA, dns.ClassINET},
|
||||||
|
{"to.suffix.", dns.TypeA, dns.ClassINET, "to.nl.", dns.TypeA, dns.ClassINET},
|
||||||
|
{"from.substring.nl.", dns.TypeA, dns.ClassINET, "to.nl.", dns.TypeA, dns.ClassINET},
|
||||||
|
{"from.regex.nl.", dns.TypeA, dns.ClassINET, "to.nl.", dns.TypeA, dns.ClassINET},
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx := context.TODO()
|
||||||
|
for i, tc := range tests {
|
||||||
|
m := new(dns.Msg)
|
||||||
|
m.SetQuestion(tc.from, tc.fromT)
|
||||||
|
m.Question[0].Qclass = tc.fromC
|
||||||
|
|
||||||
|
rec := dnstest.NewRecorder(&test.ResponseWriter{})
|
||||||
|
rw.ServeDNS(ctx, rec, m)
|
||||||
|
|
||||||
|
resp := rec.Msg
|
||||||
|
|
||||||
|
if resp.Question[0].Name != tc.from {
|
||||||
|
t.Errorf("Test %d: Expected Name in Question to be %q but was %q", i, tc.from, resp.Question[0].Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.Answer[0].Header().Name != tc.to {
|
||||||
|
t.Errorf("Test %d: Expected Name in Answer to be %q but was %q", i, tc.to, resp.Answer[0].Header().Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestRewrite(t *testing.T) {
|
func TestRewrite(t *testing.T) {
|
||||||
rules := []Rule{}
|
rules := []Rule{}
|
||||||
r, _ := newNameRule("stop", "from.nl.", "to.nl.")
|
r, _ := newNameRule("stop", "from.nl.", "to.nl.")
|
||||||
|
|||||||
Reference in New Issue
Block a user