mirror of
https://github.com/coredns/coredns.git
synced 2025-10-28 00:34:24 -04:00
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:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user