aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--middleware/auto/setup_test.go6
-rw-r--r--middleware/autopath/setup_test.go20
-rw-r--r--middleware/dnssec/setup_test.go9
-rw-r--r--middleware/etcd/lookup_test.go82
-rw-r--r--middleware/etcd/setup_test.go85
-rw-r--r--middleware/file/setup_test.go5
-rw-r--r--middleware/hosts/setup_test.go4
-rw-r--r--middleware/proxy/upstream.go5
-rw-r--r--middleware/proxy/upstream_test.go46
9 files changed, 135 insertions, 127 deletions
diff --git a/middleware/auto/setup_test.go b/middleware/auto/setup_test.go
index 3d65a4a86..8ef159f1a 100644
--- a/middleware/auto/setup_test.go
+++ b/middleware/auto/setup_test.go
@@ -23,6 +23,12 @@ func TestAutoParse(t *testing.T) {
false, "/tmp", "${1}", `db\.(.*)`, []string{"127.0.0.1:53"},
},
{
+ `auto 10.0.0.0/24 {
+ directory /tmp
+ }`,
+ false, "/tmp", "${1}", `db\.(.*)`, nil,
+ },
+ {
`auto {
directory /tmp
}`,
diff --git a/middleware/autopath/setup_test.go b/middleware/autopath/setup_test.go
index 0696a9179..b31110ddb 100644
--- a/middleware/autopath/setup_test.go
+++ b/middleware/autopath/setup_test.go
@@ -21,21 +21,18 @@ func TestSetupAutoPath(t *testing.T) {
tests := []struct {
input string
shouldErr bool
+ expectedZone string
expectedMw string // expected middleware.
expectedSearch []string // expected search path
expectedErrContent string // substring from the expected error. Empty for positive cases.
}{
// positive
- {
- `autopath @kubernetes`, false, "kubernetes", nil, "",
- },
- {
- `autopath ` + resolv, false, "", []string{"bar.com.", "baz.com.", ""}, "",
- },
+ {`autopath @kubernetes`, false, "", "kubernetes", nil, ""},
+ {`autopath example.org @kubernetes`, false, "example.org.", "kubernetes", nil, ""},
+ {`autopath 10.0.0.0/8 @kubernetes`, false, "10.in-addr.arpa.", "kubernetes", nil, ""},
+ {`autopath ` + resolv, false, "", "", []string{"bar.com.", "baz.com.", ""}, ""},
// negative
- {
- `autopath kubernetes`, true, "", nil, "open kubernetes: no such file or directory",
- },
+ {`autopath kubernetes`, true, "", "", nil, "open kubernetes: no such file or directory"},
}
for i, test := range tests {
@@ -64,6 +61,11 @@ func TestSetupAutoPath(t *testing.T) {
t.Errorf("Test %d, wrong searchpath for input %s. Expected: '%v', actual: '%v'", i, test.input, test.expectedSearch, ap.search)
}
}
+ if !test.shouldErr && test.expectedZone != "" {
+ if test.expectedZone != ap.Zones[0] {
+ t.Errorf("Test %d, expected zone %q for input %s, got: %q", i, test.expectedZone, test.input, ap.Zones[0])
+ }
+ }
}
}
diff --git a/middleware/dnssec/setup_test.go b/middleware/dnssec/setup_test.go
index 3940505a9..663633c88 100644
--- a/middleware/dnssec/setup_test.go
+++ b/middleware/dnssec/setup_test.go
@@ -20,12 +20,15 @@ func TestSetupDnssec(t *testing.T) {
`dnssec`, false, nil, nil, defaultCap, "",
},
{
- `dnssec miek.nl`, false, []string{"miek.nl."}, nil, defaultCap, "",
+ `dnssec example.org`, false, []string{"example.org."}, nil, defaultCap, "",
},
{
- `dnssec miek.nl {
+ `dnssec 10.0.0.0/8`, false, []string{"10.in-addr.arpa."}, nil, defaultCap, "",
+ },
+ {
+ `dnssec example.org {
cache_capacity 100
- }`, false, []string{"miek.nl."}, nil, 100, "",
+ }`, false, []string{"example.org."}, nil, 100, "",
},
}
diff --git a/middleware/etcd/lookup_test.go b/middleware/etcd/lookup_test.go
index dc61a6e73..79e48648a 100644
--- a/middleware/etcd/lookup_test.go
+++ b/middleware/etcd/lookup_test.go
@@ -3,12 +3,27 @@
package etcd
import (
+ "context"
+ "encoding/json"
+ "sort"
+ "testing"
+ "time"
+
"github.com/coredns/coredns/middleware/etcd/msg"
+ "github.com/coredns/coredns/middleware/pkg/dnsrecorder"
+ "github.com/coredns/coredns/middleware/pkg/singleflight"
+ "github.com/coredns/coredns/middleware/pkg/tls"
+ "github.com/coredns/coredns/middleware/proxy"
"github.com/coredns/coredns/middleware/test"
+ etcdc "github.com/coreos/etcd/client"
"github.com/miekg/dns"
)
+func init() {
+ ctxt, _ = context.WithTimeout(context.Background(), etcdTimeout)
+}
+
// Note the key is encoded as DNS name, while in "reality" it is a etcd path.
var services = []*msg.Service{
{Host: "dev.server1", Port: 8080, Key: "a.server1.dev.region1.skydns.test."},
@@ -206,3 +221,70 @@ var dnsTestCases = []test.Case{
Answer: []dns.RR{test.PTR("1.0.0.10.in-addr.arpa. 300 PTR reverse.example.com.")},
},
}
+
+func newEtcdMiddleware() *Etcd {
+ ctxt, _ = context.WithTimeout(context.Background(), etcdTimeout)
+
+ endpoints := []string{"http://localhost:2379"}
+ tlsc, _ := tls.NewTLSConfigFromArgs()
+ client, _ := newEtcdClient(endpoints, tlsc)
+
+ return &Etcd{
+ Proxy: proxy.NewLookup([]string{"8.8.8.8:53"}),
+ PathPrefix: "skydns",
+ Ctx: context.Background(),
+ Inflight: &singleflight.Group{},
+ Zones: []string{"skydns.test.", "skydns_extra.test.", "in-addr.arpa."},
+ Client: client,
+ }
+}
+
+func set(t *testing.T, e *Etcd, k string, ttl time.Duration, m *msg.Service) {
+ b, err := json.Marshal(m)
+ if err != nil {
+ t.Fatal(err)
+ }
+ path, _ := msg.PathWithWildcard(k, e.PathPrefix)
+ e.Client.Set(ctxt, path, string(b), &etcdc.SetOptions{TTL: ttl})
+}
+
+func delete(t *testing.T, e *Etcd, k string) {
+ path, _ := msg.PathWithWildcard(k, e.PathPrefix)
+ e.Client.Delete(ctxt, path, &etcdc.DeleteOptions{Recursive: false})
+}
+
+func TestLookup(t *testing.T) {
+ etc := newEtcdMiddleware()
+ for _, serv := range services {
+ set(t, etc, serv.Key, 0, serv)
+ defer delete(t, etc, serv.Key)
+ }
+
+ for _, tc := range dnsTestCases {
+ m := tc.Msg()
+
+ rec := dnsrecorder.New(&test.ResponseWriter{})
+ etc.ServeDNS(ctxt, rec, m)
+
+ resp := rec.Msg
+ sort.Sort(test.RRSet(resp.Answer))
+ sort.Sort(test.RRSet(resp.Ns))
+ sort.Sort(test.RRSet(resp.Extra))
+
+ if !test.Header(t, tc, resp) {
+ t.Logf("%v\n", resp)
+ continue
+ }
+ if !test.Section(t, tc, test.Answer, resp.Answer) {
+ t.Logf("%v\n", resp)
+ }
+ if !test.Section(t, tc, test.Ns, resp.Ns) {
+ t.Logf("%v\n", resp)
+ }
+ if !test.Section(t, tc, test.Extra, resp.Extra) {
+ t.Logf("%v\n", resp)
+ }
+ }
+}
+
+var ctxt context.Context
diff --git a/middleware/etcd/setup_test.go b/middleware/etcd/setup_test.go
index d29f34bc5..833e2ba4c 100644
--- a/middleware/etcd/setup_test.go
+++ b/middleware/etcd/setup_test.go
@@ -1,95 +1,12 @@
-// +build etcd
-
package etcd
import (
- "encoding/json"
- "sort"
"strings"
"testing"
- "time"
-
- "github.com/coredns/coredns/middleware/etcd/msg"
- "github.com/coredns/coredns/middleware/pkg/dnsrecorder"
- "github.com/coredns/coredns/middleware/pkg/singleflight"
- "github.com/coredns/coredns/middleware/pkg/tls"
- "github.com/coredns/coredns/middleware/proxy"
- "github.com/coredns/coredns/middleware/test"
- etcdc "github.com/coreos/etcd/client"
"github.com/mholt/caddy"
- "golang.org/x/net/context"
)
-func init() {
- ctxt, _ = context.WithTimeout(context.Background(), etcdTimeout)
-}
-
-func newEtcdMiddleware() *Etcd {
- ctxt, _ = context.WithTimeout(context.Background(), etcdTimeout)
-
- endpoints := []string{"http://localhost:2379"}
- tlsc, _ := tls.NewTLSConfigFromArgs()
- client, _ := newEtcdClient(endpoints, tlsc)
-
- return &Etcd{
- Proxy: proxy.NewLookup([]string{"8.8.8.8:53"}),
- PathPrefix: "skydns",
- Ctx: context.Background(),
- Inflight: &singleflight.Group{},
- Zones: []string{"skydns.test.", "skydns_extra.test.", "in-addr.arpa."},
- Client: client,
- }
-}
-
-func set(t *testing.T, e *Etcd, k string, ttl time.Duration, m *msg.Service) {
- b, err := json.Marshal(m)
- if err != nil {
- t.Fatal(err)
- }
- path, _ := msg.PathWithWildcard(k, e.PathPrefix)
- e.Client.Set(ctxt, path, string(b), &etcdc.SetOptions{TTL: ttl})
-}
-
-func delete(t *testing.T, e *Etcd, k string) {
- path, _ := msg.PathWithWildcard(k, e.PathPrefix)
- e.Client.Delete(ctxt, path, &etcdc.DeleteOptions{Recursive: false})
-}
-
-func TestLookup(t *testing.T) {
- etc := newEtcdMiddleware()
- for _, serv := range services {
- set(t, etc, serv.Key, 0, serv)
- defer delete(t, etc, serv.Key)
- }
-
- for _, tc := range dnsTestCases {
- m := tc.Msg()
-
- rec := dnsrecorder.New(&test.ResponseWriter{})
- etc.ServeDNS(ctxt, rec, m)
-
- resp := rec.Msg
- sort.Sort(test.RRSet(resp.Answer))
- sort.Sort(test.RRSet(resp.Ns))
- sort.Sort(test.RRSet(resp.Extra))
-
- if !test.Header(t, tc, resp) {
- t.Logf("%v\n", resp)
- continue
- }
- if !test.Section(t, tc, test.Answer, resp.Answer) {
- t.Logf("%v\n", resp)
- }
- if !test.Section(t, tc, test.Ns, resp.Ns) {
- t.Logf("%v\n", resp)
- }
- if !test.Section(t, tc, test.Extra, resp.Extra) {
- t.Logf("%v\n", resp)
- }
- }
-}
-
func TestSetupEtcd(t *testing.T) {
tests := []struct {
input string
@@ -145,5 +62,3 @@ func TestSetupEtcd(t *testing.T) {
}
}
}
-
-var ctxt context.Context
diff --git a/middleware/file/setup_test.go b/middleware/file/setup_test.go
index 02ed049c4..111be1261 100644
--- a/middleware/file/setup_test.go
+++ b/middleware/file/setup_test.go
@@ -48,6 +48,11 @@ func TestFileParse(t *testing.T) {
false,
Zones{Names: []string{"dnssex.nl."}},
},
+ {
+ `file ` + zoneFileName2 + ` 10.0.0.0/8`,
+ false,
+ Zones{Names: []string{"10.in-addr.arpa."}},
+ },
}
for i, test := range tests {
diff --git a/middleware/hosts/setup_test.go b/middleware/hosts/setup_test.go
index 267cfc78f..a4c95b1c6 100644
--- a/middleware/hosts/setup_test.go
+++ b/middleware/hosts/setup_test.go
@@ -50,10 +50,10 @@ func TestHostsParse(t *testing.T) {
false, "/etc/hosts", []string{"miek.nl."}, true,
},
{
- `hosts /etc/hosts miek.nl. pun.gent. {
+ `hosts /etc/hosts miek.nl 10.0.0.9/8 {
fallthrough
}`,
- false, "/etc/hosts", []string{"miek.nl.", "pun.gent."}, true,
+ false, "/etc/hosts", []string{"miek.nl.", "10.in-addr.arpa."}, true,
},
}
diff --git a/middleware/proxy/upstream.go b/middleware/proxy/upstream.go
index 93ef0e32d..677b8e2fc 100644
--- a/middleware/proxy/upstream.go
+++ b/middleware/proxy/upstream.go
@@ -4,7 +4,6 @@ import (
"fmt"
"net"
"strconv"
- "strings"
"sync/atomic"
"time"
@@ -44,6 +43,8 @@ func NewStaticUpstreams(c *caddyfile.Dispenser) ([]Upstream, error) {
if !c.Args(&upstream.from) {
return upstreams, c.ArgErr()
}
+ upstream.from = middleware.Host(upstream.from).Normalize()
+
to := c.RemainingArgs()
if len(to) == 0 {
return upstreams, c.ArgErr()
@@ -168,7 +169,7 @@ func parseBlock(c *caddyfile.Dispenser, u *staticUpstream) error {
return c.ArgErr()
}
for i := 0; i < len(ignoredDomains); i++ {
- ignoredDomains[i] = strings.ToLower(dns.Fqdn(ignoredDomains[i]))
+ ignoredDomains[i] = middleware.Host(ignoredDomains[i]).Normalize()
}
u.IgnoredSubDomains = ignoredDomains
case "spray":
diff --git a/middleware/proxy/upstream_test.go b/middleware/proxy/upstream_test.go
index 3aa4104e8..3ee225c2d 100644
--- a/middleware/proxy/upstream_test.go
+++ b/middleware/proxy/upstream_test.go
@@ -1,8 +1,6 @@
package proxy
import (
- "io/ioutil"
- "os"
"path/filepath"
"strings"
"testing"
@@ -35,19 +33,6 @@ func TestAllowedDomain(t *testing.T) {
}
}
-func writeTmpFile(t *testing.T, data string) (string, string) {
- tempDir, err := ioutil.TempDir("", "")
- if err != nil {
- t.Fatalf("tempDir: %v", err)
- }
-
- path := filepath.Join(tempDir, "resolv.conf")
- if err := ioutil.WriteFile(path, []byte(data), 0644); err != nil {
- t.Fatalf("writeFile: %v", err)
- }
- return tempDir, path
-}
-
func TestProxyParse(t *testing.T) {
rmFunc, cert, key, ca := getPEMFiles(t)
defer rmFunc()
@@ -66,6 +51,10 @@ func TestProxyParse(t *testing.T) {
false,
},
{
+ `proxy 10.0.0.0/24 8.8.8.8:53`,
+ false,
+ },
+ {
`
proxy . 8.8.8.8:53 {
policy round_robin
@@ -103,7 +92,7 @@ proxy . 8.8.8.8:53 {
{
`
proxy . 8.8.8.8:53 {
- except miek.nl example.org
+ except miek.nl example.org 10.0.0.0/24
}`,
false,
},
@@ -283,13 +272,18 @@ junky resolve.conf
[]string{"1.1.1.1:5000", "2.2.2.2:1234"},
},
}
- for i, test := range tests {
- tempDir, path := writeTmpFile(t, test.filedata)
- defer os.RemoveAll(tempDir)
- config := strings.Replace(test.inputUpstreams, "FILE", path, -1)
+ for i, tc := range tests {
+
+ path, rm, err := test.TempFile(".", tc.filedata)
+ if err != nil {
+ t.Fatalf("Test %d could not creat temp file %v", i, err)
+ }
+ defer rm()
+
+ config := strings.Replace(tc.inputUpstreams, "FILE", path, -1)
c := caddy.NewTestController("dns", config)
upstreams, err := NewStaticUpstreams(&c.Dispenser)
- if (err != nil) != test.shouldErr {
+ if (err != nil) != tc.shouldErr {
t.Errorf("Test %d expected no error, got %v", i+1, err)
}
var hosts []string
@@ -298,18 +292,18 @@ junky resolve.conf
hosts = append(hosts, h.Name)
}
}
- if !test.shouldErr {
- if len(hosts) != len(test.expected) {
- t.Errorf("Test %d expected %d hosts got %d", i+1, len(test.expected), len(upstreams))
+ if !tc.shouldErr {
+ if len(hosts) != len(tc.expected) {
+ t.Errorf("Test %d expected %d hosts got %d", i+1, len(tc.expected), len(upstreams))
} else {
ok := true
- for i, v := range test.expected {
+ for i, v := range tc.expected {
if v != hosts[i] {
ok = false
}
}
if !ok {
- t.Errorf("Test %d expected %v got %v", i+1, test.expected, upstreams)
+ t.Errorf("Test %d expected %v got %v", i+1, tc.expected, upstreams)
}
}
}