mirror of
https://github.com/coredns/coredns.git
synced 2025-11-07 04:26:25 -05:00
plugin/rewrite: handle continue in response rewrite (#1740)
* handle continue in response rewrite * add test
This commit is contained in:
committed by
Miek Gieben
parent
3236464223
commit
47b2b10209
@@ -11,30 +11,41 @@ import (
|
|||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var tests = []struct {
|
||||||
|
from string
|
||||||
|
fromType uint16
|
||||||
|
answer []dns.RR
|
||||||
|
to string
|
||||||
|
toType uint16
|
||||||
|
noRevert bool
|
||||||
|
}{
|
||||||
|
{"core.dns.rocks", dns.TypeA, []dns.RR{test.A("dns.core.rocks. 5 IN A 10.0.0.1")}, "core.dns.rocks", dns.TypeA, false},
|
||||||
|
{"core.dns.rocks", dns.TypeSRV, []dns.RR{test.SRV("dns.core.rocks. 5 IN SRV 0 100 100 srv1.dns.core.rocks.")}, "core.dns.rocks", dns.TypeSRV, false},
|
||||||
|
{"core.dns.rocks", dns.TypeA, []dns.RR{test.A("core.dns.rocks. 5 IN A 10.0.0.1")}, "dns.core.rocks.", dns.TypeA, true},
|
||||||
|
{"core.dns.rocks", dns.TypeSRV, []dns.RR{test.SRV("core.dns.rocks. 5 IN SRV 0 100 100 srv1.dns.core.rocks.")}, "dns.core.rocks.", dns.TypeSRV, true},
|
||||||
|
{"core.dns.rocks", dns.TypeHINFO, []dns.RR{test.HINFO("core.dns.rocks. 5 HINFO INTEL-64 \"RHEL 7.4\"")}, "core.dns.rocks", dns.TypeHINFO, false},
|
||||||
|
{"core.dns.rocks", dns.TypeA, []dns.RR{
|
||||||
|
test.A("dns.core.rocks. 5 IN A 10.0.0.1"),
|
||||||
|
test.A("dns.core.rocks. 5 IN A 10.0.0.2"),
|
||||||
|
}, "core.dns.rocks", dns.TypeA, false},
|
||||||
|
}
|
||||||
|
|
||||||
func TestResponseReverter(t *testing.T) {
|
func TestResponseReverter(t *testing.T) {
|
||||||
|
|
||||||
rules := []Rule{}
|
rules := []Rule{}
|
||||||
r, _ := newNameRule("stop", "regex", `(core)\.(dns)\.(rocks)`, "{2}.{1}.{3}", "answer", "name", `(dns)\.(core)\.(rocks)`, "{2}.{1}.{3}")
|
r, _ := newNameRule("stop", "regex", `(core)\.(dns)\.(rocks)`, "{2}.{1}.{3}", "answer", "name", `(dns)\.(core)\.(rocks)`, "{2}.{1}.{3}")
|
||||||
rules = append(rules, r)
|
rules = append(rules, r)
|
||||||
|
|
||||||
tests := []struct {
|
doReverterTests(rules, t)
|
||||||
from string
|
|
||||||
fromType uint16
|
|
||||||
answer []dns.RR
|
|
||||||
to string
|
|
||||||
toType uint16
|
|
||||||
noRevert bool
|
|
||||||
}{
|
|
||||||
{"core.dns.rocks", dns.TypeA, []dns.RR{test.A("dns.core.rocks. 5 IN A 10.0.0.1")}, "core.dns.rocks", dns.TypeA, false},
|
|
||||||
{"core.dns.rocks", dns.TypeSRV, []dns.RR{test.SRV("dns.core.rocks. 5 IN SRV 0 100 100 srv1.dns.core.rocks.")}, "core.dns.rocks", dns.TypeSRV, false},
|
|
||||||
{"core.dns.rocks", dns.TypeA, []dns.RR{test.A("core.dns.rocks. 5 IN A 10.0.0.1")}, "dns.core.rocks.", dns.TypeA, true},
|
|
||||||
{"core.dns.rocks", dns.TypeSRV, []dns.RR{test.SRV("core.dns.rocks. 5 IN SRV 0 100 100 srv1.dns.core.rocks.")}, "dns.core.rocks.", dns.TypeSRV, true},
|
|
||||||
{"core.dns.rocks", dns.TypeHINFO, []dns.RR{test.HINFO("core.dns.rocks. 5 HINFO INTEL-64 \"RHEL 7.4\"")}, "core.dns.rocks", dns.TypeHINFO, false},
|
|
||||||
{"core.dns.rocks", dns.TypeA, []dns.RR{
|
|
||||||
test.A("dns.core.rocks. 5 IN A 10.0.0.1"),
|
|
||||||
test.A("dns.core.rocks. 5 IN A 10.0.0.2"),
|
|
||||||
}, "core.dns.rocks", dns.TypeA, false},
|
|
||||||
}
|
|
||||||
|
|
||||||
|
rules = []Rule{}
|
||||||
|
r, _ = newNameRule("continue", "regex", `(core)\.(dns)\.(rocks)`, "{2}.{1}.{3}", "answer", "name", `(dns)\.(core)\.(rocks)`, "{2}.{1}.{3}")
|
||||||
|
rules = append(rules, r)
|
||||||
|
|
||||||
|
doReverterTests(rules, t)
|
||||||
|
}
|
||||||
|
|
||||||
|
func doReverterTests(rules []Rule, t *testing.T) {
|
||||||
ctx := context.TODO()
|
ctx := context.TODO()
|
||||||
for i, tc := range tests {
|
for i, tc := range tests {
|
||||||
m := new(dns.Msg)
|
m := new(dns.Msg)
|
||||||
|
|||||||
@@ -64,7 +64,10 @@ func (rw Rewrite) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return plugin.NextOrFailure(rw.Name(), rw.Next, ctx, w, r)
|
if rw.noRevert || len(wr.ResponseRules) == 0 {
|
||||||
|
return plugin.NextOrFailure(rw.Name(), rw.Next, ctx, w, r)
|
||||||
|
}
|
||||||
|
return plugin.NextOrFailure(rw.Name(), rw.Next, ctx, wr, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name implements the Handler interface.
|
// Name implements the Handler interface.
|
||||||
|
|||||||
Reference in New Issue
Block a user