all: gometalinter (#843)

* kubernetes/reverse: remove deadcode
* deadcode in errors and kubernetes removed
* unnecessary conversion
* constants
* proxy: time.Since()
* simplications
* static check
* Disable test/external_test
This commit is contained in:
Miek Gieben 2017-08-06 05:54:24 -07:00 committed by GitHub
parent 964f04f443
commit bcb2eb1ecc
25 changed files with 105 additions and 150 deletions

View file

@ -187,7 +187,8 @@ func (s *Server) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg)
q := r.Question[0].Name q := r.Question[0].Name
b := make([]byte, len(q)) b := make([]byte, len(q))
off, end := 0, false var off int
var end bool
var dshandler *Config var dshandler *Config

View file

@ -74,7 +74,7 @@ func setup(c *caddy.Controller) error {
func autoParse(c *caddy.Controller) (Auto, error) { func autoParse(c *caddy.Controller) (Auto, error) {
var a = Auto{ var a = Auto{
loader: loader{template: "${1}", re: regexp.MustCompile(`db\.(.*)`), duration: time.Duration(60 * time.Second)}, loader: loader{template: "${1}", re: regexp.MustCompile(`db\.(.*)`), duration: 60 * time.Second},
Zones: &Zones{}, Zones: &Zones{},
} }

View file

@ -218,7 +218,7 @@ func SRV(b ServiceBackend, zone string, state request.Request, opt Options) (rec
// Internal name, we should have some info on them, either v4 or v6 // Internal name, we should have some info on them, either v4 or v6
// Clients expect a complete answer, because we are a recursor in their view. // Clients expect a complete answer, because we are a recursor in their view.
state1 := state.NewWithQuestion(srv.Target, dns.TypeA) state1 := state.NewWithQuestion(srv.Target, dns.TypeA)
addr, debugAddr, e1 := A(b, zone, state1, nil, Options(opt)) addr, debugAddr, e1 := A(b, zone, state1, nil, opt)
if e1 == nil { if e1 == nil {
extra = append(extra, addr...) extra = append(extra, addr...)
debug = append(debug, debugAddr...) debug = append(debug, debugAddr...)

View file

@ -25,7 +25,7 @@ func TestCacheSet(t *testing.T) {
state := request.Request{Req: m} state := request.Request{Req: m}
k := hash(m.Answer) // calculate *before* we add the sig k := hash(m.Answer) // calculate *before* we add the sig
d := New([]string{"miek.nl."}, []*DNSKEY{dnskey}, nil, c) d := New([]string{"miek.nl."}, []*DNSKEY{dnskey}, nil, c)
m = d.Sign(state, "miek.nl.", time.Now().UTC()) d.Sign(state, "miek.nl.", time.Now().UTC())
_, ok := d.get(k) _, ok := d.get(k)
if !ok { if !ok {

View file

@ -2,9 +2,10 @@ package dnstap
import ( import (
"fmt" "fmt"
"golang.org/x/net/context"
"io" "io"
"golang.org/x/net/context"
"github.com/coredns/coredns/middleware" "github.com/coredns/coredns/middleware"
"github.com/coredns/coredns/middleware/dnstap/msg" "github.com/coredns/coredns/middleware/dnstap/msg"
"github.com/coredns/coredns/middleware/dnstap/taprw" "github.com/coredns/coredns/middleware/dnstap/taprw"
@ -33,10 +34,10 @@ func (h Dnstap) TapMessage(m *tap.Message) error {
} }
func (h Dnstap) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { func (h Dnstap) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
rw := taprw.ResponseWriter{ResponseWriter: w, Taper: &h, Query: r, Pack: h.Pack} rw := &taprw.ResponseWriter{ResponseWriter: w, Taper: &h, Query: r, Pack: h.Pack}
rw.QueryEpoch() rw.QueryEpoch()
code, err := middleware.NextOrFailure(h.Name(), h.Next, ctx, &rw, r) code, err := middleware.NextOrFailure(h.Name(), h.Next, ctx, rw, r)
if err != nil { if err != nil {
// ignore dnstap errors // ignore dnstap errors
return code, err return code, err

View file

@ -65,7 +65,7 @@ func parseErratic(c *caddy.Controller) (*Erratic, error) {
// Defaults. // Defaults.
e.delay = 2 e.delay = 2
e.duration = time.Duration(100 * time.Millisecond) e.duration = 100 * time.Millisecond
if len(args) == 0 { if len(args) == 0 {
continue continue
} }

View file

@ -76,11 +76,4 @@ func (h errorHandler) recovery(ctx context.Context, w dns.ResponseWriter, r *dns
h.Log.Printf(panicMsg) h.Log.Printf(panicMsg)
} }
// debugMsg creates a debug message that gets send back to the client.
func debugMsg(rcode int, r *dns.Msg) *dns.Msg {
answer := new(dns.Msg)
answer.SetRcode(r, rcode)
return answer
}
const timeFormat = "02/Jan/2006:15:04:05 -0700" const timeFormat = "02/Jan/2006:15:04:05 -0700"

View file

@ -231,7 +231,7 @@ func (z *Zone) Lookup(state request.Request, qname string) ([]dns.RR, []dns.RR,
ret := z.soa(do) ret := z.soa(do)
if do { if do {
deny, found := z.Tree.Prev(qname) deny, _ := z.Tree.Prev(qname) // TODO(miek): *found* was not used here.
nsec := z.typeFromElem(deny, dns.TypeNSEC, do) nsec := z.typeFromElem(deny, dns.TypeNSEC, do)
ret = append(ret, nsec...) ret = append(ret, nsec...)

View file

@ -61,12 +61,12 @@ func notify(zone string, to []string) error {
return nil return nil
} }
func notifyAddr(c *dns.Client, m *dns.Msg, s string) (err error) { func notifyAddr(c *dns.Client, m *dns.Msg, s string) error {
ret := new(dns.Msg) var err error
code := dns.RcodeServerFailure code := dns.RcodeServerFailure
for i := 0; i < 3; i++ { for i := 0; i < 3; i++ {
ret, _, err = c.Exchange(m, s) ret, _, err := c.Exchange(m, s)
if err != nil { if err != nil {
continue continue
} }

View file

@ -51,11 +51,10 @@ type dnsControl struct {
selector *labels.Selector selector *labels.Selector
svcController *cache.Controller svcController *cache.Controller
podController *cache.Controller podController *cache.Controller
nsController *cache.Controller nsController *cache.Controller
epController *cache.Controller epController *cache.Controller
nodeController *cache.Controller
svcLister cache.StoreToServiceLister svcLister cache.StoreToServiceLister
podLister cache.StoreToPodLister podLister cache.StoreToPodLister

View file

@ -273,32 +273,32 @@ func TestServeDNS(t *testing.T) {
k.Next = testHandler(nextMWMap) k.Next = testHandler(nextMWMap)
ctx := context.TODO() ctx := context.TODO()
runServeDNSTests(t, dnsTestCases, k, ctx) runServeDNSTests(ctx, t, dnsTestCases, k)
runServeDNSTests(t, autopathCases, k, ctx) runServeDNSTests(ctx, t, autopathCases, k)
runServeDNSTests(t, autopathBareSearch, k, ctx) runServeDNSTests(ctx, t, autopathBareSearch, k)
//Set PodMode to Disabled //Set PodMode to Disabled
k.PodMode = PodModeDisabled k.PodMode = PodModeDisabled
runServeDNSTests(t, podModeDisabledCases, k, ctx) runServeDNSTests(ctx, t, podModeDisabledCases, k)
//Set PodMode to Insecure //Set PodMode to Insecure
k.PodMode = PodModeInsecure k.PodMode = PodModeInsecure
runServeDNSTests(t, podModeInsecureCases, k, ctx) runServeDNSTests(ctx, t, podModeInsecureCases, k)
//Set PodMode to Verified //Set PodMode to Verified
k.PodMode = PodModeVerified k.PodMode = PodModeVerified
runServeDNSTests(t, podModeVerifiedCases, k, ctx) runServeDNSTests(ctx, t, podModeVerifiedCases, k)
// Set ndots to 2 for the ndots test cases // Set ndots to 2 for the ndots test cases
k.AutoPath.NDots = 2 k.AutoPath.NDots = 2
runServeDNSTests(t, autopath2NDotsCases, k, ctx) runServeDNSTests(ctx, t, autopath2NDotsCases, k)
k.AutoPath.NDots = defautNdots k.AutoPath.NDots = defautNdots
// Disable the NXDOMAIN override (enabled by default) // Disable the NXDOMAIN override (enabled by default)
k.OnNXDOMAIN = dns.RcodeNameError k.OnNXDOMAIN = dns.RcodeNameError
runServeDNSTests(t, autopathCases, k, ctx) runServeDNSTests(ctx, t, autopathCases, k)
runServeDNSTests(t, autopathBareSearchExpectNameErr, k, ctx) runServeDNSTests(ctx, t, autopathBareSearchExpectNameErr, k)
} }
func runServeDNSTests(t *testing.T, dnsTestCases map[string](*test.Case), k Kubernetes, ctx context.Context) { func runServeDNSTests(ctx context.Context, t *testing.T, dnsTestCases map[string](*test.Case), k Kubernetes) {
for testname, tc := range dnsTestCases { for testname, tc := range dnsTestCases {
testname = "\nTest Case \"" + testname + "\"" testname = "\nTest Case \"" + testname + "\""
r := tc.Msg() r := tc.Msg()

View file

@ -100,13 +100,12 @@ type recordRequest struct {
} }
var ( var (
errNoItems = errors.New("no items found") errNoItems = errors.New("no items found")
errNsNotExposed = errors.New("namespace is not exposed") errNsNotExposed = errors.New("namespace is not exposed")
errInvalidRequest = errors.New("invalid query name") errInvalidRequest = errors.New("invalid query name")
errZoneNotFound = errors.New("zone not found") errZoneNotFound = errors.New("zone not found")
errAPIBadPodType = errors.New("expected type *api.Pod") errAPIBadPodType = errors.New("expected type *api.Pod")
errPodsDisabled = errors.New("pod records disabled") errPodsDisabled = errors.New("pod records disabled")
errResolvConfReadErr = errors.New("resolv.conf read error")
) )
// Services implements the ServiceBackend interface. // Services implements the ServiceBackend interface.
@ -468,13 +467,6 @@ func (k *Kubernetes) getRecordsForK8sItems(services []service, pods []pod, r rec
return records return records
} }
func ipFromPodName(podname string) string {
if strings.Count(podname, "-") == 3 && !strings.Contains(podname, "--") {
return strings.Replace(podname, "-", ".", -1)
}
return strings.Replace(podname, "-", ":", -1)
}
func (k *Kubernetes) findPodWithIP(ip string) (p *api.Pod) { func (k *Kubernetes) findPodWithIP(ip string) (p *api.Pod) {
if !k.AutoPath.Enabled { if !k.AutoPath.Enabled {
return nil return nil

View file

@ -260,23 +260,6 @@ func TestEndpointHostname(t *testing.T) {
} }
} }
func TestIpFromPodName(t *testing.T) {
var tests = []struct {
ip string
expected string
}{
{"10-11-12-13", "10.11.12.13"},
{"1-2-3-4", "1.2.3.4"},
{"1-2-3--A-B-C", "1:2:3::A:B:C"},
}
for _, test := range tests {
result := ipFromPodName(test.ip)
if result != test.expected {
t.Errorf("Expected ip for podname '%v' to be '%v', but got '%v'", test.ip, test.expected, result)
}
}
}
type APIConnServiceTest struct{} type APIConnServiceTest struct{}
func (APIConnServiceTest) Run() { return } func (APIConnServiceTest) Run() { return }

View file

@ -242,7 +242,6 @@ func kubernetesParse(c *caddy.Controller) (*Kubernetes, error) {
const ( const (
defaultResyncPeriod = 5 * time.Minute defaultResyncPeriod = 5 * time.Minute
defaultPodMode = PodModeDisabled
defautNdots = 0 defautNdots = 0
defaultResolvConfFile = "/etc/resolv.conf" defaultResolvConfFile = "/etc/resolv.conf"
defaultOnNXDOMAIN = dns.RcodeSuccess defaultOnNXDOMAIN = dns.RcodeSuccess

View file

@ -54,7 +54,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -70,7 +70,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -87,7 +87,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -105,7 +105,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -123,7 +123,7 @@ func TestKubernetesParse(t *testing.T) {
1, 1,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -141,7 +141,7 @@ func TestKubernetesParse(t *testing.T) {
2, 2,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -159,7 +159,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
30 * time.Second, 30 * time.Second,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -177,7 +177,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
15 * time.Minute, 15 * time.Minute,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -195,7 +195,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"environment=prod", "environment=prod",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -213,7 +213,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"application=nginx,environment in (production,qa,staging)", "application=nginx,environment in (production,qa,staging)",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -235,7 +235,7 @@ func TestKubernetesParse(t *testing.T) {
2, 2,
15 * time.Minute, 15 * time.Minute,
"application=nginx,environment in (production,qa,staging)", "application=nginx,environment in (production,qa,staging)",
defaultPodMode, PodModeDisabled,
nil, nil,
true, true,
nil, nil,
@ -252,7 +252,7 @@ func TestKubernetesParse(t *testing.T) {
-1, -1,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -268,7 +268,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -286,7 +286,7 @@ func TestKubernetesParse(t *testing.T) {
-1, -1,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -304,7 +304,7 @@ func TestKubernetesParse(t *testing.T) {
-1, -1,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -322,7 +322,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
0 * time.Minute, 0 * time.Minute,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -340,7 +340,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
0 * time.Second, 0 * time.Second,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -358,7 +358,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
0 * time.Second, 0 * time.Second,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -376,7 +376,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
0 * time.Second, 0 * time.Second,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -394,7 +394,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
0 * time.Second, 0 * time.Second,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -489,7 +489,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
[]net.IPNet{parseCidr("10.0.0.0/24"), parseCidr("10.0.1.0/24")}, []net.IPNet{parseCidr("10.0.0.0/24"), parseCidr("10.0.1.0/24")},
false, false,
nil, nil,
@ -508,7 +508,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -527,7 +527,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -546,7 +546,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
[]string{"13.14.15.16:53"}, []string{"13.14.15.16:53"},
@ -565,7 +565,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -585,7 +585,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -607,7 +607,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -626,7 +626,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -650,7 +650,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -668,7 +668,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -686,7 +686,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,
@ -704,7 +704,7 @@ func TestKubernetesParse(t *testing.T) {
0, 0,
defaultResyncPeriod, defaultResyncPeriod,
"", "",
defaultPodMode, PodModeDisabled,
nil, nil,
false, false,
nil, nil,

View file

@ -69,7 +69,7 @@ type (
func Scrape(t *testing.T, url string) []*MetricFamily { func Scrape(t *testing.T, url string) []*MetricFamily {
mfChan := make(chan *dto.MetricFamily, 1024) mfChan := make(chan *dto.MetricFamily, 1024)
go fetchMetricFamilies(t, url, mfChan) go fetchMetricFamilies(url, mfChan)
result := []*MetricFamily{} result := []*MetricFamily{}
for mf := range mfChan { for mf := range mfChan {
@ -177,20 +177,20 @@ func makeBuckets(m *dto.Metric) map[string]string {
return result return result
} }
func fetchMetricFamilies(t *testing.T, url string, ch chan<- *dto.MetricFamily) { func fetchMetricFamilies(url string, ch chan<- *dto.MetricFamily) {
defer close(ch) defer close(ch)
req, err := http.NewRequest("GET", url, nil) req, err := http.NewRequest("GET", url, nil)
if err != nil { if err != nil {
t.Fatalf("creating GET request for URL %q failed: %s", url, err) return
} }
req.Header.Add("Accept", acceptHeader) req.Header.Add("Accept", acceptHeader)
resp, err := http.DefaultClient.Do(req) resp, err := http.DefaultClient.Do(req)
if err != nil { if err != nil {
t.Fatalf("executing GET request for URL %q failed: %s", url, err) return
} }
defer resp.Body.Close() defer resp.Body.Close()
if resp.StatusCode != http.StatusOK { if resp.StatusCode != http.StatusOK {
t.Fatalf("GET request for URL %q returned HTTP status %s", url, resp.Status) return
} }
mediatype, params, err := mime.ParseMediaType(resp.Header.Get("Content-Type")) mediatype, params, err := mime.ParseMediaType(resp.Header.Get("Content-Type"))
@ -203,7 +203,7 @@ func fetchMetricFamilies(t *testing.T, url string, ch chan<- *dto.MetricFamily)
if err == io.EOF { if err == io.EOF {
break break
} }
t.Fatalf("reading metric family protocol buffer failed: %s", err) return
} }
ch <- mf ch <- mf
} }
@ -214,7 +214,7 @@ func fetchMetricFamilies(t *testing.T, url string, ch chan<- *dto.MetricFamily)
var parser expfmt.TextParser var parser expfmt.TextParser
metricFamilies, err := parser.TextToMetricFamilies(resp.Body) metricFamilies, err := parser.TextToMetricFamilies(resp.Body)
if err != nil { if err != nil {
t.Fatal("reading text format failed:", err) return
} }
for _, mf := range metricFamilies { for _, mf := range metricFamilies {
ch <- mf ch <- mf

View file

@ -60,7 +60,7 @@ func New(r *dns.Msg, rr *dnsrecorder.Recorder, emptyValue string) Replacer {
// Header placeholders (case-insensitive) // Header placeholders (case-insensitive)
rep.replacements[headerReplacer+"id}"] = strconv.Itoa(int(r.Id)) rep.replacements[headerReplacer+"id}"] = strconv.Itoa(int(r.Id))
rep.replacements[headerReplacer+"opcode}"] = strconv.Itoa(int(r.Opcode)) rep.replacements[headerReplacer+"opcode}"] = strconv.Itoa(r.Opcode)
rep.replacements[headerReplacer+"do}"] = boolToString(req.Do()) rep.replacements[headerReplacer+"do}"] = boolToString(req.Do())
rep.replacements[headerReplacer+"bufsize}"] = strconv.Itoa(req.Size()) rep.replacements[headerReplacer+"bufsize}"] = strconv.Itoa(req.Size())

View file

@ -97,7 +97,7 @@ func (p Proxy) lookup(state request.Request) (*dns.Msg, error) {
// Since Select() should give us "up" hosts, keep retrying // Since Select() should give us "up" hosts, keep retrying
// hosts until timeout (or until we get a nil host). // hosts until timeout (or until we get a nil host).
for time.Now().Sub(start) < tryDuration { for time.Since(start) < tryDuration {
host := upstream.Select() host := upstream.Select()
if host == nil { if host == nil {
return nil, errUnreachable return nil, errUnreachable

View file

@ -109,7 +109,7 @@ func (p Proxy) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
// Since Select() should give us "up" hosts, keep retrying // Since Select() should give us "up" hosts, keep retrying
// hosts until timeout (or until we get a nil host). // hosts until timeout (or until we get a nil host).
for time.Now().Sub(start) < tryDuration { for time.Since(start) < tryDuration {
host := upstream.Select() host := upstream.Select()
if host == nil { if host == nil {

View file

@ -74,25 +74,6 @@ func (network *network) ipToHostname(ip net.IP) (name string) {
return strings.Replace(network.Template, templateNameIP, name, 1) return strings.Replace(network.Template, templateNameIP, name, 1)
} }
// just the same from net.ip package, but with uint8
func uitoa(val uint8) string {
if val == 0 {
// avoid string allocation
return "0"
}
var buf [20]byte // big enough for 64bit value base 10
i := len(buf) - 1
for val >= 10 {
q := val / 10
buf[i] = byte('0' + val - q*10)
i--
val = q
}
// val < 10
buf[i] = byte('0' + val)
return string(buf[i:])
}
type networks []network type networks []network
func (n networks) Len() int { return len(n) } func (n networks) Len() int { return len(n) }

View file

@ -37,20 +37,21 @@ func (rule *edns0NsidRule) Rewrite(r *dns.Msg) Result {
result := RewriteIgnored result := RewriteIgnored
o := setupEdns0Opt(r) o := setupEdns0Opt(r)
found := false found := false
Option:
for _, s := range o.Option { for _, s := range o.Option {
switch e := s.(type) { switch e := s.(type) {
case *dns.EDNS0_NSID: case *dns.EDNS0_NSID:
if rule.action == "replace" || rule.action == "set" { if rule.action == Replace || rule.action == Set {
e.Nsid = "" // make sure it is empty for request e.Nsid = "" // make sure it is empty for request
result = RewriteDone result = RewriteDone
} }
found = true found = true
break break Option
} }
} }
// add option if not found // add option if not found
if !found && (rule.action == "append" || rule.action == "set") { if !found && (rule.action == Append || rule.action == Set) {
o.SetDo(true) o.SetDo(true)
o.Option = append(o.Option, &dns.EDNS0_NSID{Code: dns.EDNS0NSID, Nsid: ""}) o.Option = append(o.Option, &dns.EDNS0_NSID{Code: dns.EDNS0NSID, Nsid: ""})
result = RewriteDone result = RewriteDone
@ -68,7 +69,7 @@ func (rule *edns0LocalRule) Rewrite(r *dns.Msg) Result {
switch e := s.(type) { switch e := s.(type) {
case *dns.EDNS0_LOCAL: case *dns.EDNS0_LOCAL:
if rule.code == e.Code { if rule.code == e.Code {
if rule.action == "replace" || rule.action == "set" { if rule.action == Replace || rule.action == Set {
e.Data = rule.data e.Data = rule.data
result = RewriteDone result = RewriteDone
} }
@ -79,7 +80,7 @@ func (rule *edns0LocalRule) Rewrite(r *dns.Msg) Result {
} }
// add option if not found // add option if not found
if !found && (rule.action == "append" || rule.action == "set") { if !found && (rule.action == Append || rule.action == Set) {
o.SetDo(true) o.SetDo(true)
var opt dns.EDNS0_LOCAL var opt dns.EDNS0_LOCAL
opt.Code = rule.code opt.Code = rule.code
@ -100,9 +101,9 @@ func newEdns0Rule(args ...string) (Rule, error) {
ruleType := strings.ToLower(args[0]) ruleType := strings.ToLower(args[0])
action := strings.ToLower(args[1]) action := strings.ToLower(args[1])
switch action { switch action {
case "append": case Append:
case "replace": case Replace:
case "set": case Set:
default: default:
return nil, fmt.Errorf("invalid action: %q", action) return nil, fmt.Errorf("invalid action: %q", action)
} }
@ -139,3 +140,10 @@ func newEdns0LocalRule(action, code, data string) (*edns0LocalRule, error) {
return &edns0LocalRule{action: action, code: uint16(c), data: decoded}, nil return &edns0LocalRule{action: action, code: uint16(c), data: decoded}, nil
} }
// These are all defined actions.
const (
Replace = "replace"
Set = "set"
Append = "append"
)

View file

@ -97,7 +97,7 @@ func traceParse(c *caddy.Controller) (*trace, error) {
func normalizeEndpoint(epType, ep string) (string, error) { func normalizeEndpoint(epType, ep string) (string, error) {
switch epType { switch epType {
case "zipkin": case "zipkin":
if strings.Index(ep, "http") == -1 { if !strings.Contains(ep, "http") {
ep = "http://" + ep + "/api/v1/spans" ep = "http://" + ep + "/api/v1/spans"
} }
return ep, nil return ep, nil

View file

@ -56,10 +56,8 @@ func (t *trace) setupZipkin() error {
recorder := zipkin.NewRecorder(collector, false, t.ServiceEndpoint, t.serviceName) recorder := zipkin.NewRecorder(collector, false, t.ServiceEndpoint, t.serviceName)
t.tracer, err = zipkin.NewTracer(recorder, zipkin.ClientServerSameSpan(t.clientServer)) t.tracer, err = zipkin.NewTracer(recorder, zipkin.ClientServerSameSpan(t.clientServer))
if err != nil {
return err return err
}
return nil
} }
// Name implements the Handler interface. // Name implements the Handler interface.

View file

@ -118,7 +118,7 @@ func (r *Request) Size() int {
size := 0 size := 0
if o := r.Req.IsEdns0(); o != nil { if o := r.Req.IsEdns0(); o != nil {
if o.Do() == true { if o.Do() {
r.do = doTrue r.do = doTrue
} else { } else {
r.do = doFalse r.do = doFalse

View file

@ -11,10 +11,12 @@ import (
// Go get external example middleware, compile it into CoreDNS // Go get external example middleware, compile it into CoreDNS
// and check if it is really there, but running coredns -plugins. // and check if it is really there, but running coredns -plugins.
func TestExternalMiddlewareCompile(t *testing.T) { // Dangerous test as it messes with your git tree, maybe use tag?
func testExternalMiddlewareCompile(t *testing.T) {
if err := addExampleMiddleware(); err != nil { if err := addExampleMiddleware(); err != nil {
t.Fatal(err) t.Fatal(err)
} }
defer run(t, gitReset)
if _, err := run(t, goGet); err != nil { if _, err := run(t, goGet); err != nil {
t.Fatal(err) t.Fatal(err)
@ -56,17 +58,15 @@ func addExampleMiddleware() error {
defer f.Close() defer f.Close()
_, err = f.WriteString(example) _, err = f.WriteString(example)
if err != nil { return err
return err
}
return nil
} }
var ( var (
goBuild = exec.Command("go", "build") goBuild = exec.Command("go", "build")
goGen = exec.Command("go", "generate") goGen = exec.Command("go", "generate")
goGet = exec.Command("go", "get", "github.com/coredns/example") goGet = exec.Command("go", "get", "github.com/coredns/example")
coredns = exec.Command("./coredns", "-plugins") gitReset = exec.Command("git", "checkout", "core/*")
coredns = exec.Command("./coredns", "-plugins")
) )
const example = "1001:example:github.com/coredns/example" const example = "1001:example:github.com/coredns/example"