* plugin/rewrite: streamline the ResponseRule handling. The functionality of a response rule is now completely encapsulated behind a `ResponseRule` interface. This significantly simplifies the complete processing flow, it enables more flexible response handling and it is possible to eliminate lots of state flags, ifs and switches. Based on the new flexibility the pull request also enables to support a response name rewrite for all name rewrite types. To be compatible, an explicit `answer auto` option is added to support a best effort response rewrite (name and value). Additionally now all name rewrite rules support additional name and value reponse rewrite options. Using this feature it is also possible now to rewrite a complete sub domain hierarchy to a single domain name combined with a correct rewrite (#2389). Signed-off-by: Uwe Krueger <uwe.krueger@sap.com> * revert policy Signed-off-by: Uwe Krueger <uwe.krueger@sap.com> Co-authored-by: Miek Gieben <miek@miek.nl>
67 lines
1.8 KiB
Go
67 lines
1.8 KiB
Go
package rewrite
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/coredns/caddy"
|
|
)
|
|
|
|
func TestParse(t *testing.T) {
|
|
c := caddy.NewTestController("dns", `rewrite`)
|
|
_, err := rewriteParse(c)
|
|
if err == nil {
|
|
t.Errorf("Expected error but found nil for `rewrite`")
|
|
}
|
|
c = caddy.NewTestController("dns", `rewrite name`)
|
|
_, err = rewriteParse(c)
|
|
if err == nil {
|
|
t.Errorf("Expected error but found nil for `rewrite name`")
|
|
}
|
|
c = caddy.NewTestController("dns", `rewrite name a.com b.com`)
|
|
_, err = rewriteParse(c)
|
|
if err != nil {
|
|
t.Errorf("Expected success but found %s for `rewrite name a.com b.com`", err)
|
|
}
|
|
|
|
c = caddy.NewTestController("dns",
|
|
`rewrite stop {
|
|
name regex foo bar
|
|
answer name bar foo
|
|
}`)
|
|
_, err = rewriteParse(c)
|
|
if err != nil {
|
|
t.Errorf("Expected success but found %s for valid response rewrite", err)
|
|
}
|
|
|
|
c = caddy.NewTestController("dns", `rewrite stop name regex foo bar answer name bar foo`)
|
|
_, err = rewriteParse(c)
|
|
if err != nil {
|
|
t.Errorf("Expected success but found %s for valid response rewrite", err)
|
|
}
|
|
|
|
c = caddy.NewTestController("dns",
|
|
`rewrite stop {
|
|
name regex foo bar
|
|
answer name bar foo
|
|
name baz
|
|
}`)
|
|
_, err = rewriteParse(c)
|
|
if err == nil {
|
|
t.Errorf("Expected error but got success for invalid response rewrite")
|
|
} else if !strings.Contains(err.Error(), "2 arguments required") {
|
|
t.Errorf("Got wrong error for invalid response rewrite: %v", err.Error())
|
|
}
|
|
|
|
c = caddy.NewTestController("dns",
|
|
`rewrite stop {
|
|
answer name bar foo
|
|
name regex foo bar
|
|
}`)
|
|
_, err = rewriteParse(c)
|
|
if err == nil {
|
|
t.Errorf("Expected error but got success for invalid response rewrite")
|
|
} else if !strings.Contains(err.Error(), "must begin with a name rule") {
|
|
t.Errorf("Got wrong error for invalid response rewrite: %v", err.Error())
|
|
}
|
|
}
|