mirror of
https://github.com/coredns/coredns.git
synced 2025-11-01 02:33:14 -04:00
Cleanups and tests (#272)
For some reasons there was a dnsserver/middleware.go that defined the middleware handlers. This code was a repeat from middleware/middleware.go. Removed dnsserver/middleware.go and replaced all uses of dnsserver.Middleware with middleware.Middleware. Added dnsserver/address_test.go to test the zone normalization (and to improve the test coverage). The deleted file will also improve the test coverage :)
This commit is contained in:
@@ -18,6 +18,8 @@ func (z zoneAddr) String() string { return z.Zone + ":" + z.Port }
|
|||||||
|
|
||||||
// normalizeZone parses an zone string into a structured format with separate
|
// normalizeZone parses an zone string into a structured format with separate
|
||||||
// host, and port portions, as well as the original input string.
|
// host, and port portions, as well as the original input string.
|
||||||
|
//
|
||||||
|
// TODO(miek): possibly move this to middleware/normalize.go
|
||||||
func normalizeZone(str string) (zoneAddr, error) {
|
func normalizeZone(str string) (zoneAddr, error) {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
|
|||||||
28
core/dnsserver/address_test.go
Normal file
28
core/dnsserver/address_test.go
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
package dnsserver
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestNormalizeZone(t *testing.T) {
|
||||||
|
for i, test := range []struct {
|
||||||
|
input string
|
||||||
|
expected string
|
||||||
|
shouldErr bool
|
||||||
|
}{
|
||||||
|
{".", ".:53", false},
|
||||||
|
{".:54", ".:54", false},
|
||||||
|
{"..", ":", true},
|
||||||
|
{"..", ":", true},
|
||||||
|
} {
|
||||||
|
addr, err := normalizeZone(test.input)
|
||||||
|
actual := addr.String()
|
||||||
|
if test.shouldErr && err == nil {
|
||||||
|
t.Errorf("Test %d: Expected error, but there wasn't any", i)
|
||||||
|
}
|
||||||
|
if !test.shouldErr && err != nil {
|
||||||
|
t.Errorf("Test %d: Expected no error, but there was one: %v", i, err)
|
||||||
|
}
|
||||||
|
if actual != test.expected {
|
||||||
|
t.Errorf("Test %d: Expected %s but got %s", i, test.expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,10 @@
|
|||||||
package dnsserver
|
package dnsserver
|
||||||
|
|
||||||
import "github.com/mholt/caddy"
|
import (
|
||||||
|
"github.com/miekg/coredns/middleware"
|
||||||
|
|
||||||
|
"github.com/mholt/caddy"
|
||||||
|
)
|
||||||
|
|
||||||
// Config configuration for a single server.
|
// Config configuration for a single server.
|
||||||
type Config struct {
|
type Config struct {
|
||||||
@@ -13,14 +17,11 @@ type Config struct {
|
|||||||
// The port to listen on.
|
// The port to listen on.
|
||||||
Port string
|
Port string
|
||||||
|
|
||||||
// The directory from which to parse db files, and store keys.
|
|
||||||
Root string
|
|
||||||
|
|
||||||
// Middleware stack.
|
// Middleware stack.
|
||||||
Middleware []Middleware
|
Middleware []middleware.Middleware
|
||||||
|
|
||||||
// Compiled middleware stack.
|
// Compiled middleware stack.
|
||||||
middlewareChain Handler
|
middlewareChain middleware.Handler
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetConfig gets the Config that corresponds to c.
|
// GetConfig gets the Config that corresponds to c.
|
||||||
@@ -33,6 +34,6 @@ func GetConfig(c *caddy.Controller) *Config {
|
|||||||
// we should only get here during tests because directive
|
// we should only get here during tests because directive
|
||||||
// actions typically skip the server blocks where we make
|
// actions typically skip the server blocks where we make
|
||||||
// the configs.
|
// the configs.
|
||||||
ctx.saveConfig(c.Key, &Config{Root: Root})
|
ctx.saveConfig(c.Key, &Config{})
|
||||||
return GetConfig(c)
|
return GetConfig(c)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,52 +0,0 @@
|
|||||||
package dnsserver
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/miekg/dns"
|
|
||||||
"golang.org/x/net/context"
|
|
||||||
)
|
|
||||||
|
|
||||||
type (
|
|
||||||
// Middleware is the middle layer which represents the traditional
|
|
||||||
// idea of middleware: it chains one Handler to the next by being
|
|
||||||
// passed the next Handler in the chain.
|
|
||||||
Middleware func(Handler) Handler
|
|
||||||
|
|
||||||
// Handler is like dns.Handler except ServeDNS may return an rcode
|
|
||||||
// and/or error.
|
|
||||||
//
|
|
||||||
// If ServeDNS writes to the response body, it should return a status
|
|
||||||
// code. If the status code is not one of the following:
|
|
||||||
// * SERVFAIL (dns.RcodeServerFailure)
|
|
||||||
// * REFUSED (dns.RecodeRefused)
|
|
||||||
// * FORMERR (dns.RcodeFormatError)
|
|
||||||
// * NOTIMP (dns.RcodeNotImplemented)
|
|
||||||
//
|
|
||||||
// CoreDNS assumes *no* reply has yet been written. All other response
|
|
||||||
// codes signal other handlers above it that the response message is
|
|
||||||
// already written, and that they should not write to it also.
|
|
||||||
//
|
|
||||||
// If ServeDNS encounters an error, it should return the error value
|
|
||||||
// so it can be logged by designated error-handling middleware.
|
|
||||||
//
|
|
||||||
// If writing a response after calling another ServeDNS method, the
|
|
||||||
// returned rcode SHOULD be used when writing the response.
|
|
||||||
//
|
|
||||||
// If handling errors after calling another ServeDNS method, the
|
|
||||||
// returned error value SHOULD be logged or handled accordingly.
|
|
||||||
//
|
|
||||||
// Otherwise, return values should be propagated down the middleware
|
|
||||||
// chain by returning them unchanged.
|
|
||||||
Handler interface {
|
|
||||||
ServeDNS(context.Context, dns.ResponseWriter, *dns.Msg) (int, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// HandlerFunc is a convenience type like dns.HandlerFunc, except
|
|
||||||
// ServeDNS returns an rcode and an error. See Handler
|
|
||||||
// documentation for more information.
|
|
||||||
HandlerFunc func(context.Context, dns.ResponseWriter, *dns.Msg) (int, error)
|
|
||||||
)
|
|
||||||
|
|
||||||
// ServeDNS implements the Handler interface.
|
|
||||||
func (f HandlerFunc) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
|
|
||||||
return f(ctx, w, r)
|
|
||||||
}
|
|
||||||
@@ -6,6 +6,8 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/miekg/coredns/middleware"
|
||||||
|
|
||||||
"github.com/mholt/caddy"
|
"github.com/mholt/caddy"
|
||||||
"github.com/mholt/caddy/caddyfile"
|
"github.com/mholt/caddy/caddyfile"
|
||||||
)
|
)
|
||||||
@@ -96,7 +98,7 @@ func (h *dnsContext) MakeServers() ([]caddy.Server, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AddMiddleware adds a middleware to a site's middleware stack.
|
// AddMiddleware adds a middleware to a site's middleware stack.
|
||||||
func (c *Config) AddMiddleware(m Middleware) {
|
func (c *Config) AddMiddleware(m middleware.Middleware) {
|
||||||
c.Middleware = append(c.Middleware, m)
|
c.Middleware = append(c.Middleware, m)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,17 +128,11 @@ func groupConfigsByListenAddr(configs []*Config) (map[string][]*Config, error) {
|
|||||||
const (
|
const (
|
||||||
// DefaultPort is the default port.
|
// DefaultPort is the default port.
|
||||||
DefaultPort = "2053"
|
DefaultPort = "2053"
|
||||||
// DefaultRoot is the default root folder.
|
|
||||||
DefaultRoot = "."
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// These "soft defaults" are configurable by
|
// These "soft defaults" are configurable by
|
||||||
// command line flags, etc.
|
// command line flags, etc.
|
||||||
var (
|
var (
|
||||||
// Root is the site root
|
|
||||||
// TODO(miek): double check if this is used and if we want to use it.
|
|
||||||
Root = DefaultRoot
|
|
||||||
|
|
||||||
// Port is the site port
|
// Port is the site port
|
||||||
Port = DefaultPort
|
Port = DefaultPort
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/miekg/coredns/middleware"
|
||||||
"github.com/miekg/coredns/middleware/pkg/edns"
|
"github.com/miekg/coredns/middleware/pkg/edns"
|
||||||
"github.com/miekg/coredns/request"
|
"github.com/miekg/coredns/request"
|
||||||
|
|
||||||
@@ -58,7 +59,7 @@ func NewServer(addr string, group []*Config) (*Server, error) {
|
|||||||
// set the config per zone
|
// set the config per zone
|
||||||
s.zones[site.Zone] = site
|
s.zones[site.Zone] = site
|
||||||
// compile custom middleware for everything
|
// compile custom middleware for everything
|
||||||
var stack Handler
|
var stack middleware.Handler
|
||||||
for i := len(site.Middleware) - 1; i >= 0; i-- {
|
for i := len(site.Middleware) - 1; i >= 0; i-- {
|
||||||
stack = site.Middleware[i](stack)
|
stack = site.Middleware[i](stack)
|
||||||
}
|
}
|
||||||
|
|||||||
2
middleware/cache/setup.go
vendored
2
middleware/cache/setup.go
vendored
@@ -22,7 +22,7 @@ func setup(c *caddy.Controller) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return middleware.Error("cache", err)
|
return middleware.Error("cache", err)
|
||||||
}
|
}
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler {
|
||||||
return NewCache(ttl, zones, next)
|
return NewCache(ttl, zones, next)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ func setup(c *caddy.Controller) error {
|
|||||||
return middleware.Error("chaos", err)
|
return middleware.Error("chaos", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler {
|
||||||
return Chaos{Next: next, Version: version, Authors: authors}
|
return Chaos{Next: next, Version: version, Authors: authors}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ func setup(c *caddy.Controller) error {
|
|||||||
return middleware.Error("dnssec", err)
|
return middleware.Error("dnssec", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler {
|
||||||
return New(zones, keys, next)
|
return New(zones, keys, next)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ func setup(c *caddy.Controller) error {
|
|||||||
}
|
}
|
||||||
handler.Log = log.New(writer, "", 0)
|
handler.Log = log.New(writer, "", 0)
|
||||||
|
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler {
|
||||||
handler.Next = next
|
handler.Next = next
|
||||||
return handler
|
return handler
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ func setup(c *caddy.Controller) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler {
|
||||||
e.Next = next
|
e.Next = next
|
||||||
return e
|
return e
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ func setup(c *caddy.Controller) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler {
|
||||||
return File{Next: next, Zones: zones}
|
return File{Next: next, Zones: zones}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ func setup(c *caddy.Controller) error {
|
|||||||
return kubernetes.APIConn.Stop()
|
return kubernetes.APIConn.Stop()
|
||||||
})
|
})
|
||||||
|
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler {
|
||||||
kubernetes.Next = next
|
kubernetes.Next = next
|
||||||
return kubernetes
|
return kubernetes
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package loadbalance
|
|||||||
import (
|
import (
|
||||||
"github.com/mholt/caddy"
|
"github.com/mholt/caddy"
|
||||||
"github.com/miekg/coredns/core/dnsserver"
|
"github.com/miekg/coredns/core/dnsserver"
|
||||||
|
"github.com/miekg/coredns/middleware"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@@ -17,7 +18,7 @@ func setup(c *caddy.Controller) error {
|
|||||||
// TODO(miek): block and option parsing
|
// TODO(miek): block and option parsing
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler {
|
||||||
return RoundRobin{Next: next}
|
return RoundRobin{Next: next}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ func setup(c *caddy.Controller) error {
|
|||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler {
|
||||||
return Logger{Next: next, Rules: rules, ErrorFunc: dnsserver.DefaultErrorFunc}
|
return Logger{Next: next, Rules: rules, ErrorFunc: dnsserver.DefaultErrorFunc}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ func setup(c *caddy.Controller) error {
|
|||||||
return middleware.Error("prometheus", err)
|
return middleware.Error("prometheus", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler {
|
||||||
m.Next = next
|
m.Next = next
|
||||||
return m
|
return m
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ func setup(c *caddy.Controller) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return middleware.Error("proxy", err)
|
return middleware.Error("proxy", err)
|
||||||
}
|
}
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler {
|
||||||
return Proxy{Next: next, Client: Clients(), Upstreams: upstreams}
|
return Proxy{Next: next, Client: Clients(), Upstreams: upstreams}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ func setup(c *caddy.Controller) error {
|
|||||||
return middleware.Error("rewrite", err)
|
return middleware.Error("rewrite", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler {
|
||||||
return Rewrite{Next: next, Rules: rewrites}
|
return Rewrite{Next: next, Rules: rewrites}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ func setup(c *caddy.Controller) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler {
|
||||||
return Secondary{file.File{Next: next, Zones: zones}}
|
return Secondary{file.File{Next: next, Zones: zones}}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ func setupWhoami(c *caddy.Controller) error {
|
|||||||
return middleware.Error("whoami", c.ArgErr())
|
return middleware.Error("whoami", c.ArgErr())
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next middleware.Handler) middleware.Handler {
|
||||||
return Whoami{Next: next}
|
return Whoami{Next: next}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user