From b586ae2f2597531837efdd99c4d309d4c6b7a17c Mon Sep 17 00:00:00 2001 From: Ludovic Fernandez Date: Tue, 15 Oct 2019 16:36:05 +0200 Subject: [PATCH] Remove deadcode. --- pkg/hostresolver/hostresolver.go | 123 -------------------------- pkg/hostresolver/hostresolver_test.go | 61 ------------- 2 files changed, 184 deletions(-) delete mode 100644 pkg/hostresolver/hostresolver.go delete mode 100644 pkg/hostresolver/hostresolver_test.go diff --git a/pkg/hostresolver/hostresolver.go b/pkg/hostresolver/hostresolver.go deleted file mode 100644 index 2a7c7dcee..000000000 --- a/pkg/hostresolver/hostresolver.go +++ /dev/null @@ -1,123 +0,0 @@ -package hostresolver - -import ( - "fmt" - "net" - "sort" - "strings" - "time" - - "github.com/containous/traefik/v2/pkg/log" - "github.com/miekg/dns" - "github.com/patrickmn/go-cache" -) - -type cnameResolv struct { - TTL time.Duration - Record string -} - -type byTTL []*cnameResolv - -func (a byTTL) Len() int { return len(a) } -func (a byTTL) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a byTTL) Less(i, j int) bool { return a[i].TTL > a[j].TTL } - -// Resolver used for host resolver -type Resolver struct { - CnameFlattening bool - ResolvConfig string - ResolvDepth int - cache *cache.Cache -} - -// CNAMEFlatten check if CNAME record exists, flatten if possible -func (hr *Resolver) CNAMEFlatten(host string) (string, string) { - if hr.cache == nil { - hr.cache = cache.New(30*time.Minute, 5*time.Minute) - } - - result := []string{host} - request := host - - value, found := hr.cache.Get(host) - if found { - result = strings.Split(value.(string), ",") - } else { - var cacheDuration = 0 * time.Second - - for depth := 0; depth < hr.ResolvDepth; depth++ { - resolv, err := cnameResolve(request, hr.ResolvConfig) - if err != nil { - log.Error(err) - break - } - if resolv == nil { - break - } - - result = append(result, resolv.Record) - if depth == 0 { - cacheDuration = resolv.TTL - } - request = resolv.Record - } - - if err := hr.cache.Add(host, strings.Join(result, ","), cacheDuration); err != nil { - log.Error(err) - } - } - - return result[0], result[len(result)-1] -} - -// cnameResolve resolves CNAME if exists, and return with the highest TTL -func cnameResolve(host string, resolvPath string) (*cnameResolv, error) { - config, err := dns.ClientConfigFromFile(resolvPath) - if err != nil { - return nil, fmt.Errorf("invalid resolver configuration file: %s", resolvPath) - } - - client := &dns.Client{Timeout: 30 * time.Second} - - m := &dns.Msg{} - m.SetQuestion(dns.Fqdn(host), dns.TypeCNAME) - - var result []*cnameResolv - for _, server := range config.Servers { - tempRecord, err := getRecord(client, m, server, config.Port) - if err != nil { - log.Errorf("Failed to resolve host %s: %v", host, err) - continue - } - result = append(result, tempRecord) - } - - if len(result) == 0 { - return nil, nil - } - - sort.Sort(byTTL(result)) - return result[0], nil -} - -func getRecord(client *dns.Client, msg *dns.Msg, server string, port string) (*cnameResolv, error) { - resp, _, err := client.Exchange(msg, net.JoinHostPort(server, port)) - if err != nil { - return nil, fmt.Errorf("exchange error for server %s: %v", server, err) - } - - if resp == nil || len(resp.Answer) == 0 { - return nil, fmt.Errorf("empty answer for server %s", server) - } - - rr, ok := resp.Answer[0].(*dns.CNAME) - if !ok { - return nil, fmt.Errorf("invalid response type for server %s", server) - } - - return &cnameResolv{ - TTL: time.Duration(rr.Hdr.Ttl) * time.Second, - Record: strings.TrimSuffix(rr.Target, "."), - }, nil -} diff --git a/pkg/hostresolver/hostresolver_test.go b/pkg/hostresolver/hostresolver_test.go deleted file mode 100644 index ee6029f7d..000000000 --- a/pkg/hostresolver/hostresolver_test.go +++ /dev/null @@ -1,61 +0,0 @@ -package hostresolver - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestCNAMEFlatten(t *testing.T) { - testCase := []struct { - desc string - resolvFile string - domain string - expectedDomain string - isCNAME bool - }{ - { - desc: "host request is CNAME record", - resolvFile: "/etc/resolv.conf", - domain: "www.github.com", - expectedDomain: "github.com", - isCNAME: true, - }, - { - desc: "resolve file not found", - resolvFile: "/etc/resolv.oops", - domain: "www.github.com", - expectedDomain: "www.github.com", - isCNAME: false, - }, - { - desc: "host request is not CNAME record", - resolvFile: "/etc/resolv.conf", - domain: "github.com", - expectedDomain: "github.com", - isCNAME: false, - }, - } - - for _, test := range testCase { - test := test - t.Run(test.desc, func(t *testing.T) { - t.Parallel() - - hostResolver := &Resolver{ - ResolvConfig: test.resolvFile, - ResolvDepth: 5, - } - - reqH, flatH := hostResolver.CNAMEFlatten(test.domain) - assert.Equal(t, test.domain, reqH) - assert.Equal(t, test.expectedDomain, flatH) - - if test.isCNAME { - assert.NotEqual(t, test.expectedDomain, reqH) - } else { - assert.Equal(t, test.expectedDomain, reqH) - } - }) - } -}