Commit 177e32b6 authored by Miek Gieben's avatar Miek Gieben Committed by Yong Tang

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.
parent 70c957d8
......@@ -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
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment