From 177e32b62e1bd937317ec3fd7c7f3a8114c52d77 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Fri, 15 Jun 2018 16:12:56 +0100 Subject: [PATCH] plugin/forward: add REFUSED test (#1878) add a test to see if we copy the rcode correctly. Some minor cleanup in import ordering and renaming NewUpstream to New as we already are in the upstream package. --- plugin/auto/setup.go | 2 +- plugin/etcd/setup.go | 2 +- plugin/file/cname_test.go | 2 +- plugin/file/setup.go | 2 +- plugin/forward/forward_test.go | 25 +++++++++++++++++++++++++ plugin/kubernetes/setup.go | 2 +- plugin/pkg/upstream/upstream.go | 6 +++--- plugin/proxy/proxy_test.go | 27 +++++++++++++++++++++++++++ plugin/secondary/setup.go | 2 +- plugin/template/setup.go | 2 +- 10 files changed, 62 insertions(+), 10 deletions(-) diff --git a/plugin/auto/setup.go b/plugin/auto/setup.go index 8f087e899..8791b0738 100644 --- a/plugin/auto/setup.go +++ b/plugin/auto/setup.go @@ -153,7 +153,7 @@ func autoParse(c *caddy.Controller) (Auto, error) { return a, c.ArgErr() } var err error - a.loader.upstream, err = upstream.NewUpstream(args) + a.loader.upstream, err = upstream.New(args) if err != nil { return a, err } diff --git a/plugin/etcd/setup.go b/plugin/etcd/setup.go index e8d91a605..0cc8b0553 100644 --- a/plugin/etcd/setup.go +++ b/plugin/etcd/setup.go @@ -95,7 +95,7 @@ func etcdParse(c *caddy.Controller) (*Etcd, bool, error) { if len(args) == 0 { return nil, false, c.ArgErr() } - u, err := upstream.NewUpstream(args) + u, err := upstream.New(args) if err != nil { return nil, false, err } diff --git a/plugin/file/cname_test.go b/plugin/file/cname_test.go index 0bc907b1f..10eb7d934 100644 --- a/plugin/file/cname_test.go +++ b/plugin/file/cname_test.go @@ -74,7 +74,7 @@ func TestLookupCNAMEExternal(t *testing.T) { if err != nil { t.Fatalf("Expected no error when reading zone, got %q", err) } - zone.Upstream, _ = upstream.NewUpstream([]string{"8.8.8.8:53"}) // TODO(miek): point to local instance + zone.Upstream, _ = upstream.New([]string{"8.8.8.8:53"}) // TODO(miek): point to local instance fm := File{Next: test.ErrorHandler(), Zones: Zones{Z: map[string]*Zone{name: zone}, Names: []string{name}}} ctx := context.TODO() diff --git a/plugin/file/setup.go b/plugin/file/setup.go index 6f83ea9f3..3f8d1969b 100644 --- a/plugin/file/setup.go +++ b/plugin/file/setup.go @@ -110,7 +110,7 @@ func fileParse(c *caddy.Controller) (Zones, error) { case "upstream": args := c.RemainingArgs() - upstr, err = upstream.NewUpstream(args) + upstr, err = upstream.New(args) if err != nil { return Zones{}, err } diff --git a/plugin/forward/forward_test.go b/plugin/forward/forward_test.go index 26167c25d..96f5fa0ce 100644 --- a/plugin/forward/forward_test.go +++ b/plugin/forward/forward_test.go @@ -41,3 +41,28 @@ func TestForward(t *testing.T) { t.Errorf("Expected 127.0.0.1, got: %s", resp.Answer[0].(*dns.A).A.String()) } } + +func TestForwardRefused(t *testing.T) { + s := dnstest.NewServer(func(w dns.ResponseWriter, r *dns.Msg) { + ret := new(dns.Msg) + ret.SetReply(r) + ret.Rcode = dns.RcodeRefused + w.WriteMsg(ret) + }) + defer s.Close() + + p := NewProxy(s.Addr, nil) + f := New() + f.SetProxy(p) + defer f.Close() + + state := request.Request{W: &test.ResponseWriter{}, Req: new(dns.Msg)} + state.Req.SetQuestion("example.org.", dns.TypeA) + resp, err := f.Forward(state) + if err != nil { + t.Fatal("Expected to receive reply, but didn't") + } + if resp.Rcode != dns.RcodeRefused { + t.Errorf("Expected rcode to be %d, got %d", dns.RcodeRefused, resp.Rcode) + } +} diff --git a/plugin/kubernetes/setup.go b/plugin/kubernetes/setup.go index 2f6eab01d..9e2129f6a 100644 --- a/plugin/kubernetes/setup.go +++ b/plugin/kubernetes/setup.go @@ -218,7 +218,7 @@ func ParseStanza(c *caddy.Controller) (*Kubernetes, error) { k8s.Fall.SetZonesFromArgs(c.RemainingArgs()) case "upstream": args := c.RemainingArgs() - u, err := upstream.NewUpstream(args) + u, err := upstream.New(args) if err != nil { return nil, err } diff --git a/plugin/pkg/upstream/upstream.go b/plugin/pkg/upstream/upstream.go index 6ef131755..466da8990 100644 --- a/plugin/pkg/upstream/upstream.go +++ b/plugin/pkg/upstream/upstream.go @@ -18,9 +18,9 @@ type Upstream struct { Forward *proxy.Proxy } -// NewUpstream creates a new Upstream for given destination(s). If dests is empty -// it default to upstreaming to Self. -func NewUpstream(dests []string) (Upstream, error) { +// New creates a new Upstream for given destination(s). If dests is empty it default to upstreaming to +// the coredns process. +func New(dests []string) (Upstream, error) { u := Upstream{} if len(dests) == 0 { u.self = true diff --git a/plugin/proxy/proxy_test.go b/plugin/proxy/proxy_test.go index 0d29c2329..3057715a4 100644 --- a/plugin/proxy/proxy_test.go +++ b/plugin/proxy/proxy_test.go @@ -9,7 +9,12 @@ import ( "testing" "time" + "github.com/coredns/coredns/plugin/pkg/dnstest" + "github.com/coredns/coredns/plugin/test" + "github.com/coredns/coredns/request" + "github.com/mholt/caddy/caddyfile" + "github.com/miekg/dns" ) func TestStop(t *testing.T) { @@ -70,3 +75,25 @@ func TestStop(t *testing.T) { }) } } + +func TestProxyRefused(t *testing.T) { + s := dnstest.NewServer(func(w dns.ResponseWriter, r *dns.Msg) { + ret := new(dns.Msg) + ret.SetReply(r) + ret.Rcode = dns.RcodeRefused + w.WriteMsg(ret) + }) + defer s.Close() + + p := NewLookup([]string{s.Addr}) + + state := request.Request{W: &test.ResponseWriter{}, Req: new(dns.Msg)} + state.Req.SetQuestion("example.org.", dns.TypeA) + resp, err := p.Forward(state) + if err != nil { + t.Fatal("Expected to receive reply, but didn't") + } + if resp.Rcode != dns.RcodeRefused { + t.Errorf("Expected rcode to be %d, got %d", dns.RcodeRefused, resp.Rcode) + } +} diff --git a/plugin/secondary/setup.go b/plugin/secondary/setup.go index 90c3a3dc5..1a4115831 100644 --- a/plugin/secondary/setup.go +++ b/plugin/secondary/setup.go @@ -81,7 +81,7 @@ func secondaryParse(c *caddy.Controller) (file.Zones, error) { case "upstream": args := c.RemainingArgs() var err error - upstr, err = upstream.NewUpstream(args) + upstr, err = upstream.New(args) if err != nil { return file.Zones{}, err } diff --git a/plugin/template/setup.go b/plugin/template/setup.go index 8c55f4115..cd4cc1b90 100644 --- a/plugin/template/setup.go +++ b/plugin/template/setup.go @@ -145,7 +145,7 @@ func templateParse(c *caddy.Controller) (handler Handler, err error) { case "upstream": args := c.RemainingArgs() - u, err := upstream.NewUpstream(args) + u, err := upstream.New(args) if err != nil { return handler, err }