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.
This commit is contained in:
Miek Gieben 2018-06-15 16:12:56 +01:00 committed by Yong Tang
parent 70c957d885
commit 177e32b62e
10 changed files with 62 additions and 10 deletions

View file

@ -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
}

View file

@ -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
}

View file

@ -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()

View file

@ -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
}

View file

@ -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)
}
}

View file

@ -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
}

View file

@ -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

View file

@ -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)
}
}

View file

@ -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
}

View file

@ -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
}