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()
|
return a, c.ArgErr()
|
||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
a.loader.upstream, err = upstream.NewUpstream(args)
|
a.loader.upstream, err = upstream.New(args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return a, err
|
return a, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,7 +95,7 @@ func etcdParse(c *caddy.Controller) (*Etcd, bool, error) {
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
return nil, false, c.ArgErr()
|
return nil, false, c.ArgErr()
|
||||||
}
|
}
|
||||||
u, err := upstream.NewUpstream(args)
|
u, err := upstream.New(args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, false, err
|
return nil, false, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,7 +74,7 @@ func TestLookupCNAMEExternal(t *testing.T) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Expected no error when reading zone, got %q", err)
|
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}}}
|
fm := File{Next: test.ErrorHandler(), Zones: Zones{Z: map[string]*Zone{name: zone}, Names: []string{name}}}
|
||||||
ctx := context.TODO()
|
ctx := context.TODO()
|
||||||
|
|
|
@ -110,7 +110,7 @@ func fileParse(c *caddy.Controller) (Zones, error) {
|
||||||
|
|
||||||
case "upstream":
|
case "upstream":
|
||||||
args := c.RemainingArgs()
|
args := c.RemainingArgs()
|
||||||
upstr, err = upstream.NewUpstream(args)
|
upstr, err = upstream.New(args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Zones{}, err
|
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())
|
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())
|
k8s.Fall.SetZonesFromArgs(c.RemainingArgs())
|
||||||
case "upstream":
|
case "upstream":
|
||||||
args := c.RemainingArgs()
|
args := c.RemainingArgs()
|
||||||
u, err := upstream.NewUpstream(args)
|
u, err := upstream.New(args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,9 +18,9 @@ type Upstream struct {
|
||||||
Forward *proxy.Proxy
|
Forward *proxy.Proxy
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewUpstream creates a new Upstream for given destination(s). If dests is empty
|
// New creates a new Upstream for given destination(s). If dests is empty it default to upstreaming to
|
||||||
// it default to upstreaming to Self.
|
// the coredns process.
|
||||||
func NewUpstream(dests []string) (Upstream, error) {
|
func New(dests []string) (Upstream, error) {
|
||||||
u := Upstream{}
|
u := Upstream{}
|
||||||
if len(dests) == 0 {
|
if len(dests) == 0 {
|
||||||
u.self = true
|
u.self = true
|
||||||
|
|
|
@ -9,7 +9,12 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"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/mholt/caddy/caddyfile"
|
||||||
|
"github.com/miekg/dns"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestStop(t *testing.T) {
|
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":
|
case "upstream":
|
||||||
args := c.RemainingArgs()
|
args := c.RemainingArgs()
|
||||||
var err error
|
var err error
|
||||||
upstr, err = upstream.NewUpstream(args)
|
upstr, err = upstream.New(args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return file.Zones{}, err
|
return file.Zones{}, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,7 +145,7 @@ func templateParse(c *caddy.Controller) (handler Handler, err error) {
|
||||||
|
|
||||||
case "upstream":
|
case "upstream":
|
||||||
args := c.RemainingArgs()
|
args := c.RemainingArgs()
|
||||||
u, err := upstream.NewUpstream(args)
|
u, err := upstream.New(args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return handler, err
|
return handler, err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue