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:
parent
70c957d885
commit
177e32b62e
10 changed files with 62 additions and 10 deletions
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue